@verdaccio/store 8.0.0-next-8.1 → 8.0.0-next-8.3
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 +42 -0
- package/build/lib/storage-utils.js +3 -4
- package/build/lib/storage-utils.js.map +1 -1
- package/build/local-storage.js +1 -2
- package/build/local-storage.js.map +1 -1
- package/build/storage.js +29 -26
- package/build/storage.js.map +1 -1
- package/package.json +14 -14
- package/src/storage.ts +8 -0
- package/test/search.spec.ts +1 -0
- package/test/star-utils.test.ts +2 -0
- package/test/storage-utils.spec.ts +2 -0
- package/test/storage.spec.ts +271 -258
- package/test/versions.spec.ts +3 -2
- package/jest.config.js +0 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# @verdaccio/store
|
|
2
2
|
|
|
3
|
+
## 8.0.0-next-8.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 5731e88: fix: code scan issues
|
|
8
|
+
- 5cfbc14: fix(api): add logging when requesting tarball
|
|
9
|
+
- Updated dependencies [5731e88]
|
|
10
|
+
- Updated dependencies [4afca90]
|
|
11
|
+
- Updated dependencies [5cfbc14]
|
|
12
|
+
- @verdaccio/local-storage@13.0.0-next-8.3
|
|
13
|
+
- @verdaccio/loaders@8.0.0-next-8.3
|
|
14
|
+
- @verdaccio/tarball@13.0.0-next-8.3
|
|
15
|
+
- @verdaccio/hooks@8.0.0-next-8.3
|
|
16
|
+
- @verdaccio/core@8.0.0-next-8.3
|
|
17
|
+
- @verdaccio/config@8.0.0-next-8.3
|
|
18
|
+
- @verdaccio/url@13.0.0-next-8.3
|
|
19
|
+
- @verdaccio/proxy@8.0.0-next-8.3
|
|
20
|
+
- @verdaccio/search@8.0.0-next-8.3
|
|
21
|
+
- @verdaccio/utils@8.1.0-next-8.3
|
|
22
|
+
- @verdaccio/logger@8.0.0-next-8.3
|
|
23
|
+
|
|
24
|
+
## 8.0.0-next-8.2
|
|
25
|
+
|
|
26
|
+
### Minor Changes
|
|
27
|
+
|
|
28
|
+
- 6a8154c: feat: update logger pino to latest
|
|
29
|
+
|
|
30
|
+
### Patch Changes
|
|
31
|
+
|
|
32
|
+
- Updated dependencies [6a8154c]
|
|
33
|
+
- @verdaccio/config@8.0.0-next-8.2
|
|
34
|
+
- @verdaccio/core@8.0.0-next-8.2
|
|
35
|
+
- @verdaccio/tarball@13.0.0-next-8.2
|
|
36
|
+
- @verdaccio/url@13.0.0-next-8.2
|
|
37
|
+
- @verdaccio/hooks@8.0.0-next-8.2
|
|
38
|
+
- @verdaccio/loaders@8.0.0-next-8.2
|
|
39
|
+
- @verdaccio/logger@8.0.0-next-8.2
|
|
40
|
+
- @verdaccio/local-storage@13.0.0-next-8.2
|
|
41
|
+
- @verdaccio/proxy@8.0.0-next-8.2
|
|
42
|
+
- @verdaccio/search@8.0.0-next-8.2
|
|
43
|
+
- @verdaccio/utils@7.1.0-next-8.2
|
|
44
|
+
|
|
3
45
|
## 8.0.0-next-8.1
|
|
4
46
|
|
|
5
47
|
### Patch Changes
|
|
@@ -68,10 +68,10 @@ function normalizePackage(pkg) {
|
|
|
68
68
|
pkg[key] = {};
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
|
-
if (typeof
|
|
71
|
+
if (typeof pkg?._rev !== 'string') {
|
|
72
72
|
pkg._rev = STORAGE.DEFAULT_REVISION;
|
|
73
73
|
}
|
|
74
|
-
if (typeof
|
|
74
|
+
if (typeof pkg?._id !== 'string') {
|
|
75
75
|
pkg._id = pkg.name;
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -304,10 +304,9 @@ function normalizeDistTags(manifest) {
|
|
|
304
304
|
let sorted;
|
|
305
305
|
// handle missing latest dist-tag
|
|
306
306
|
if (!manifest[_core.DIST_TAGS].latest) {
|
|
307
|
-
var _sorted;
|
|
308
307
|
// if there is no latest tag, set the highest known version based on semver sort
|
|
309
308
|
sorted = (0, _versionsUtils.sortVersionsAndFilterInvalid)(Object.keys(manifest.versions));
|
|
310
|
-
if (
|
|
309
|
+
if (sorted?.length) {
|
|
311
310
|
// get the highest published version
|
|
312
311
|
manifest[_core.DIST_TAGS].latest = sorted.pop();
|
|
313
312
|
}
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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","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":[]}
|
package/build/local-storage.js
CHANGED
|
@@ -58,13 +58,12 @@ class LocalStorage {
|
|
|
58
58
|
return Storage;
|
|
59
59
|
}
|
|
60
60
|
async loadStorePlugin() {
|
|
61
|
-
var _this$config;
|
|
62
61
|
const plugins = await (0, _loaders.asyncLoadPlugin)(this.config.store, {
|
|
63
62
|
config: this.config,
|
|
64
63
|
logger: this.logger
|
|
65
64
|
}, plugin => {
|
|
66
65
|
return typeof plugin.getPackageStorage !== 'undefined';
|
|
67
|
-
},
|
|
66
|
+
}, this.config?.serverSettings?.pluginPrefix, _core.PLUGIN_CATEGORY.STORAGE);
|
|
68
67
|
if (plugins.length > 1) {
|
|
69
68
|
this.logger.warn('more than one storage plugins has been detected, multiple storage are not supported, one will be selected automatically');
|
|
70
69
|
}
|
|
@@ -1 +1 @@
|
|
|
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","
|
|
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","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.js
CHANGED
|
@@ -184,7 +184,10 @@ class Storage {
|
|
|
184
184
|
async getTarballFromUpstream(name, filename, {
|
|
185
185
|
signal
|
|
186
186
|
}) {
|
|
187
|
-
|
|
187
|
+
this.logger.info({
|
|
188
|
+
name,
|
|
189
|
+
filename
|
|
190
|
+
}, 'get tarball for package @{name} filename @{filename} from uplink');
|
|
188
191
|
let cachedManifest = null;
|
|
189
192
|
try {
|
|
190
193
|
cachedManifest = await this.getPackageLocalMetadata(name);
|
|
@@ -192,9 +195,8 @@ class Storage {
|
|
|
192
195
|
debug('error on get package local metadata %o', err);
|
|
193
196
|
}
|
|
194
197
|
// dist url should be on local cache metadata
|
|
195
|
-
if (
|
|
196
|
-
|
|
197
|
-
debug('dist file found, using it %o', (_cachedManifest3 = cachedManifest) === null || _cachedManifest3 === void 0 ? void 0 : _cachedManifest3._distfiles[filename].url);
|
|
198
|
+
if (cachedManifest?._distfiles && typeof cachedManifest?._distfiles[filename]?.url === 'string') {
|
|
199
|
+
debug('dist file found, using it %o', cachedManifest?._distfiles[filename].url);
|
|
198
200
|
// dist file found, proceed to download
|
|
199
201
|
const distFile = cachedManifest._distfiles[filename];
|
|
200
202
|
let current_length = 0;
|
|
@@ -307,6 +309,10 @@ class Storage {
|
|
|
307
309
|
async getTarball(name, filename, {
|
|
308
310
|
signal
|
|
309
311
|
}) {
|
|
312
|
+
this.logger.info({
|
|
313
|
+
name,
|
|
314
|
+
filename
|
|
315
|
+
}, 'get tarball for package @{name} filename @{filename}');
|
|
310
316
|
debug('get tarball for package %o filename %o', name, filename);
|
|
311
317
|
// TODO: check if isOpen is need it after all.
|
|
312
318
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -524,13 +530,12 @@ class Storage {
|
|
|
524
530
|
debug('storage has been already initialized');
|
|
525
531
|
}
|
|
526
532
|
if (!this.filters) {
|
|
527
|
-
var _this$config;
|
|
528
533
|
this.filters = await (0, _loaders.asyncLoadPlugin)(this.config.filters, {
|
|
529
534
|
config: this.config,
|
|
530
535
|
logger: this.logger
|
|
531
536
|
}, plugin => {
|
|
532
537
|
return typeof plugin.filter_metadata !== 'undefined';
|
|
533
|
-
},
|
|
538
|
+
}, this.config?.serverSettings?.pluginPrefix, _core.PLUGIN_CATEGORY.FILTER);
|
|
534
539
|
debug('filters available %o', this.filters.length);
|
|
535
540
|
}
|
|
536
541
|
return;
|
|
@@ -568,7 +573,7 @@ class Storage {
|
|
|
568
573
|
async getCachedPackages(query) {
|
|
569
574
|
debug('search on each package', query);
|
|
570
575
|
const results = [];
|
|
571
|
-
if (typeof query === 'undefined' || typeof
|
|
576
|
+
if (typeof query === 'undefined' || typeof query?.text === 'undefined') {
|
|
572
577
|
debug('search query for cached not found');
|
|
573
578
|
return results;
|
|
574
579
|
}
|
|
@@ -587,7 +592,7 @@ class Storage {
|
|
|
587
592
|
try {
|
|
588
593
|
for (const searchItem of items) {
|
|
589
594
|
const manifest = await this.getPackageLocalMetadata(searchItem.package.name);
|
|
590
|
-
if (_lodash.default.isEmpty(manifest
|
|
595
|
+
if (_lodash.default.isEmpty(manifest?.versions) === false) {
|
|
591
596
|
const searchPackage = (0, _storageUtils.mapManifestToSearchPackageBody)(manifest, searchItem);
|
|
592
597
|
debug('search local stream found %o', searchPackage.name);
|
|
593
598
|
const searchPackageItem = {
|
|
@@ -595,7 +600,7 @@ class Storage {
|
|
|
595
600
|
score: searchItem.score,
|
|
596
601
|
verdaccioPkgCached: searchItem.verdaccioPkgCached,
|
|
597
602
|
verdaccioPrivate: searchItem.verdaccioPrivate,
|
|
598
|
-
flags: searchItem
|
|
603
|
+
flags: searchItem?.flags,
|
|
599
604
|
// FUTURE: find a better way to calculate the score
|
|
600
605
|
searchScore: 1
|
|
601
606
|
};
|
|
@@ -648,7 +653,7 @@ class Storage {
|
|
|
648
653
|
await this.localStorage.getStoragePlugin().remove(pkgName);
|
|
649
654
|
// remove each attachment
|
|
650
655
|
const attachments = Object.keys(manifest._attachments);
|
|
651
|
-
debug('attachments to remove %s', attachments
|
|
656
|
+
debug('attachments to remove %s', attachments?.length);
|
|
652
657
|
for (let attachment of attachments) {
|
|
653
658
|
debug('remove attachment %s', attachment);
|
|
654
659
|
await storage.deletePackage(attachment);
|
|
@@ -840,7 +845,7 @@ class Storage {
|
|
|
840
845
|
const localStarUsers = localPackage.users || {};
|
|
841
846
|
// if trying to add a star
|
|
842
847
|
const userIsAddingStar = Object.keys(users).includes(username);
|
|
843
|
-
if (!(0, _starUtils.isExecutingStarCommand)(localPackage
|
|
848
|
+
if (!(0, _starUtils.isExecutingStarCommand)(localPackage?.users, username, userIsAddingStar)) {
|
|
844
849
|
return _core.API_MESSAGE.PKG_CHANGED;
|
|
845
850
|
}
|
|
846
851
|
const newUsers = userIsAddingStar ? {
|
|
@@ -970,18 +975,17 @@ class Storage {
|
|
|
970
975
|
const [firstAttachmentKey] = Object.keys(_attachments);
|
|
971
976
|
const buffer = this.getBufferManifest(body._attachments[firstAttachmentKey].data);
|
|
972
977
|
try {
|
|
973
|
-
var _this$config2;
|
|
974
978
|
// we check if package exist already locally
|
|
975
979
|
const localManifest = await this.getPackagelocalByNameNext(name);
|
|
976
980
|
// if continue, the version to be published does not exist
|
|
977
|
-
if (
|
|
981
|
+
if (localManifest?.versions[versionToPublish] != null) {
|
|
978
982
|
debug('%s version %s already exists (locally)', name, versionToPublish);
|
|
979
983
|
throw _core.errorUtils.getConflict();
|
|
980
984
|
}
|
|
981
|
-
const uplinksLook =
|
|
985
|
+
const uplinksLook = this.config?.publish?.allow_offline === false;
|
|
982
986
|
// if execution get here, package does not exist locally, we search upstream
|
|
983
987
|
const remoteManifest = await this.checkPackageRemote(name, uplinksLook);
|
|
984
|
-
if (
|
|
988
|
+
if (remoteManifest?.versions[versionToPublish] != null) {
|
|
985
989
|
debug('%s version %s already exists (upstream)', name, versionToPublish);
|
|
986
990
|
throw _core.errorUtils.getConflict();
|
|
987
991
|
}
|
|
@@ -1215,7 +1219,6 @@ class Storage {
|
|
|
1215
1219
|
// if uploaded tarball has a different shasum, it's very likely that we
|
|
1216
1220
|
// have some kind of error
|
|
1217
1221
|
if (_core.validatioUtils.isObject(metadata.dist) && _lodash.default.isString(metadata.dist.tarball)) {
|
|
1218
|
-
var _data$time;
|
|
1219
1222
|
const tarball = (0, _tarball.extractTarballFromUrl)(metadata.dist.tarball);
|
|
1220
1223
|
if (_core.validatioUtils.isObject(data._attachments[tarball])) {
|
|
1221
1224
|
if (_lodash.default.isNil(data._attachments[tarball].shasum) === false && _lodash.default.isNil(metadata.dist.shasum) === false) {
|
|
@@ -1224,6 +1227,9 @@ class Storage {
|
|
|
1224
1227
|
throw _core.errorUtils.getBadRequest(errorMessage);
|
|
1225
1228
|
}
|
|
1226
1229
|
}
|
|
1230
|
+
if (tarball === '__proto__' || tarball === 'constructor' || tarball === 'prototype') {
|
|
1231
|
+
throw _core.errorUtils.getBadRequest('tarball name is not allowed');
|
|
1232
|
+
}
|
|
1227
1233
|
data._attachments[tarball].version = version;
|
|
1228
1234
|
}
|
|
1229
1235
|
|
|
@@ -1240,7 +1246,7 @@ class Storage {
|
|
|
1240
1246
|
// populate the time field with the date of the version
|
|
1241
1247
|
const currentDate = new Date().toISOString();
|
|
1242
1248
|
data.time.modified = currentDate;
|
|
1243
|
-
if (!
|
|
1249
|
+
if (!data.time?.created) {
|
|
1244
1250
|
data.time.created = currentDate;
|
|
1245
1251
|
}
|
|
1246
1252
|
if (typeof data.time[version] === 'string') {
|
|
@@ -1450,7 +1456,7 @@ class Storage {
|
|
|
1450
1456
|
...(0, _storageUtils.normalizeDistTags)((0, _storageUtils.cleanUpLinksRef)(remoteManifest, options.keepUpLinkData)),
|
|
1451
1457
|
_attachments: {}
|
|
1452
1458
|
});
|
|
1453
|
-
debug('no sync uplinks errors %o for %s', upLinksErrors
|
|
1459
|
+
debug('no sync uplinks errors %o for %s', upLinksErrors?.length, name);
|
|
1454
1460
|
return [normalizedPkg, upLinksErrors];
|
|
1455
1461
|
}
|
|
1456
1462
|
|
|
@@ -1572,7 +1578,7 @@ class Storage {
|
|
|
1572
1578
|
}
|
|
1573
1579
|
}
|
|
1574
1580
|
const remoteOptions = Object.assign({}, options, {
|
|
1575
|
-
etag: upLinkMeta
|
|
1581
|
+
etag: upLinkMeta?.etag
|
|
1576
1582
|
});
|
|
1577
1583
|
|
|
1578
1584
|
// get the latest metadata from the uplink
|
|
@@ -1709,7 +1715,6 @@ class Storage {
|
|
|
1709
1715
|
for (const versionId in remoteManifest.versions) {
|
|
1710
1716
|
// if detect a new remote version does not exist cache
|
|
1711
1717
|
if (_lodash.default.isNil(cacheManifest.versions[versionId])) {
|
|
1712
|
-
var _version2;
|
|
1713
1718
|
debug('new version from upstream %o', versionId);
|
|
1714
1719
|
let version = remoteManifest.versions[versionId];
|
|
1715
1720
|
|
|
@@ -1721,11 +1726,11 @@ class Storage {
|
|
|
1721
1726
|
version.contributors = (0, _utils.normalizeContributors)(version.contributors);
|
|
1722
1727
|
change = true;
|
|
1723
1728
|
cacheManifest.versions[versionId] = version;
|
|
1724
|
-
if (
|
|
1729
|
+
if (version?.dist?.tarball) {
|
|
1725
1730
|
const filename = _core.pkgUtils.extractTarballName(version.dist.tarball);
|
|
1726
1731
|
// store a fast access to the dist file by tarball name
|
|
1727
1732
|
// it does NOT overwrite any existing records
|
|
1728
|
-
if (_lodash.default.isNil(cacheManifest
|
|
1733
|
+
if (_lodash.default.isNil(cacheManifest?._distfiles[filename])) {
|
|
1729
1734
|
const hash = cacheManifest._distfiles[filename] = {
|
|
1730
1735
|
url: version.dist.tarball,
|
|
1731
1736
|
sha: version.dist.shasum
|
|
@@ -1771,8 +1776,7 @@ class Storage {
|
|
|
1771
1776
|
}
|
|
1772
1777
|
}
|
|
1773
1778
|
async getTarballStats(version, buffer) {
|
|
1774
|
-
|
|
1775
|
-
if (version.dist == undefined || ((_version$dist = version.dist) === null || _version$dist === void 0 ? void 0 : _version$dist.fileCount) == undefined || ((_version$dist2 = version.dist) === null || _version$dist2 === void 0 ? void 0 : _version$dist2.unpackedSize) == undefined) {
|
|
1779
|
+
if (version.dist == undefined || version.dist?.fileCount == undefined || version.dist?.unpackedSize == undefined) {
|
|
1776
1780
|
debug('tarball stats not found, calculating');
|
|
1777
1781
|
return await (0, _tarball.getTarballDetails)(buffer);
|
|
1778
1782
|
} else {
|
|
@@ -1784,11 +1788,10 @@ class Storage {
|
|
|
1784
1788
|
}
|
|
1785
1789
|
}
|
|
1786
1790
|
async checkAllowedToChangePackage(manifest, username) {
|
|
1787
|
-
var _this$config3;
|
|
1788
1791
|
// Checks to perform if config "publish:check_owners" is true
|
|
1789
1792
|
debug('check if user %o is an owner and allowed to change package', username);
|
|
1790
1793
|
// if name of owner is not included in list of maintainers, then throw an error
|
|
1791
|
-
if (
|
|
1794
|
+
if (this.config?.publish?.check_owners === true && manifest.maintainers && manifest.maintainers.length > 0 && !manifest.maintainers.some(maintainer => maintainer.name === username)) {
|
|
1792
1795
|
this.logger.error({
|
|
1793
1796
|
username
|
|
1794
1797
|
}, '@{username} is not a maintainer (package owner)');
|