@verdaccio/store 7.0.0-next.5 → 8.0.0-next-8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +359 -0
- package/LICENSE +1 -1
- package/README.md +24 -57
- package/build/index.d.ts +0 -1
- package/build/index.js +0 -12
- package/build/index.js.map +1 -1
- package/build/lib/star-utils.js.map +1 -1
- package/build/lib/storage-utils.d.ts +3 -0
- package/build/lib/storage-utils.js +35 -2
- package/build/lib/storage-utils.js.map +1 -1
- package/build/lib/versions-utils.d.ts +14 -0
- package/build/lib/versions-utils.js +52 -1
- package/build/lib/versions-utils.js.map +1 -1
- package/build/local-storage.js +3 -3
- package/build/local-storage.js.map +1 -1
- package/build/storage.d.ts +14 -15
- package/build/storage.js +199 -162
- package/build/storage.js.map +1 -1
- package/build/type.d.ts +5 -0
- package/build/type.js.map +1 -1
- package/jest.config.js +2 -2
- package/package.json +18 -17
- package/src/index.ts +0 -1
- package/src/lib/storage-utils.ts +40 -2
- package/src/lib/versions-utils.ts +50 -1
- package/src/local-storage.ts +3 -2
- package/src/storage.ts +230 -150
- package/src/type.ts +6 -0
- package/test/fixtures/config/publishWithOwnerAndCheck.yaml +18 -0
- package/test/fixtures/config/publishWithOwnerDefault.yaml +15 -0
- package/test/fixtures/config/syncDoubleUplinksMetadata.yaml +2 -18
- package/test/search.spec.ts +28 -7
- package/test/storage-utils.spec.ts +1 -0
- package/test/storage.spec.ts +466 -80
- package/test/versions.spec.ts +58 -1
- package/build/lib/TransFormResults.d.ts +0 -15
- package/build/lib/TransFormResults.js +0 -51
- package/build/lib/TransFormResults.js.map +0 -1
- package/build/lib/search-utils.d.ts +0 -4
- package/build/lib/search-utils.js +0 -50
- package/build/lib/search-utils.js.map +0 -1
- package/build/lib/uplink-util.d.ts +0 -10
- package/build/lib/uplink-util.js +0 -43
- package/build/lib/uplink-util.js.map +0 -1
- package/src/lib/TransFormResults.ts +0 -42
- package/src/lib/search-utils.ts +0 -50
- package/src/lib/uplink-util.ts +0 -42
- /package/test/fixtures/config/{getTarballNext-getupstream.yaml → getTarball-getupstream.yaml} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-utils.js","names":["_lodash","_interopRequireDefault","require","_semver","_core","_utils","_versionsUtils","obj","__esModule","default","STORAGE","exports","PACKAGE_FILE_NAME","FILE_EXIST_ERROR","NO_SUCH_FILE_ERROR","DEFAULT_REVISION","generatePackageTemplate","name","versions","time","USERS","DIST_TAGS","_uplinks","_distfiles","_attachments","_rev","normalizePackage","pkg","pkgProperties","forEach","key","pkgProp","isNil","validatioUtils","isObject","_id","normalizeDistTags","generateRevision","rev","split","generateRandomHexString","getLatestReadme","distTags","latestVersion","readme","_","trim","readmeDistTagsPriority","tag","version","cleanUpReadme","WHITELIST","cleanUpLinksRef","result","keepUpLinkData","propertyToKeep","push","i","indexOf","checkPackageRemote","isAllowPublishOffline","syncMetadata","Promise","resolve","reject","err","packageJsonLocal","upLinksErrors","status","HTTP_STATUS","NOT_FOUND","errorUtils","getConflict","API_ERROR","PACKAGE_EXIST","errorItem","length","getServiceUnavailable","UPLINK_OFFLINE_PUBLISH","mergeUplinkTimeIntoLocal","localMetadata","remoteMetadata","Object","assign","mergeUplinkTimeIntoLocalNext","cacheManifest","remoteManifest","updateUpLinkMetadata","uplinkId","manifest","etag","fetched","Date","now","prepareSearchPackage","data","latest","pkgUtils","getLatest","description","maintainers","author","filter","Boolean","repository","readmeFilename","homepage","keywords","bugs","license","isDifferentThanOne","keys","hasInvalidPublishBody","res","mergeVersions","_cacheManifest","distTag","semver","lte","sorted","_sorted","sortVersionsAndFilterInvalid","pop","isArray","isString","parse","hasDeprecatedVersions","pkgInfo","prototype","hasOwnProperty","call","isDeprecatedManifest"],"sources":["../../src/lib/storage-utils.ts"],"sourcesContent":["import _ from 'lodash';\nimport semver from 'semver';\n\nimport { errorUtils, pkgUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, USERS } from '@verdaccio/core';\nimport { AttachMents, Manifest, Version, Versions } from '@verdaccio/types';\nimport { generateRandomHexString, isNil, isObject } from '@verdaccio/utils';\n\nimport { sortVersionsAndFilterInvalid } from './versions-utils';\n\nexport const STORAGE = {\n PACKAGE_FILE_NAME: 'package.json',\n FILE_EXIST_ERROR: 'EEXISTS',\n NO_SUCH_FILE_ERROR: 'ENOENT',\n DEFAULT_REVISION: '0-0000000000000000',\n};\n\n/**\n * Create a new package in the storage, return a boilerplate package\n * @param name package name\n * @returns {Manifest}\n */\nexport function generatePackageTemplate(name: string): Manifest {\n return {\n // standard things\n name,\n versions: {},\n time: {},\n [USERS]: {},\n [DIST_TAGS]: {},\n _uplinks: {},\n _distfiles: {},\n _attachments: {},\n _rev: '',\n };\n}\n\n/**\n * Normalize package properties, tags, revision id.\n * @param {Object} pkg package reference.\n */\nexport function normalizePackage(pkg: Manifest): Manifest {\n const pkgProperties = ['versions', 'dist-tags', '_distfiles', '_attachments', '_uplinks', 'time'];\n\n pkgProperties.forEach((key): void => {\n const pkgProp = pkg[key];\n\n if (isNil(pkgProp) || validatioUtils.isObject(pkgProp) === false) {\n pkg[key] = {};\n }\n });\n\n if (typeof pkg?._rev !== 'string') {\n pkg._rev = STORAGE.DEFAULT_REVISION;\n }\n\n if (typeof pkg?._id !== 'string') {\n pkg._id = pkg.name;\n }\n\n // normalize dist-tags\n return normalizeDistTags(pkg);\n}\n\nexport function generateRevision(rev: string): string {\n const _rev = rev.split('-');\n\n return (+_rev[0] || 0) + 1 + '-' + generateRandomHexString();\n}\n\nexport function getLatestReadme(pkg: Manifest): string {\n const versions = pkg['versions'] || {};\n const distTags = pkg[DIST_TAGS] || {};\n // FIXME: here is a bit tricky add the types\n const latestVersion: Version | any = distTags['latest'] ? versions[distTags['latest']] || {} : {};\n let readme = _.trim(pkg.readme || latestVersion.readme || '');\n if (readme) {\n return readme;\n }\n\n // In case of empty readme - trying to get ANY readme in the following order:\n // 'next','beta','alpha','test','dev','canary'\n const readmeDistTagsPriority = ['next', 'beta', 'alpha', 'test', 'dev', 'canary'];\n readmeDistTagsPriority.forEach(function (tag): string | void {\n if (readme) {\n return readme;\n }\n const version: Version | any = distTags[tag] ? versions[distTags[tag]] || {} : {};\n readme = _.trim(version.readme || readme);\n });\n return readme;\n}\n\n// FIXME: type any due this\nexport function cleanUpReadme(version: any): Version {\n if (isNil(version) === false) {\n delete version.readme;\n }\n\n return version;\n}\n\nexport const WHITELIST = [\n '_rev',\n 'name',\n 'versions',\n 'dist-tags',\n 'readme',\n 'time',\n '_id',\n 'users',\n];\n\nexport function cleanUpLinksRef(result: Manifest, keepUpLinkData?: boolean): Manifest {\n const propertyToKeep = [...WHITELIST];\n if (keepUpLinkData === true) {\n propertyToKeep.push('_uplinks');\n }\n\n for (const i in result) {\n if (propertyToKeep.indexOf(i) === -1) {\n // Remove sections like '_uplinks' from response\n delete result[i];\n }\n }\n\n return result;\n}\n\n// TODO: move to abstract storage\n// @deprecated use abstract.storage.ts:checkPackageRemote\nexport function checkPackageRemote(\n name: string,\n isAllowPublishOffline: boolean,\n syncMetadata: Function\n): Promise<any> {\n return new Promise<void>((resolve, reject): void => {\n syncMetadata(name, null, {}, (err, packageJsonLocal, upLinksErrors): void => {\n // something weird\n if (err && err.status !== HTTP_STATUS.NOT_FOUND) {\n return reject(err);\n }\n\n // checking package exist already\n if (isNil(packageJsonLocal) === false) {\n return reject(errorUtils.getConflict(API_ERROR.PACKAGE_EXIST));\n }\n\n for (let errorItem = 0; errorItem < upLinksErrors.length; errorItem++) {\n // checking error\n // if uplink fails with a status other than 404, we report failure\n if (isNil(upLinksErrors[errorItem][0]) === false) {\n if (upLinksErrors[errorItem][0].status !== HTTP_STATUS.NOT_FOUND) {\n if (isAllowPublishOffline) {\n return resolve();\n }\n\n return reject(errorUtils.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE_PUBLISH));\n }\n }\n }\n\n return resolve();\n });\n });\n}\n\n// @deprecated use export function mergeUplinkTimeIntoLocalNext\nexport function mergeUplinkTimeIntoLocal(localMetadata: Manifest, remoteMetadata: Manifest): any {\n if ('time' in remoteMetadata) {\n return Object.assign({}, localMetadata.time, remoteMetadata.time);\n }\n\n return localMetadata.time;\n}\n\nexport function mergeUplinkTimeIntoLocalNext(\n cacheManifest: Manifest,\n remoteManifest: Manifest\n): Manifest {\n if ('time' in remoteManifest) {\n // remote override cache time conflicts\n return { ...cacheManifest, time: { ...cacheManifest.time, ...remoteManifest.time } };\n }\n\n return cacheManifest;\n}\n\nexport function updateUpLinkMetadata(uplinkId, manifest: Manifest, etag: string) {\n const _uplinks = {\n ...manifest._uplinks,\n [uplinkId]: {\n etag,\n fetched: Date.now(),\n },\n };\n return {\n ...manifest,\n _uplinks,\n };\n}\n\nexport function prepareSearchPackage(data: Manifest): any {\n const latest = pkgUtils.getLatest(data);\n\n if (latest && data.versions[latest]) {\n const version: Version = data.versions[latest];\n const versions: any = { [latest]: 'latest' };\n const pkg: any = {\n name: version.name,\n description: version.description,\n [DIST_TAGS]: { latest },\n maintainers: version.maintainers || [version.author].filter(Boolean),\n author: version.author,\n repository: version.repository,\n readmeFilename: version.readmeFilename || '',\n homepage: version.homepage,\n keywords: version.keywords,\n bugs: version.bugs,\n license: version.license,\n // time: {\n // modified: time,\n // },\n versions,\n };\n\n return pkg;\n }\n}\n\nexport function isDifferentThanOne(versions: Versions | AttachMents): boolean {\n return Object.keys(versions).length !== 1;\n}\n\n// @deprecated use validationUtils.validatePublishNewPackage\nexport function hasInvalidPublishBody(manifest: Pick<Manifest, '_attachments' | 'versions'>) {\n if (!manifest) {\n return false;\n }\n\n const { _attachments, versions } = manifest;\n const res =\n isObject(_attachments) === false ||\n isDifferentThanOne(_attachments) ||\n isObject(versions) === false ||\n isDifferentThanOne(versions);\n return res;\n}\n\n/**\n * Function gets a local info and an info from uplinks and tries to merge it\n exported for unit tests only.\n * @param {*} local\n * @param {*} remoteManifest\n * @param {*} config configuration file\n */\nexport function mergeVersions(cacheManifest: Manifest, remoteManifest: Manifest): Manifest {\n let _cacheManifest = { ...cacheManifest };\n const { versions, time } = remoteManifest;\n // copy new versions to a cache\n // NOTE: if a certain version was updated, we can't refresh it reliably\n for (const i in versions) {\n if (typeof cacheManifest.versions[i] === 'undefined') {\n _cacheManifest.versions[i] = versions[i];\n }\n }\n\n for (const i in time) {\n if (typeof cacheManifest.time[i] === 'undefined') {\n _cacheManifest.time[i] = time[i];\n }\n }\n\n for (const distTag in remoteManifest[DIST_TAGS]) {\n if (_cacheManifest[DIST_TAGS][distTag] !== remoteManifest[DIST_TAGS][distTag]) {\n if (\n !_cacheManifest[DIST_TAGS][distTag] ||\n semver.lte(_cacheManifest[DIST_TAGS][distTag], remoteManifest[DIST_TAGS][distTag])\n ) {\n _cacheManifest[DIST_TAGS][distTag] = remoteManifest[DIST_TAGS][distTag];\n }\n if (\n distTag === 'latest' &&\n _cacheManifest[DIST_TAGS][distTag] === remoteManifest[DIST_TAGS][distTag]\n ) {\n // NOTE: this override the latest publish readme from local cache with\n // the remote one\n cacheManifest = { ..._cacheManifest, readme: remoteManifest.readme };\n }\n }\n }\n\n return cacheManifest;\n}\n\n/**\n * Normalize dist-tags.\n *\n * There is a legacy behaviour where the dist-tags could be an array, in such\n * case, the array is orderded and the highest version becames the\n * latest.\n *\n * The dist-tag tags must be plain strigs, if the latest is empty (for whatever reason) is\n * normalized to be the highest version available.\n *\n * This function cleans up every invalid version on dist-tags, but does not remove\n * invalid versions from the manifest.\n *\n * @param {*} data\n */\nexport function normalizeDistTags(manifest: Manifest): Manifest {\n let sorted;\n // handle missing latest dist-tag\n if (!manifest[DIST_TAGS].latest) {\n // if there is no latest tag, set the highest known version based on semver sort\n sorted = sortVersionsAndFilterInvalid(Object.keys(manifest.versions));\n if (sorted?.length) {\n // get the highest published version\n manifest[DIST_TAGS].latest = sorted.pop();\n }\n }\n\n for (const tag in manifest[DIST_TAGS]) {\n // deprecated (will be removed un future majors)\n // this should not happen, tags should be plain strings, legacy fallback\n if (_.isArray(manifest[DIST_TAGS][tag])) {\n if (manifest[DIST_TAGS][tag].length) {\n // sort array\n // FIXME: this is clearly wrong, we need to research why this is like this.\n // @ts-ignore\n sorted = sortVersionsAndFilterInvalid(manifest[DIST_TAGS][tag]);\n if (sorted.length) {\n // use highest version based on semver sort\n manifest[DIST_TAGS][tag] = sorted.pop();\n }\n } else {\n delete manifest[DIST_TAGS][tag];\n }\n } else if (_.isString(manifest[DIST_TAGS][tag])) {\n if (!semver.parse(manifest[DIST_TAGS][tag], true)) {\n // if the version is invalid, delete the dist-tag entry\n delete manifest[DIST_TAGS][tag];\n }\n }\n }\n\n return manifest;\n}\n\nexport function hasDeprecatedVersions(pkgInfo: Manifest): boolean {\n const { versions } = pkgInfo;\n for (const version in versions) {\n if (Object.prototype.hasOwnProperty.call(versions[version], 'deprecated')) {\n return true;\n }\n }\n return false;\n}\n\nexport function isDeprecatedManifest(manifest: Manifest): boolean {\n return hasDeprecatedVersions(manifest) && Object.keys(manifest._attachments).length === 0;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage-utils.js","names":["_lodash","_interopRequireDefault","require","_semver","_core","_utils","_versionsUtils","e","__esModule","default","STORAGE","exports","PACKAGE_FILE_NAME","FILE_EXIST_ERROR","NO_SUCH_FILE_ERROR","DEFAULT_REVISION","generatePackageTemplate","name","versions","time","USERS","DIST_TAGS","MAINTAINERS","_uplinks","_distfiles","_attachments","_rev","normalizePackage","pkg","pkgProperties","forEach","key","pkgProp","isNil","validatioUtils","isObject","_id","normalizeDistTags","generateRevision","rev","split","generateRandomHexString","getLatestReadme","distTags","latestVersion","readme","_","trim","readmeDistTagsPriority","tag","version","cleanUpReadme","WHITELIST","cleanUpLinksRef","result","keepUpLinkData","propertyToKeep","push","i","indexOf","checkPackageRemote","isAllowPublishOffline","syncMetadata","Promise","resolve","reject","err","packageJsonLocal","upLinksErrors","status","HTTP_STATUS","NOT_FOUND","errorUtils","getConflict","API_ERROR","PACKAGE_EXIST","errorItem","length","getServiceUnavailable","UPLINK_OFFLINE_PUBLISH","mergeUplinkTimeIntoLocal","localMetadata","remoteMetadata","Object","assign","mergeUplinkTimeIntoLocalNext","cacheManifest","remoteManifest","updateUpLinkMetadata","uplinkId","manifest","etag","fetched","Date","now","prepareSearchPackage","data","latest","pkgUtils","getLatest","description","maintainers","author","filter","Boolean","repository","readmeFilename","homepage","keywords","bugs","license","isDifferentThanOne","keys","hasInvalidPublishBody","res","mergeVersions","_cacheManifest","distTag","semver","lte","sorted","_sorted","sortVersionsAndFilterInvalid","pop","isArray","isString","parse","hasDeprecatedVersions","pkgInfo","prototype","hasOwnProperty","call","isDeprecatedManifest","mapManifestToSearchPackageBody","searchItem","scope","date","publisher","links","npm","package","scoped"],"sources":["../../src/lib/storage-utils.ts"],"sourcesContent":["import _ from 'lodash';\nimport semver from 'semver';\n\nimport { errorUtils, pkgUtils, searchUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, MAINTAINERS, USERS } from '@verdaccio/core';\nimport { AttachMents, Manifest, Version, Versions } from '@verdaccio/types';\nimport { generateRandomHexString, isNil, isObject } from '@verdaccio/utils';\n\nimport { sortVersionsAndFilterInvalid } from './versions-utils';\n\nexport const STORAGE = {\n PACKAGE_FILE_NAME: 'package.json',\n FILE_EXIST_ERROR: 'EEXISTS',\n NO_SUCH_FILE_ERROR: 'ENOENT',\n DEFAULT_REVISION: '0-0000000000000000',\n};\n\n/**\n * Create a new package in the storage, return a boilerplate package\n * @param name package name\n * @returns {Manifest}\n */\nexport function generatePackageTemplate(name: string): Manifest {\n return {\n // standard things\n name,\n versions: {},\n time: {},\n [USERS]: {},\n [DIST_TAGS]: {},\n [MAINTAINERS]: [],\n _uplinks: {},\n _distfiles: {},\n _attachments: {},\n _rev: '',\n };\n}\n\n/**\n * Normalize package properties, tags, revision id.\n * @param {Object} pkg package reference.\n */\nexport function normalizePackage(pkg: Manifest): Manifest {\n const pkgProperties = ['versions', 'dist-tags', '_distfiles', '_attachments', '_uplinks', 'time'];\n\n pkgProperties.forEach((key): void => {\n const pkgProp = pkg[key];\n\n if (isNil(pkgProp) || validatioUtils.isObject(pkgProp) === false) {\n pkg[key] = {};\n }\n });\n\n if (typeof pkg?._rev !== 'string') {\n pkg._rev = STORAGE.DEFAULT_REVISION;\n }\n\n if (typeof pkg?._id !== 'string') {\n pkg._id = pkg.name;\n }\n\n // normalize dist-tags\n return normalizeDistTags(pkg);\n}\n\nexport function generateRevision(rev: string): string {\n const _rev = rev.split('-');\n\n return (+_rev[0] || 0) + 1 + '-' + generateRandomHexString();\n}\n\nexport function getLatestReadme(pkg: Manifest): string {\n const versions = pkg['versions'] || {};\n const distTags = pkg[DIST_TAGS] || {};\n // FIXME: here is a bit tricky add the types\n const latestVersion: Version | any = distTags['latest'] ? versions[distTags['latest']] || {} : {};\n let readme = _.trim(pkg.readme || latestVersion.readme || '');\n if (readme) {\n return readme;\n }\n\n // In case of empty readme - trying to get ANY readme in the following order:\n // 'next','beta','alpha','test','dev','canary'\n const readmeDistTagsPriority = ['next', 'beta', 'alpha', 'test', 'dev', 'canary'];\n readmeDistTagsPriority.forEach(function (tag): string | void {\n if (readme) {\n return readme;\n }\n const version: Version | any = distTags[tag] ? versions[distTags[tag]] || {} : {};\n readme = _.trim(version.readme || readme);\n });\n return readme;\n}\n\n// FIXME: type any due this\nexport function cleanUpReadme(version: any): Version {\n if (isNil(version) === false) {\n delete version.readme;\n }\n\n return version;\n}\n\nexport const WHITELIST = [\n '_rev',\n 'name',\n 'versions',\n 'dist-tags',\n 'readme',\n 'time',\n '_id',\n 'users',\n 'maintainers',\n];\n\nexport function cleanUpLinksRef(result: Manifest, keepUpLinkData?: boolean): Manifest {\n const propertyToKeep = [...WHITELIST];\n if (keepUpLinkData === true) {\n propertyToKeep.push('_uplinks');\n }\n\n for (const i in result) {\n if (propertyToKeep.indexOf(i) === -1) {\n // Remove sections like '_uplinks' from response\n delete result[i];\n }\n }\n\n return result;\n}\n\n// TODO: move to abstract storage\n// @deprecated use abstract.storage.ts:checkPackageRemote\nexport function checkPackageRemote(\n name: string,\n isAllowPublishOffline: boolean,\n syncMetadata: Function\n): Promise<any> {\n return new Promise<void>((resolve, reject): void => {\n syncMetadata(name, null, {}, (err, packageJsonLocal, upLinksErrors): void => {\n // something weird\n if (err && err.status !== HTTP_STATUS.NOT_FOUND) {\n return reject(err);\n }\n\n // checking package exist already\n if (isNil(packageJsonLocal) === false) {\n return reject(errorUtils.getConflict(API_ERROR.PACKAGE_EXIST));\n }\n\n for (let errorItem = 0; errorItem < upLinksErrors.length; errorItem++) {\n // checking error\n // if uplink fails with a status other than 404, we report failure\n if (isNil(upLinksErrors[errorItem][0]) === false) {\n if (upLinksErrors[errorItem][0].status !== HTTP_STATUS.NOT_FOUND) {\n if (isAllowPublishOffline) {\n return resolve();\n }\n\n return reject(errorUtils.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE_PUBLISH));\n }\n }\n }\n\n return resolve();\n });\n });\n}\n\n// @deprecated use export function mergeUplinkTimeIntoLocalNext\nexport function mergeUplinkTimeIntoLocal(localMetadata: Manifest, remoteMetadata: Manifest): any {\n if ('time' in remoteMetadata) {\n return Object.assign({}, localMetadata.time, remoteMetadata.time);\n }\n\n return localMetadata.time;\n}\n\nexport function mergeUplinkTimeIntoLocalNext(\n cacheManifest: Manifest,\n remoteManifest: Manifest\n): Manifest {\n if ('time' in remoteManifest) {\n // remote override cache time conflicts\n return { ...cacheManifest, time: { ...cacheManifest.time, ...remoteManifest.time } };\n }\n\n return cacheManifest;\n}\n\nexport function updateUpLinkMetadata(uplinkId, manifest: Manifest, etag: string) {\n const _uplinks = {\n ...manifest._uplinks,\n [uplinkId]: {\n etag,\n fetched: Date.now(),\n },\n };\n return {\n ...manifest,\n _uplinks,\n };\n}\n\nexport function prepareSearchPackage(data: Manifest): any {\n const latest = pkgUtils.getLatest(data);\n\n if (latest && data.versions[latest]) {\n const version: Version = data.versions[latest];\n const versions: any = { [latest]: 'latest' };\n const pkg: any = {\n name: version.name,\n description: version.description,\n [DIST_TAGS]: { latest },\n maintainers: version.maintainers || [version.author].filter(Boolean),\n author: version.author,\n repository: version.repository,\n readmeFilename: version.readmeFilename || '',\n homepage: version.homepage,\n keywords: version.keywords,\n bugs: version.bugs,\n license: version.license,\n // time: {\n // modified: time,\n // },\n versions,\n };\n\n return pkg;\n }\n}\n\nexport function isDifferentThanOne(versions: Versions | AttachMents): boolean {\n return Object.keys(versions).length !== 1;\n}\n\n// @deprecated use validationUtils.validatePublishNewPackage\nexport function hasInvalidPublishBody(manifest: Pick<Manifest, '_attachments' | 'versions'>) {\n if (!manifest) {\n return false;\n }\n\n const { _attachments, versions } = manifest;\n const res =\n isObject(_attachments) === false ||\n isDifferentThanOne(_attachments) ||\n isObject(versions) === false ||\n isDifferentThanOne(versions);\n return res;\n}\n\n/**\n * Function gets a local info and an info from uplinks and tries to merge it\n exported for unit tests only.\n * @param {*} local\n * @param {*} remoteManifest\n * @param {*} config configuration file\n */\nexport function mergeVersions(cacheManifest: Manifest, remoteManifest: Manifest): Manifest {\n let _cacheManifest = { ...cacheManifest };\n const { versions, time } = remoteManifest;\n // copy new versions to a cache\n // NOTE: if a certain version was updated, we can't refresh it reliably\n for (const i in versions) {\n if (typeof cacheManifest.versions[i] === 'undefined') {\n _cacheManifest.versions[i] = versions[i];\n }\n }\n\n for (const i in time) {\n if (typeof cacheManifest.time[i] === 'undefined') {\n _cacheManifest.time[i] = time[i];\n }\n }\n\n for (const distTag in remoteManifest[DIST_TAGS]) {\n if (_cacheManifest[DIST_TAGS][distTag] !== remoteManifest[DIST_TAGS][distTag]) {\n if (\n !_cacheManifest[DIST_TAGS][distTag] ||\n semver.lte(_cacheManifest[DIST_TAGS][distTag], remoteManifest[DIST_TAGS][distTag])\n ) {\n _cacheManifest[DIST_TAGS][distTag] = remoteManifest[DIST_TAGS][distTag];\n }\n if (\n distTag === 'latest' &&\n _cacheManifest[DIST_TAGS][distTag] === remoteManifest[DIST_TAGS][distTag]\n ) {\n // NOTE: this override the latest publish readme from local cache with\n // the remote one\n cacheManifest = { ..._cacheManifest, readme: remoteManifest.readme };\n }\n }\n }\n\n // TODO: Should we merge owners? _cacheManifest[MAINTAINERS]\n\n return cacheManifest;\n}\n\n/**\n * Normalize dist-tags.\n *\n * There is a legacy behaviour where the dist-tags could be an array, in such\n * case, the array is orderded and the highest version becames the\n * latest.\n *\n * The dist-tag tags must be plain strigs, if the latest is empty (for whatever reason) is\n * normalized to be the highest version available.\n *\n * This function cleans up every invalid version on dist-tags, but does not remove\n * invalid versions from the manifest.\n *\n * @param {*} data\n */\nexport function normalizeDistTags(manifest: Manifest): Manifest {\n let sorted;\n // handle missing latest dist-tag\n if (!manifest[DIST_TAGS].latest) {\n // if there is no latest tag, set the highest known version based on semver sort\n sorted = sortVersionsAndFilterInvalid(Object.keys(manifest.versions));\n if (sorted?.length) {\n // get the highest published version\n manifest[DIST_TAGS].latest = sorted.pop();\n }\n }\n\n for (const tag in manifest[DIST_TAGS]) {\n // deprecated (will be removed un future majors)\n // this should not happen, tags should be plain strings, legacy fallback\n if (_.isArray(manifest[DIST_TAGS][tag])) {\n if (manifest[DIST_TAGS][tag].length) {\n // sort array\n // FIXME: this is clearly wrong, we need to research why this is like this.\n // @ts-ignore\n sorted = sortVersionsAndFilterInvalid(manifest[DIST_TAGS][tag]);\n if (sorted.length) {\n // use highest version based on semver sort\n manifest[DIST_TAGS][tag] = sorted.pop();\n }\n } else {\n delete manifest[DIST_TAGS][tag];\n }\n } else if (_.isString(manifest[DIST_TAGS][tag])) {\n if (!semver.parse(manifest[DIST_TAGS][tag], true)) {\n // if the version is invalid, delete the dist-tag entry\n delete manifest[DIST_TAGS][tag];\n }\n }\n }\n\n return manifest;\n}\n\nexport function hasDeprecatedVersions(pkgInfo: Manifest): boolean {\n const { versions } = pkgInfo;\n for (const version in versions) {\n if (Object.prototype.hasOwnProperty.call(versions[version], 'deprecated')) {\n return true;\n }\n }\n return false;\n}\n\nexport function isDeprecatedManifest(manifest: Manifest): boolean {\n return hasDeprecatedVersions(manifest) && Object.keys(manifest._attachments).length === 0;\n}\n\nexport function mapManifestToSearchPackageBody(\n pkg: Manifest,\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { searchUtils } from '@verdaccio/core';
|
|
1
2
|
import { Manifest, StringValue, Version, Versions } from '@verdaccio/types';
|
|
2
3
|
/**
|
|
3
4
|
* Gets version from a package object taking into account semver weirdness.
|
|
@@ -26,3 +27,16 @@ export declare function tagVersion(data: Manifest, version: string, tag: StringV
|
|
|
26
27
|
* @returns
|
|
27
28
|
*/
|
|
28
29
|
export declare function tagVersionNext(manifest: Manifest, version: string, tag: StringValue): Manifest;
|
|
30
|
+
/**
|
|
31
|
+
* Check if the version is newer than the older version.
|
|
32
|
+
* @param newVersion
|
|
33
|
+
* @param oldVersion
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
export declare function isNewerVersion(newVersion: any, oldVersion: any): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Remove duplicates from search results.
|
|
39
|
+
* @param {Array} objects
|
|
40
|
+
* @return {Array} filtered array
|
|
41
|
+
*/
|
|
42
|
+
export declare function removeLowerVersions(objects: searchUtils.SearchPackageItem[]): searchUtils.SearchPackageItem[];
|
|
@@ -4,13 +4,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getVersion = getVersion;
|
|
7
|
+
exports.isNewerVersion = isNewerVersion;
|
|
8
|
+
exports.removeLowerVersions = removeLowerVersions;
|
|
7
9
|
exports.sortVersionsAndFilterInvalid = sortVersionsAndFilterInvalid;
|
|
8
10
|
exports.tagVersion = tagVersion;
|
|
9
11
|
exports.tagVersionNext = tagVersionNext;
|
|
12
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
10
13
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
14
|
var _semver = _interopRequireDefault(require("semver"));
|
|
12
15
|
var _core = require("@verdaccio/core");
|
|
13
|
-
function _interopRequireDefault(
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
const debug = (0, _debug.default)('verdaccio:storage:utils');
|
|
18
|
+
|
|
14
19
|
/**
|
|
15
20
|
* Gets version from a package object taking into account semver weirdness.
|
|
16
21
|
* @return {String} return the semantic version of a package
|
|
@@ -88,4 +93,50 @@ function tagVersionNext(manifest, version, tag) {
|
|
|
88
93
|
}
|
|
89
94
|
return data;
|
|
90
95
|
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Check if the version is newer than the older version.
|
|
99
|
+
* @param newVersion
|
|
100
|
+
* @param oldVersion
|
|
101
|
+
* @returns
|
|
102
|
+
*/
|
|
103
|
+
function isNewerVersion(newVersion, oldVersion) {
|
|
104
|
+
const comparisonResult = _semver.default.compare(newVersion, oldVersion);
|
|
105
|
+
return comparisonResult === 1 || comparisonResult === 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Remove duplicates from search results.
|
|
110
|
+
* @param {Array} objects
|
|
111
|
+
* @return {Array} filtered array
|
|
112
|
+
*/
|
|
113
|
+
function removeLowerVersions(objects) {
|
|
114
|
+
const versionMap = new Map();
|
|
115
|
+
|
|
116
|
+
// Iterate through the array and keep the highest version for each name
|
|
117
|
+
objects.forEach(item => {
|
|
118
|
+
const {
|
|
119
|
+
name,
|
|
120
|
+
version
|
|
121
|
+
} = item.package;
|
|
122
|
+
const key = name;
|
|
123
|
+
if (versionMap.has(name) === false || isNewerVersion(version, versionMap.get(name))) {
|
|
124
|
+
debug('keeping %o@%o', name, version);
|
|
125
|
+
versionMap.set(key, version);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Filter objects based on the version map
|
|
130
|
+
return objects.reduce((acc, item) => {
|
|
131
|
+
const {
|
|
132
|
+
name,
|
|
133
|
+
version
|
|
134
|
+
} = item.package;
|
|
135
|
+
if (versionMap.has(name) && versionMap.get(name) === version && acc.find(i => i.package.name === name) === undefined) {
|
|
136
|
+
debug('adding %o@%o', name, version);
|
|
137
|
+
acc.push(item);
|
|
138
|
+
}
|
|
139
|
+
return acc;
|
|
140
|
+
}, []);
|
|
141
|
+
}
|
|
91
142
|
//# sourceMappingURL=versions-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions-utils.js","names":["
|
|
1
|
+
{"version":3,"file":"versions-utils.js","names":["_debug","_interopRequireDefault","require","_lodash","_semver","_core","e","__esModule","default","debug","buildDebug","getVersion","versions","version","_","isNil","versionSemver","semver","parse","versionItem","Object","prototype","hasOwnProperty","call","compare","sortVersionsAndFilterInvalid","listVersions","filter","sort","compareLoose","map","String","tagVersion","data","tag","DIST_TAGS","tagVersionNext","manifest","isNewerVersion","newVersion","oldVersion","comparisonResult","removeLowerVersions","objects","versionMap","Map","forEach","item","name","package","key","has","get","set","reduce","acc","find","i","undefined","push"],"sources":["../../src/lib/versions-utils.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\nimport semver, { SemVer } from 'semver';\n\nimport { DIST_TAGS, searchUtils } from '@verdaccio/core';\nimport { Manifest, StringValue, Version, Versions } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:storage:utils');\n\n/**\n * Gets version from a package object taking into account semver weirdness.\n * @return {String} return the semantic version of a package\n */\nexport function getVersion(versions: Versions, version: string): Version | undefined {\n if (!versions) {\n return;\n }\n\n // this condition must allow cast\n if (_.isNil(versions[version]) === false) {\n return versions[version];\n }\n\n const versionSemver: SemVer | null = semver.parse(version, true);\n if (versionSemver === null) {\n return;\n }\n\n for (const versionItem in versions) {\n if (Object.prototype.hasOwnProperty.call(versions, versionItem)) {\n // @ts-ignore\n if (versionSemver.compare(semver.parse(versionItem, true)) === 0) {\n return versions[versionItem];\n }\n }\n }\n}\n\n/**\n * Function filters out bad semver versions and sorts the array.\n * @return {Array} sorted Array\n */\nexport function sortVersionsAndFilterInvalid(listVersions: string[] /* logger */): string[] {\n return (\n listVersions\n .filter(function (version): boolean {\n if (!semver.parse(version, true)) {\n return false;\n }\n return true;\n })\n // FIXME: it seems the @types/semver do not handle a legitimate method named 'compareLoose'\n // @ts-ignore\n .sort(semver.compareLoose)\n .map(String)\n );\n}\n\n/**\n * Create a tag for a package\n * @param {*} data\n * @param {*} version\n * @param {*} tag\n * @return {Boolean} whether a package has been tagged\n * @deprecated\n */\nexport function tagVersion(data: Manifest, version: string, tag: StringValue): boolean {\n if (tag && data[DIST_TAGS][tag] !== version && semver.parse(version, true)) {\n // valid version - store\n data[DIST_TAGS][tag] = version;\n return true;\n }\n return false;\n}\n\n/**\n *\n * @param manifest\n * @param version\n * @param tag\n * @returns\n */\nexport function tagVersionNext(manifest: Manifest, version: string, tag: StringValue): Manifest {\n const data = { ...manifest };\n if (tag && data[DIST_TAGS][tag] !== version && semver.parse(version, true)) {\n // valid version - store\n data[DIST_TAGS][tag] = version;\n }\n return data;\n}\n\n/**\n * Check if the version is newer than the older version.\n * @param newVersion\n * @param oldVersion\n * @returns\n */\nexport function isNewerVersion(newVersion, oldVersion) {\n const comparisonResult = semver.compare(newVersion, oldVersion);\n\n return comparisonResult === 1 || comparisonResult === 0;\n}\n\n/**\n * Remove duplicates from search results.\n * @param {Array} objects\n * @return {Array} filtered array\n */\nexport function removeLowerVersions(objects: searchUtils.SearchPackageItem[]) {\n const versionMap = new Map();\n\n // Iterate through the array and keep the highest version for each name\n objects.forEach((item) => {\n const { name, version } = item.package;\n const key = name;\n\n if (versionMap.has(name) === false || isNewerVersion(version, versionMap.get(name))) {\n debug('keeping %o@%o', name, version);\n versionMap.set(key, version);\n }\n });\n\n // Filter objects based on the version map\n return objects.reduce((acc, item) => {\n const { name, version } = item.package;\n if (\n versionMap.has(name) &&\n versionMap.get(name) === version &&\n acc.find((i) => i.package.name === name) === undefined\n ) {\n debug('adding %o@%o', name, version);\n acc.push(item);\n }\n return acc;\n }, [] as searchUtils.SearchPackageItem[]);\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build/local-storage.js
CHANGED
|
@@ -10,7 +10,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
10
10
|
var _core = require("@verdaccio/core");
|
|
11
11
|
var _loaders = require("@verdaccio/loaders");
|
|
12
12
|
var _localStorage = _interopRequireDefault(require("@verdaccio/local-storage"));
|
|
13
|
-
function _interopRequireDefault(
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
const debug = (0, _debug.default)('verdaccio:storage:local');
|
|
15
15
|
const noSuchFile = exports.noSuchFile = 'ENOENT';
|
|
16
16
|
const resourceNotAvailable = exports.resourceNotAvailable = 'EAGAIN';
|
|
@@ -58,13 +58,13 @@ class LocalStorage {
|
|
|
58
58
|
return Storage;
|
|
59
59
|
}
|
|
60
60
|
async loadStorePlugin() {
|
|
61
|
-
var _this$config
|
|
61
|
+
var _this$config;
|
|
62
62
|
const plugins = await (0, _loaders.asyncLoadPlugin)(this.config.store, {
|
|
63
63
|
config: this.config,
|
|
64
64
|
logger: this.logger
|
|
65
65
|
}, plugin => {
|
|
66
66
|
return typeof plugin.getPackageStorage !== 'undefined';
|
|
67
|
-
}, (_this$config = this.config) === null || _this$config === void 0
|
|
67
|
+
}, (_this$config = this.config) === null || _this$config === void 0 || (_this$config = _this$config.serverSettings) === null || _this$config === void 0 ? void 0 : _this$config.pluginPrefix, _core.PLUGIN_CATEGORY.STORAGE);
|
|
68
68
|
if (plugins.length > 1) {
|
|
69
69
|
this.logger.warn('more than one storage plugins has been detected, multiple storage are not supported, one will be selected automatically');
|
|
70
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage.js","names":["_assert","_interopRequireDefault","require","_debug","_lodash","_core","_loaders","_localStorage","
|
|
1
|
+
{"version":3,"file":"local-storage.js","names":["_assert","_interopRequireDefault","require","_debug","_lodash","_core","_loaders","_localStorage","e","__esModule","default","debug","buildDebug","noSuchFile","exports","resourceNotAvailable","LocalStorage","constructor","config","logger","child","sub","storagePlugin","init","loadStorage","warn","getStoragePlugin","errorUtils","getInternalError","getSecret","secretKey","setSecret","checkSecretKey","Storage","loadStorePlugin","_","isNil","assert","storage","LocalDatabase","_this$config","plugins","asyncLoadPlugin","store","plugin","getPackageStorage","serverSettings","pluginPrefix","PLUGIN_CATEGORY","STORAGE","length","head"],"sources":["../src/local-storage.ts"],"sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\n\nimport { PLUGIN_CATEGORY, errorUtils, pluginUtils } from '@verdaccio/core';\nimport { asyncLoadPlugin } from '@verdaccio/loaders';\nimport LocalDatabase from '@verdaccio/local-storage';\nimport { Config, Logger } from '@verdaccio/types';\n\nconst debug = buildDebug('verdaccio:storage:local');\n\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport type PluginStorage = pluginUtils.Storage<Config>;\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: PluginStorage;\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 = await 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 getStoragePlugin(): PluginStorage {\n if (this.storagePlugin === null) {\n throw errorUtils.getInternalError('storage plugin is not initialized');\n }\n\n return this.storagePlugin;\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 async loadStorage(config: Config, logger: Logger): Promise<PluginStorage> {\n const Storage = await this.loadStorePlugin();\n if (_.isNil(Storage)) {\n assert(this.config.storage, 'CONFIG: storage path not defined');\n debug('no custom storage found, loading default storage @verdaccio/local-storage');\n return new LocalDatabase(config, logger);\n }\n return Storage as PluginStorage;\n }\n\n private async loadStorePlugin(): Promise<PluginStorage | undefined> {\n const plugins: PluginStorage[] = await asyncLoadPlugin<pluginUtils.Storage<unknown>>(\n this.config.store,\n {\n config: this.config,\n logger: this.logger,\n },\n (plugin) => {\n return typeof plugin.getPackageStorage !== 'undefined';\n },\n this.config?.serverSettings?.pluginPrefix,\n PLUGIN_CATEGORY.STORAGE\n );\n\n if (plugins.length > 1) {\n this.logger.warn(\n 'more than one storage plugins has been detected, multiple storage are not supported, one will be selected automatically'\n );\n }\n\n return _.head(plugins);\n }\n}\n\nexport { LocalStorage };\n"],"mappings":"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","ignoreList":[]}
|
package/build/storage.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { PassThrough, Readable } from 'stream';
|
|
3
3
|
import { pluginUtils, searchUtils } from '@verdaccio/core';
|
|
4
|
-
import { ISyncUplinksOptions, ProxySearchParams } from '@verdaccio/proxy';
|
|
4
|
+
import { ISyncUplinksOptions, ProxyInstanceList, ProxySearchParams } from '@verdaccio/proxy';
|
|
5
5
|
import { AbbreviatedManifest, Config, Logger, Manifest, MergeTags, Token, TokenFilter, Version } from '@verdaccio/types';
|
|
6
6
|
import { UpdateManifestOptions } from '.';
|
|
7
|
-
import { ProxyInstanceList } from './lib/uplink-util';
|
|
8
7
|
import { LocalStorage } from './local-storage';
|
|
9
|
-
import { IGetPackageOptionsNext, StarManifestBody } from './type';
|
|
8
|
+
import { IGetPackageOptionsNext, OwnerManifestBody, StarManifestBody } from './type';
|
|
10
9
|
export type Filters = pluginUtils.ManifestFilter<Config>[];
|
|
11
10
|
export declare const noSuchFile = "ENOENT";
|
|
12
11
|
export declare const resourceNotAvailable = "EAGAIN";
|
|
@@ -17,7 +16,8 @@ declare class Storage {
|
|
|
17
16
|
readonly config: Config;
|
|
18
17
|
readonly logger: Logger;
|
|
19
18
|
readonly uplinks: ProxyInstanceList;
|
|
20
|
-
|
|
19
|
+
private searchService;
|
|
20
|
+
constructor(config: Config, logger: Logger);
|
|
21
21
|
static ABBREVIATED_HEADER: string;
|
|
22
22
|
/**
|
|
23
23
|
* Change an existing package (i.e. unpublish one version)
|
|
@@ -25,7 +25,7 @@ declare class Storage {
|
|
|
25
25
|
Used storages: local (write)
|
|
26
26
|
*/
|
|
27
27
|
changePackage(name: string, metadata: Manifest, revision: string): Promise<void>;
|
|
28
|
-
removePackage(name: string, revision:
|
|
28
|
+
removePackage(name: string, revision: string, username: string): Promise<void>;
|
|
29
29
|
/**
|
|
30
30
|
Remove a tarball from a system
|
|
31
31
|
Function removes a tarball from local storage.
|
|
@@ -33,11 +33,11 @@ declare class Storage {
|
|
|
33
33
|
versions, i.e. package version should be unpublished first.
|
|
34
34
|
Used storage: local (write)
|
|
35
35
|
*/
|
|
36
|
-
removeTarball(name: string, filename: string, _revision: string): Promise<Manifest>;
|
|
36
|
+
removeTarball(name: string, filename: string, _revision: string, username: string): Promise<Manifest>;
|
|
37
37
|
/**
|
|
38
38
|
* Handle search on packages and proxies.
|
|
39
39
|
* Iterate all proxies configured and search in all endpoints in v2 and pipe all responses
|
|
40
|
-
*
|
|
40
|
+
* once the proxies request has finished search in local storage for all packages
|
|
41
41
|
* (privated and cached).
|
|
42
42
|
*/
|
|
43
43
|
search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]>;
|
|
@@ -49,7 +49,7 @@ declare class Storage {
|
|
|
49
49
|
* @param param2
|
|
50
50
|
* @returns
|
|
51
51
|
*/
|
|
52
|
-
|
|
52
|
+
getTarball(name: string, filename: string, { signal }: {
|
|
53
53
|
signal: any;
|
|
54
54
|
}): Promise<PassThrough>;
|
|
55
55
|
getPackageByVersion(options: IGetPackageOptionsNext): Promise<Version>;
|
|
@@ -72,10 +72,6 @@ declare class Storage {
|
|
|
72
72
|
* @returns Storage instance
|
|
73
73
|
*/
|
|
74
74
|
init(config: Config): Promise<void>;
|
|
75
|
-
/**
|
|
76
|
-
* Consume the upstream and pipe it to a transformable stream.
|
|
77
|
-
*/
|
|
78
|
-
private consumeSearchStream;
|
|
79
75
|
/**
|
|
80
76
|
* Retrieve a wrapper that provide access to the package location.
|
|
81
77
|
* @param {Object} pkgName package name.
|
|
@@ -92,7 +88,7 @@ declare class Storage {
|
|
|
92
88
|
getLocalTarball(pkgName: string, filename: string, { signal }: {
|
|
93
89
|
signal: AbortSignal;
|
|
94
90
|
}): Promise<Readable>;
|
|
95
|
-
|
|
91
|
+
getCachedPackages(query?: searchUtils.SearchQuery): Promise<searchUtils.SearchPackageItem[]>;
|
|
96
92
|
private removePackageByRevision;
|
|
97
93
|
/**
|
|
98
94
|
* Get a package local manifest.
|
|
@@ -115,9 +111,10 @@ declare class Storage {
|
|
|
115
111
|
*/
|
|
116
112
|
mergeTagsNext(name: string, tags: MergeTags): Promise<Manifest>;
|
|
117
113
|
private getUpLinkForDistFile;
|
|
118
|
-
updateManifest(manifest: Manifest | StarManifestBody, options: UpdateManifestOptions): Promise<string | undefined>;
|
|
114
|
+
updateManifest(manifest: Manifest | StarManifestBody | OwnerManifestBody, options: UpdateManifestOptions): Promise<string | undefined>;
|
|
119
115
|
private deprecate;
|
|
120
116
|
private star;
|
|
117
|
+
private changeOwners;
|
|
121
118
|
/**
|
|
122
119
|
* Get local package, on fails return null.
|
|
123
120
|
* Errors are considered package not found.
|
|
@@ -223,7 +220,7 @@ declare class Storage {
|
|
|
223
220
|
in that case the request returns empty body and we want ask next on the list if has fresh
|
|
224
221
|
updates.
|
|
225
222
|
*/
|
|
226
|
-
|
|
223
|
+
syncUplinksMetadata(name: string, localManifest: Manifest | null, options?: Partial<ISyncUplinksOptions>): Promise<[Manifest | null, any]>;
|
|
227
224
|
/**
|
|
228
225
|
* Merge a manifest with a remote manifest.
|
|
229
226
|
*
|
|
@@ -276,5 +273,7 @@ declare class Storage {
|
|
|
276
273
|
@returns return a merged manifest.
|
|
277
274
|
*/
|
|
278
275
|
updateVersionsNext(name: string, remoteManifest: Manifest): Promise<Manifest>;
|
|
276
|
+
private getTarballStats;
|
|
277
|
+
private checkAllowedToChangePackage;
|
|
279
278
|
}
|
|
280
279
|
export { Storage };
|