@verdaccio/store 6.0.0-6-next.23 → 6.0.0-6-next.24

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 CHANGED
@@ -1,5 +1,40 @@
1
1
  # @verdaccio/store
2
2
 
3
+ ## 6.0.0-6-next.24
4
+
5
+ ### Minor Changes
6
+
7
+ - 37274e4c: feat: implement abbreviated manifest
8
+
9
+ Enable abbreviated manifest data by adding the header:
10
+
11
+ ```
12
+ curl -H "Accept: application/vnd.npm.install-v1+json" https://registry.npmjs.org/verdaccio
13
+ ```
14
+
15
+ It returns a filtered manifest, additionally includes the [time](https://github.com/pnpm/rfcs/pull/2) field by request.
16
+
17
+ Current support for packages managers:
18
+
19
+ - npm: yes
20
+ - pnpm: yes
21
+ - yarn classic: yes
22
+ - yarn modern (+2.x): [no](https://github.com/yarnpkg/berry/pull/3981#issuecomment-1076566096)
23
+
24
+ https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-metadata-format
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies [37274e4c]
29
+ - @verdaccio/local-storage@11.0.0-6-next.14
30
+ - @verdaccio/core@6.0.0-6-next.6
31
+ - @verdaccio/tarball@11.0.0-6-next.13
32
+ - @verdaccio/url@11.0.0-6-next.10
33
+ - @verdaccio/hooks@6.0.0-6-next.14
34
+ - @verdaccio/loaders@6.0.0-6-next.13
35
+ - @verdaccio/logger@6.0.0-6-next.12
36
+ - @verdaccio/proxy@6.0.0-6-next.22
37
+
3
38
  ## 6.0.0-6-next.23
4
39
 
5
40
  ### Major Changes
@@ -280,7 +280,8 @@ function mergeVersions(cacheManifest, remoteManifest) {
280
280
  let _cacheManifest = { ...cacheManifest
281
281
  };
282
282
  const {
283
- versions
283
+ versions,
284
+ time
284
285
  } = remoteManifest; // copy new versions to a cache
285
286
  // NOTE: if a certain version was updated, we can't refresh it reliably
286
287
 
@@ -290,6 +291,12 @@ function mergeVersions(cacheManifest, remoteManifest) {
290
291
  }
291
292
  }
292
293
 
294
+ for (const i in time) {
295
+ if (typeof cacheManifest.time[i] === 'undefined') {
296
+ _cacheManifest.time[i] = time[i];
297
+ }
298
+ }
299
+
293
300
  for (const distTag in remoteManifest[_core.DIST_TAGS]) {
294
301
  if (_cacheManifest[_core.DIST_TAGS][distTag] !== remoteManifest[_core.DIST_TAGS][distTag]) {
295
302
  if (!_cacheManifest[_core.DIST_TAGS][distTag] || _semver.default.lte(_cacheManifest[_core.DIST_TAGS][distTag], remoteManifest[_core.DIST_TAGS][distTag])) {
@@ -1 +1 @@
1
- {"version":3,"file":"storage-utils.js","names":["STORAGE","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","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 } = 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 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":["STORAGE","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","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,8 +1,8 @@
1
1
  /// <reference types="node" />
2
2
  import { PassThrough, Readable } from 'stream';
3
3
  import { searchUtils } from '@verdaccio/core';
4
- import { IProxy, ISyncUplinksOptions, ProxySearchParams } from '@verdaccio/proxy';
5
- import { Config, Logger, Manifest, MergeTags, StringValue, Token, TokenFilter, Version } from '@verdaccio/types';
4
+ import { ISyncUplinksOptions, ProxySearchParams } from '@verdaccio/proxy';
5
+ import { AbbreviatedManifest, Config, Logger, Manifest, MergeTags, StringValue, Token, TokenFilter, Version } from '@verdaccio/types';
6
6
  import { UpdateManifestOptions } from '.';
7
7
  import { ProxyInstanceList } from './lib/uplink-util';
8
8
  import { LocalStorage } from './local-storage';
@@ -17,6 +17,7 @@ declare class Storage {
17
17
  readonly logger: Logger;
18
18
  readonly uplinks: ProxyInstanceList;
19
19
  constructor(config: Config);
20
+ static ABBREVIATED_HEADER: string;
20
21
  /**
21
22
  * Change an existing package (i.e. unpublish one version)
22
23
  Function changes a package info from local storage and all uplinks with write access./
@@ -52,18 +53,19 @@ declare class Storage {
52
53
  }): Promise<PassThrough>;
53
54
  getPackageByVersion(options: IGetPackageOptionsNext): Promise<Version>;
54
55
  getPackageManifest(options: IGetPackageOptionsNext): Promise<Manifest>;
56
+ private convertAbbreviatedManifest;
55
57
  /**
56
58
  * Return a manifest or version based on the options.
57
59
  * @param options {Object}
58
60
  * @returns A package manifest or specific version
59
61
  */
60
- getPackageByOptions(options: IGetPackageOptionsNext): Promise<Manifest | Version>;
62
+ getPackageByOptions(options: IGetPackageOptionsNext): Promise<Manifest | AbbreviatedManifest | Version>;
61
63
  getLocalDatabaseNext(): Promise<Version[]>;
62
64
  saveToken(token: Token): Promise<any>;
63
65
  deleteToken(user: string, tokenKey: string): Promise<any>;
64
66
  readTokens(filter: TokenFilter): Promise<Token[]>;
65
67
  /**
66
- * Initialize the storage asyncronously.
68
+ * Initialize the storage asynchronously.
67
69
  * @param config Config
68
70
  * @param filters IPluginFilters
69
71
  * @returns Storage instance
@@ -237,7 +239,7 @@ declare class Storage {
237
239
  * @param options options
238
240
  * @returns Returns a promise that resolves with the merged manifest.
239
241
  */
240
- mergeCacheRemoteMetadata(uplink: IProxy, cachedManifest: Manifest, options: ISyncUplinksOptions): Promise<Manifest>;
242
+ private mergeCacheRemoteMetadata;
241
243
  /**
242
244
  * Apply filters to manifest.
243
245
  * @param manifest
package/build/storage.js CHANGED
@@ -71,13 +71,14 @@ class Storage {
71
71
  this.localStorage = null;
72
72
  debug('uplinks available %o', Object.keys(this.uplinks));
73
73
  }
74
+
75
+ static ABBREVIATED_HEADER = 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*';
74
76
  /**
75
77
  * Change an existing package (i.e. unpublish one version)
76
78
  Function changes a package info from local storage and all uplinks with write access./
77
79
  Used storages: local (write)
78
80
  */
79
81
 
80
-
81
82
  async changePackageNext(name, metadata, revision) {
82
83
  debug('change existing package for package %o revision %o', name, revision);
83
84
  debug(`change manifest tags for %o revision %s`, name, revision);
@@ -508,6 +509,44 @@ class Storage {
508
509
  const convertedManifest = (0, _tarball.convertDistRemoteToLocalTarballUrls)(manifest, options.requestOptions, this.config.url_prefix);
509
510
  return convertedManifest;
510
511
  }
512
+
513
+ convertAbbreviatedManifest(manifest) {
514
+ const abbreviatedVersions = Object.keys(manifest.versions).reduce((acc, version) => {
515
+ const _version = manifest.versions[version]; // This should be align with this document
516
+ // https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object
517
+
518
+ const _version_abbreviated = {
519
+ name: _version.name,
520
+ version: _version.version,
521
+ description: _version.description,
522
+ deprecated: _version.deprecated,
523
+ bin: _version.bin,
524
+ dist: _version.dist,
525
+ engines: _version.engines,
526
+ funding: _version.funding,
527
+ directories: _version.directories,
528
+ dependencies: _version.dependencies,
529
+ devDependencies: _version.devDependencies,
530
+ peerDependencies: _version.peerDependencies,
531
+ optionalDependencies: _version.optionalDependencies,
532
+ bundleDependencies: _version.bundleDependencies,
533
+ // npm cli specifics
534
+ _hasShrinkwrap: _version._hasShrinkwrap,
535
+ hasInstallScript: _version.hasInstallScript
536
+ };
537
+ acc[version] = _version_abbreviated;
538
+ return acc;
539
+ }, {});
540
+ const convertedManifest = {
541
+ name: manifest['name'],
542
+ [_core.DIST_TAGS]: manifest[_core.DIST_TAGS],
543
+ versions: abbreviatedVersions,
544
+ modified: manifest.time.modified,
545
+ // NOTE: special case for pnpm https://github.com/pnpm/rfcs/pull/2
546
+ time: manifest.time
547
+ };
548
+ return convertedManifest;
549
+ }
511
550
  /**
512
551
  * Return a manifest or version based on the options.
513
552
  * @param options {Object}
@@ -520,7 +559,14 @@ class Storage {
520
559
  if (_lodash.default.isNil(options.version) === false) {
521
560
  return this.getPackageByVersion(options);
522
561
  } else {
523
- return this.getPackageManifest(options);
562
+ const manifest = await this.getPackageManifest(options);
563
+
564
+ if (options.abbreviated === true) {
565
+ debug('abbreviated manifest');
566
+ return this.convertAbbreviatedManifest(manifest);
567
+ }
568
+
569
+ return manifest;
524
570
  }
525
571
  }
526
572
 
@@ -579,7 +625,7 @@ class Storage {
579
625
  return this.localStorage.getStoragePlugin().readTokens(filter);
580
626
  }
581
627
  /**
582
- * Initialize the storage asyncronously.
628
+ * Initialize the storage asynchronously.
583
629
  * @param config Config
584
630
  * @param filters IPluginFilters
585
631
  * @returns Storage instance
@@ -1652,7 +1698,7 @@ class Storage {
1652
1698
  const [remoteManifest, etag] = await uplink.getRemoteMetadataNext(_cacheManifest.name, remoteOptions);
1653
1699
 
1654
1700
  try {
1655
- _cacheManifest = _core.validatioUtils.normalizeMetadata(remoteManifest, _cacheManifest.name);
1701
+ _cacheManifest = _core.validatioUtils.normalizeMetadata(_cacheManifest, _cacheManifest.name);
1656
1702
  } catch (err) {
1657
1703
  this.logger.error({
1658
1704
  err: err
@@ -1665,7 +1711,7 @@ class Storage {
1665
1711
 
1666
1712
  _cacheManifest = (0, _storageUtils.mergeUplinkTimeIntoLocalNext)(_cacheManifest, remoteManifest); // update the _uplinks field in the cache
1667
1713
 
1668
- _cacheManifest = (0, _uplinkUtil.updateVersionsHiddenUpLinkNext)(cachedManifest, uplink);
1714
+ _cacheManifest = (0, _uplinkUtil.updateVersionsHiddenUpLinkNext)(_cacheManifest, uplink);
1669
1715
 
1670
1716
  try {
1671
1717
  // merge versions from remote into the cache
@@ -1674,7 +1720,7 @@ class Storage {
1674
1720
  } catch (err) {
1675
1721
  this.logger.error({
1676
1722
  err: err
1677
- }, 'package.json mergin has failed @{!err?.message}\n@{err.stack}');
1723
+ }, 'package.json merge has failed @{!err?.message}\n@{err.stack}');
1678
1724
  throw err;
1679
1725
  }
1680
1726
  }
@@ -1799,7 +1845,7 @@ class Storage {
1799
1845
  for (const versionId in remoteManifest.versions) {
1800
1846
  // if detect a new remote version does not exist cache
1801
1847
  if (_lodash.default.isNil(cacheManifest.versions[versionId])) {
1802
- var _version, _version$dist;
1848
+ var _version2, _version2$dist;
1803
1849
 
1804
1850
  debug('new version from upstream %o', versionId);
1805
1851
  let version = remoteManifest.versions[versionId]; // we don't keep readme for package versions,
@@ -1812,7 +1858,7 @@ class Storage {
1812
1858
  change = true;
1813
1859
  cacheManifest.versions[versionId] = version;
1814
1860
 
1815
- if ((_version = version) !== null && _version !== void 0 && (_version$dist = _version.dist) !== null && _version$dist !== void 0 && _version$dist.tarball) {
1861
+ if ((_version2 = version) !== null && _version2 !== void 0 && (_version2$dist = _version2.dist) !== null && _version2$dist !== void 0 && _version2$dist.tarball) {
1816
1862
  const filename = _core.pkgUtils.extractTarballName(version.dist.tarball); // store a fast access to the dist file by tarball name
1817
1863
  // it does NOT overwrite any existing records
1818
1864