@verdaccio/store 8.0.0-next-8.0 → 8.0.0-next-8.2

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,42 @@
1
1
  # @verdaccio/store
2
2
 
3
+ ## 8.0.0-next-8.2
4
+
5
+ ### Minor Changes
6
+
7
+ - 6a8154c: feat: update logger pino to latest
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [6a8154c]
12
+ - @verdaccio/config@8.0.0-next-8.2
13
+ - @verdaccio/core@8.0.0-next-8.2
14
+ - @verdaccio/tarball@13.0.0-next-8.2
15
+ - @verdaccio/url@13.0.0-next-8.2
16
+ - @verdaccio/hooks@8.0.0-next-8.2
17
+ - @verdaccio/loaders@8.0.0-next-8.2
18
+ - @verdaccio/logger@8.0.0-next-8.2
19
+ - @verdaccio/local-storage@13.0.0-next-8.2
20
+ - @verdaccio/proxy@8.0.0-next-8.2
21
+ - @verdaccio/search@8.0.0-next-8.2
22
+ - @verdaccio/utils@7.1.0-next-8.2
23
+
24
+ ## 8.0.0-next-8.1
25
+
26
+ ### Patch Changes
27
+
28
+ - @verdaccio/hooks@8.0.0-next-8.1
29
+ - @verdaccio/core@8.0.0-next-8.1
30
+ - @verdaccio/config@8.0.0-next-8.1
31
+ - @verdaccio/tarball@13.0.0-next-8.1
32
+ - @verdaccio/url@13.0.0-next-8.1
33
+ - @verdaccio/loaders@8.0.0-next-8.1
34
+ - @verdaccio/local-storage@13.0.0-next-8.1
35
+ - @verdaccio/proxy@8.0.0-next-8.1
36
+ - @verdaccio/search@8.0.0-next-8.1
37
+ - @verdaccio/utils@7.0.1-next-8.1
38
+ - @verdaccio/logger@8.0.0-next-8.1
39
+
3
40
  ## 8.0.0-next-8.0
4
41
 
5
42
  ### Major Changes
@@ -68,10 +68,10 @@ function normalizePackage(pkg) {
68
68
  pkg[key] = {};
69
69
  }
70
70
  });
71
- if (typeof (pkg === null || pkg === void 0 ? void 0 : pkg._rev) !== 'string') {
71
+ if (typeof pkg?._rev !== 'string') {
72
72
  pkg._rev = STORAGE.DEFAULT_REVISION;
73
73
  }
74
- if (typeof (pkg === null || pkg === void 0 ? void 0 : pkg._id) !== 'string') {
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 ((_sorted = sorted) !== null && _sorted !== void 0 && _sorted.length) {
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":[]}
@@ -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
- }, (_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);
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","_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":[]}
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,6 @@ class Storage {
184
184
  async getTarballFromUpstream(name, filename, {
185
185
  signal
186
186
  }) {
187
- var _cachedManifest, _cachedManifest2;
188
187
  let cachedManifest = null;
189
188
  try {
190
189
  cachedManifest = await this.getPackageLocalMetadata(name);
@@ -192,9 +191,8 @@ class Storage {
192
191
  debug('error on get package local metadata %o', err);
193
192
  }
194
193
  // dist url should be on local cache metadata
195
- if ((_cachedManifest = cachedManifest) !== null && _cachedManifest !== void 0 && _cachedManifest._distfiles && typeof ((_cachedManifest2 = cachedManifest) === null || _cachedManifest2 === void 0 || (_cachedManifest2 = _cachedManifest2._distfiles[filename]) === null || _cachedManifest2 === void 0 ? void 0 : _cachedManifest2.url) === 'string') {
196
- var _cachedManifest3;
197
- debug('dist file found, using it %o', (_cachedManifest3 = cachedManifest) === null || _cachedManifest3 === void 0 ? void 0 : _cachedManifest3._distfiles[filename].url);
194
+ if (cachedManifest?._distfiles && typeof cachedManifest?._distfiles[filename]?.url === 'string') {
195
+ debug('dist file found, using it %o', cachedManifest?._distfiles[filename].url);
198
196
  // dist file found, proceed to download
199
197
  const distFile = cachedManifest._distfiles[filename];
200
198
  let current_length = 0;
@@ -524,13 +522,12 @@ class Storage {
524
522
  debug('storage has been already initialized');
525
523
  }
526
524
  if (!this.filters) {
527
- var _this$config;
528
525
  this.filters = await (0, _loaders.asyncLoadPlugin)(this.config.filters, {
529
526
  config: this.config,
530
527
  logger: this.logger
531
528
  }, plugin => {
532
529
  return typeof plugin.filter_metadata !== 'undefined';
533
- }, (_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.FILTER);
530
+ }, this.config?.serverSettings?.pluginPrefix, _core.PLUGIN_CATEGORY.FILTER);
534
531
  debug('filters available %o', this.filters.length);
535
532
  }
536
533
  return;
@@ -568,7 +565,7 @@ class Storage {
568
565
  async getCachedPackages(query) {
569
566
  debug('search on each package', query);
570
567
  const results = [];
571
- if (typeof query === 'undefined' || typeof (query === null || query === void 0 ? void 0 : query.text) === 'undefined') {
568
+ if (typeof query === 'undefined' || typeof query?.text === 'undefined') {
572
569
  debug('search query for cached not found');
573
570
  return results;
574
571
  }
@@ -587,7 +584,7 @@ class Storage {
587
584
  try {
588
585
  for (const searchItem of items) {
589
586
  const manifest = await this.getPackageLocalMetadata(searchItem.package.name);
590
- if (_lodash.default.isEmpty(manifest === null || manifest === void 0 ? void 0 : manifest.versions) === false) {
587
+ if (_lodash.default.isEmpty(manifest?.versions) === false) {
591
588
  const searchPackage = (0, _storageUtils.mapManifestToSearchPackageBody)(manifest, searchItem);
592
589
  debug('search local stream found %o', searchPackage.name);
593
590
  const searchPackageItem = {
@@ -595,7 +592,7 @@ class Storage {
595
592
  score: searchItem.score,
596
593
  verdaccioPkgCached: searchItem.verdaccioPkgCached,
597
594
  verdaccioPrivate: searchItem.verdaccioPrivate,
598
- flags: searchItem === null || searchItem === void 0 ? void 0 : searchItem.flags,
595
+ flags: searchItem?.flags,
599
596
  // FUTURE: find a better way to calculate the score
600
597
  searchScore: 1
601
598
  };
@@ -648,7 +645,7 @@ class Storage {
648
645
  await this.localStorage.getStoragePlugin().remove(pkgName);
649
646
  // remove each attachment
650
647
  const attachments = Object.keys(manifest._attachments);
651
- debug('attachments to remove %s', attachments === null || attachments === void 0 ? void 0 : attachments.length);
648
+ debug('attachments to remove %s', attachments?.length);
652
649
  for (let attachment of attachments) {
653
650
  debug('remove attachment %s', attachment);
654
651
  await storage.deletePackage(attachment);
@@ -840,7 +837,7 @@ class Storage {
840
837
  const localStarUsers = localPackage.users || {};
841
838
  // if trying to add a star
842
839
  const userIsAddingStar = Object.keys(users).includes(username);
843
- if (!(0, _starUtils.isExecutingStarCommand)(localPackage === null || localPackage === void 0 ? void 0 : localPackage.users, username, userIsAddingStar)) {
840
+ if (!(0, _starUtils.isExecutingStarCommand)(localPackage?.users, username, userIsAddingStar)) {
844
841
  return _core.API_MESSAGE.PKG_CHANGED;
845
842
  }
846
843
  const newUsers = userIsAddingStar ? {
@@ -970,18 +967,17 @@ class Storage {
970
967
  const [firstAttachmentKey] = Object.keys(_attachments);
971
968
  const buffer = this.getBufferManifest(body._attachments[firstAttachmentKey].data);
972
969
  try {
973
- var _this$config2;
974
970
  // we check if package exist already locally
975
971
  const localManifest = await this.getPackagelocalByNameNext(name);
976
972
  // if continue, the version to be published does not exist
977
- if ((localManifest === null || localManifest === void 0 ? void 0 : localManifest.versions[versionToPublish]) != null) {
973
+ if (localManifest?.versions[versionToPublish] != null) {
978
974
  debug('%s version %s already exists (locally)', name, versionToPublish);
979
975
  throw _core.errorUtils.getConflict();
980
976
  }
981
- const uplinksLook = ((_this$config2 = this.config) === null || _this$config2 === void 0 || (_this$config2 = _this$config2.publish) === null || _this$config2 === void 0 ? void 0 : _this$config2.allow_offline) === false;
977
+ const uplinksLook = this.config?.publish?.allow_offline === false;
982
978
  // if execution get here, package does not exist locally, we search upstream
983
979
  const remoteManifest = await this.checkPackageRemote(name, uplinksLook);
984
- if ((remoteManifest === null || remoteManifest === void 0 ? void 0 : remoteManifest.versions[versionToPublish]) != null) {
980
+ if (remoteManifest?.versions[versionToPublish] != null) {
985
981
  debug('%s version %s already exists (upstream)', name, versionToPublish);
986
982
  throw _core.errorUtils.getConflict();
987
983
  }
@@ -1215,7 +1211,6 @@ class Storage {
1215
1211
  // if uploaded tarball has a different shasum, it's very likely that we
1216
1212
  // have some kind of error
1217
1213
  if (_core.validatioUtils.isObject(metadata.dist) && _lodash.default.isString(metadata.dist.tarball)) {
1218
- var _data$time;
1219
1214
  const tarball = (0, _tarball.extractTarballFromUrl)(metadata.dist.tarball);
1220
1215
  if (_core.validatioUtils.isObject(data._attachments[tarball])) {
1221
1216
  if (_lodash.default.isNil(data._attachments[tarball].shasum) === false && _lodash.default.isNil(metadata.dist.shasum) === false) {
@@ -1240,7 +1235,7 @@ class Storage {
1240
1235
  // populate the time field with the date of the version
1241
1236
  const currentDate = new Date().toISOString();
1242
1237
  data.time.modified = currentDate;
1243
- if (!((_data$time = data.time) !== null && _data$time !== void 0 && _data$time.created)) {
1238
+ if (!data.time?.created) {
1244
1239
  data.time.created = currentDate;
1245
1240
  }
1246
1241
  if (typeof data.time[version] === 'string') {
@@ -1450,7 +1445,7 @@ class Storage {
1450
1445
  ...(0, _storageUtils.normalizeDistTags)((0, _storageUtils.cleanUpLinksRef)(remoteManifest, options.keepUpLinkData)),
1451
1446
  _attachments: {}
1452
1447
  });
1453
- debug('no sync uplinks errors %o for %s', upLinksErrors === null || upLinksErrors === void 0 ? void 0 : upLinksErrors.length, name);
1448
+ debug('no sync uplinks errors %o for %s', upLinksErrors?.length, name);
1454
1449
  return [normalizedPkg, upLinksErrors];
1455
1450
  }
1456
1451
 
@@ -1572,7 +1567,7 @@ class Storage {
1572
1567
  }
1573
1568
  }
1574
1569
  const remoteOptions = Object.assign({}, options, {
1575
- etag: upLinkMeta === null || upLinkMeta === void 0 ? void 0 : upLinkMeta.etag
1570
+ etag: upLinkMeta?.etag
1576
1571
  });
1577
1572
 
1578
1573
  // get the latest metadata from the uplink
@@ -1709,7 +1704,6 @@ class Storage {
1709
1704
  for (const versionId in remoteManifest.versions) {
1710
1705
  // if detect a new remote version does not exist cache
1711
1706
  if (_lodash.default.isNil(cacheManifest.versions[versionId])) {
1712
- var _version2;
1713
1707
  debug('new version from upstream %o', versionId);
1714
1708
  let version = remoteManifest.versions[versionId];
1715
1709
 
@@ -1721,11 +1715,11 @@ class Storage {
1721
1715
  version.contributors = (0, _utils.normalizeContributors)(version.contributors);
1722
1716
  change = true;
1723
1717
  cacheManifest.versions[versionId] = version;
1724
- if ((_version2 = version) !== null && _version2 !== void 0 && (_version2 = _version2.dist) !== null && _version2 !== void 0 && _version2.tarball) {
1718
+ if (version?.dist?.tarball) {
1725
1719
  const filename = _core.pkgUtils.extractTarballName(version.dist.tarball);
1726
1720
  // store a fast access to the dist file by tarball name
1727
1721
  // it does NOT overwrite any existing records
1728
- if (_lodash.default.isNil(cacheManifest === null || cacheManifest === void 0 ? void 0 : cacheManifest._distfiles[filename])) {
1722
+ if (_lodash.default.isNil(cacheManifest?._distfiles[filename])) {
1729
1723
  const hash = cacheManifest._distfiles[filename] = {
1730
1724
  url: version.dist.tarball,
1731
1725
  sha: version.dist.shasum
@@ -1771,8 +1765,7 @@ class Storage {
1771
1765
  }
1772
1766
  }
1773
1767
  async getTarballStats(version, buffer) {
1774
- var _version$dist, _version$dist2;
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) {
1768
+ if (version.dist == undefined || version.dist?.fileCount == undefined || version.dist?.unpackedSize == undefined) {
1776
1769
  debug('tarball stats not found, calculating');
1777
1770
  return await (0, _tarball.getTarballDetails)(buffer);
1778
1771
  } else {
@@ -1784,11 +1777,10 @@ class Storage {
1784
1777
  }
1785
1778
  }
1786
1779
  async checkAllowedToChangePackage(manifest, username) {
1787
- var _this$config3;
1788
1780
  // Checks to perform if config "publish:check_owners" is true
1789
1781
  debug('check if user %o is an owner and allowed to change package', username);
1790
1782
  // if name of owner is not included in list of maintainers, then throw an error
1791
- if (((_this$config3 = this.config) === null || _this$config3 === void 0 || (_this$config3 = _this$config3.publish) === null || _this$config3 === void 0 ? void 0 : _this$config3.check_owners) === true && manifest.maintainers && manifest.maintainers.length > 0 && !manifest.maintainers.some(maintainer => maintainer.name === username)) {
1783
+ if (this.config?.publish?.check_owners === true && manifest.maintainers && manifest.maintainers.length > 0 && !manifest.maintainers.some(maintainer => maintainer.name === username)) {
1792
1784
  this.logger.error({
1793
1785
  username
1794
1786
  }, '@{username} is not a maintainer (package owner)');
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","names":["_assert","_interopRequireDefault","require","_debug","_lodash","_interopRequireWildcard","_path","_stream","_promises","_url","_config","_core","_loaders","_proxy","_search","_tarball","_utils","_2","_starUtils","_storageUtils","_versionsUtils","_localStorage","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","debug","buildDebug","noSuchFile","exports","resourceNotAvailable","PROTO_NAME","Storage","constructor","config","logger","child","module","uplinks","setupUpLinks","searchService","Search","filters","localStorage","keys","ABBREVIATED_HEADER","changePackage","name","metadata","revision","validatioUtils","isObject","versions","DIST_TAGS","errorUtils","getBadData","updatePackage","localData","version","incomingVersion","_","isNil","info","time","file","_attachments","prototype","incomingDeprecated","deprecated","modified","Date","toISOString","USERS","MAINTAINERS","removePackage","username","removePackageByRevision","removeTarball","filename","_revision","assert","validateName","storage","getPrivatePackageStorage","error","getInternalError","API_ERROR","INTERNAL_SERVER_ERROR","cacheManifest","readPackage","getNotFound","checkAllowedToChangePackage","err","code","manifest","data","newData","deletePackage","search","options","cachePackages","getCachedPackages","query","length","remotePackages","totalResults","uniqueResults","removeLowerVersions","getTarballFromUpstream","signal","_cachedManifest","_cachedManifest2","cachedManifest","getPackageLocalMetadata","_distfiles","url","_cachedManifest3","distFile","current_length","expected_length","passThroughRemoteStream","PassThrough","proxy","getUpLinkForDistFile","remoteStream","fetchTarball","on","cache","localStorageWriteStream","writeTarball","pipeline","emit","res","statusCode","HTTP_STATUS","NOT_FOUND","NOT_FILE_UPLINK","OK","MULTIPLE_CHOICES","headers","HEADER_TYPE","CONTENT_LENGTH","progress","transferred","total","CONTENT_MISMATCH","updatedManifest","syncUplinksMetadata","uplinksLook","NO_SUCH_FILE","getTarball","isOpen","localTarballStream","localStream","getLocalTarball","STORAGE","NO_SUCH_FILE_ERROR","then","uplinkStream","catch","message","getPackageByVersion","queryVersion","VERSION_NOT_EXIST","convertedManifest","getPackageNext","getVersion","convertDistVersionToLocalTarballsUrl","requestOptions","url_prefix","matchedDisTagVersion","disTagVersion","getPackageManifest","byPassCache","getBadRequest","convertDistRemoteToLocalTarballUrls","convertAbbreviatedManifest","abbreviatedVersions","reduce","acc","_version","_version_abbreviated","bin","dist","engines","funding","directories","dependencies","devDependencies","peerDependencies","optionalDependencies","bundleDependencies","cpu","os","peerDependenciesMeta","acceptDependencies","_hasShrinkwrap","hasInstallScript","getPackageByOptions","abbreviated","getLocalDatabase","getStoragePlugin","database","packages","pkg","latest","timeList","users","push","warn","package","saveToken","token","isFunction","Promise","reject","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter","init","LocalStorage","getSecret","_this$config","asyncLoadPlugin","plugin","filter_metadata","serverSettings","pluginPrefix","PLUGIN_CATEGORY","FILTER","pkgName","getPackageStorage","createFailureStreamResponseNext","readTarball","results","text","q","quality","p","popularity","m","maintenance","s","size","items","searchItem","isEmpty","searchPackage","mapManifestToSearchPackageBody","searchPackageItem","score","verdaccioPkgCached","verdaccioPrivate","flags","searchScore","getServiceUnavailable","normalizePackage","remove","attachments","attachment","PACKAGE_FILE_NAME","result","stream","process","nextTick","mergeTagsNext","tags","tag","isNull","tagVersionNext","uplink","uplinkId","hasProxyTo","ProxyStorage","updateManifest","_id","isDeprecatedManifest","deprecate","isPublishablePackage","star","API_MESSAGE","PKG_CHANGED","Array","isArray","maintainers","changeOwners","validatePublishSingleVersion","mergedManifest","publishANewVersion","notify","packageName","UNSUPORTED_REGISTRY_CALL","localPackage","localStarUsers","userIsAddingStar","includes","isExecutingStarCommand","newUsers","value","key","getPackagelocalByNameNext","getBufferManifest","buffer","Buffer","from","hasPackage","body","successResponseMessage","normalizeMetadata","versionToPublish","firstAttachmentKey","_this$config2","localManifest","getConflict","publish","allow_offline","remoteManifest","checkPackageRemote","hasPackageInStorage","createNewLocalCachePackage","PKG_CREATED","tarballStats","getTarballStats","readme","String","addVersion","readable","Readable","uploadTarball","basename","_manifest","_message","getProxyList","uplinksList","fileName","contentReadable","resolve","uploadTarballAsStream","shaOneHash","createTarballHash","transformHash","Transform","transform","chunk","_encoding","callback","update","uploadStream","getForbidden","fileDoesExist","hasTarball","shasum","digest","cleanUpReadme","contributors","normalizeContributors","fileCount","unpackedSize","isString","tarball","_data$time","extractTarballFromUrl","errorMessage","currentDate","created","tagVersion","add","currentTime","packageData","generatePackageTemplate","email","DEFAULT_USER","createPackage","FILE_EXIST_ERROR","CONFLICT","upLinksErrors","PACKAGE_EXIST","errorItem","status","UPLINK_OFFLINE_PUBLISH","setDefaultRevision","json","_rev","DEFAULT_REVISION","prev","generateRevision","writePackage","savePackage","updateHandler","INTERNAL_ERROR","retry","remoteAddress","NOT_PACKAGE_UPLINK","normalizedPkg","assign","normalizeDistTags","cleanUpLinksRef","keepUpLinkData","found","syncManifest","upLinks","hasToLookIntoUplinks","uplinksErrors","tempManifest","mergeCacheRemoteMetadata","updatedCacheManifest","updateVersionsNext","filteredManifest","filtersErrors","applyFilters","NOT_MODIFIED","NO_PACKAGE","upLinkMeta","_uplinks","upname","_cacheManifest","fetched","now","maxage","remoteOptions","etag","getRemoteMetadata","updateUpLinkMetadata","mergeUplinkTimeIntoLocalNext","updateVersionsHiddenUpLinkNext","mergeVersions","filterPluginErrors","_createNewPackageNext","updateUplinkToRemoteProtocol","hash","upLinkKey","tarballUrl","URL","parse","uplinkUrl","host","protocol","registry","format","readCreatePackage","change","getLatestReadme","versionId","_version2","pkgUtils","extractTarballName","sha","upLink","Symbol","for","up","need_change","isEqual","_version$dist","_version$dist2","undefined","getTarballDetails","_this$config3","check_owners","some","maintainer","Error"],"sources":["../src/storage.ts"],"sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _, { isEmpty, isNil } from 'lodash';\nimport { basename } from 'path';\nimport { PassThrough, Readable, Transform } from 'stream';\nimport { pipeline } from 'stream/promises';\nimport { default as URL } from 'url';\n\nimport { hasProxyTo } from '@verdaccio/config';\nimport {\n API_ERROR,\n API_MESSAGE,\n DEFAULT_USER,\n DIST_TAGS,\n HEADER_TYPE,\n HTTP_STATUS,\n MAINTAINERS,\n PLUGIN_CATEGORY,\n SUPPORT_ERRORS,\n USERS,\n errorUtils,\n pkgUtils,\n pluginUtils,\n searchUtils,\n validatioUtils,\n} from '@verdaccio/core';\nimport { asyncLoadPlugin } from '@verdaccio/loaders';\nimport {\n IProxy,\n ISyncUplinksOptions,\n ProxyInstanceList,\n ProxySearchParams,\n ProxyStorage,\n setupUpLinks,\n updateVersionsHiddenUpLinkNext,\n} from '@verdaccio/proxy';\nimport Search from '@verdaccio/search';\nimport {\n TarballDetails,\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n extractTarballFromUrl,\n getTarballDetails,\n} from '@verdaccio/tarball';\nimport {\n AbbreviatedManifest,\n AbbreviatedVersions,\n Author,\n Config,\n DistFile,\n GenericBody,\n Logger,\n Manifest,\n MergeTags,\n PackageUsers,\n StringValue,\n Token,\n TokenFilter,\n Version,\n} from '@verdaccio/types';\nimport { createTarballHash, isObject, normalizeContributors } from '@verdaccio/utils';\n\nimport {\n PublishOptions,\n UpdateManifestOptions,\n cleanUpReadme,\n isDeprecatedManifest,\n tagVersion,\n tagVersionNext,\n} from '.';\nimport { isPublishablePackage } from './lib/star-utils';\nimport { isExecutingStarCommand } from './lib/star-utils';\nimport {\n STORAGE,\n cleanUpLinksRef,\n generatePackageTemplate,\n generateRevision,\n getLatestReadme,\n mapManifestToSearchPackageBody,\n mergeUplinkTimeIntoLocalNext,\n mergeVersions,\n normalizeDistTags,\n normalizePackage,\n updateUpLinkMetadata,\n} from './lib/storage-utils';\nimport { getVersion, removeLowerVersions } from './lib/versions-utils';\nimport { LocalStorage } from './local-storage';\nimport { IGetPackageOptionsNext, OwnerManifestBody, StarManifestBody } from './type';\n\nconst debug = buildDebug('verdaccio:storage');\n\nexport type Filters = pluginUtils.ManifestFilter<Config>[];\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const PROTO_NAME = '__proto__';\n\nclass Storage {\n public localStorage: LocalStorage;\n public filters: Filters | null;\n public readonly config: Config;\n public readonly logger: Logger;\n public readonly uplinks: ProxyInstanceList;\n private searchService: Search;\n public constructor(config: Config, logger: Logger) {\n this.config = config;\n this.logger = logger.child({ module: 'storage' });\n this.uplinks = setupUpLinks(config, this.logger);\n this.searchService = new Search(config, this.logger);\n this.filters = null;\n // @ts-ignore\n this.localStorage = null;\n debug('uplinks available %o', Object.keys(this.uplinks));\n }\n\n static ABBREVIATED_HEADER = 'application/vnd.npm.install-v1+json';\n\n /**\n * Change an existing package (i.e. unpublish one version)\n Function changes a package info from local storage and all uplinks with write access./\n Used storages: local (write)\n */\n public async changePackage(name: string, metadata: Manifest, revision: string): Promise<void> {\n debug('change existing package for package %o revision %o', name, revision);\n debug(`change manifest tags for %o revision %o`, name, revision);\n if (\n !validatioUtils.isObject(metadata.versions) ||\n !validatioUtils.isObject(metadata[DIST_TAGS])\n ) {\n debug(`change manifest bad data for %o`, name);\n throw errorUtils.getBadData();\n }\n\n debug(`change manifest updating manifest for %o`, name);\n await this.updatePackage(name, async (localData: Manifest): Promise<Manifest> => {\n // eslint-disable-next-line guard-for-in\n for (const version in localData.versions) {\n const incomingVersion = metadata.versions[version];\n if (_.isNil(incomingVersion)) {\n this.logger.info({ name: name, version: version }, 'unpublishing @{name}@@{version}');\n\n // FIXME: I prefer return a new object rather mutate the metadata\n delete localData.versions[version];\n delete localData.time![version];\n\n for (const file in localData._attachments) {\n if (localData._attachments[file].version === version) {\n delete localData._attachments[file].version;\n }\n }\n } else if (Object.prototype.hasOwnProperty.call(incomingVersion, 'deprecated')) {\n const incomingDeprecated = incomingVersion.deprecated;\n if (incomingDeprecated != localData.versions[version].deprecated) {\n if (!incomingDeprecated) {\n this.logger.info(\n { name: name, version: version },\n 'undeprecating @{name}@@{version}'\n );\n delete localData.versions[version].deprecated;\n } else {\n this.logger.info({ name: name, version: version }, 'deprecating @{name}@@{version}');\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = metadata[USERS];\n localData[DIST_TAGS] = metadata[DIST_TAGS];\n localData[MAINTAINERS] = metadata[MAINTAINERS];\n return localData;\n });\n }\n\n public async removePackage(name: string, revision: string, username: string): Promise<void> {\n debug('remove package %o', name);\n await this.removePackageByRevision(name, revision, username);\n }\n\n /**\n Remove a tarball from a system\n Function removes a tarball from local storage.\n Tarball in question should not be linked to in any existing\n versions, i.e. package version should be unpublished first.\n Used storage: local (write)\n */\n public async removeTarball(\n name: string,\n filename: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _revision: string,\n username: string\n ): Promise<Manifest> {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n if (!storage) {\n debug(`method not implemented for storage`);\n this.logger.error('method for remove tarball not implemented');\n throw errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR);\n }\n\n try {\n const cacheManifest = await storage.readPackage(name);\n if (!cacheManifest._attachments[filename]) {\n throw errorUtils.getNotFound('no such file available');\n }\n\n // check if logged in user is allowed to remove tarball\n await this.checkAllowedToChangePackage(cacheManifest, username);\n } catch (err: any) {\n if (err.code === noSuchFile) {\n throw errorUtils.getNotFound();\n }\n throw err;\n }\n\n const manifest = await this.updatePackage(name, async (data: Manifest): Promise<Manifest> => {\n let newData: Manifest = { ...data };\n delete data._attachments[filename];\n return newData;\n });\n\n try {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n if (!storage) {\n debug(`method not implemented for storage`);\n this.logger.error('method for remove tarball not implemented');\n throw errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR);\n }\n\n await storage.deletePackage(filename);\n debug('package %s removed', filename);\n } catch (err: any) {\n this.logger.error({ err }, 'error removing %s from storage');\n throw err;\n }\n return manifest;\n }\n\n /**\n * Handle search on packages and proxies.\n * Iterate all proxies configured and search in all endpoints in v2 and pipe all responses\n * once the proxies request has finished search in local storage for all packages\n * (privated and cached).\n */\n public async search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]> {\n debug('search on cache packages');\n const cachePackages = await this.getCachedPackages(options.query);\n debug('search found on cache packages %o', cachePackages.length);\n const remotePackages = await this.searchService.search(options);\n debug('search found on remote packages %o', remotePackages.length);\n const totalResults = [...cachePackages, ...remotePackages];\n const uniqueResults = removeLowerVersions(totalResults);\n debug('unique results %o', uniqueResults.length);\n return uniqueResults;\n }\n\n private async getTarballFromUpstream(name: string, filename: string, { signal }) {\n let cachedManifest: Manifest | null = null;\n try {\n cachedManifest = await this.getPackageLocalMetadata(name);\n } catch (err) {\n debug('error on get package local metadata %o', err);\n }\n // dist url should be on local cache metadata\n if (\n cachedManifest?._distfiles &&\n typeof cachedManifest?._distfiles[filename]?.url === 'string'\n ) {\n debug('dist file found, using it %o', cachedManifest?._distfiles[filename].url);\n // dist file found, proceed to download\n const distFile = cachedManifest._distfiles[filename];\n\n let current_length = 0;\n let expected_length;\n const passThroughRemoteStream = new PassThrough();\n const proxy = this.getUpLinkForDistFile(name, distFile);\n const remoteStream = proxy.fetchTarball(distFile.url, {});\n\n remoteStream.on('request', async () => {\n try {\n debug('remote stream request');\n const storage = this.getPrivatePackageStorage(name) as any;\n if (proxy.config.cache === true && storage) {\n const localStorageWriteStream = await storage.writeTarball(filename, {\n signal,\n });\n\n await pipeline(remoteStream, passThroughRemoteStream, localStorageWriteStream, {\n signal,\n });\n } else {\n await pipeline(remoteStream, passThroughRemoteStream, {\n signal,\n });\n }\n } catch (err: any) {\n debug('error on pipeline downloading tarball for package %o', name);\n passThroughRemoteStream.emit('error', err);\n }\n });\n\n remoteStream\n .on('response', async (res) => {\n if (res.statusCode === HTTP_STATUS.NOT_FOUND) {\n debug('remote stream response 404');\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getNotFound(errorUtils.API_ERROR.NOT_FILE_UPLINK)\n );\n return;\n }\n\n if (\n !(res.statusCode >= HTTP_STATUS.OK && res.statusCode < HTTP_STATUS.MULTIPLE_CHOICES)\n ) {\n debug('remote stream response ok');\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getInternalError(`bad uplink status code: ${res.statusCode}`)\n );\n return;\n }\n\n if (res.headers[HEADER_TYPE.CONTENT_LENGTH]) {\n expected_length = res.headers[HEADER_TYPE.CONTENT_LENGTH];\n debug('remote stream response content length %o', expected_length);\n passThroughRemoteStream.emit(\n HEADER_TYPE.CONTENT_LENGTH,\n res.headers[HEADER_TYPE.CONTENT_LENGTH]\n );\n }\n })\n .on('downloadProgress', (progress) => {\n current_length = progress.transferred;\n if (typeof expected_length === 'undefined' && progress.total) {\n expected_length = progress.total;\n }\n })\n .on('end', () => {\n if (expected_length && current_length != expected_length) {\n debug('stream end, but length mismatch %o %o', current_length, expected_length);\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getInternalError(API_ERROR.CONTENT_MISMATCH)\n );\n }\n debug('remote stream end');\n })\n .on('error', (err) => {\n debug('remote stream error %o', err);\n passThroughRemoteStream.emit('error', err);\n });\n return passThroughRemoteStream;\n } else {\n debug('dist file not found, proceed update upstream');\n // no dist url found, proceed to fetch from upstream\n // should not be the case\n const passThroughRemoteStream = new PassThrough();\n // ensure get the latest data\n const [updatedManifest] = await this.syncUplinksMetadata(name, cachedManifest, {\n uplinksLook: true,\n });\n const distFile = (updatedManifest as Manifest)._distfiles[filename];\n\n if (updatedManifest === null || !distFile) {\n debug('remote tarball not found');\n throw errorUtils.getNotFound(API_ERROR.NO_SUCH_FILE);\n }\n\n const proxy = this.getUpLinkForDistFile(name, distFile);\n const remoteStream = proxy.fetchTarball(distFile.url, {});\n remoteStream.on('response', async () => {\n try {\n const storage = this.getPrivatePackageStorage(name);\n if (proxy.config.cache === true && storage) {\n debug('cache remote tarball enabled');\n const localStorageWriteStream = await storage.writeTarball(filename, {\n signal,\n });\n await pipeline(remoteStream, passThroughRemoteStream, localStorageWriteStream, {\n signal,\n });\n } else {\n debug('cache remote tarball disabled');\n await pipeline(remoteStream, passThroughRemoteStream, { signal });\n }\n } catch (err) {\n debug('error on pipeline downloading tarball for package %o', name);\n passThroughRemoteStream.emit('error', err);\n }\n });\n return passThroughRemoteStream;\n }\n }\n\n /**\n *\n * @param name\n * @param filename\n * @param param2\n * @returns\n */\n public async getTarball(name: string, filename: string, { signal }): Promise<PassThrough> {\n debug('get tarball for package %o filename %o', name, filename);\n // TODO: check if isOpen is need it after all.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let isOpen = false;\n const localTarballStream = new PassThrough();\n const localStream = await this.getLocalTarball(name, filename, { signal });\n localStream.on('open', async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isOpen = true;\n await pipeline(localStream, localTarballStream, { signal });\n });\n\n localStream.on('error', (err: any) => {\n // eslint-disable-next-line no-console\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n this.getTarballFromUpstream(name, filename, { signal })\n .then((uplinkStream) => {\n pipeline(uplinkStream, localTarballStream, { signal })\n .then(() => {\n debug('successfully downloaded tarball for package %o filename %o', name, filename);\n })\n .catch((err) => {\n localTarballStream.emit('error', err);\n });\n })\n .catch((err) => {\n localTarballStream.emit('error', err);\n });\n } else {\n this.logger.error({ err: err.message }, 'some error on fatal @{err}');\n localTarballStream.emit('error', err);\n }\n });\n\n return localTarballStream;\n }\n\n public async getPackageByVersion(options: IGetPackageOptionsNext): Promise<Version> {\n const queryVersion = options.version as string;\n if (_.isNil(queryVersion)) {\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n // we have version, so we need to return specific version\n const [convertedManifest] = await this.getPackageNext(options);\n\n const version: Version | undefined = getVersion(convertedManifest.versions, queryVersion);\n\n debug('query by latest version %o and result %o', queryVersion, version);\n if (typeof version !== 'undefined') {\n debug('latest version found %o', version);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n version,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n\n // the version could be a dist-tag eg: beta, alpha, so we find the matched version\n // on disg-tag list\n if (_.isNil(convertedManifest[DIST_TAGS]) === false) {\n if (_.isNil(convertedManifest[DIST_TAGS][queryVersion]) === false) {\n // the version found as a distag\n const matchedDisTagVersion: string = convertedManifest[DIST_TAGS][queryVersion];\n debug('dist-tag version found %o', matchedDisTagVersion);\n const disTagVersion: Version | undefined = getVersion(\n convertedManifest.versions,\n matchedDisTagVersion\n );\n if (typeof disTagVersion !== 'undefined') {\n debug('dist-tag found %o', disTagVersion);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n disTagVersion,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n }\n } else {\n debug('dist tag not detected');\n }\n\n // we didn't find the version, not found error\n debug('package version not found %o', queryVersion);\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n public async getPackageManifest(options: IGetPackageOptionsNext): Promise<Manifest> {\n // convert dist remotes to local bars\n const [manifest] = await this.getPackageNext(options);\n\n // If change access is requested (?write=true), then check if logged in user is allowed to change package\n if (options.byPassCache === true) {\n try {\n await this.checkAllowedToChangePackage(manifest, options.requestOptions.username);\n } catch (error: any) {\n this.logger.error({ error: error.message }, 'getting package has failed: @{error}');\n throw errorUtils.getBadRequest(error.message);\n }\n }\n\n const convertedManifest = convertDistRemoteToLocalTarballUrls(\n manifest,\n options.requestOptions,\n this.config.url_prefix\n );\n\n return convertedManifest;\n }\n\n private convertAbbreviatedManifest(manifest: Manifest): AbbreviatedManifest {\n const abbreviatedVersions = Object.keys(manifest.versions).reduce(\n (acc: AbbreviatedVersions, version: string) => {\n const _version = manifest.versions[version];\n // This should be align with this document\n // https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object\n const _version_abbreviated = {\n name: _version.name,\n version: _version.version,\n deprecated: _version.deprecated,\n bin: _version.bin,\n dist: _version.dist,\n engines: _version.engines,\n funding: _version.funding,\n directories: _version.directories,\n dependencies: _version.dependencies,\n devDependencies: _version.devDependencies,\n peerDependencies: _version.peerDependencies,\n optionalDependencies: _version.optionalDependencies,\n bundleDependencies: _version.bundleDependencies,\n cpu: _version.cpu,\n os: _version.os,\n peerDependenciesMeta: _version.peerDependenciesMeta,\n acceptDependencies: _version.acceptDependencies,\n // npm cli specifics\n _hasShrinkwrap: _version._hasShrinkwrap,\n hasInstallScript: _version.hasInstallScript,\n };\n acc[version] = _version_abbreviated;\n return acc;\n },\n {}\n );\n const convertedManifest = {\n name: manifest['name'],\n [DIST_TAGS]: manifest[DIST_TAGS],\n versions: abbreviatedVersions,\n modified: manifest.time.modified,\n // NOTE: special case for pnpm https://github.com/pnpm/rfcs/pull/2\n time: manifest.time,\n };\n\n return convertedManifest;\n }\n\n /**\n * Return a manifest or version based on the options.\n * @param options {Object}\n * @returns A package manifest or specific version\n */\n public async getPackageByOptions(\n options: IGetPackageOptionsNext\n ): Promise<Manifest | AbbreviatedManifest | Version> {\n // if no version we return the whole manifest\n if (_.isNil(options.version) === false) {\n return this.getPackageByVersion(options);\n } else {\n const manifest = await this.getPackageManifest(options);\n if (options.abbreviated === true) {\n debug('abbreviated manifest');\n return this.convertAbbreviatedManifest(manifest);\n }\n return manifest;\n }\n }\n\n public async getLocalDatabase(): Promise<Version[]> {\n debug('get local database');\n const storage = this.localStorage.getStoragePlugin();\n const database = await storage.get();\n const packages: Version[] = [];\n for (const pkg of database) {\n debug('get local database %o', pkg);\n const manifest = await this.getPackageLocalMetadata(pkg);\n const latest = manifest[DIST_TAGS].latest;\n if (latest && manifest.versions[latest]) {\n const version: Version = manifest.versions[latest];\n const timeList = manifest.time as GenericBody;\n const time = timeList[latest];\n // @ts-ignore\n version.time = time;\n\n // Add for stars api\n // @ts-ignore\n version.users = manifest.users;\n\n packages.push(version);\n } else {\n this.logger.warn({ package: pkg }, 'package @{package} does not have a \"latest\" tag?');\n }\n }\n return packages;\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.localStorage.getStoragePlugin().saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.localStorage.getStoragePlugin().deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.localStorage.getStoragePlugin().readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().readTokens(filter);\n }\n\n /**\n * Initialize the storage asynchronously.\n * @param config Config\n * @param filters Filters\n * @returns Storage instance\n */\n public async init(config: Config): Promise<void> {\n if (this.localStorage === null) {\n this.localStorage = new LocalStorage(this.config, this.logger);\n await this.localStorage.init();\n debug('local init storage initialized');\n await this.localStorage.getSecret(config);\n debug('local storage secret initialized');\n } else {\n debug('storage has been already initialized');\n }\n if (!this.filters) {\n this.filters = await asyncLoadPlugin<pluginUtils.ManifestFilter<unknown>>(\n this.config.filters,\n {\n config: this.config,\n logger: this.logger,\n },\n (plugin: pluginUtils.ManifestFilter<Config>) => {\n return typeof plugin.filter_metadata !== 'undefined';\n },\n this.config?.serverSettings?.pluginPrefix,\n PLUGIN_CATEGORY.FILTER\n );\n debug('filters available %o', this.filters.length);\n }\n return;\n }\n\n /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private getPrivatePackageStorage(pkgName: string): pluginUtils.StorageHandler {\n debug('get local storage for %o', pkgName);\n return this.localStorage.getStoragePlugin().getPackageStorage(pkgName);\n }\n\n /**\n * Create a tarball stream from a package.\n * @param name\n * @param filename\n * @param options\n * @returns\n */\n public async getLocalTarball(\n pkgName: string,\n filename: string,\n { signal }: { signal: AbortSignal }\n ): Promise<Readable> {\n assert(validatioUtils.validateName(filename));\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(pkgName);\n if (typeof storage === 'undefined') {\n return this.createFailureStreamResponseNext();\n }\n\n return await storage.readTarball(filename, { signal });\n }\n\n public async getCachedPackages(\n query?: searchUtils.SearchQuery\n ): Promise<searchUtils.SearchPackageItem[]> {\n debug('search on each package', query);\n const results: searchUtils.SearchPackageItem[] = [];\n if (typeof query === 'undefined' || typeof query?.text === 'undefined') {\n debug('search query for cached not found');\n return results;\n }\n\n this.logger.info(\n { t: query.text, q: query.quality, p: query.popularity, m: query.maintenance, s: query.size },\n 'search by text @{t}| maintenance @{m}| quality @{q}| popularity @{p}'\n );\n\n if (typeof this.localStorage.getStoragePlugin().search === 'undefined') {\n this.logger.info('plugin search not implemented yet');\n } else {\n debug('search on each package by plugin query');\n const items = await this.localStorage.getStoragePlugin().search(query);\n try {\n for (const searchItem of items) {\n const manifest = await this.getPackageLocalMetadata(searchItem.package.name);\n if (_.isEmpty(manifest?.versions) === false) {\n const searchPackage = mapManifestToSearchPackageBody(manifest, searchItem);\n debug('search local stream found %o', searchPackage.name);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n verdaccioPkgCached: searchItem.verdaccioPkgCached,\n verdaccioPrivate: searchItem.verdaccioPrivate,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n results.push(searchPackageItem);\n } else {\n debug('local item without versions detected %s', searchItem.package.name);\n }\n }\n debug('search local stream end');\n } catch (err) {\n this.logger.error({ err, query }, 'error on search by plugin @{err.message}');\n throw err;\n }\n }\n return results;\n }\n\n private async removePackageByRevision(\n pkgName: string,\n revision: string,\n username: string\n ): Promise<void> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(pkgName);\n debug('get package metadata for %o', pkgName);\n if (typeof storage === 'undefined') {\n throw errorUtils.getServiceUnavailable('storage not initialized');\n }\n let manifest;\n try {\n manifest = await storage.readPackage(pkgName);\n manifest = normalizePackage(manifest);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n this.logger.info({ pkgName, revision }, 'package not found');\n throw errorUtils.getNotFound();\n }\n this.logger.error(\n { pkgName, revision, err: err.message },\n 'error @{err} while reading package @{pkgName}-{revision}'\n );\n throw err;\n }\n\n // TODO: move this to another method\n try {\n // check if logged in user is allowed to remove package\n await this.checkAllowedToChangePackage(manifest, username);\n\n await this.localStorage.getStoragePlugin().remove(pkgName);\n // remove each attachment\n const attachments = Object.keys(manifest._attachments);\n debug('attachments to remove %s', attachments?.length);\n for (let attachment of attachments) {\n debug('remove attachment %s', attachment);\n await storage.deletePackage(attachment);\n this.logger.info({ attachment }, 'attachment @{attachment} removed');\n }\n // remove package.json\n debug('remove package.json');\n await storage.deletePackage(STORAGE.PACKAGE_FILE_NAME);\n // remove folder\n debug('remove package folder');\n await storage.removePackage();\n this.logger.info({ pkgName }, 'package @{pkgName} removed');\n } catch (err: any) {\n this.logger.error({ err }, 'removed package has failed @{err.message}');\n throw errorUtils.getBadData(err.message);\n }\n }\n\n /**\n * Get a package local manifest.\n *\n * Fails if package is not found.\n * @param name package name\n * @param revision of package\n * @returns local manifest\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async getPackageLocalMetadata(name: string, _revision?: string): Promise<Manifest> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n throw errorUtils.getServiceUnavailable('storage not initialized');\n }\n\n try {\n const result: Manifest = await storage.readPackage(name);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n throw errorUtils.getNotFound();\n }\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `error reading @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n\n /**\n * Fail the stream response with an not found error.\n * @returns\n */\n private createFailureStreamResponseNext(): PassThrough {\n const stream: PassThrough = new PassThrough();\n\n // we ensure fails on the next tick into the event loop\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound(API_ERROR.NO_SUCH_FILE));\n });\n\n return stream;\n }\n\n /**\n * Update a package and merge tags\n * @param name package name\n * @param tags list of dist-tags\n */\n public async mergeTagsNext(name: string, tags: MergeTags): Promise<Manifest> {\n return await this.updatePackage(name, async (data: Manifest): Promise<Manifest> => {\n let newData: Manifest = { ...data };\n for (const tag of Object.keys(tags)) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete newData[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(newData.versions[tags[tag]])) {\n throw errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST);\n }\n const version: string = tags[tag];\n newData = tagVersionNext(newData, version, tag);\n }\n\n return newData;\n });\n }\n\n private getUpLinkForDistFile(pkgName: string, distFile: DistFile): IProxy {\n let uplink: IProxy | null = null;\n\n for (const uplinkId in this.uplinks) {\n // refer to https://github.com/verdaccio/verdaccio/issues/1642\n if (hasProxyTo(pkgName, uplinkId, this.config.packages)) {\n uplink = this.uplinks[uplinkId];\n }\n }\n\n if (uplink == null) {\n debug('upstream not found creating one for %o', pkgName);\n uplink = new ProxyStorage(\n {\n url: distFile.url,\n cache: true,\n },\n this.config,\n this.logger\n );\n }\n return uplink;\n }\n\n public async updateManifest(\n manifest: Manifest | StarManifestBody | OwnerManifestBody,\n options: UpdateManifestOptions\n ): Promise<string | undefined> {\n debug('update manifest %o for user %o', manifest._id, options.requestOptions.username);\n if (isDeprecatedManifest(manifest as Manifest)) {\n // if the manifest is deprecated, we need to update the package.json\n await this.deprecate(manifest as Manifest, {\n ...options,\n });\n } else if (\n isPublishablePackage(manifest as Manifest) === false &&\n validatioUtils.isObject((manifest as StarManifestBody).users)\n ) {\n // if user request to apply a star to the manifest\n await this.star(manifest as StarManifestBody, {\n ...options,\n });\n return API_MESSAGE.PKG_CHANGED;\n } else if (\n isPublishablePackage(manifest as Manifest) === false &&\n Array.isArray((manifest as OwnerManifestBody).maintainers)\n ) {\n // if user request to change owners of package\n await this.changeOwners(manifest as OwnerManifestBody, {\n ...options,\n });\n return API_MESSAGE.PKG_CHANGED;\n } else if (validatioUtils.validatePublishSingleVersion(manifest)) {\n // if continue, the version to be published does not exist\n // we create a new package\n const [mergedManifest, version, message] = await this.publishANewVersion(\n manifest as Manifest,\n {\n ...options,\n }\n );\n // send notification of publication (notification step, non transactional)\n try {\n const { name } = mergedManifest;\n await this.notify(mergedManifest, `${name}@${version}`);\n this.logger.info({ name, version }, 'notify for @{name}@@{version} has been sent');\n } catch (error: any) {\n this.logger.error({ error: error.message }, 'notify batch service has failed: @{error}');\n }\n return message;\n } else {\n debug('invalid body format');\n this.logger.warn(\n { packageName: options.name },\n `wrong package format on publish a package @{packageName}`\n );\n throw errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL);\n }\n }\n\n private async deprecate(manifest: Manifest, options: UpdateManifestOptions): Promise<void> {\n const { name } = manifest;\n debug('deprecating %s', name);\n return this.changePackage(name, manifest, options.revision as string);\n }\n\n private async star(manifest: StarManifestBody, options: UpdateManifestOptions): Promise<string> {\n const { users } = manifest;\n const { requestOptions, name } = options;\n debug('star %s', name);\n const { username } = requestOptions;\n if (!username) {\n throw errorUtils.getBadRequest('update users only allowed to logged users');\n }\n\n const localPackage = await this.getPackageManifest({\n name,\n requestOptions,\n uplinksLook: false,\n });\n // backward compatible in case users are not in the storage.\n const localStarUsers = localPackage.users || {};\n // if trying to add a star\n const userIsAddingStar = Object.keys(users as PackageUsers).includes(username);\n if (!isExecutingStarCommand(localPackage?.users as PackageUsers, username, userIsAddingStar)) {\n return API_MESSAGE.PKG_CHANGED;\n }\n\n const newUsers = userIsAddingStar\n ? {\n ...localStarUsers,\n [username]: true,\n }\n : _.reduce(\n localStarUsers,\n (users, value, key) => {\n if (key !== username) {\n users[key] = value;\n }\n return users;\n },\n {}\n );\n\n await this.changePackage(\n name,\n { ...localPackage, users: newUsers },\n options.revision as string\n );\n\n return API_MESSAGE.PKG_CHANGED;\n }\n\n private async changeOwners(\n manifest: OwnerManifestBody,\n options: UpdateManifestOptions\n ): Promise<string> {\n const { maintainers } = manifest;\n const { requestOptions, name } = options;\n debug('change owners of %o', name);\n const { username } = requestOptions;\n if (!username) {\n throw errorUtils.getBadRequest('update owners only allowed for logged in users');\n }\n if (!maintainers || maintainers.length === 0) {\n throw errorUtils.getBadRequest('maintainers field is required and must not be empty');\n }\n\n const localPackage = await this.getPackageManifest({\n name,\n requestOptions,\n uplinksLook: false,\n });\n\n await this.changePackage(\n name,\n { ...localPackage, maintainers: maintainers as Author[] },\n options.revision as string\n );\n\n return API_MESSAGE.PKG_CHANGED;\n }\n\n /**\n * Get local package, on fails return null.\n * Errors are considered package not found.\n * @param name\n * @returns\n */\n private async getPackagelocalByNameNext(name: string): Promise<Manifest | null> {\n try {\n return await this.getPackageLocalMetadata(name);\n } catch (err: any) {\n debug('local package %s not found', name);\n return null;\n }\n }\n\n /**\n * Convert tarball as string into a Buffer and validate the length.\n * @param data the tarball data as string\n * @returns\n */\n private getBufferManifest(data: string): Buffer {\n const buffer = Buffer.from(data, 'base64');\n if (buffer.length === 0) {\n throw errorUtils.getBadData('refusing to accept zero-length file');\n }\n return buffer;\n }\n\n /**\n * Verify if the package exists in the local storage\n * (the package refers to the package.json), directory would return false.\n * @param pkgName package name\n * @returns boolean\n */\n private async hasPackage(pkgName: string): Promise<boolean> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(pkgName);\n if (typeof storage === 'undefined') {\n throw errorUtils.getNotFound();\n }\n const hasPackage = await storage.hasPackage();\n debug('has package %o for %o', pkgName, hasPackage);\n return hasPackage;\n }\n\n /**\n * Create a new package.\n * This situation happens only of the package does not exist on the cache.\n *\n * @param body package metadata\n * @param options\n * @returns\n */\n private async publishANewVersion(\n body: Manifest,\n options: PublishOptions\n ): Promise<[Manifest, string, string]> {\n const { name } = options;\n const username = options.requestOptions.username;\n debug('publishing a new package for %o as %o', name, username);\n let successResponseMessage;\n const manifest: Manifest = { ...validatioUtils.normalizeMetadata(body, name) };\n const { _attachments, versions } = manifest;\n\n // validation step, if _attachments is not an object throw error\n // _attachments is need it for holding the tarball buffer in the local storage as file\n // versions is need it for holding the version in the local storage as file\n // _attachments and validation are required otherwise cannot continue.\n if (isEmpty(_attachments)) {\n throw errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL);\n }\n\n // get the unique version available\n const [versionToPublish] = Object.keys(versions);\n\n // at this point document is either created or existed before\n const [firstAttachmentKey] = Object.keys(_attachments);\n const buffer = this.getBufferManifest(body._attachments[firstAttachmentKey].data as string);\n\n try {\n // we check if package exist already locally\n const localManifest = await this.getPackagelocalByNameNext(name);\n // if continue, the version to be published does not exist\n if (localManifest?.versions[versionToPublish] != null) {\n debug('%s version %s already exists (locally)', name, versionToPublish);\n throw errorUtils.getConflict();\n }\n const uplinksLook = this.config?.publish?.allow_offline === false;\n // if execution get here, package does not exist locally, we search upstream\n const remoteManifest = await this.checkPackageRemote(name, uplinksLook);\n if (remoteManifest?.versions[versionToPublish] != null) {\n debug('%s version %s already exists (upstream)', name, versionToPublish);\n throw errorUtils.getConflict();\n }\n\n const hasPackageInStorage = await this.hasPackage(name);\n if (!hasPackageInStorage) {\n await this.createNewLocalCachePackage(name, username);\n successResponseMessage = API_MESSAGE.PKG_CREATED;\n } else {\n await this.checkAllowedToChangePackage(localManifest as Manifest, username);\n successResponseMessage = API_MESSAGE.PKG_CHANGED;\n }\n } catch (err: any) {\n debug('error on change or update a package with %o', err.message);\n this.logger.error({ err: err.message }, 'error on publish new version: @{err}');\n throw err;\n }\n\n // 1. after tarball has been successfully uploaded, we update the version\n try {\n const tarballStats = await this.getTarballStats(versions[versionToPublish], buffer);\n // Older package managers like npm6 do not send readme content as part of version but include it on root level\n if (_.isEmpty(versions[versionToPublish].readme)) {\n versions[versionToPublish].readme =\n _.isNil(manifest.readme) === false ? String(manifest.readme) : '';\n }\n // addVersion will move the readme from the the published version to the root level\n await this.addVersion(name, versionToPublish, versions[versionToPublish], null, tarballStats);\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'updated version has failed: @{err}');\n debug('error on create a version for %o with error %o', name, err.message);\n throw err;\n }\n\n // 2. update and merge tags\n let mergedManifest;\n try {\n // note: I could merge this with addVersion()\n // 1. add version\n // 2. merge versions\n // 3. upload tarball\n // 4. update once to the storage (easy peasy)\n mergedManifest = await this.mergeTagsNext(name, manifest[DIST_TAGS]);\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'merge version has failed: @{err}');\n debug('error on create a version for %o with error %o', name, err.message);\n // TODO: undo if this fails\n // 1. remove updated version\n throw err;\n }\n\n // 3. upload the tarball to the storage\n try {\n const readable = Readable.from(buffer);\n await this.uploadTarball(name, basename(firstAttachmentKey), readable, {\n signal: options.signal,\n });\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'upload tarball has failed: @{err}');\n // TODO: undo if this fails\n // 1. remove updated version\n // 2. remove new dist tags\n throw err;\n }\n\n this.logger.info(\n { name, version: versionToPublish },\n 'package @{name}@@{version} has been published'\n );\n\n return [mergedManifest, versionToPublish, successResponseMessage];\n }\n\n // TODO: pending implementation\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async notify(_manifest: Manifest, _message: string): Promise<void> {\n return;\n }\n\n private getProxyList() {\n const uplinksList = Object.keys(this.uplinks);\n\n return uplinksList;\n }\n\n /**\n * Wrap uploadTarballAsStream into a promise.\n * @param name package name\n * @param fileName tarball name\n * @param contentReadable content as readable stream\n * @param options\n * @returns\n */\n public uploadTarball(\n name: string,\n fileName: string,\n contentReadable: Readable,\n { signal }\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n this.uploadTarballAsStream(name, fileName, {\n signal,\n })\n .then((stream) => {\n stream.on('error', (err) => {\n debug(\n 'error on stream a tarball %o for %o with error %o',\n 'foo.tar.gz',\n name,\n err.message\n );\n reject(err);\n });\n stream.on('success', () => {\n this.logger.debug(\n { fileName, name },\n 'file @{fileName} for package @{name} has been successfully uploaded'\n );\n resolve();\n });\n return stream;\n })\n .then((stream) => {\n pipeline(contentReadable, stream, { signal })\n .then(() => {\n debug('success pipe upload tarball');\n })\n .catch(reject);\n });\n });\n }\n\n private async uploadTarballAsStream(\n pkgName: string,\n filename: string,\n { signal }\n ): Promise<PassThrough> {\n debug(`add a tarball for %o`, pkgName);\n assert(validatioUtils.validateName(filename));\n\n const shaOneHash = createTarballHash();\n const transformHash = new Transform({\n transform(chunk: any, _encoding: string, callback: any): void {\n // measure the length for validation reasons\n shaOneHash.update(chunk);\n callback(null, chunk);\n },\n });\n const uploadStream = new PassThrough();\n const storage = this.getPrivatePackageStorage(pkgName);\n\n // FUTURE: this validation could happen even before\n if (pkgName === PROTO_NAME) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getForbidden());\n });\n return uploadStream;\n }\n\n // FIXME: this condition will never met, storage is always defined\n if (!storage) {\n process.nextTick((): void => {\n uploadStream.emit('error', \"can't upload this package storage is missing\");\n });\n return uploadStream;\n }\n\n const fileDoesExist = await storage.hasTarball(filename);\n if (fileDoesExist) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getConflict());\n });\n } else {\n const localStorageWriteStream = await storage.writeTarball(filename, { signal });\n\n localStorageWriteStream.on('open', async () => {\n await pipeline(uploadStream, transformHash, localStorageWriteStream, { signal });\n });\n\n // once the file descriptor has been closed\n localStorageWriteStream.on('close', async () => {\n try {\n debug('uploaded tarball %o for %o', filename, pkgName);\n // update the package metadata\n await this.updatePackage(pkgName, async (data: Manifest): Promise<Manifest> => {\n const newData: Manifest = { ...data };\n debug('added _attachment for %o', pkgName);\n newData._attachments[filename] = {\n // TODO: add integrity hash here\n shasum: shaOneHash.digest('hex'),\n };\n\n return newData;\n });\n debug('emit success for %o', pkgName);\n uploadStream.emit('success');\n } catch (err: any) {\n // FUTURE: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n debug(\n 'something has failed on upload tarball %o for %o : %s',\n filename,\n pkgName,\n err.message\n );\n uploadStream.emit('error', err);\n }\n });\n\n // something went wrong writing into the local storage\n localStorageWriteStream.on('error', async (err: any) => {\n uploadStream.emit('error', err);\n });\n }\n\n return uploadStream;\n }\n\n /**\n * Add a new version to a package.\n * @param name package name\n * @param version version\n * @param metadata version metadata\n * @param tag tag of the version\n */\n private async addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n tarballStats: TarballDetails\n ): Promise<void> {\n debug(`add version %s package for %s`, version, name);\n await this.updatePackage(name, async (data: Manifest): Promise<Manifest> => {\n // keep only one readme per package\n data.readme = metadata.readme;\n debug('%s readme mutated', name);\n // TODO: lodash remove\n metadata = cleanUpReadme(metadata);\n metadata.contributors = normalizeContributors(metadata.contributors as Author[]);\n debug('%s contributors normalized', name);\n\n // Copy current owners to version\n metadata.maintainers = data.maintainers;\n\n // Update tarball stats\n if (metadata.dist) {\n metadata.dist.fileCount = tarballStats.fileCount;\n metadata.dist.unpackedSize = tarballStats.unpackedSize;\n }\n\n // if uploaded tarball has a different shasum, it's very likely that we\n // have some kind of error\n if (validatioUtils.isObject(metadata.dist) && _.isString(metadata.dist.tarball)) {\n const tarball = extractTarballFromUrl(metadata.dist.tarball);\n if (validatioUtils.isObject(data._attachments[tarball])) {\n if (\n _.isNil(data._attachments[tarball].shasum) === false &&\n _.isNil(metadata.dist.shasum) === false\n ) {\n if (data._attachments[tarball].shasum != metadata.dist.shasum) {\n const errorMessage =\n `shasum error, ` +\n `${data._attachments[tarball].shasum} != ${metadata.dist.shasum}`;\n throw errorUtils.getBadRequest(errorMessage);\n }\n }\n data._attachments[tarball].version = version;\n }\n\n // if the time field doesn't exist, we create it, some old storage\n // might not have it\n // https://github.com/verdaccio/verdaccio/issues/740\n if (_.isNil(data.time)) {\n this.logger.warn(\n { name },\n 'time field could not be found, it has been recreated for @{name}'\n );\n data.time = {};\n }\n\n // populate the time field with the date of the version\n const currentDate = new Date().toISOString();\n data.time.modified = currentDate;\n if (!data.time?.created) {\n data.time.created = currentDate;\n }\n\n if (typeof data.time[version] === 'string') {\n // this should not h appen, but we keep this check to avoid or easy bug report\n this.logger.warn(\n { name, version },\n 'the time for the version @{version} already exists, it has been overwritten for package @{name}'\n );\n }\n data.time[version] = currentDate;\n debug('time added for %s version %s', name, version);\n }\n\n data.versions[version] = metadata;\n // TODO: review this method, it's a bit ugly\n tagVersion(data, version, tag);\n\n try {\n debug('%s add on database', name);\n await this.localStorage.getStoragePlugin().add(name);\n this.logger.debug({ name, version }, 'version @{version} added to database for @{name}');\n } catch (err: any) {\n throw errorUtils.getBadData(err.message);\n }\n return data;\n });\n }\n\n /**\n * Create an empty new local cache package without versions.\n * @param name name of the package\n * @returns\n */\n private async createNewLocalCachePackage(\n name: string,\n username: string | undefined\n ): Promise<void> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n\n if (!storage) {\n debug(`storage is missing for %o package cannot be added`, name);\n throw errorUtils.getNotFound('this package cannot be added');\n }\n\n const currentTime = new Date().toISOString();\n const packageData: Manifest = {\n ...generatePackageTemplate(name),\n time: {\n created: currentTime,\n modified: currentTime,\n },\n };\n\n // Set initial package owner\n // TODO: Add email of user\n packageData.maintainers =\n username && username.length > 0\n ? [{ name: username, email: '' }]\n : [{ name: DEFAULT_USER, email: '' }];\n\n try {\n await storage.createPackage(name, packageData);\n this.logger.info({ name }, 'created new package @{name}');\n return;\n } catch (err: any) {\n if (\n _.isNull(err) === false &&\n (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)\n ) {\n debug(`error on creating a package for %o with error %o`, name, err.message);\n throw errorUtils.getConflict();\n }\n return;\n }\n }\n\n /**\n *\n * @param name package name\n * @param uplinksLook\n * @returns\n */\n private async checkPackageRemote(name: string, uplinksLook: boolean): Promise<Manifest | null> {\n try {\n // we provide a null manifest, thus the manifest returned will be the remote one\n const [remoteManifest, upLinksErrors] = await this.syncUplinksMetadata(name, null, {\n uplinksLook,\n });\n\n // checking package exist already\n if (isNil(remoteManifest) === false) {\n throw 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 (upLinksErrors) {\n return null;\n }\n\n throw errorUtils.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE_PUBLISH);\n }\n }\n }\n return remoteManifest;\n } catch (err: any) {\n if (err && err.status !== HTTP_STATUS.NOT_FOUND) {\n throw err;\n }\n return null;\n }\n }\n\n private setDefaultRevision(json: Manifest): Manifest {\n // calculate revision from couch db\n if (_.isString(json._rev) === false) {\n json._rev = STORAGE.DEFAULT_REVISION;\n }\n\n // this is intended in debug mode we do not want modify the store revision\n if (_.isNil(this.config._debug)) {\n const prev = json._rev;\n json._rev = generateRevision(json._rev);\n debug('revision metadata for %s updated from %s to %s', json.name, prev, json._rev);\n }\n\n return json;\n }\n\n private async writePackage(name: string, json: Manifest): Promise<void> {\n const storage: any = this.getPrivatePackageStorage(name);\n if (_.isNil(storage)) {\n // TODO: replace here 500 error\n throw errorUtils.getBadData();\n }\n await storage.savePackage(name, this.setDefaultRevision(json));\n }\n\n /**\n * @param {*} name package name\n * @param {*} updateHandler function(package, cb) - update function\n * @param {*} callback callback that gets invoked after it's all updated\n * @return {Function}\n */\n private async updatePackage(\n name: string,\n updateHandler: (manifest: Manifest) => Promise<Manifest>\n ): Promise<Manifest> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n\n if (!storage) {\n throw errorUtils.getNotFound();\n }\n\n // we update the package on the local storage\n const updatedManifest: Manifest = await storage.updatePackage(name, updateHandler);\n // after correctly updated write to the storage\n try {\n await this.writePackage(name, normalizePackage(updatedManifest));\n return updatedManifest;\n } catch (err: any) {\n if (err.code === resourceNotAvailable) {\n throw errorUtils.getInternalError('resource temporarily unavailable');\n } else if (err.code === noSuchFile) {\n throw errorUtils.getNotFound();\n } else {\n throw err;\n }\n }\n }\n\n /**\n *\n * @protected\n * @param {IGetPackageOptionsNext} options\n * @return {*} {Promise<[Manifest, any[]]>}\n * @memberof AbstractStorage\n */\n private async getPackageNext(options: IGetPackageOptionsNext): Promise<[Manifest, any[]]> {\n const { name } = options;\n debug('get package for %o', name);\n let data: Manifest | null = null;\n\n try {\n data = await this.getPackageLocalMetadata(name);\n } catch (err: any) {\n // if error code is higher than 500 stop here\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n throw err;\n }\n }\n\n // if we can't get the local metadata, we try to get the remote metadata\n // if we do to have local metadata, we try to update it with the upstream registry\n debug('sync uplinks for %o', name);\n const [remoteManifest, upLinksErrors] = await this.syncUplinksMetadata(name, data, {\n uplinksLook: options.uplinksLook,\n retry: options.retry,\n remoteAddress: options.requestOptions.remoteAddress,\n // etag??\n });\n\n // if either local data and upstream data are empty, we throw an error\n if (!remoteManifest && _.isNull(data)) {\n throw errorUtils.getNotFound(`${API_ERROR.NOT_PACKAGE_UPLINK}: ${name}`);\n // if the remote manifest is empty, we return local data\n } else if (!remoteManifest && !_.isNull(data)) {\n // no data on uplinks\n return [data as Manifest, upLinksErrors];\n }\n\n // if we have local data, we try to update it with the upstream registry\n const normalizedPkg = Object.assign({}, remoteManifest, {\n // FIXME: clean up mutation within cleanUpLinksRef method\n ...normalizeDistTags(cleanUpLinksRef(remoteManifest as Manifest, options.keepUpLinkData)),\n _attachments: {},\n });\n\n debug('no sync uplinks errors %o for %s', upLinksErrors?.length, name);\n return [normalizedPkg, upLinksErrors];\n }\n\n /**\n * Function fetches package metadata from uplinks and synchronizes it with local data\n if package is available locally, it MUST be provided in pkginfo.\n\n Using this example:\n\n \"jquery\":\n access: $all\n publish: $authenticated\n unpublish: $authenticated\n # two uplinks setup\n proxy: ver npmjs\n # one uplink setup\n proxy: npmjs\n\n A package requires uplinks syncronization if enables the proxy section, uplinks\n can be more than one, the more are the most slow request will take, the request\n are made in serial and if 1st call fails, the second will be triggered, otherwise\n the 1st will reply and others will be discarded. The order is important.\n\n Errors on upkinks are considered are, time outs, connection fails and http status 304,\n in that case the request returns empty body and we want ask next on the list if has fresh\n updates.\n */\n public async syncUplinksMetadata(\n name: string,\n localManifest: Manifest | null,\n options: Partial<ISyncUplinksOptions> = {}\n ): Promise<[Manifest | null, any]> {\n let found = localManifest !== null;\n let syncManifest: Manifest | null = null;\n const upLinks: string[] = [];\n const hasToLookIntoUplinks = _.isNil(options.uplinksLook) || options.uplinksLook;\n debug('is sync uplink enabled %o', hasToLookIntoUplinks);\n\n for (const uplink in this.uplinks) {\n if (hasProxyTo(name, uplink, this.config.packages) && hasToLookIntoUplinks) {\n debug('sync uplink %o', uplink);\n upLinks.push(uplink);\n }\n }\n\n // if none uplink match we return the local manifest\n if (upLinks.length === 0) {\n debug('no uplinks found for %o upstream update aborted', name);\n return [localManifest, []];\n }\n\n const uplinksErrors: any[] = [];\n // we resolve uplinks async in series, first come first serve\n for (const uplink of upLinks) {\n try {\n const tempManifest = _.isNil(localManifest)\n ? generatePackageTemplate(name)\n : { ...localManifest };\n syncManifest = await this.mergeCacheRemoteMetadata(\n this.uplinks[uplink],\n tempManifest,\n options\n );\n debug('syncing on uplink %o', syncManifest.name);\n if (_.isNil(syncManifest) === false) {\n found = true;\n break;\n }\n } catch (err: any) {\n debug('error captured on uplink %o', err.message);\n uplinksErrors.push(err);\n // enforce use next uplink on the list\n continue;\n }\n }\n\n if (found && syncManifest !== null) {\n // updates the local cache manifest with fresh data\n let updatedCacheManifest = await this.updateVersionsNext(name, syncManifest);\n // plugin filter applied to the manifest\n const [filteredManifest, filtersErrors] = await this.applyFilters(updatedCacheManifest);\n return [\n { ...updatedCacheManifest, ...filteredManifest },\n [...uplinksErrors, ...filtersErrors],\n ];\n } else if (found && _.isNil(localManifest) === false) {\n return [localManifest, uplinksErrors];\n } else {\n // if is not found, calculate the right error to return\n debug('uplinks sync failed with %o errors', uplinksErrors.length);\n for (const err of uplinksErrors) {\n const { code } = err;\n if (code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT' || code === 'ECONNRESET') {\n debug('uplinks sync failed with timeout error');\n throw errorUtils.getServiceUnavailable(err.code);\n }\n // we bubble up the 304 special error case\n if (code === HTTP_STATUS.NOT_MODIFIED) {\n debug('uplinks sync failed with 304 error');\n throw err;\n }\n }\n debug('uplinks sync failed with no package found');\n\n throw errorUtils.getNotFound(API_ERROR.NO_PACKAGE);\n }\n }\n\n /**\n * Merge a manifest with a remote manifest.\n *\n * If the uplinks are not available, the local manifest is returned.\n * If the uplinks are available, the local manifest is merged with the remote one.\n *\n *\n * @param uplink uplink instance\n * @param cachedManifest the local cached manifest\n * @param options options\n * @returns Returns a promise that resolves with the merged manifest.\n */\n private async mergeCacheRemoteMetadata(\n uplink: IProxy,\n cachedManifest: Manifest,\n options: Partial<ISyncUplinksOptions>\n ): Promise<Manifest> {\n // we store which uplink is updating the manifest\n const upLinkMeta = cachedManifest._uplinks[uplink.upname];\n let _cacheManifest = { ...cachedManifest };\n\n if (validatioUtils.isObject(upLinkMeta)) {\n const fetched = upLinkMeta.fetched;\n\n // we check the uplink cache is fresh\n if (fetched && Date.now() - fetched < uplink.maxage) {\n return cachedManifest;\n }\n }\n\n const remoteOptions = Object.assign({}, options, {\n etag: upLinkMeta?.etag,\n });\n\n // get the latest metadata from the uplink\n const [remoteManifest, etag] = await uplink.getRemoteMetadata(\n _cacheManifest.name,\n remoteOptions\n );\n\n try {\n _cacheManifest = validatioUtils.normalizeMetadata(_cacheManifest, _cacheManifest.name);\n } catch (err: any) {\n this.logger.error(\n {\n err: err,\n },\n 'package.json validating error @{!err?.message}\\n@{err.stack}'\n );\n throw err;\n }\n // updates the _uplink metadata fields, cache, etc\n _cacheManifest = updateUpLinkMetadata(uplink.upname, _cacheManifest, etag);\n // merge time field cache and remote\n _cacheManifest = mergeUplinkTimeIntoLocalNext(_cacheManifest, remoteManifest);\n // update the _uplinks field in the cache\n _cacheManifest = updateVersionsHiddenUpLinkNext(_cacheManifest, uplink);\n try {\n // merge versions from remote into the cache\n _cacheManifest = mergeVersions(_cacheManifest, remoteManifest);\n return _cacheManifest;\n } catch (err: any) {\n this.logger.error(\n {\n err: err,\n },\n 'package.json merge has failed @{!err?.message}\\n@{err.stack}'\n );\n throw err;\n }\n }\n\n /**\n * Apply filters to manifest.\n * @param manifest\n * @returns\n */\n public async applyFilters(manifest: Manifest): Promise<[Manifest, any]> {\n if (this.filters === null || this.filters.length === 0) {\n return [manifest, []];\n }\n\n let filterPluginErrors: any[] = [];\n let filteredManifest = { ...manifest };\n for (const filter of this.filters) {\n // These filters can assume it's save to modify packageJsonLocal\n // and return it directly for\n // performance (i.e. need not be pure)\n try {\n filteredManifest = await filter.filter_metadata(manifest);\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'filter has failed @{err}');\n filterPluginErrors.push(err);\n }\n }\n return [filteredManifest, filterPluginErrors];\n }\n\n private _createNewPackageNext(name: string): Manifest {\n return normalizePackage(generatePackageTemplate(name));\n }\n\n /**\n * Ensure the dist file remains as the same protocol\n * @param {Object} hash metadata\n * @param {String} upLinkKey registry key\n * @private\n * @deprecated use _updateUplinkToRemoteProtocolNext (???)\n */\n private updateUplinkToRemoteProtocol(hash: DistFile, upLinkKey: string): void {\n // if we got this information from a known registry,\n // use the same protocol for the tarball\n const tarballUrl: any = URL.parse(hash.url);\n const uplinkUrl: any = URL.parse(this.config.uplinks[upLinkKey].url);\n\n if (uplinkUrl.host === tarballUrl.host) {\n tarballUrl.protocol = uplinkUrl.protocol;\n hash.registry = upLinkKey;\n hash.url = URL.format(tarballUrl);\n }\n }\n\n /**\n * Create or read a package.\n *\n * If the package already exists, it will be read.\n * If the package is not found, it will be created.\n * If the error is anything else will throw an error\n *\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private async readCreatePackage(pkgName: string): Promise<Manifest> {\n const storage: any = this.getPrivatePackageStorage(pkgName);\n if (_.isNil(storage)) {\n throw errorUtils.getInternalError('storage could not be found');\n }\n\n try {\n const result: Manifest = await storage.readPackage(pkgName);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n return this._createNewPackageNext(pkgName);\n } else {\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `'error reading' @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n }\n\n /**\n Updates the local cache with the merge from the remote/client manifest.\n\n The steps are the following.\n 1. Get the latest version of the package from the cache.\n 2. If does not exist will return a \n\n @param name\n @param remoteManifest\n @returns return a merged manifest.\n */\n public async updateVersionsNext(name: string, remoteManifest: Manifest): Promise<Manifest> {\n debug(`updating versions for package %o`, name);\n let cacheManifest: Manifest = await this.readCreatePackage(name);\n let change = false;\n // updating readme\n cacheManifest.readme = getLatestReadme(remoteManifest);\n if (remoteManifest.readme !== cacheManifest.readme) {\n debug('manifest readme updated for %o', name);\n change = true;\n }\n\n debug('updating new remote versions');\n for (const versionId in remoteManifest.versions) {\n // if detect a new remote version does not exist cache\n if (_.isNil(cacheManifest.versions[versionId])) {\n debug('new version from upstream %o', versionId);\n let version = remoteManifest.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\n // TODO: readme clean up could be saved in configured eventually\n version = cleanUpReadme(version);\n debug('clean up readme for %o', versionId);\n version.contributors = normalizeContributors(version.contributors as Author[]);\n\n change = true;\n cacheManifest.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const filename = pkgUtils.extractTarballName(version.dist.tarball);\n // store a fast access to the dist file by tarball name\n // it does NOT overwrite any existing records\n if (_.isNil(cacheManifest?._distfiles[filename])) {\n const hash: DistFile = (cacheManifest._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n // store cache metadata this the manifest\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n if (_.isNil(upLink) === false) {\n this.updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n } else {\n debug('no new versions from upstream %s', name);\n }\n }\n\n debug('update dist-tags');\n for (const tag in remoteManifest[DIST_TAGS]) {\n if (\n !cacheManifest[DIST_TAGS][tag] ||\n cacheManifest[DIST_TAGS][tag] !== remoteManifest[DIST_TAGS][tag]\n ) {\n change = true;\n cacheManifest[DIST_TAGS][tag] = remoteManifest[DIST_TAGS][tag];\n }\n }\n\n for (const up in remoteManifest._uplinks) {\n if (Object.prototype.hasOwnProperty.call(remoteManifest._uplinks, up)) {\n const need_change =\n !isObject(cacheManifest._uplinks[up]) ||\n remoteManifest._uplinks[up].etag !== cacheManifest._uplinks[up].etag ||\n remoteManifest._uplinks[up].fetched !== cacheManifest._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n cacheManifest._uplinks[up] = remoteManifest._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in remoteManifest && !_.isEqual(cacheManifest.time, remoteManifest.time)) {\n cacheManifest.time = remoteManifest.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n await this.writePackage(name, cacheManifest);\n return cacheManifest;\n } else {\n return cacheManifest;\n }\n }\n\n private async getTarballStats(version: Version, buffer: Buffer): Promise<TarballDetails> {\n if (\n version.dist == undefined ||\n version.dist?.fileCount == undefined ||\n version.dist?.unpackedSize == undefined\n ) {\n debug('tarball stats not found, calculating');\n return await getTarballDetails(buffer);\n } else {\n debug('tarball stats found');\n return { fileCount: version.dist.fileCount, unpackedSize: version.dist.unpackedSize };\n }\n }\n\n private async checkAllowedToChangePackage(manifest: Manifest, username: string | undefined) {\n // Checks to perform if config \"publish:check_owners\" is true\n debug('check if user %o is an owner and allowed to change package', username);\n // if name of owner is not included in list of maintainers, then throw an error\n if (\n this.config?.publish?.check_owners === true &&\n manifest.maintainers &&\n manifest.maintainers.length > 0 &&\n !manifest.maintainers.some((maintainer) => maintainer.name === username)\n ) {\n this.logger.error({ username }, '@{username} is not a maintainer (package owner)');\n throw Error('only owners are allowed to change package');\n }\n }\n}\n\nexport { Storage };\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,IAAA,GAAAR,sBAAA,CAAAC,OAAA;AAEA,IAAAQ,OAAA,GAAAR,OAAA;AACA,IAAAS,KAAA,GAAAT,OAAA;AAiBA,IAAAU,QAAA,GAAAV,OAAA;AACA,IAAAW,MAAA,GAAAX,OAAA;AASA,IAAAY,OAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,QAAA,GAAAb,OAAA;AAuBA,IAAAc,MAAA,GAAAd,OAAA;AAEA,IAAAe,EAAA,GAAAf,OAAA;AAQA,IAAAgB,UAAA,GAAAhB,OAAA;AAEA,IAAAiB,aAAA,GAAAjB,OAAA;AAaA,IAAAkB,cAAA,GAAAlB,OAAA;AACA,IAAAmB,aAAA,GAAAnB,OAAA;AAA+C,SAAAoB,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAlB,wBAAAkB,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAA9B,uBAAAsB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAI,UAAA,GAAAJ,CAAA,KAAAK,OAAA,EAAAL,CAAA;AAG/C,MAAMmB,KAAK,GAAG,IAAAC,cAAU,EAAC,mBAAmB,CAAC;AAGtC,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG,QAAQ;AAC3B,MAAME,oBAAoB,GAAAD,OAAA,CAAAC,oBAAA,GAAG,QAAQ;AACrC,MAAMC,UAAU,GAAAF,OAAA,CAAAE,UAAA,GAAG,WAAW;AAErC,MAAMC,OAAO,CAAC;EAOLC,WAAWA,CAACC,MAAc,EAAEC,MAAc,EAAE;IACjD,IAAI,CAACD,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,MAAM,GAAGA,MAAM,CAACC,KAAK,CAAC;MAAEC,MAAM,EAAE;IAAU,CAAC,CAAC;IACjD,IAAI,CAACC,OAAO,GAAG,IAAAC,mBAAY,EAACL,MAAM,EAAE,IAAI,CAACC,MAAM,CAAC;IAChD,IAAI,CAACK,aAAa,GAAG,IAAIC,eAAM,CAACP,MAAM,EAAE,IAAI,CAACC,MAAM,CAAC;IACpD,IAAI,CAACO,OAAO,GAAG,IAAI;IACnB;IACA,IAAI,CAACC,YAAY,GAAG,IAAI;IACxBjB,KAAK,CAAC,sBAAsB,EAAER,MAAM,CAAC0B,IAAI,CAAC,IAAI,CAACN,OAAO,CAAC,CAAC;EAC1D;EAEA,OAAOO,kBAAkB,GAAG,qCAAqC;;EAEjE;AACF;AACA;AACA;AACA;EACE,MAAaC,aAAaA,CAACC,IAAY,EAAEC,QAAkB,EAAEC,QAAgB,EAAiB;IAC5FvB,KAAK,CAAC,oDAAoD,EAAEqB,IAAI,EAAEE,QAAQ,CAAC;IAC3EvB,KAAK,CAAC,yCAAyC,EAAEqB,IAAI,EAAEE,QAAQ,CAAC;IAChE,IACE,CAACC,oBAAc,CAACC,QAAQ,CAACH,QAAQ,CAACI,QAAQ,CAAC,IAC3C,CAACF,oBAAc,CAACC,QAAQ,CAACH,QAAQ,CAACK,eAAS,CAAC,CAAC,EAC7C;MACA3B,KAAK,CAAC,iCAAiC,EAAEqB,IAAI,CAAC;MAC9C,MAAMO,gBAAU,CAACC,UAAU,CAAC,CAAC;IAC/B;IAEA7B,KAAK,CAAC,0CAA0C,EAAEqB,IAAI,CAAC;IACvD,MAAM,IAAI,CAACS,aAAa,CAACT,IAAI,EAAE,MAAOU,SAAmB,IAAwB;MAC/E;MACA,KAAK,MAAMC,OAAO,IAAID,SAAS,CAACL,QAAQ,EAAE;QACxC,MAAMO,eAAe,GAAGX,QAAQ,CAACI,QAAQ,CAACM,OAAO,CAAC;QAClD,IAAIE,eAAC,CAACC,KAAK,CAACF,eAAe,CAAC,EAAE;UAC5B,IAAI,CAACxB,MAAM,CAAC2B,IAAI,CAAC;YAAEf,IAAI,EAAEA,IAAI;YAAEW,OAAO,EAAEA;UAAQ,CAAC,EAAE,iCAAiC,CAAC;;UAErF;UACA,OAAOD,SAAS,CAACL,QAAQ,CAACM,OAAO,CAAC;UAClC,OAAOD,SAAS,CAACM,IAAI,CAAEL,OAAO,CAAC;UAE/B,KAAK,MAAMM,IAAI,IAAIP,SAAS,CAACQ,YAAY,EAAE;YACzC,IAAIR,SAAS,CAACQ,YAAY,CAACD,IAAI,CAAC,CAACN,OAAO,KAAKA,OAAO,EAAE;cACpD,OAAOD,SAAS,CAACQ,YAAY,CAACD,IAAI,CAAC,CAACN,OAAO;YAC7C;UACF;QACF,CAAC,MAAM,IAAIxC,MAAM,CAACgD,SAAS,CAAC5C,cAAc,CAACC,IAAI,CAACoC,eAAe,EAAE,YAAY,CAAC,EAAE;UAC9E,MAAMQ,kBAAkB,GAAGR,eAAe,CAACS,UAAU;UACrD,IAAID,kBAAkB,IAAIV,SAAS,CAACL,QAAQ,CAACM,OAAO,CAAC,CAACU,UAAU,EAAE;YAChE,IAAI,CAACD,kBAAkB,EAAE;cACvB,IAAI,CAAChC,MAAM,CAAC2B,IAAI,CACd;gBAAEf,IAAI,EAAEA,IAAI;gBAAEW,OAAO,EAAEA;cAAQ,CAAC,EAChC,kCACF,CAAC;cACD,OAAOD,SAAS,CAACL,QAAQ,CAACM,OAAO,CAAC,CAACU,UAAU;YAC/C,CAAC,MAAM;cACL,IAAI,CAACjC,MAAM,CAAC2B,IAAI,CAAC;gBAAEf,IAAI,EAAEA,IAAI;gBAAEW,OAAO,EAAEA;cAAQ,CAAC,EAAE,gCAAgC,CAAC;cACpFD,SAAS,CAACL,QAAQ,CAACM,OAAO,CAAC,CAACU,UAAU,GAAGD,kBAAkB;YAC7D;YACAV,SAAS,CAACM,IAAI,CAAEM,QAAQ,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;UACrD;QACF;MACF;MAEAd,SAAS,CAACe,WAAK,CAAC,GAAGxB,QAAQ,CAACwB,WAAK,CAAC;MAClCf,SAAS,CAACJ,eAAS,CAAC,GAAGL,QAAQ,CAACK,eAAS,CAAC;MAC1CI,SAAS,CAACgB,iBAAW,CAAC,GAAGzB,QAAQ,CAACyB,iBAAW,CAAC;MAC9C,OAAOhB,SAAS;IAClB,CAAC,CAAC;EACJ;EAEA,MAAaiB,aAAaA,CAAC3B,IAAY,EAAEE,QAAgB,EAAE0B,QAAgB,EAAiB;IAC1FjD,KAAK,CAAC,mBAAmB,EAAEqB,IAAI,CAAC;IAChC,MAAM,IAAI,CAAC6B,uBAAuB,CAAC7B,IAAI,EAAEE,QAAQ,EAAE0B,QAAQ,CAAC;EAC9D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAaE,aAAaA,CACxB9B,IAAY,EACZ+B,QAAgB;EAChB;EACAC,SAAiB,EACjBJ,QAAgB,EACG;IACnBjD,KAAK,CAAC,0BAA0B,EAAEoD,QAAQ,EAAE/B,IAAI,CAAC;IACjD,IAAAiC,eAAM,EAAC9B,oBAAc,CAAC+B,YAAY,CAACH,QAAQ,CAAC,CAAC;IAC7C,MAAMI,OAAmC,GAAG,IAAI,CAACC,wBAAwB,CAACpC,IAAI,CAAC;IAC/E,IAAI,CAACmC,OAAO,EAAE;MACZxD,KAAK,CAAC,oCAAoC,CAAC;MAC3C,IAAI,CAACS,MAAM,CAACiD,KAAK,CAAC,2CAA2C,CAAC;MAC9D,MAAM9B,gBAAU,CAAC+B,gBAAgB,CAACC,eAAS,CAACC,qBAAqB,CAAC;IACpE;IAEA,IAAI;MACF,MAAMC,aAAa,GAAG,MAAMN,OAAO,CAACO,WAAW,CAAC1C,IAAI,CAAC;MACrD,IAAI,CAACyC,aAAa,CAACvB,YAAY,CAACa,QAAQ,CAAC,EAAE;QACzC,MAAMxB,gBAAU,CAACoC,WAAW,CAAC,wBAAwB,CAAC;MACxD;;MAEA;MACA,MAAM,IAAI,CAACC,2BAA2B,CAACH,aAAa,EAAEb,QAAQ,CAAC;IACjE,CAAC,CAAC,OAAOiB,GAAQ,EAAE;MACjB,IAAIA,GAAG,CAACC,IAAI,KAAKjE,UAAU,EAAE;QAC3B,MAAM0B,gBAAU,CAACoC,WAAW,CAAC,CAAC;MAChC;MACA,MAAME,GAAG;IACX;IAEA,MAAME,QAAQ,GAAG,MAAM,IAAI,CAACtC,aAAa,CAACT,IAAI,EAAE,MAAOgD,IAAc,IAAwB;MAC3F,IAAIC,OAAiB,GAAG;QAAE,GAAGD;MAAK,CAAC;MACnC,OAAOA,IAAI,CAAC9B,YAAY,CAACa,QAAQ,CAAC;MAClC,OAAOkB,OAAO;IAChB,CAAC,CAAC;IAEF,IAAI;MACF,MAAMd,OAAmC,GAAG,IAAI,CAACC,wBAAwB,CAACpC,IAAI,CAAC;MAC/E,IAAI,CAACmC,OAAO,EAAE;QACZxD,KAAK,CAAC,oCAAoC,CAAC;QAC3C,IAAI,CAACS,MAAM,CAACiD,KAAK,CAAC,2CAA2C,CAAC;QAC9D,MAAM9B,gBAAU,CAAC+B,gBAAgB,CAACC,eAAS,CAACC,qBAAqB,CAAC;MACpE;MAEA,MAAML,OAAO,CAACe,aAAa,CAACnB,QAAQ,CAAC;MACrCpD,KAAK,CAAC,oBAAoB,EAAEoD,QAAQ,CAAC;IACvC,CAAC,CAAC,OAAOc,GAAQ,EAAE;MACjB,IAAI,CAACzD,MAAM,CAACiD,KAAK,CAAC;QAAEQ;MAAI,CAAC,EAAE,gCAAgC,CAAC;MAC5D,MAAMA,GAAG;IACX;IACA,OAAOE,QAAQ;EACjB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAaI,MAAMA,CAACC,OAA0B,EAA4C;IACxFzE,KAAK,CAAC,0BAA0B,CAAC;IACjC,MAAM0E,aAAa,GAAG,MAAM,IAAI,CAACC,iBAAiB,CAACF,OAAO,CAACG,KAAK,CAAC;IACjE5E,KAAK,CAAC,mCAAmC,EAAE0E,aAAa,CAACG,MAAM,CAAC;IAChE,MAAMC,cAAc,GAAG,MAAM,IAAI,CAAChE,aAAa,CAAC0D,MAAM,CAACC,OAAO,CAAC;IAC/DzE,KAAK,CAAC,oCAAoC,EAAE8E,cAAc,CAACD,MAAM,CAAC;IAClE,MAAME,YAAY,GAAG,CAAC,GAAGL,aAAa,EAAE,GAAGI,cAAc,CAAC;IAC1D,MAAME,aAAa,GAAG,IAAAC,kCAAmB,EAACF,YAAY,CAAC;IACvD/E,KAAK,CAAC,mBAAmB,EAAEgF,aAAa,CAACH,MAAM,CAAC;IAChD,OAAOG,aAAa;EACtB;EAEA,MAAcE,sBAAsBA,CAAC7D,IAAY,EAAE+B,QAAgB,EAAE;IAAE+B;EAAO,CAAC,EAAE;IAAA,IAAAC,eAAA,EAAAC,gBAAA;IAC/E,IAAIC,cAA+B,GAAG,IAAI;IAC1C,IAAI;MACFA,cAAc,GAAG,MAAM,IAAI,CAACC,uBAAuB,CAAClE,IAAI,CAAC;IAC3D,CAAC,CAAC,OAAO6C,GAAG,EAAE;MACZlE,KAAK,CAAC,wCAAwC,EAAEkE,GAAG,CAAC;IACtD;IACA;IACA,IACE,CAAAkB,eAAA,GAAAE,cAAc,cAAAF,eAAA,eAAdA,eAAA,CAAgBI,UAAU,IAC1B,SAAAH,gBAAA,GAAOC,cAAc,cAAAD,gBAAA,gBAAAA,gBAAA,GAAdA,gBAAA,CAAgBG,UAAU,CAACpC,QAAQ,CAAC,cAAAiC,gBAAA,uBAApCA,gBAAA,CAAsCI,GAAG,MAAK,QAAQ,EAC7D;MAAA,IAAAC,gBAAA;MACA1F,KAAK,CAAC,8BAA8B,GAAA0F,gBAAA,GAAEJ,cAAc,cAAAI,gBAAA,uBAAdA,gBAAA,CAAgBF,UAAU,CAACpC,QAAQ,CAAC,CAACqC,GAAG,CAAC;MAC/E;MACA,MAAME,QAAQ,GAAGL,cAAc,CAACE,UAAU,CAACpC,QAAQ,CAAC;MAEpD,IAAIwC,cAAc,GAAG,CAAC;MACtB,IAAIC,eAAe;MACnB,MAAMC,uBAAuB,GAAG,IAAIC,mBAAW,CAAC,CAAC;MACjD,MAAMC,KAAK,GAAG,IAAI,CAACC,oBAAoB,CAAC5E,IAAI,EAAEsE,QAAQ,CAAC;MACvD,MAAMO,YAAY,GAAGF,KAAK,CAACG,YAAY,CAACR,QAAQ,CAACF,GAAG,EAAE,CAAC,CAAC,CAAC;MAEzDS,YAAY,CAACE,EAAE,CAAC,SAAS,EAAE,YAAY;QACrC,IAAI;UACFpG,KAAK,CAAC,uBAAuB,CAAC;UAC9B,MAAMwD,OAAO,GAAG,IAAI,CAACC,wBAAwB,CAACpC,IAAI,CAAQ;UAC1D,IAAI2E,KAAK,CAACxF,MAAM,CAAC6F,KAAK,KAAK,IAAI,IAAI7C,OAAO,EAAE;YAC1C,MAAM8C,uBAAuB,GAAG,MAAM9C,OAAO,CAAC+C,YAAY,CAACnD,QAAQ,EAAE;cACnE+B;YACF,CAAC,CAAC;YAEF,MAAM,IAAAqB,kBAAQ,EAACN,YAAY,EAAEJ,uBAAuB,EAAEQ,uBAAuB,EAAE;cAC7EnB;YACF,CAAC,CAAC;UACJ,CAAC,MAAM;YACL,MAAM,IAAAqB,kBAAQ,EAACN,YAAY,EAAEJ,uBAAuB,EAAE;cACpDX;YACF,CAAC,CAAC;UACJ;QACF,CAAC,CAAC,OAAOjB,GAAQ,EAAE;UACjBlE,KAAK,CAAC,sDAAsD,EAAEqB,IAAI,CAAC;UACnEyE,uBAAuB,CAACW,IAAI,CAAC,OAAO,EAAEvC,GAAG,CAAC;QAC5C;MACF,CAAC,CAAC;MAEFgC,YAAY,CACTE,EAAE,CAAC,UAAU,EAAE,MAAOM,GAAG,IAAK;QAC7B,IAAIA,GAAG,CAACC,UAAU,KAAKC,iBAAW,CAACC,SAAS,EAAE;UAC5C7G,KAAK,CAAC,4BAA4B,CAAC;UACnC8F,uBAAuB,CAACW,IAAI,CAC1B,OAAO,EACP7E,gBAAU,CAACoC,WAAW,CAACpC,gBAAU,CAACgC,SAAS,CAACkD,eAAe,CAC7D,CAAC;UACD;QACF;QAEA,IACE,EAAEJ,GAAG,CAACC,UAAU,IAAIC,iBAAW,CAACG,EAAE,IAAIL,GAAG,CAACC,UAAU,GAAGC,iBAAW,CAACI,gBAAgB,CAAC,EACpF;UACAhH,KAAK,CAAC,2BAA2B,CAAC;UAClC8F,uBAAuB,CAACW,IAAI,CAC1B,OAAO,EACP7E,gBAAU,CAAC+B,gBAAgB,CAAC,2BAA2B+C,GAAG,CAACC,UAAU,EAAE,CACzE,CAAC;UACD;QACF;QAEA,IAAID,GAAG,CAACO,OAAO,CAACC,iBAAW,CAACC,cAAc,CAAC,EAAE;UAC3CtB,eAAe,GAAGa,GAAG,CAACO,OAAO,CAACC,iBAAW,CAACC,cAAc,CAAC;UACzDnH,KAAK,CAAC,0CAA0C,EAAE6F,eAAe,CAAC;UAClEC,uBAAuB,CAACW,IAAI,CAC1BS,iBAAW,CAACC,cAAc,EAC1BT,GAAG,CAACO,OAAO,CAACC,iBAAW,CAACC,cAAc,CACxC,CAAC;QACH;MACF,CAAC,CAAC,CACDf,EAAE,CAAC,kBAAkB,EAAGgB,QAAQ,IAAK;QACpCxB,cAAc,GAAGwB,QAAQ,CAACC,WAAW;QACrC,IAAI,OAAOxB,eAAe,KAAK,WAAW,IAAIuB,QAAQ,CAACE,KAAK,EAAE;UAC5DzB,eAAe,GAAGuB,QAAQ,CAACE,KAAK;QAClC;MACF,CAAC,CAAC,CACDlB,EAAE,CAAC,KAAK,EAAE,MAAM;QACf,IAAIP,eAAe,IAAID,cAAc,IAAIC,eAAe,EAAE;UACxD7F,KAAK,CAAC,uCAAuC,EAAE4F,cAAc,EAAEC,eAAe,CAAC;UAC/EC,uBAAuB,CAACW,IAAI,CAC1B,OAAO,EACP7E,gBAAU,CAAC+B,gBAAgB,CAACC,eAAS,CAAC2D,gBAAgB,CACxD,CAAC;QACH;QACAvH,KAAK,CAAC,mBAAmB,CAAC;MAC5B,CAAC,CAAC,CACDoG,EAAE,CAAC,OAAO,EAAGlC,GAAG,IAAK;QACpBlE,KAAK,CAAC,wBAAwB,EAAEkE,GAAG,CAAC;QACpC4B,uBAAuB,CAACW,IAAI,CAAC,OAAO,EAAEvC,GAAG,CAAC;MAC5C,CAAC,CAAC;MACJ,OAAO4B,uBAAuB;IAChC,CAAC,MAAM;MACL9F,KAAK,CAAC,8CAA8C,CAAC;MACrD;MACA;MACA,MAAM8F,uBAAuB,GAAG,IAAIC,mBAAW,CAAC,CAAC;MACjD;MACA,MAAM,CAACyB,eAAe,CAAC,GAAG,MAAM,IAAI,CAACC,mBAAmB,CAACpG,IAAI,EAAEiE,cAAc,EAAE;QAC7EoC,WAAW,EAAE;MACf,CAAC,CAAC;MACF,MAAM/B,QAAQ,GAAI6B,eAAe,CAAchC,UAAU,CAACpC,QAAQ,CAAC;MAEnE,IAAIoE,eAAe,KAAK,IAAI,IAAI,CAAC7B,QAAQ,EAAE;QACzC3F,KAAK,CAAC,0BAA0B,CAAC;QACjC,MAAM4B,gBAAU,CAACoC,WAAW,CAACJ,eAAS,CAAC+D,YAAY,CAAC;MACtD;MAEA,MAAM3B,KAAK,GAAG,IAAI,CAACC,oBAAoB,CAAC5E,IAAI,EAAEsE,QAAQ,CAAC;MACvD,MAAMO,YAAY,GAAGF,KAAK,CAACG,YAAY,CAACR,QAAQ,CAACF,GAAG,EAAE,CAAC,CAAC,CAAC;MACzDS,YAAY,CAACE,EAAE,CAAC,UAAU,EAAE,YAAY;QACtC,IAAI;UACF,MAAM5C,OAAO,GAAG,IAAI,CAACC,wBAAwB,CAACpC,IAAI,CAAC;UACnD,IAAI2E,KAAK,CAACxF,MAAM,CAAC6F,KAAK,KAAK,IAAI,IAAI7C,OAAO,EAAE;YAC1CxD,KAAK,CAAC,8BAA8B,CAAC;YACrC,MAAMsG,uBAAuB,GAAG,MAAM9C,OAAO,CAAC+C,YAAY,CAACnD,QAAQ,EAAE;cACnE+B;YACF,CAAC,CAAC;YACF,MAAM,IAAAqB,kBAAQ,EAACN,YAAY,EAAEJ,uBAAuB,EAAEQ,uBAAuB,EAAE;cAC7EnB;YACF,CAAC,CAAC;UACJ,CAAC,MAAM;YACLnF,KAAK,CAAC,+BAA+B,CAAC;YACtC,MAAM,IAAAwG,kBAAQ,EAACN,YAAY,EAAEJ,uBAAuB,EAAE;cAAEX;YAAO,CAAC,CAAC;UACnE;QACF,CAAC,CAAC,OAAOjB,GAAG,EAAE;UACZlE,KAAK,CAAC,sDAAsD,EAAEqB,IAAI,CAAC;UACnEyE,uBAAuB,CAACW,IAAI,CAAC,OAAO,EAAEvC,GAAG,CAAC;QAC5C;MACF,CAAC,CAAC;MACF,OAAO4B,uBAAuB;IAChC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAa8B,UAAUA,CAACvG,IAAY,EAAE+B,QAAgB,EAAE;IAAE+B;EAAO,CAAC,EAAwB;IACxFnF,KAAK,CAAC,wCAAwC,EAAEqB,IAAI,EAAE+B,QAAQ,CAAC;IAC/D;IACA;IACA,IAAIyE,MAAM,GAAG,KAAK;IAClB,MAAMC,kBAAkB,GAAG,IAAI/B,mBAAW,CAAC,CAAC;IAC5C,MAAMgC,WAAW,GAAG,MAAM,IAAI,CAACC,eAAe,CAAC3G,IAAI,EAAE+B,QAAQ,EAAE;MAAE+B;IAAO,CAAC,CAAC;IAC1E4C,WAAW,CAAC3B,EAAE,CAAC,MAAM,EAAE,YAAY;MACjC;MACAyB,MAAM,GAAG,IAAI;MACb,MAAM,IAAArB,kBAAQ,EAACuB,WAAW,EAAED,kBAAkB,EAAE;QAAE3C;MAAO,CAAC,CAAC;IAC7D,CAAC,CAAC;IAEF4C,WAAW,CAAC3B,EAAE,CAAC,OAAO,EAAGlC,GAAQ,IAAK;MACpC;MACA,IAAIA,GAAG,CAACC,IAAI,KAAK8D,qBAAO,CAACC,kBAAkB,IAAIhE,GAAG,CAACC,IAAI,KAAKyC,iBAAW,CAACC,SAAS,EAAE;QACjF,IAAI,CAAC3B,sBAAsB,CAAC7D,IAAI,EAAE+B,QAAQ,EAAE;UAAE+B;QAAO,CAAC,CAAC,CACpDgD,IAAI,CAAEC,YAAY,IAAK;UACtB,IAAA5B,kBAAQ,EAAC4B,YAAY,EAAEN,kBAAkB,EAAE;YAAE3C;UAAO,CAAC,CAAC,CACnDgD,IAAI,CAAC,MAAM;YACVnI,KAAK,CAAC,4DAA4D,EAAEqB,IAAI,EAAE+B,QAAQ,CAAC;UACrF,CAAC,CAAC,CACDiF,KAAK,CAAEnE,GAAG,IAAK;YACd4D,kBAAkB,CAACrB,IAAI,CAAC,OAAO,EAAEvC,GAAG,CAAC;UACvC,CAAC,CAAC;QACN,CAAC,CAAC,CACDmE,KAAK,CAAEnE,GAAG,IAAK;UACd4D,kBAAkB,CAACrB,IAAI,CAAC,OAAO,EAAEvC,GAAG,CAAC;QACvC,CAAC,CAAC;MACN,CAAC,MAAM;QACL,IAAI,CAACzD,MAAM,CAACiD,KAAK,CAAC;UAAEQ,GAAG,EAAEA,GAAG,CAACoE;QAAQ,CAAC,EAAE,4BAA4B,CAAC;QACrER,kBAAkB,CAACrB,IAAI,CAAC,OAAO,EAAEvC,GAAG,CAAC;MACvC;IACF,CAAC,CAAC;IAEF,OAAO4D,kBAAkB;EAC3B;EAEA,MAAaS,mBAAmBA,CAAC9D,OAA+B,EAAoB;IAClF,MAAM+D,YAAY,GAAG/D,OAAO,CAACzC,OAAiB;IAC9C,IAAIE,eAAC,CAACC,KAAK,CAACqG,YAAY,CAAC,EAAE;MACzB,MAAM5G,gBAAU,CAACoC,WAAW,CAAC,GAAGJ,eAAS,CAAC6E,iBAAiB,KAAKD,YAAY,EAAE,CAAC;IACjF;;IAEA;IACA,MAAM,CAACE,iBAAiB,CAAC,GAAG,MAAM,IAAI,CAACC,cAAc,CAAClE,OAAO,CAAC;IAE9D,MAAMzC,OAA4B,GAAG,IAAA4G,yBAAU,EAACF,iBAAiB,CAAChH,QAAQ,EAAE8G,YAAY,CAAC;IAEzFxI,KAAK,CAAC,0CAA0C,EAAEwI,YAAY,EAAExG,OAAO,CAAC;IACxE,IAAI,OAAOA,OAAO,KAAK,WAAW,EAAE;MAClChC,KAAK,CAAC,yBAAyB,EAAEgC,OAAO,CAAC;MACzC,OAAO,IAAA6G,6CAAoC,EACzCH,iBAAiB,CAACrH,IAAI,EACtBW,OAAO,EACPyC,OAAO,CAACqE,cAAc,EACtB,IAAI,CAACtI,MAAM,CAACuI,UACd,CAAC;IACH;;IAEA;IACA;IACA,IAAI7G,eAAC,CAACC,KAAK,CAACuG,iBAAiB,CAAC/G,eAAS,CAAC,CAAC,KAAK,KAAK,EAAE;MACnD,IAAIO,eAAC,CAACC,KAAK,CAACuG,iBAAiB,CAAC/G,eAAS,CAAC,CAAC6G,YAAY,CAAC,CAAC,KAAK,KAAK,EAAE;QACjE;QACA,MAAMQ,oBAA4B,GAAGN,iBAAiB,CAAC/G,eAAS,CAAC,CAAC6G,YAAY,CAAC;QAC/ExI,KAAK,CAAC,2BAA2B,EAAEgJ,oBAAoB,CAAC;QACxD,MAAMC,aAAkC,GAAG,IAAAL,yBAAU,EACnDF,iBAAiB,CAAChH,QAAQ,EAC1BsH,oBACF,CAAC;QACD,IAAI,OAAOC,aAAa,KAAK,WAAW,EAAE;UACxCjJ,KAAK,CAAC,mBAAmB,EAAEiJ,aAAa,CAAC;UACzC,OAAO,IAAAJ,6CAAoC,EACzCH,iBAAiB,CAACrH,IAAI,EACtB4H,aAAa,EACbxE,OAAO,CAACqE,cAAc,EACtB,IAAI,CAACtI,MAAM,CAACuI,UACd,CAAC;QACH;MACF;IACF,CAAC,MAAM;MACL/I,KAAK,CAAC,uBAAuB,CAAC;IAChC;;IAEA;IACAA,KAAK,CAAC,8BAA8B,EAAEwI,YAAY,CAAC;IACnD,MAAM5G,gBAAU,CAACoC,WAAW,CAAC,GAAGJ,eAAS,CAAC6E,iBAAiB,KAAKD,YAAY,EAAE,CAAC;EACjF;EAEA,MAAaU,kBAAkBA,CAACzE,OAA+B,EAAqB;IAClF;IACA,MAAM,CAACL,QAAQ,CAAC,GAAG,MAAM,IAAI,CAACuE,cAAc,CAAClE,OAAO,CAAC;;IAErD;IACA,IAAIA,OAAO,CAAC0E,WAAW,KAAK,IAAI,EAAE;MAChC,IAAI;QACF,MAAM,IAAI,CAAClF,2BAA2B,CAACG,QAAQ,EAAEK,OAAO,CAACqE,cAAc,CAAC7F,QAAQ,CAAC;MACnF,CAAC,CAAC,OAAOS,KAAU,EAAE;QACnB,IAAI,CAACjD,MAAM,CAACiD,KAAK,CAAC;UAAEA,KAAK,EAAEA,KAAK,CAAC4E;QAAQ,CAAC,EAAE,sCAAsC,CAAC;QACnF,MAAM1G,gBAAU,CAACwH,aAAa,CAAC1F,KAAK,CAAC4E,OAAO,CAAC;MAC/C;IACF;IAEA,MAAMI,iBAAiB,GAAG,IAAAW,4CAAmC,EAC3DjF,QAAQ,EACRK,OAAO,CAACqE,cAAc,EACtB,IAAI,CAACtI,MAAM,CAACuI,UACd,CAAC;IAED,OAAOL,iBAAiB;EAC1B;EAEQY,0BAA0BA,CAAClF,QAAkB,EAAuB;IAC1E,MAAMmF,mBAAmB,GAAG/J,MAAM,CAAC0B,IAAI,CAACkD,QAAQ,CAAC1C,QAAQ,CAAC,CAAC8H,MAAM,CAC/D,CAACC,GAAwB,EAAEzH,OAAe,KAAK;MAC7C,MAAM0H,QAAQ,GAAGtF,QAAQ,CAAC1C,QAAQ,CAACM,OAAO,CAAC;MAC3C;MACA;MACA,MAAM2H,oBAAoB,GAAG;QAC3BtI,IAAI,EAAEqI,QAAQ,CAACrI,IAAI;QACnBW,OAAO,EAAE0H,QAAQ,CAAC1H,OAAO;QACzBU,UAAU,EAAEgH,QAAQ,CAAChH,UAAU;QAC/BkH,GAAG,EAAEF,QAAQ,CAACE,GAAG;QACjBC,IAAI,EAAEH,QAAQ,CAACG,IAAI;QACnBC,OAAO,EAAEJ,QAAQ,CAACI,OAAO;QACzBC,OAAO,EAAEL,QAAQ,CAACK,OAAO;QACzBC,WAAW,EAAEN,QAAQ,CAACM,WAAW;QACjCC,YAAY,EAAEP,QAAQ,CAACO,YAAY;QACnCC,eAAe,EAAER,QAAQ,CAACQ,eAAe;QACzCC,gBAAgB,EAAET,QAAQ,CAACS,gBAAgB;QAC3CC,oBAAoB,EAAEV,QAAQ,CAACU,oBAAoB;QACnDC,kBAAkB,EAAEX,QAAQ,CAACW,kBAAkB;QAC/CC,GAAG,EAAEZ,QAAQ,CAACY,GAAG;QACjBC,EAAE,EAAEb,QAAQ,CAACa,EAAE;QACfC,oBAAoB,EAAEd,QAAQ,CAACc,oBAAoB;QACnDC,kBAAkB,EAAEf,QAAQ,CAACe,kBAAkB;QAC/C;QACAC,cAAc,EAAEhB,QAAQ,CAACgB,cAAc;QACvCC,gBAAgB,EAAEjB,QAAQ,CAACiB;MAC7B,CAAC;MACDlB,GAAG,CAACzH,OAAO,CAAC,GAAG2H,oBAAoB;MACnC,OAAOF,GAAG;IACZ,CAAC,EACD,CAAC,CACH,CAAC;IACD,MAAMf,iBAAiB,GAAG;MACxBrH,IAAI,EAAE+C,QAAQ,CAAC,MAAM,CAAC;MACtB,CAACzC,eAAS,GAAGyC,QAAQ,CAACzC,eAAS,CAAC;MAChCD,QAAQ,EAAE6H,mBAAmB;MAC7B5G,QAAQ,EAAEyB,QAAQ,CAAC/B,IAAI,CAACM,QAAQ;MAChC;MACAN,IAAI,EAAE+B,QAAQ,CAAC/B;IACjB,CAAC;IAED,OAAOqG,iBAAiB;EAC1B;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAakC,mBAAmBA,CAC9BnG,OAA+B,EACoB;IACnD;IACA,IAAIvC,eAAC,CAACC,KAAK,CAACsC,OAAO,CAACzC,OAAO,CAAC,KAAK,KAAK,EAAE;MACtC,OAAO,IAAI,CAACuG,mBAAmB,CAAC9D,OAAO,CAAC;IAC1C,CAAC,MAAM;MACL,MAAML,QAAQ,GAAG,MAAM,IAAI,CAAC8E,kBAAkB,CAACzE,OAAO,CAAC;MACvD,IAAIA,OAAO,CAACoG,WAAW,KAAK,IAAI,EAAE;QAChC7K,KAAK,CAAC,sBAAsB,CAAC;QAC7B,OAAO,IAAI,CAACsJ,0BAA0B,CAAClF,QAAQ,CAAC;MAClD;MACA,OAAOA,QAAQ;IACjB;EACF;EAEA,MAAa0G,gBAAgBA,CAAA,EAAuB;IAClD9K,KAAK,CAAC,oBAAoB,CAAC;IAC3B,MAAMwD,OAAO,GAAG,IAAI,CAACvC,YAAY,CAAC8J,gBAAgB,CAAC,CAAC;IACpD,MAAMC,QAAQ,GAAG,MAAMxH,OAAO,CAACpE,GAAG,CAAC,CAAC;IACpC,MAAM6L,QAAmB,GAAG,EAAE;IAC9B,KAAK,MAAMC,GAAG,IAAIF,QAAQ,EAAE;MAC1BhL,KAAK,CAAC,uBAAuB,EAAEkL,GAAG,CAAC;MACnC,MAAM9G,QAAQ,GAAG,MAAM,IAAI,CAACmB,uBAAuB,CAAC2F,GAAG,CAAC;MACxD,MAAMC,MAAM,GAAG/G,QAAQ,CAACzC,eAAS,CAAC,CAACwJ,MAAM;MACzC,IAAIA,MAAM,IAAI/G,QAAQ,CAAC1C,QAAQ,CAACyJ,MAAM,CAAC,EAAE;QACvC,MAAMnJ,OAAgB,GAAGoC,QAAQ,CAAC1C,QAAQ,CAACyJ,MAAM,CAAC;QAClD,MAAMC,QAAQ,GAAGhH,QAAQ,CAAC/B,IAAmB;QAC7C,MAAMA,IAAI,GAAG+I,QAAQ,CAACD,MAAM,CAAC;QAC7B;QACAnJ,OAAO,CAACK,IAAI,GAAGA,IAAI;;QAEnB;QACA;QACAL,OAAO,CAACqJ,KAAK,GAAGjH,QAAQ,CAACiH,KAAK;QAE9BJ,QAAQ,CAACK,IAAI,CAACtJ,OAAO,CAAC;MACxB,CAAC,MAAM;QACL,IAAI,CAACvB,MAAM,CAAC8K,IAAI,CAAC;UAAEC,OAAO,EAAEN;QAAI,CAAC,EAAE,kDAAkD,CAAC;MACxF;IACF;IACA,OAAOD,QAAQ;EACjB;EAEOQ,SAASA,CAACC,KAAY,EAAgB;IAC3C,IAAIxJ,eAAC,CAACyJ,UAAU,CAAC,IAAI,CAAC1K,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACU,SAAS,CAAC,KAAK,KAAK,EAAE;MAC1E,OAAOG,OAAO,CAACC,MAAM,CACnBjK,gBAAU,CAACkK,OAAO,CAAClF,iBAAW,CAACmF,mBAAmB,EAAEC,oBAAc,CAACC,wBAAwB,CAC7F,CAAC;IACH;IAEA,OAAO,IAAI,CAAChL,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACU,SAAS,CAACC,KAAK,CAAC;EAC9D;EAEOQ,WAAWA,CAACC,IAAY,EAAEC,QAAgB,EAAgB;IAC/D,IAAIlK,eAAC,CAACyJ,UAAU,CAAC,IAAI,CAAC1K,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACmB,WAAW,CAAC,KAAK,KAAK,EAAE;MAC5E,OAAON,OAAO,CAACC,MAAM,CACnBjK,gBAAU,CAACkK,OAAO,CAAClF,iBAAW,CAACmF,mBAAmB,EAAEC,oBAAc,CAACC,wBAAwB,CAC7F,CAAC;IACH;IAEA,OAAO,IAAI,CAAChL,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACmB,WAAW,CAACC,IAAI,EAAEC,QAAQ,CAAC;EACzE;EAEOC,UAAUA,CAACC,MAAmB,EAAoB;IACvD,IAAIpK,eAAC,CAACyJ,UAAU,CAAC,IAAI,CAAC1K,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACsB,UAAU,CAAC,KAAK,KAAK,EAAE;MAC3E,OAAOT,OAAO,CAACC,MAAM,CACnBjK,gBAAU,CAACkK,OAAO,CAAClF,iBAAW,CAACmF,mBAAmB,EAAEC,oBAAc,CAACC,wBAAwB,CAC7F,CAAC;IACH;IAEA,OAAO,IAAI,CAAChL,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACsB,UAAU,CAACC,MAAM,CAAC;EAChE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAaC,IAAIA,CAAC/L,MAAc,EAAiB;IAC/C,IAAI,IAAI,CAACS,YAAY,KAAK,IAAI,EAAE;MAC9B,IAAI,CAACA,YAAY,GAAG,IAAIuL,0BAAY,CAAC,IAAI,CAAChM,MAAM,EAAE,IAAI,CAACC,MAAM,CAAC;MAC9D,MAAM,IAAI,CAACQ,YAAY,CAACsL,IAAI,CAAC,CAAC;MAC9BvM,KAAK,CAAC,gCAAgC,CAAC;MACvC,MAAM,IAAI,CAACiB,YAAY,CAACwL,SAAS,CAACjM,MAAM,CAAC;MACzCR,KAAK,CAAC,kCAAkC,CAAC;IAC3C,CAAC,MAAM;MACLA,KAAK,CAAC,sCAAsC,CAAC;IAC/C;IACA,IAAI,CAAC,IAAI,CAACgB,OAAO,EAAE;MAAA,IAAA0L,YAAA;MACjB,IAAI,CAAC1L,OAAO,GAAG,MAAM,IAAA2L,wBAAe,EAClC,IAAI,CAACnM,MAAM,CAACQ,OAAO,EACnB;QACER,MAAM,EAAE,IAAI,CAACA,MAAM;QACnBC,MAAM,EAAE,IAAI,CAACA;MACf,CAAC,EACAmM,MAA0C,IAAK;QAC9C,OAAO,OAAOA,MAAM,CAACC,eAAe,KAAK,WAAW;MACtD,CAAC,GAAAH,YAAA,GACD,IAAI,CAAClM,MAAM,cAAAkM,YAAA,gBAAAA,YAAA,GAAXA,YAAA,CAAaI,cAAc,cAAAJ,YAAA,uBAA3BA,YAAA,CAA6BK,YAAY,EACzCC,qBAAe,CAACC,MAClB,CAAC;MACDjN,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAACgB,OAAO,CAAC6D,MAAM,CAAC;IACpD;IACA;EACF;;EAEA;AACF;AACA;AACA;AACA;EACUpB,wBAAwBA,CAACyJ,OAAe,EAA8B;IAC5ElN,KAAK,CAAC,0BAA0B,EAAEkN,OAAO,CAAC;IAC1C,OAAO,IAAI,CAACjM,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACoC,iBAAiB,CAACD,OAAO,CAAC;EACxE;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAalF,eAAeA,CAC1BkF,OAAe,EACf9J,QAAgB,EAChB;IAAE+B;EAAgC,CAAC,EAChB;IACnB,IAAA7B,eAAM,EAAC9B,oBAAc,CAAC+B,YAAY,CAACH,QAAQ,CAAC,CAAC;IAC7C,MAAMI,OAAmC,GAAG,IAAI,CAACC,wBAAwB,CAACyJ,OAAO,CAAC;IAClF,IAAI,OAAO1J,OAAO,KAAK,WAAW,EAAE;MAClC,OAAO,IAAI,CAAC4J,+BAA+B,CAAC,CAAC;IAC/C;IAEA,OAAO,MAAM5J,OAAO,CAAC6J,WAAW,CAACjK,QAAQ,EAAE;MAAE+B;IAAO,CAAC,CAAC;EACxD;EAEA,MAAaR,iBAAiBA,CAC5BC,KAA+B,EACW;IAC1C5E,KAAK,CAAC,wBAAwB,EAAE4E,KAAK,CAAC;IACtC,MAAM0I,OAAwC,GAAG,EAAE;IACnD,IAAI,OAAO1I,KAAK,KAAK,WAAW,IAAI,QAAOA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAE2I,IAAI,MAAK,WAAW,EAAE;MACtEvN,KAAK,CAAC,mCAAmC,CAAC;MAC1C,OAAOsN,OAAO;IAChB;IAEA,IAAI,CAAC7M,MAAM,CAAC2B,IAAI,CACd;MAAEpD,CAAC,EAAE4F,KAAK,CAAC2I,IAAI;MAAEC,CAAC,EAAE5I,KAAK,CAAC6I,OAAO;MAAEC,CAAC,EAAE9I,KAAK,CAAC+I,UAAU;MAAEC,CAAC,EAAEhJ,KAAK,CAACiJ,WAAW;MAAEC,CAAC,EAAElJ,KAAK,CAACmJ;IAAK,CAAC,EAC7F,sEACF,CAAC;IAED,IAAI,OAAO,IAAI,CAAC9M,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACvG,MAAM,KAAK,WAAW,EAAE;MACtE,IAAI,CAAC/D,MAAM,CAAC2B,IAAI,CAAC,mCAAmC,CAAC;IACvD,CAAC,MAAM;MACLpC,KAAK,CAAC,wCAAwC,CAAC;MAC/C,MAAMgO,KAAK,GAAG,MAAM,IAAI,CAAC/M,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAACvG,MAAM,CAACI,KAAK,CAAC;MACtE,IAAI;QACF,KAAK,MAAMqJ,UAAU,IAAID,KAAK,EAAE;UAC9B,MAAM5J,QAAQ,GAAG,MAAM,IAAI,CAACmB,uBAAuB,CAAC0I,UAAU,CAACzC,OAAO,CAACnK,IAAI,CAAC;UAC5E,IAAIa,eAAC,CAACgM,OAAO,CAAC9J,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAE1C,QAAQ,CAAC,KAAK,KAAK,EAAE;YAC3C,MAAMyM,aAAa,GAAG,IAAAC,4CAA8B,EAAChK,QAAQ,EAAE6J,UAAU,CAAC;YAC1EjO,KAAK,CAAC,8BAA8B,EAAEmO,aAAa,CAAC9M,IAAI,CAAC;YACzD,MAAMgN,iBAAgD,GAAG;cACvD7C,OAAO,EAAE2C,aAAa;cACtBG,KAAK,EAAEL,UAAU,CAACK,KAAK;cACvBC,kBAAkB,EAAEN,UAAU,CAACM,kBAAkB;cACjDC,gBAAgB,EAAEP,UAAU,CAACO,gBAAgB;cAC7CC,KAAK,EAAER,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEQ,KAAK;cACxB;cACAC,WAAW,EAAE;YACf,CAAC;YACDpB,OAAO,CAAChC,IAAI,CAAC+C,iBAAiB,CAAC;UACjC,CAAC,MAAM;YACLrO,KAAK,CAAC,yCAAyC,EAAEiO,UAAU,CAACzC,OAAO,CAACnK,IAAI,CAAC;UAC3E;QACF;QACArB,KAAK,CAAC,yBAAyB,CAAC;MAClC,CAAC,CAAC,OAAOkE,GAAG,EAAE;QACZ,IAAI,CAACzD,MAAM,CAACiD,KAAK,CAAC;UAAEQ,GAAG;UAAEU;QAAM,CAAC,EAAE,0CAA0C,CAAC;QAC7E,MAAMV,GAAG;MACX;IACF;IACA,OAAOoJ,OAAO;EAChB;EAEA,MAAcpK,uBAAuBA,CACnCgK,OAAe,EACf3L,QAAgB,EAChB0B,QAAgB,EACD;IACf,MAAMO,OAAmC,GAAG,IAAI,CAACC,wBAAwB,CAACyJ,OAAO,CAAC;IAClFlN,KAAK,CAAC,6BAA6B,EAAEkN,OAAO,CAAC;IAC7C,IAAI,OAAO1J,OAAO,KAAK,WAAW,EAAE;MAClC,MAAM5B,gBAAU,CAAC+M,qBAAqB,CAAC,yBAAyB,CAAC;IACnE;IACA,IAAIvK,QAAQ;IACZ,IAAI;MACFA,QAAQ,GAAG,MAAMZ,OAAO,CAACO,WAAW,CAACmJ,OAAO,CAAC;MAC7C9I,QAAQ,GAAG,IAAAwK,8BAAgB,EAACxK,QAAQ,CAAC;IACvC,CAAC,CAAC,OAAOF,GAAQ,EAAE;MACjB,IAAIA,GAAG,CAACC,IAAI,KAAK8D,qBAAO,CAACC,kBAAkB,IAAIhE,GAAG,CAACC,IAAI,KAAKyC,iBAAW,CAACC,SAAS,EAAE;QACjF,IAAI,CAACpG,MAAM,CAAC2B,IAAI,CAAC;UAAE8K,OAAO;UAAE3L;QAAS,CAAC,EAAE,mBAAmB,CAAC;QAC5D,MAAMK,gBAAU,CAACoC,WAAW,CAAC,CAAC;MAChC;MACA,IAAI,CAACvD,MAAM,CAACiD,KAAK,CACf;QAAEwJ,OAAO;QAAE3L,QAAQ;QAAE2C,GAAG,EAAEA,GAAG,CAACoE;MAAQ,CAAC,EACvC,0DACF,CAAC;MACD,MAAMpE,GAAG;IACX;;IAEA;IACA,IAAI;MACF;MACA,MAAM,IAAI,CAACD,2BAA2B,CAACG,QAAQ,EAAEnB,QAAQ,CAAC;MAE1D,MAAM,IAAI,CAAChC,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAAC8D,MAAM,CAAC3B,OAAO,CAAC;MAC1D;MACA,MAAM4B,WAAW,GAAGtP,MAAM,CAAC0B,IAAI,CAACkD,QAAQ,CAAC7B,YAAY,CAAC;MACtDvC,KAAK,CAAC,0BAA0B,EAAE8O,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEjK,MAAM,CAAC;MACtD,KAAK,IAAIkK,UAAU,IAAID,WAAW,EAAE;QAClC9O,KAAK,CAAC,sBAAsB,EAAE+O,UAAU,CAAC;QACzC,MAAMvL,OAAO,CAACe,aAAa,CAACwK,UAAU,CAAC;QACvC,IAAI,CAACtO,MAAM,CAAC2B,IAAI,CAAC;UAAE2M;QAAW,CAAC,EAAE,kCAAkC,CAAC;MACtE;MACA;MACA/O,KAAK,CAAC,qBAAqB,CAAC;MAC5B,MAAMwD,OAAO,CAACe,aAAa,CAAC0D,qBAAO,CAAC+G,iBAAiB,CAAC;MACtD;MACAhP,KAAK,CAAC,uBAAuB,CAAC;MAC9B,MAAMwD,OAAO,CAACR,aAAa,CAAC,CAAC;MAC7B,IAAI,CAACvC,MAAM,CAAC2B,IAAI,CAAC;QAAE8K;MAAQ,CAAC,EAAE,4BAA4B,CAAC;IAC7D,CAAC,CAAC,OAAOhJ,GAAQ,EAAE;MACjB,IAAI,CAACzD,MAAM,CAACiD,KAAK,CAAC;QAAEQ;MAAI,CAAC,EAAE,2CAA2C,CAAC;MACvE,MAAMtC,gBAAU,CAACC,UAAU,CAACqC,GAAG,CAACoE,OAAO,CAAC;IAC1C;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE;EACA,MAAa/C,uBAAuBA,CAAClE,IAAY,EAAEgC,SAAkB,EAAqB;IACxF,MAAMG,OAAmC,GAAG,IAAI,CAACC,wBAAwB,CAACpC,IAAI,CAAC;IAC/ErB,KAAK,CAAC,6BAA6B,EAAEqB,IAAI,CAAC;IAC1C,IAAI,OAAOmC,OAAO,KAAK,WAAW,EAAE;MAClC,MAAM5B,gBAAU,CAAC+M,qBAAqB,CAAC,yBAAyB,CAAC;IACnE;IAEA,IAAI;MACF,MAAMM,MAAgB,GAAG,MAAMzL,OAAO,CAACO,WAAW,CAAC1C,IAAI,CAAC;MACxD,OAAO,IAAAuN,8BAAgB,EAACK,MAAM,CAAC;IACjC,CAAC,CAAC,OAAO/K,GAAQ,EAAE;MACjB,IAAIA,GAAG,CAACC,IAAI,KAAK8D,qBAAO,CAACC,kBAAkB,IAAIhE,GAAG,CAACC,IAAI,KAAKyC,iBAAW,CAACC,SAAS,EAAE;QACjF7G,KAAK,CAAC,sBAAsB,EAAEqB,IAAI,CAAC;QACnC,MAAMO,gBAAU,CAACoC,WAAW,CAAC,CAAC;MAChC;MACA,IAAI,CAACvD,MAAM,CAACiD,KAAK,CACf;QAAEQ,GAAG,EAAEA,GAAG;QAAE5B,IAAI,EAAE2F,qBAAO,CAAC+G;MAAkB,CAAC,EAC7C,yCACF,CAAC;MAED,MAAMpN,gBAAU,CAAC+B,gBAAgB,CAAC,CAAC;IACrC;EACF;;EAEA;AACF;AACA;AACA;EACUyJ,+BAA+BA,CAAA,EAAgB;IACrD,MAAM8B,MAAmB,GAAG,IAAInJ,mBAAW,CAAC,CAAC;;IAE7C;IACAoJ,OAAO,CAACC,QAAQ,CAAC,MAAY;MAC3BF,MAAM,CAACzI,IAAI,CAAC,OAAO,EAAE7E,gBAAU,CAACoC,WAAW,CAACJ,eAAS,CAAC+D,YAAY,CAAC,CAAC;IACtE,CAAC,CAAC;IAEF,OAAOuH,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAaG,aAAaA,CAAChO,IAAY,EAAEiO,IAAe,EAAqB;IAC3E,OAAO,MAAM,IAAI,CAACxN,aAAa,CAACT,IAAI,EAAE,MAAOgD,IAAc,IAAwB;MACjF,IAAIC,OAAiB,GAAG;QAAE,GAAGD;MAAK,CAAC;MACnC,KAAK,MAAMkL,GAAG,IAAI/P,MAAM,CAAC0B,IAAI,CAACoO,IAAI,CAAC,EAAE;QACnC;QACA,IAAIpN,eAAC,CAACsN,MAAM,CAACF,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE;UACvB,OAAOjL,OAAO,CAAC3C,eAAS,CAAC,CAAC4N,GAAG,CAAC;UAC9B;QACF;QAEA,IAAIrN,eAAC,CAACC,KAAK,CAACmC,OAAO,CAAC5C,QAAQ,CAAC4N,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,EAAE;UACxC,MAAM3N,gBAAU,CAACoC,WAAW,CAACJ,eAAS,CAAC6E,iBAAiB,CAAC;QAC3D;QACA,MAAMzG,OAAe,GAAGsN,IAAI,CAACC,GAAG,CAAC;QACjCjL,OAAO,GAAG,IAAAmL,iBAAc,EAACnL,OAAO,EAAEtC,OAAO,EAAEuN,GAAG,CAAC;MACjD;MAEA,OAAOjL,OAAO;IAChB,CAAC,CAAC;EACJ;EAEQ2B,oBAAoBA,CAACiH,OAAe,EAAEvH,QAAkB,EAAU;IACxE,IAAI+J,MAAqB,GAAG,IAAI;IAEhC,KAAK,MAAMC,QAAQ,IAAI,IAAI,CAAC/O,OAAO,EAAE;MACnC;MACA,IAAI,IAAAgP,kBAAU,EAAC1C,OAAO,EAAEyC,QAAQ,EAAE,IAAI,CAACnP,MAAM,CAACyK,QAAQ,CAAC,EAAE;QACvDyE,MAAM,GAAG,IAAI,CAAC9O,OAAO,CAAC+O,QAAQ,CAAC;MACjC;IACF;IAEA,IAAID,MAAM,IAAI,IAAI,EAAE;MAClB1P,KAAK,CAAC,wCAAwC,EAAEkN,OAAO,CAAC;MACxDwC,MAAM,GAAG,IAAIG,mBAAY,CACvB;QACEpK,GAAG,EAAEE,QAAQ,CAACF,GAAG;QACjBY,KAAK,EAAE;MACT,CAAC,EACD,IAAI,CAAC7F,MAAM,EACX,IAAI,CAACC,MACP,CAAC;IACH;IACA,OAAOiP,MAAM;EACf;EAEA,MAAaI,cAAcA,CACzB1L,QAAyD,EACzDK,OAA8B,EACD;IAC7BzE,KAAK,CAAC,gCAAgC,EAAEoE,QAAQ,CAAC2L,GAAG,EAAEtL,OAAO,CAACqE,cAAc,CAAC7F,QAAQ,CAAC;IACtF,IAAI,IAAA+M,uBAAoB,EAAC5L,QAAoB,CAAC,EAAE;MAC9C;MACA,MAAM,IAAI,CAAC6L,SAAS,CAAC7L,QAAQ,EAAc;QACzC,GAAGK;MACL,CAAC,CAAC;IACJ,CAAC,MAAM,IACL,IAAAyL,+BAAoB,EAAC9L,QAAoB,CAAC,KAAK,KAAK,IACpD5C,oBAAc,CAACC,QAAQ,CAAE2C,QAAQ,CAAsBiH,KAAK,CAAC,EAC7D;MACA;MACA,MAAM,IAAI,CAAC8E,IAAI,CAAC/L,QAAQ,EAAsB;QAC5C,GAAGK;MACL,CAAC,CAAC;MACF,OAAO2L,iBAAW,CAACC,WAAW;IAChC,CAAC,MAAM,IACL,IAAAH,+BAAoB,EAAC9L,QAAoB,CAAC,KAAK,KAAK,IACpDkM,KAAK,CAACC,OAAO,CAAEnM,QAAQ,CAAuBoM,WAAW,CAAC,EAC1D;MACA;MACA,MAAM,IAAI,CAACC,YAAY,CAACrM,QAAQ,EAAuB;QACrD,GAAGK;MACL,CAAC,CAAC;MACF,OAAO2L,iBAAW,CAACC,WAAW;IAChC,CAAC,MAAM,IAAI7O,oBAAc,CAACkP,4BAA4B,CAACtM,QAAQ,CAAC,EAAE;MAChE;MACA;MACA,MAAM,CAACuM,cAAc,EAAE3O,OAAO,EAAEsG,OAAO,CAAC,GAAG,MAAM,IAAI,CAACsI,kBAAkB,CACtExM,QAAQ,EACR;QACE,GAAGK;MACL,CACF,CAAC;MACD;MACA,IAAI;QACF,MAAM;UAAEpD;QAAK,CAAC,GAAGsP,cAAc;QAC/B,MAAM,IAAI,CAACE,MAAM,CAACF,cAAc,EAAE,GAAGtP,IAAI,IAAIW,OAAO,EAAE,CAAC;QACvD,IAAI,CAACvB,MAAM,CAAC2B,IAAI,CAAC;UAAEf,IAAI;UAAEW;QAAQ,CAAC,EAAE,6CAA6C,CAAC;MACpF,CAAC,CAAC,OAAO0B,KAAU,EAAE;QACnB,IAAI,CAACjD,MAAM,CAACiD,KAAK,CAAC;UAAEA,KAAK,EAAEA,KAAK,CAAC4E;QAAQ,CAAC,EAAE,2CAA2C,CAAC;MAC1F;MACA,OAAOA,OAAO;IAChB,CAAC,MAAM;MACLtI,KAAK,CAAC,qBAAqB,CAAC;MAC5B,IAAI,CAACS,MAAM,CAAC8K,IAAI,CACd;QAAEuF,WAAW,EAAErM,OAAO,CAACpD;MAAK,CAAC,EAC7B,0DACF,CAAC;MACD,MAAMO,gBAAU,CAACwH,aAAa,CAACxF,eAAS,CAACmN,wBAAwB,CAAC;IACpE;EACF;EAEA,MAAcd,SAASA,CAAC7L,QAAkB,EAAEK,OAA8B,EAAiB;IACzF,MAAM;MAAEpD;IAAK,CAAC,GAAG+C,QAAQ;IACzBpE,KAAK,CAAC,gBAAgB,EAAEqB,IAAI,CAAC;IAC7B,OAAO,IAAI,CAACD,aAAa,CAACC,IAAI,EAAE+C,QAAQ,EAAEK,OAAO,CAAClD,QAAkB,CAAC;EACvE;EAEA,MAAc4O,IAAIA,CAAC/L,QAA0B,EAAEK,OAA8B,EAAmB;IAC9F,MAAM;MAAE4G;IAAM,CAAC,GAAGjH,QAAQ;IAC1B,MAAM;MAAE0E,cAAc;MAAEzH;IAAK,CAAC,GAAGoD,OAAO;IACxCzE,KAAK,CAAC,SAAS,EAAEqB,IAAI,CAAC;IACtB,MAAM;MAAE4B;IAAS,CAAC,GAAG6F,cAAc;IACnC,IAAI,CAAC7F,QAAQ,EAAE;MACb,MAAMrB,gBAAU,CAACwH,aAAa,CAAC,2CAA2C,CAAC;IAC7E;IAEA,MAAM4H,YAAY,GAAG,MAAM,IAAI,CAAC9H,kBAAkB,CAAC;MACjD7H,IAAI;MACJyH,cAAc;MACdpB,WAAW,EAAE;IACf,CAAC,CAAC;IACF;IACA,MAAMuJ,cAAc,GAAGD,YAAY,CAAC3F,KAAK,IAAI,CAAC,CAAC;IAC/C;IACA,MAAM6F,gBAAgB,GAAG1R,MAAM,CAAC0B,IAAI,CAACmK,KAAqB,CAAC,CAAC8F,QAAQ,CAAClO,QAAQ,CAAC;IAC9E,IAAI,CAAC,IAAAmO,iCAAsB,EAACJ,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE3F,KAAK,EAAkBpI,QAAQ,EAAEiO,gBAAgB,CAAC,EAAE;MAC5F,OAAOd,iBAAW,CAACC,WAAW;IAChC;IAEA,MAAMgB,QAAQ,GAAGH,gBAAgB,GAC7B;MACE,GAAGD,cAAc;MACjB,CAAChO,QAAQ,GAAG;IACd,CAAC,GACDf,eAAC,CAACsH,MAAM,CACNyH,cAAc,EACd,CAAC5F,KAAK,EAAEiG,KAAK,EAAEC,GAAG,KAAK;MACrB,IAAIA,GAAG,KAAKtO,QAAQ,EAAE;QACpBoI,KAAK,CAACkG,GAAG,CAAC,GAAGD,KAAK;MACpB;MACA,OAAOjG,KAAK;IACd,CAAC,EACD,CAAC,CACH,CAAC;IAEL,MAAM,IAAI,CAACjK,aAAa,CACtBC,IAAI,EACJ;MAAE,GAAG2P,YAAY;MAAE3F,KAAK,EAAEgG;IAAS,CAAC,EACpC5M,OAAO,CAAClD,QACV,CAAC;IAED,OAAO6O,iBAAW,CAACC,WAAW;EAChC;EAEA,MAAcI,YAAYA,CACxBrM,QAA2B,EAC3BK,OAA8B,EACb;IACjB,MAAM;MAAE+L;IAAY,CAAC,GAAGpM,QAAQ;IAChC,MAAM;MAAE0E,cAAc;MAAEzH;IAAK,CAAC,GAAGoD,OAAO;IACxCzE,KAAK,CAAC,qBAAqB,EAAEqB,IAAI,CAAC;IAClC,MAAM;MAAE4B;IAAS,CAAC,GAAG6F,cAAc;IACnC,IAAI,CAAC7F,QAAQ,EAAE;MACb,MAAMrB,gBAAU,CAACwH,aAAa,CAAC,gDAAgD,CAAC;IAClF;IACA,IAAI,CAACoH,WAAW,IAAIA,WAAW,CAAC3L,MAAM,KAAK,CAAC,EAAE;MAC5C,MAAMjD,gBAAU,CAACwH,aAAa,CAAC,qDAAqD,CAAC;IACvF;IAEA,MAAM4H,YAAY,GAAG,MAAM,IAAI,CAAC9H,kBAAkB,CAAC;MACjD7H,IAAI;MACJyH,cAAc;MACdpB,WAAW,EAAE;IACf,CAAC,CAAC;IAEF,MAAM,IAAI,CAACtG,aAAa,CACtBC,IAAI,EACJ;MAAE,GAAG2P,YAAY;MAAER,WAAW,EAAEA;IAAwB,CAAC,EACzD/L,OAAO,CAAClD,QACV,CAAC;IAED,OAAO6O,iBAAW,CAACC,WAAW;EAChC;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAcmB,yBAAyBA,CAACnQ,IAAY,EAA4B;IAC9E,IAAI;MACF,OAAO,MAAM,IAAI,CAACkE,uBAAuB,CAAClE,IAAI,CAAC;IACjD,CAAC,CAAC,OAAO6C,GAAQ,EAAE;MACjBlE,KAAK,CAAC,4BAA4B,EAAEqB,IAAI,CAAC;MACzC,OAAO,IAAI;IACb;EACF;;EAEA;AACF;AACA;AACA;AACA;EACUoQ,iBAAiBA,CAACpN,IAAY,EAAU;IAC9C,MAAMqN,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACvN,IAAI,EAAE,QAAQ,CAAC;IAC1C,IAAIqN,MAAM,CAAC7M,MAAM,KAAK,CAAC,EAAE;MACvB,MAAMjD,gBAAU,CAACC,UAAU,CAAC,qCAAqC,CAAC;IACpE;IACA,OAAO6P,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAcG,UAAUA,CAAC3E,OAAe,EAAoB;IAC1D,MAAM1J,OAAmC,GAAG,IAAI,CAACC,wBAAwB,CAACyJ,OAAO,CAAC;IAClF,IAAI,OAAO1J,OAAO,KAAK,WAAW,EAAE;MAClC,MAAM5B,gBAAU,CAACoC,WAAW,CAAC,CAAC;IAChC;IACA,MAAM6N,UAAU,GAAG,MAAMrO,OAAO,CAACqO,UAAU,CAAC,CAAC;IAC7C7R,KAAK,CAAC,uBAAuB,EAAEkN,OAAO,EAAE2E,UAAU,CAAC;IACnD,OAAOA,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAcjB,kBAAkBA,CAC9BkB,IAAc,EACdrN,OAAuB,EACc;IACrC,MAAM;MAAEpD;IAAK,CAAC,GAAGoD,OAAO;IACxB,MAAMxB,QAAQ,GAAGwB,OAAO,CAACqE,cAAc,CAAC7F,QAAQ;IAChDjD,KAAK,CAAC,uCAAuC,EAAEqB,IAAI,EAAE4B,QAAQ,CAAC;IAC9D,IAAI8O,sBAAsB;IAC1B,MAAM3N,QAAkB,GAAG;MAAE,GAAG5C,oBAAc,CAACwQ,iBAAiB,CAACF,IAAI,EAAEzQ,IAAI;IAAE,CAAC;IAC9E,MAAM;MAAEkB,YAAY;MAAEb;IAAS,CAAC,GAAG0C,QAAQ;;IAE3C;IACA;IACA;IACA;IACA,IAAI,IAAA8J,eAAO,EAAC3L,YAAY,CAAC,EAAE;MACzB,MAAMX,gBAAU,CAACwH,aAAa,CAACxF,eAAS,CAACmN,wBAAwB,CAAC;IACpE;;IAEA;IACA,MAAM,CAACkB,gBAAgB,CAAC,GAAGzS,MAAM,CAAC0B,IAAI,CAACQ,QAAQ,CAAC;;IAEhD;IACA,MAAM,CAACwQ,kBAAkB,CAAC,GAAG1S,MAAM,CAAC0B,IAAI,CAACqB,YAAY,CAAC;IACtD,MAAMmP,MAAM,GAAG,IAAI,CAACD,iBAAiB,CAACK,IAAI,CAACvP,YAAY,CAAC2P,kBAAkB,CAAC,CAAC7N,IAAc,CAAC;IAE3F,IAAI;MAAA,IAAA8N,aAAA;MACF;MACA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACZ,yBAAyB,CAACnQ,IAAI,CAAC;MAChE;MACA,IAAI,CAAA+Q,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAE1Q,QAAQ,CAACuQ,gBAAgB,CAAC,KAAI,IAAI,EAAE;QACrDjS,KAAK,CAAC,wCAAwC,EAAEqB,IAAI,EAAE4Q,gBAAgB,CAAC;QACvE,MAAMrQ,gBAAU,CAACyQ,WAAW,CAAC,CAAC;MAChC;MACA,MAAM3K,WAAW,GAAG,EAAAyK,aAAA,OAAI,CAAC3R,MAAM,cAAA2R,aAAA,gBAAAA,aAAA,GAAXA,aAAA,CAAaG,OAAO,cAAAH,aAAA,uBAApBA,aAAA,CAAsBI,aAAa,MAAK,KAAK;MACjE;MACA,MAAMC,cAAc,GAAG,MAAM,IAAI,CAACC,kBAAkB,CAACpR,IAAI,EAAEqG,WAAW,CAAC;MACvE,IAAI,CAAA8K,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAE9Q,QAAQ,CAACuQ,gBAAgB,CAAC,KAAI,IAAI,EAAE;QACtDjS,KAAK,CAAC,yCAAyC,EAAEqB,IAAI,EAAE4Q,gBAAgB,CAAC;QACxE,MAAMrQ,gBAAU,CAACyQ,WAAW,CAAC,CAAC;MAChC;MAEA,MAAMK,mBAAmB,GAAG,MAAM,IAAI,CAACb,UAAU,CAACxQ,IAAI,CAAC;MACvD,IAAI,CAACqR,mBAAmB,EAAE;QACxB,MAAM,IAAI,CAACC,0BAA0B,CAACtR,IAAI,EAAE4B,QAAQ,CAAC;QACrD8O,sBAAsB,GAAG3B,iBAAW,CAACwC,WAAW;MAClD,CAAC,MAAM;QACL,MAAM,IAAI,CAAC3O,2BAA2B,CAACmO,aAAa,EAAcnP,QAAQ,CAAC;QAC3E8O,sBAAsB,GAAG3B,iBAAW,CAACC,WAAW;MAClD;IACF,CAAC,CAAC,OAAOnM,GAAQ,EAAE;MACjBlE,KAAK,CAAC,6CAA6C,EAAEkE,GAAG,CAACoE,OAAO,CAAC;MACjE,IAAI,CAAC7H,MAAM,CAACiD,KAAK,CAAC;QAAEQ,GAAG,EAAEA,GAAG,CAACoE;MAAQ,CAAC,EAAE,sCAAsC,CAAC;MAC/E,MAAMpE,GAAG;IACX;;IAEA;IACA,IAAI;MACF,MAAM2O,YAAY,GAAG,MAAM,IAAI,CAACC,eAAe,CAACpR,QAAQ,CAACuQ,gBAAgB,CAAC,EAAEP,MAAM,CAAC;MACnF;MACA,IAAIxP,eAAC,CAACgM,OAAO,CAACxM,QAAQ,CAACuQ,gBAAgB,CAAC,CAACc,MAAM,CAAC,EAAE;QAChDrR,QAAQ,CAACuQ,gBAAgB,CAAC,CAACc,MAAM,GAC/B7Q,eAAC,CAACC,KAAK,CAACiC,QAAQ,CAAC2O,MAAM,CAAC,KAAK,KAAK,GAAGC,MAAM,CAAC5O,QAAQ,CAAC2O,MAAM,CAAC,GAAG,EAAE;MACrE;MACA;MACA,MAAM,IAAI,CAACE,UAAU,CAAC5R,IAAI,EAAE4Q,gBAAgB,EAAEvQ,QAAQ,CAACuQ,gBAAgB,CAAC,EAAE,IAAI,EAAEY,YAAY,CAAC;IAC/F,CAAC,CAAC,OAAO3O,GAAQ,EAAE;MACjB,IAAI,CAACzD,MAAM,CAACiD,KAAK,CAAC;QAAEQ,GAAG,EAAEA,GAAG,CAACoE;MAAQ,CAAC,EAAE,oCAAoC,CAAC;MAC7EtI,KAAK,CAAC,gDAAgD,EAAEqB,IAAI,EAAE6C,GAAG,CAACoE,OAAO,CAAC;MAC1E,MAAMpE,GAAG;IACX;;IAEA;IACA,IAAIyM,cAAc;IAClB,IAAI;MACF;MACA;MACA;MACA;MACA;MACAA,cAAc,GAAG,MAAM,IAAI,CAACtB,aAAa,CAAChO,IAAI,EAAE+C,QAAQ,CAACzC,eAAS,CAAC,CAAC;IACtE,CAAC,CAAC,OAAOuC,GAAQ,EAAE;MACjB,IAAI,CAACzD,MAAM,CAACiD,KAAK,CAAC;QAAEQ,GAAG,EAAEA,GAAG,CAACoE;MAAQ,CAAC,EAAE,kCAAkC,CAAC;MAC3EtI,KAAK,CAAC,gDAAgD,EAAEqB,IAAI,EAAE6C,GAAG,CAACoE,OAAO,CAAC;MAC1E;MACA;MACA,MAAMpE,GAAG;IACX;;IAEA;IACA,IAAI;MACF,MAAMgP,QAAQ,GAAGC,gBAAQ,CAACvB,IAAI,CAACF,MAAM,CAAC;MACtC,MAAM,IAAI,CAAC0B,aAAa,CAAC/R,IAAI,EAAE,IAAAgS,cAAQ,EAACnB,kBAAkB,CAAC,EAAEgB,QAAQ,EAAE;QACrE/N,MAAM,EAAEV,OAAO,CAACU;MAClB,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOjB,GAAQ,EAAE;MACjB,IAAI,CAACzD,MAAM,CAACiD,KAAK,CAAC;QAAEQ,GAAG,EAAEA,GAAG,CAACoE;MAAQ,CAAC,EAAE,mCAAmC,CAAC;MAC5E;MACA;MACA;MACA,MAAMpE,GAAG;IACX;IAEA,IAAI,CAACzD,MAAM,CAAC2B,IAAI,CACd;MAAEf,IAAI;MAAEW,OAAO,EAAEiQ;IAAiB,CAAC,EACnC,+CACF,CAAC;IAED,OAAO,CAACtB,cAAc,EAAEsB,gBAAgB,EAAEF,sBAAsB,CAAC;EACnE;;EAEA;EACA;EACA,MAAclB,MAAMA,CAACyC,SAAmB,EAAEC,QAAgB,EAAiB;IACzE;EACF;EAEQC,YAAYA,CAAA,EAAG;IACrB,MAAMC,WAAW,GAAGjU,MAAM,CAAC0B,IAAI,CAAC,IAAI,CAACN,OAAO,CAAC;IAE7C,OAAO6S,WAAW;EACpB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACSL,aAAaA,CAClB/R,IAAY,EACZqS,QAAgB,EAChBC,eAAyB,EACzB;IAAExO;EAAO,CAAC,EACK;IACf,OAAO,IAAIyG,OAAO,CAAC,CAACgI,OAAO,EAAE/H,MAAM,KAAK;MACtC,IAAI,CAACgI,qBAAqB,CAACxS,IAAI,EAAEqS,QAAQ,EAAE;QACzCvO;MACF,CAAC,CAAC,CACCgD,IAAI,CAAE+G,MAAM,IAAK;QAChBA,MAAM,CAAC9I,EAAE,CAAC,OAAO,EAAGlC,GAAG,IAAK;UAC1BlE,KAAK,CACH,mDAAmD,EACnD,YAAY,EACZqB,IAAI,EACJ6C,GAAG,CAACoE,OACN,CAAC;UACDuD,MAAM,CAAC3H,GAAG,CAAC;QACb,CAAC,CAAC;QACFgL,MAAM,CAAC9I,EAAE,CAAC,SAAS,EAAE,MAAM;UACzB,IAAI,CAAC3F,MAAM,CAACT,KAAK,CACf;YAAE0T,QAAQ;YAAErS;UAAK,CAAC,EAClB,qEACF,CAAC;UACDuS,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,OAAO1E,MAAM;MACf,CAAC,CAAC,CACD/G,IAAI,CAAE+G,MAAM,IAAK;QAChB,IAAA1I,kBAAQ,EAACmN,eAAe,EAAEzE,MAAM,EAAE;UAAE/J;QAAO,CAAC,CAAC,CAC1CgD,IAAI,CAAC,MAAM;UACVnI,KAAK,CAAC,6BAA6B,CAAC;QACtC,CAAC,CAAC,CACDqI,KAAK,CAACwD,MAAM,CAAC;MAClB,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEA,MAAcgI,qBAAqBA,CACjC3G,OAAe,EACf9J,QAAgB,EAChB;IAAE+B;EAAO,CAAC,EACY;IACtBnF,KAAK,CAAC,sBAAsB,EAAEkN,OAAO,CAAC;IACtC,IAAA5J,eAAM,EAAC9B,oBAAc,CAAC+B,YAAY,CAACH,QAAQ,CAAC,CAAC;IAE7C,MAAM0Q,UAAU,GAAG,IAAAC,wBAAiB,EAAC,CAAC;IACtC,MAAMC,aAAa,GAAG,IAAIC,iBAAS,CAAC;MAClCC,SAASA,CAACC,KAAU,EAAEC,SAAiB,EAAEC,QAAa,EAAQ;QAC5D;QACAP,UAAU,CAACQ,MAAM,CAACH,KAAK,CAAC;QACxBE,QAAQ,CAAC,IAAI,EAAEF,KAAK,CAAC;MACvB;IACF,CAAC,CAAC;IACF,MAAMI,YAAY,GAAG,IAAIxO,mBAAW,CAAC,CAAC;IACtC,MAAMvC,OAAO,GAAG,IAAI,CAACC,wBAAwB,CAACyJ,OAAO,CAAC;;IAEtD;IACA,IAAIA,OAAO,KAAK7M,UAAU,EAAE;MAC1B8O,OAAO,CAACC,QAAQ,CAAC,MAAY;QAC3BmF,YAAY,CAAC9N,IAAI,CAAC,OAAO,EAAE7E,gBAAU,CAAC4S,YAAY,CAAC,CAAC,CAAC;MACvD,CAAC,CAAC;MACF,OAAOD,YAAY;IACrB;;IAEA;IACA,IAAI,CAAC/Q,OAAO,EAAE;MACZ2L,OAAO,CAACC,QAAQ,CAAC,MAAY;QAC3BmF,YAAY,CAAC9N,IAAI,CAAC,OAAO,EAAE,8CAA8C,CAAC;MAC5E,CAAC,CAAC;MACF,OAAO8N,YAAY;IACrB;IAEA,MAAME,aAAa,GAAG,MAAMjR,OAAO,CAACkR,UAAU,CAACtR,QAAQ,CAAC;IACxD,IAAIqR,aAAa,EAAE;MACjBtF,OAAO,CAACC,QAAQ,CAAC,MAAY;QAC3BmF,YAAY,CAAC9N,IAAI,CAAC,OAAO,EAAE7E,gBAAU,CAACyQ,WAAW,CAAC,CAAC,CAAC;MACtD,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,MAAM/L,uBAAuB,GAAG,MAAM9C,OAAO,CAAC+C,YAAY,CAACnD,QAAQ,EAAE;QAAE+B;MAAO,CAAC,CAAC;MAEhFmB,uBAAuB,CAACF,EAAE,CAAC,MAAM,EAAE,YAAY;QAC7C,MAAM,IAAAI,kBAAQ,EAAC+N,YAAY,EAAEP,aAAa,EAAE1N,uBAAuB,EAAE;UAAEnB;QAAO,CAAC,CAAC;MAClF,CAAC,CAAC;;MAEF;MACAmB,uBAAuB,CAACF,EAAE,CAAC,OAAO,EAAE,YAAY;QAC9C,IAAI;UACFpG,KAAK,CAAC,4BAA4B,EAAEoD,QAAQ,EAAE8J,OAAO,CAAC;UACtD;UACA,MAAM,IAAI,CAACpL,aAAa,CAACoL,OAAO,EAAE,MAAO7I,IAAc,IAAwB;YAC7E,MAAMC,OAAiB,GAAG;cAAE,GAAGD;YAAK,CAAC;YACrCrE,KAAK,CAAC,0BAA0B,EAAEkN,OAAO,CAAC;YAC1C5I,OAAO,CAAC/B,YAAY,CAACa,QAAQ,CAAC,GAAG;cAC/B;cACAuR,MAAM,EAAEb,UAAU,CAACc,MAAM,CAAC,KAAK;YACjC,CAAC;YAED,OAAOtQ,OAAO;UAChB,CAAC,CAAC;UACFtE,KAAK,CAAC,qBAAqB,EAAEkN,OAAO,CAAC;UACrCqH,YAAY,CAAC9N,IAAI,CAAC,SAAS,CAAC;QAC9B,CAAC,CAAC,OAAOvC,GAAQ,EAAE;UACjB;UACA;UACAlE,KAAK,CACH,uDAAuD,EACvDoD,QAAQ,EACR8J,OAAO,EACPhJ,GAAG,CAACoE,OACN,CAAC;UACDiM,YAAY,CAAC9N,IAAI,CAAC,OAAO,EAAEvC,GAAG,CAAC;QACjC;MACF,CAAC,CAAC;;MAEF;MACAoC,uBAAuB,CAACF,EAAE,CAAC,OAAO,EAAE,MAAOlC,GAAQ,IAAK;QACtDqQ,YAAY,CAAC9N,IAAI,CAAC,OAAO,EAAEvC,GAAG,CAAC;MACjC,CAAC,CAAC;IACJ;IAEA,OAAOqQ,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAActB,UAAUA,CACtB5R,IAAY,EACZW,OAAe,EACfV,QAAiB,EACjBiO,GAAgB,EAChBsD,YAA4B,EACb;IACf7S,KAAK,CAAC,+BAA+B,EAAEgC,OAAO,EAAEX,IAAI,CAAC;IACrD,MAAM,IAAI,CAACS,aAAa,CAACT,IAAI,EAAE,MAAOgD,IAAc,IAAwB;MAC1E;MACAA,IAAI,CAAC0O,MAAM,GAAGzR,QAAQ,CAACyR,MAAM;MAC7B/S,KAAK,CAAC,mBAAmB,EAAEqB,IAAI,CAAC;MAChC;MACAC,QAAQ,GAAG,IAAAuT,gBAAa,EAACvT,QAAQ,CAAC;MAClCA,QAAQ,CAACwT,YAAY,GAAG,IAAAC,4BAAqB,EAACzT,QAAQ,CAACwT,YAAwB,CAAC;MAChF9U,KAAK,CAAC,4BAA4B,EAAEqB,IAAI,CAAC;;MAEzC;MACAC,QAAQ,CAACkP,WAAW,GAAGnM,IAAI,CAACmM,WAAW;;MAEvC;MACA,IAAIlP,QAAQ,CAACuI,IAAI,EAAE;QACjBvI,QAAQ,CAACuI,IAAI,CAACmL,SAAS,GAAGnC,YAAY,CAACmC,SAAS;QAChD1T,QAAQ,CAACuI,IAAI,CAACoL,YAAY,GAAGpC,YAAY,CAACoC,YAAY;MACxD;;MAEA;MACA;MACA,IAAIzT,oBAAc,CAACC,QAAQ,CAACH,QAAQ,CAACuI,IAAI,CAAC,IAAI3H,eAAC,CAACgT,QAAQ,CAAC5T,QAAQ,CAACuI,IAAI,CAACsL,OAAO,CAAC,EAAE;QAAA,IAAAC,UAAA;QAC/E,MAAMD,OAAO,GAAG,IAAAE,8BAAqB,EAAC/T,QAAQ,CAACuI,IAAI,CAACsL,OAAO,CAAC;QAC5D,IAAI3T,oBAAc,CAACC,QAAQ,CAAC4C,IAAI,CAAC9B,YAAY,CAAC4S,OAAO,CAAC,CAAC,EAAE;UACvD,IACEjT,eAAC,CAACC,KAAK,CAACkC,IAAI,CAAC9B,YAAY,CAAC4S,OAAO,CAAC,CAACR,MAAM,CAAC,KAAK,KAAK,IACpDzS,eAAC,CAACC,KAAK,CAACb,QAAQ,CAACuI,IAAI,CAAC8K,MAAM,CAAC,KAAK,KAAK,EACvC;YACA,IAAItQ,IAAI,CAAC9B,YAAY,CAAC4S,OAAO,CAAC,CAACR,MAAM,IAAIrT,QAAQ,CAACuI,IAAI,CAAC8K,MAAM,EAAE;cAC7D,MAAMW,YAAY,GAChB,gBAAgB,GAChB,GAAGjR,IAAI,CAAC9B,YAAY,CAAC4S,OAAO,CAAC,CAACR,MAAM,OAAOrT,QAAQ,CAACuI,IAAI,CAAC8K,MAAM,EAAE;cACnE,MAAM/S,gBAAU,CAACwH,aAAa,CAACkM,YAAY,CAAC;YAC9C;UACF;UACAjR,IAAI,CAAC9B,YAAY,CAAC4S,OAAO,CAAC,CAACnT,OAAO,GAAGA,OAAO;QAC9C;;QAEA;QACA;QACA;QACA,IAAIE,eAAC,CAACC,KAAK,CAACkC,IAAI,CAAChC,IAAI,CAAC,EAAE;UACtB,IAAI,CAAC5B,MAAM,CAAC8K,IAAI,CACd;YAAElK;UAAK,CAAC,EACR,kEACF,CAAC;UACDgD,IAAI,CAAChC,IAAI,GAAG,CAAC,CAAC;QAChB;;QAEA;QACA,MAAMkT,WAAW,GAAG,IAAI3S,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;QAC5CwB,IAAI,CAAChC,IAAI,CAACM,QAAQ,GAAG4S,WAAW;QAChC,IAAI,GAAAH,UAAA,GAAC/Q,IAAI,CAAChC,IAAI,cAAA+S,UAAA,eAATA,UAAA,CAAWI,OAAO,GAAE;UACvBnR,IAAI,CAAChC,IAAI,CAACmT,OAAO,GAAGD,WAAW;QACjC;QAEA,IAAI,OAAOlR,IAAI,CAAChC,IAAI,CAACL,OAAO,CAAC,KAAK,QAAQ,EAAE;UAC1C;UACA,IAAI,CAACvB,MAAM,CAAC8K,IAAI,CACd;YAAElK,IAAI;YAAEW;UAAQ,CAAC,EACjB,iGACF,CAAC;QACH;QACAqC,IAAI,CAAChC,IAAI,CAACL,OAAO,CAAC,GAAGuT,WAAW;QAChCvV,KAAK,CAAC,8BAA8B,EAAEqB,IAAI,EAAEW,OAAO,CAAC;MACtD;MAEAqC,IAAI,CAAC3C,QAAQ,CAACM,OAAO,CAAC,GAAGV,QAAQ;MACjC;MACA,IAAAmU,aAAU,EAACpR,IAAI,EAAErC,OAAO,EAAEuN,GAAG,CAAC;MAE9B,IAAI;QACFvP,KAAK,CAAC,oBAAoB,EAAEqB,IAAI,CAAC;QACjC,MAAM,IAAI,CAACJ,YAAY,CAAC8J,gBAAgB,CAAC,CAAC,CAAC2K,GAAG,CAACrU,IAAI,CAAC;QACpD,IAAI,CAACZ,MAAM,CAACT,KAAK,CAAC;UAAEqB,IAAI;UAAEW;QAAQ,CAAC,EAAE,kDAAkD,CAAC;MAC1F,CAAC,CAAC,OAAOkC,GAAQ,EAAE;QACjB,MAAMtC,gBAAU,CAACC,UAAU,CAACqC,GAAG,CAACoE,OAAO,CAAC;MAC1C;MACA,OAAOjE,IAAI;IACb,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAcsO,0BAA0BA,CACtCtR,IAAY,EACZ4B,QAA4B,EACb;IACf,MAAMO,OAAmC,GAAG,IAAI,CAACC,wBAAwB,CAACpC,IAAI,CAAC;IAE/E,IAAI,CAACmC,OAAO,EAAE;MACZxD,KAAK,CAAC,mDAAmD,EAAEqB,IAAI,CAAC;MAChE,MAAMO,gBAAU,CAACoC,WAAW,CAAC,8BAA8B,CAAC;IAC9D;IAEA,MAAM2R,WAAW,GAAG,IAAI/S,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IAC5C,MAAM+S,WAAqB,GAAG;MAC5B,GAAG,IAAAC,qCAAuB,EAACxU,IAAI,CAAC;MAChCgB,IAAI,EAAE;QACJmT,OAAO,EAAEG,WAAW;QACpBhT,QAAQ,EAAEgT;MACZ;IACF,CAAC;;IAED;IACA;IACAC,WAAW,CAACpF,WAAW,GACrBvN,QAAQ,IAAIA,QAAQ,CAAC4B,MAAM,GAAG,CAAC,GAC3B,CAAC;MAAExD,IAAI,EAAE4B,QAAQ;MAAE6S,KAAK,EAAE;IAAG,CAAC,CAAC,GAC/B,CAAC;MAAEzU,IAAI,EAAE0U,kBAAY;MAAED,KAAK,EAAE;IAAG,CAAC,CAAC;IAEzC,IAAI;MACF,MAAMtS,OAAO,CAACwS,aAAa,CAAC3U,IAAI,EAAEuU,WAAW,CAAC;MAC9C,IAAI,CAACnV,MAAM,CAAC2B,IAAI,CAAC;QAAEf;MAAK,CAAC,EAAE,6BAA6B,CAAC;MACzD;IACF,CAAC,CAAC,OAAO6C,GAAQ,EAAE;MACjB,IACEhC,eAAC,CAACsN,MAAM,CAACtL,GAAG,CAAC,KAAK,KAAK,KACtBA,GAAG,CAACC,IAAI,KAAK8D,qBAAO,CAACgO,gBAAgB,IAAI/R,GAAG,CAACC,IAAI,KAAKyC,iBAAW,CAACsP,QAAQ,CAAC,EAC5E;QACAlW,KAAK,CAAC,kDAAkD,EAAEqB,IAAI,EAAE6C,GAAG,CAACoE,OAAO,CAAC;QAC5E,MAAM1G,gBAAU,CAACyQ,WAAW,CAAC,CAAC;MAChC;MACA;IACF;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAcI,kBAAkBA,CAACpR,IAAY,EAAEqG,WAAoB,EAA4B;IAC7F,IAAI;MACF;MACA,MAAM,CAAC8K,cAAc,EAAE2D,aAAa,CAAC,GAAG,MAAM,IAAI,CAAC1O,mBAAmB,CAACpG,IAAI,EAAE,IAAI,EAAE;QACjFqG;MACF,CAAC,CAAC;;MAEF;MACA,IAAI,IAAAvF,aAAK,EAACqQ,cAAc,CAAC,KAAK,KAAK,EAAE;QACnC,MAAM5Q,gBAAU,CAACyQ,WAAW,CAACzO,eAAS,CAACwS,aAAa,CAAC;MACvD;MAEA,KAAK,IAAIC,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGF,aAAa,CAACtR,MAAM,EAAEwR,SAAS,EAAE,EAAE;QACrE;QACA;QACA,IAAI,IAAAlU,aAAK,EAACgU,aAAa,CAACE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;UAChD,IAAIF,aAAa,CAACE,SAAS,CAAC,CAAC,CAAC,CAAC,CAACC,MAAM,KAAK1P,iBAAW,CAACC,SAAS,EAAE;YAChE,IAAIsP,aAAa,EAAE;cACjB,OAAO,IAAI;YACb;YAEA,MAAMvU,gBAAU,CAAC+M,qBAAqB,CAAC/K,eAAS,CAAC2S,sBAAsB,CAAC;UAC1E;QACF;MACF;MACA,OAAO/D,cAAc;IACvB,CAAC,CAAC,OAAOtO,GAAQ,EAAE;MACjB,IAAIA,GAAG,IAAIA,GAAG,CAACoS,MAAM,KAAK1P,iBAAW,CAACC,SAAS,EAAE;QAC/C,MAAM3C,GAAG;MACX;MACA,OAAO,IAAI;IACb;EACF;EAEQsS,kBAAkBA,CAACC,IAAc,EAAY;IACnD;IACA,IAAIvU,eAAC,CAACgT,QAAQ,CAACuB,IAAI,CAACC,IAAI,CAAC,KAAK,KAAK,EAAE;MACnCD,IAAI,CAACC,IAAI,GAAGzO,qBAAO,CAAC0O,gBAAgB;IACtC;;IAEA;IACA,IAAIzU,eAAC,CAACC,KAAK,CAAC,IAAI,CAAC3B,MAAM,CAAC/C,MAAM,CAAC,EAAE;MAC/B,MAAMmZ,IAAI,GAAGH,IAAI,CAACC,IAAI;MACtBD,IAAI,CAACC,IAAI,GAAG,IAAAG,8BAAgB,EAACJ,IAAI,CAACC,IAAI,CAAC;MACvC1W,KAAK,CAAC,gDAAgD,EAAEyW,IAAI,CAACpV,IAAI,EAAEuV,IAAI,EAAEH,IAAI,CAACC,IAAI,CAAC;IACrF;IAEA,OAAOD,IAAI;EACb;EAEA,MAAcK,YAAYA,CAACzV,IAAY,EAAEoV,IAAc,EAAiB;IACtE,MAAMjT,OAAY,GAAG,IAAI,CAACC,wBAAwB,CAACpC,IAAI,CAAC;IACxD,IAAIa,eAAC,CAACC,KAAK,CAACqB,OAAO,CAAC,EAAE;MACpB;MACA,MAAM5B,gBAAU,CAACC,UAAU,CAAC,CAAC;IAC/B;IACA,MAAM2B,OAAO,CAACuT,WAAW,CAAC1V,IAAI,EAAE,IAAI,CAACmV,kBAAkB,CAACC,IAAI,CAAC,CAAC;EAChE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAc3U,aAAaA,CACzBT,IAAY,EACZ2V,aAAwD,EACrC;IACnB,MAAMxT,OAAmC,GAAG,IAAI,CAACC,wBAAwB,CAACpC,IAAI,CAAC;IAE/E,IAAI,CAACmC,OAAO,EAAE;MACZ,MAAM5B,gBAAU,CAACoC,WAAW,CAAC,CAAC;IAChC;;IAEA;IACA,MAAMwD,eAAyB,GAAG,MAAMhE,OAAO,CAAC1B,aAAa,CAACT,IAAI,EAAE2V,aAAa,CAAC;IAClF;IACA,IAAI;MACF,MAAM,IAAI,CAACF,YAAY,CAACzV,IAAI,EAAE,IAAAuN,8BAAgB,EAACpH,eAAe,CAAC,CAAC;MAChE,OAAOA,eAAe;IACxB,CAAC,CAAC,OAAOtD,GAAQ,EAAE;MACjB,IAAIA,GAAG,CAACC,IAAI,KAAK/D,oBAAoB,EAAE;QACrC,MAAMwB,gBAAU,CAAC+B,gBAAgB,CAAC,kCAAkC,CAAC;MACvE,CAAC,MAAM,IAAIO,GAAG,CAACC,IAAI,KAAKjE,UAAU,EAAE;QAClC,MAAM0B,gBAAU,CAACoC,WAAW,CAAC,CAAC;MAChC,CAAC,MAAM;QACL,MAAME,GAAG;MACX;IACF;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAcyE,cAAcA,CAAClE,OAA+B,EAA8B;IACxF,MAAM;MAAEpD;IAAK,CAAC,GAAGoD,OAAO;IACxBzE,KAAK,CAAC,oBAAoB,EAAEqB,IAAI,CAAC;IACjC,IAAIgD,IAAqB,GAAG,IAAI;IAEhC,IAAI;MACFA,IAAI,GAAG,MAAM,IAAI,CAACkB,uBAAuB,CAAClE,IAAI,CAAC;IACjD,CAAC,CAAC,OAAO6C,GAAQ,EAAE;MACjB;MACA,IAAIA,GAAG,KAAK,CAACA,GAAG,CAACoS,MAAM,IAAIpS,GAAG,CAACoS,MAAM,IAAI1P,iBAAW,CAACqQ,cAAc,CAAC,EAAE;QACpE,MAAM/S,GAAG;MACX;IACF;;IAEA;IACA;IACAlE,KAAK,CAAC,qBAAqB,EAAEqB,IAAI,CAAC;IAClC,MAAM,CAACmR,cAAc,EAAE2D,aAAa,CAAC,GAAG,MAAM,IAAI,CAAC1O,mBAAmB,CAACpG,IAAI,EAAEgD,IAAI,EAAE;MACjFqD,WAAW,EAAEjD,OAAO,CAACiD,WAAW;MAChCwP,KAAK,EAAEzS,OAAO,CAACyS,KAAK;MACpBC,aAAa,EAAE1S,OAAO,CAACqE,cAAc,CAACqO;MACtC;IACF,CAAC,CAAC;;IAEF;IACA,IAAI,CAAC3E,cAAc,IAAItQ,eAAC,CAACsN,MAAM,CAACnL,IAAI,CAAC,EAAE;MACrC,MAAMzC,gBAAU,CAACoC,WAAW,CAAC,GAAGJ,eAAS,CAACwT,kBAAkB,KAAK/V,IAAI,EAAE,CAAC;MACxE;IACF,CAAC,MAAM,IAAI,CAACmR,cAAc,IAAI,CAACtQ,eAAC,CAACsN,MAAM,CAACnL,IAAI,CAAC,EAAE;MAC7C;MACA,OAAO,CAACA,IAAI,EAAc8R,aAAa,CAAC;IAC1C;;IAEA;IACA,MAAMkB,aAAa,GAAG7X,MAAM,CAAC8X,MAAM,CAAC,CAAC,CAAC,EAAE9E,cAAc,EAAE;MACtD;MACA,GAAG,IAAA+E,+BAAiB,EAAC,IAAAC,6BAAe,EAAChF,cAAc,EAAc/N,OAAO,CAACgT,cAAc,CAAC,CAAC;MACzFlV,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC;IAEFvC,KAAK,CAAC,kCAAkC,EAAEmW,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEtR,MAAM,EAAExD,IAAI,CAAC;IACtE,OAAO,CAACgW,aAAa,EAAElB,aAAa,CAAC;EACvC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAKE,MAAa1O,mBAAmBA,CAC9BpG,IAAY,EACZ+Q,aAA8B,EAC9B3N,OAAqC,GAAG,CAAC,CAAC,EACT;IACjC,IAAIiT,KAAK,GAAGtF,aAAa,KAAK,IAAI;IAClC,IAAIuF,YAA6B,GAAG,IAAI;IACxC,MAAMC,OAAiB,GAAG,EAAE;IAC5B,MAAMC,oBAAoB,GAAG3V,eAAC,CAACC,KAAK,CAACsC,OAAO,CAACiD,WAAW,CAAC,IAAIjD,OAAO,CAACiD,WAAW;IAChF1H,KAAK,CAAC,2BAA2B,EAAE6X,oBAAoB,CAAC;IAExD,KAAK,MAAMnI,MAAM,IAAI,IAAI,CAAC9O,OAAO,EAAE;MACjC,IAAI,IAAAgP,kBAAU,EAACvO,IAAI,EAAEqO,MAAM,EAAE,IAAI,CAAClP,MAAM,CAACyK,QAAQ,CAAC,IAAI4M,oBAAoB,EAAE;QAC1E7X,KAAK,CAAC,gBAAgB,EAAE0P,MAAM,CAAC;QAC/BkI,OAAO,CAACtM,IAAI,CAACoE,MAAM,CAAC;MACtB;IACF;;IAEA;IACA,IAAIkI,OAAO,CAAC/S,MAAM,KAAK,CAAC,EAAE;MACxB7E,KAAK,CAAC,iDAAiD,EAAEqB,IAAI,CAAC;MAC9D,OAAO,CAAC+Q,aAAa,EAAE,EAAE,CAAC;IAC5B;IAEA,MAAM0F,aAAoB,GAAG,EAAE;IAC/B;IACA,KAAK,MAAMpI,MAAM,IAAIkI,OAAO,EAAE;MAC5B,IAAI;QACF,MAAMG,YAAY,GAAG7V,eAAC,CAACC,KAAK,CAACiQ,aAAa,CAAC,GACvC,IAAAyD,qCAAuB,EAACxU,IAAI,CAAC,GAC7B;UAAE,GAAG+Q;QAAc,CAAC;QACxBuF,YAAY,GAAG,MAAM,IAAI,CAACK,wBAAwB,CAChD,IAAI,CAACpX,OAAO,CAAC8O,MAAM,CAAC,EACpBqI,YAAY,EACZtT,OACF,CAAC;QACDzE,KAAK,CAAC,sBAAsB,EAAE2X,YAAY,CAACtW,IAAI,CAAC;QAChD,IAAIa,eAAC,CAACC,KAAK,CAACwV,YAAY,CAAC,KAAK,KAAK,EAAE;UACnCD,KAAK,GAAG,IAAI;UACZ;QACF;MACF,CAAC,CAAC,OAAOxT,GAAQ,EAAE;QACjBlE,KAAK,CAAC,6BAA6B,EAAEkE,GAAG,CAACoE,OAAO,CAAC;QACjDwP,aAAa,CAACxM,IAAI,CAACpH,GAAG,CAAC;QACvB;QACA;MACF;IACF;IAEA,IAAIwT,KAAK,IAAIC,YAAY,KAAK,IAAI,EAAE;MAClC;MACA,IAAIM,oBAAoB,GAAG,MAAM,IAAI,CAACC,kBAAkB,CAAC7W,IAAI,EAAEsW,YAAY,CAAC;MAC5E;MACA,MAAM,CAACQ,gBAAgB,EAAEC,aAAa,CAAC,GAAG,MAAM,IAAI,CAACC,YAAY,CAACJ,oBAAoB,CAAC;MACvF,OAAO,CACL;QAAE,GAAGA,oBAAoB;QAAE,GAAGE;MAAiB,CAAC,EAChD,CAAC,GAAGL,aAAa,EAAE,GAAGM,aAAa,CAAC,CACrC;IACH,CAAC,MAAM,IAAIV,KAAK,IAAIxV,eAAC,CAACC,KAAK,CAACiQ,aAAa,CAAC,KAAK,KAAK,EAAE;MACpD,OAAO,CAACA,aAAa,EAAE0F,aAAa,CAAC;IACvC,CAAC,MAAM;MACL;MACA9X,KAAK,CAAC,oCAAoC,EAAE8X,aAAa,CAACjT,MAAM,CAAC;MACjE,KAAK,MAAMX,GAAG,IAAI4T,aAAa,EAAE;QAC/B,MAAM;UAAE3T;QAAK,CAAC,GAAGD,GAAG;QACpB,IAAIC,IAAI,KAAK,WAAW,IAAIA,IAAI,KAAK,iBAAiB,IAAIA,IAAI,KAAK,YAAY,EAAE;UAC/EnE,KAAK,CAAC,wCAAwC,CAAC;UAC/C,MAAM4B,gBAAU,CAAC+M,qBAAqB,CAACzK,GAAG,CAACC,IAAI,CAAC;QAClD;QACA;QACA,IAAIA,IAAI,KAAKyC,iBAAW,CAAC0R,YAAY,EAAE;UACrCtY,KAAK,CAAC,oCAAoC,CAAC;UAC3C,MAAMkE,GAAG;QACX;MACF;MACAlE,KAAK,CAAC,2CAA2C,CAAC;MAElD,MAAM4B,gBAAU,CAACoC,WAAW,CAACJ,eAAS,CAAC2U,UAAU,CAAC;IACpD;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAcP,wBAAwBA,CACpCtI,MAAc,EACdpK,cAAwB,EACxBb,OAAqC,EAClB;IACnB;IACA,MAAM+T,UAAU,GAAGlT,cAAc,CAACmT,QAAQ,CAAC/I,MAAM,CAACgJ,MAAM,CAAC;IACzD,IAAIC,cAAc,GAAG;MAAE,GAAGrT;IAAe,CAAC;IAE1C,IAAI9D,oBAAc,CAACC,QAAQ,CAAC+W,UAAU,CAAC,EAAE;MACvC,MAAMI,OAAO,GAAGJ,UAAU,CAACI,OAAO;;MAElC;MACA,IAAIA,OAAO,IAAIhW,IAAI,CAACiW,GAAG,CAAC,CAAC,GAAGD,OAAO,GAAGlJ,MAAM,CAACoJ,MAAM,EAAE;QACnD,OAAOxT,cAAc;MACvB;IACF;IAEA,MAAMyT,aAAa,GAAGvZ,MAAM,CAAC8X,MAAM,CAAC,CAAC,CAAC,EAAE7S,OAAO,EAAE;MAC/CuU,IAAI,EAAER,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEQ;IACpB,CAAC,CAAC;;IAEF;IACA,MAAM,CAACxG,cAAc,EAAEwG,IAAI,CAAC,GAAG,MAAMtJ,MAAM,CAACuJ,iBAAiB,CAC3DN,cAAc,CAACtX,IAAI,EACnB0X,aACF,CAAC;IAED,IAAI;MACFJ,cAAc,GAAGnX,oBAAc,CAACwQ,iBAAiB,CAAC2G,cAAc,EAAEA,cAAc,CAACtX,IAAI,CAAC;IACxF,CAAC,CAAC,OAAO6C,GAAQ,EAAE;MACjB,IAAI,CAACzD,MAAM,CAACiD,KAAK,CACf;QACEQ,GAAG,EAAEA;MACP,CAAC,EACD,8DACF,CAAC;MACD,MAAMA,GAAG;IACX;IACA;IACAyU,cAAc,GAAG,IAAAO,kCAAoB,EAACxJ,MAAM,CAACgJ,MAAM,EAAEC,cAAc,EAAEK,IAAI,CAAC;IAC1E;IACAL,cAAc,GAAG,IAAAQ,0CAA4B,EAACR,cAAc,EAAEnG,cAAc,CAAC;IAC7E;IACAmG,cAAc,GAAG,IAAAS,qCAA8B,EAACT,cAAc,EAAEjJ,MAAM,CAAC;IACvE,IAAI;MACF;MACAiJ,cAAc,GAAG,IAAAU,2BAAa,EAACV,cAAc,EAAEnG,cAAc,CAAC;MAC9D,OAAOmG,cAAc;IACvB,CAAC,CAAC,OAAOzU,GAAQ,EAAE;MACjB,IAAI,CAACzD,MAAM,CAACiD,KAAK,CACf;QACEQ,GAAG,EAAEA;MACP,CAAC,EACD,8DACF,CAAC;MACD,MAAMA,GAAG;IACX;EACF;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAamU,YAAYA,CAACjU,QAAkB,EAA4B;IACtE,IAAI,IAAI,CAACpD,OAAO,KAAK,IAAI,IAAI,IAAI,CAACA,OAAO,CAAC6D,MAAM,KAAK,CAAC,EAAE;MACtD,OAAO,CAACT,QAAQ,EAAE,EAAE,CAAC;IACvB;IAEA,IAAIkV,kBAAyB,GAAG,EAAE;IAClC,IAAInB,gBAAgB,GAAG;MAAE,GAAG/T;IAAS,CAAC;IACtC,KAAK,MAAMkI,MAAM,IAAI,IAAI,CAACtL,OAAO,EAAE;MACjC;MACA;MACA;MACA,IAAI;QACFmX,gBAAgB,GAAG,MAAM7L,MAAM,CAACO,eAAe,CAACzI,QAAQ,CAAC;MAC3D,CAAC,CAAC,OAAOF,GAAQ,EAAE;QACjB,IAAI,CAACzD,MAAM,CAACiD,KAAK,CAAC;UAAEQ,GAAG,EAAEA,GAAG,CAACoE;QAAQ,CAAC,EAAE,0BAA0B,CAAC;QACnEgR,kBAAkB,CAAChO,IAAI,CAACpH,GAAG,CAAC;MAC9B;IACF;IACA,OAAO,CAACiU,gBAAgB,EAAEmB,kBAAkB,CAAC;EAC/C;EAEQC,qBAAqBA,CAAClY,IAAY,EAAY;IACpD,OAAO,IAAAuN,8BAAgB,EAAC,IAAAiH,qCAAuB,EAACxU,IAAI,CAAC,CAAC;EACxD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACUmY,4BAA4BA,CAACC,IAAc,EAAEC,SAAiB,EAAQ;IAC5E;IACA;IACA,MAAMC,UAAe,GAAGC,YAAG,CAACC,KAAK,CAACJ,IAAI,CAAChU,GAAG,CAAC;IAC3C,MAAMqU,SAAc,GAAGF,YAAG,CAACC,KAAK,CAAC,IAAI,CAACrZ,MAAM,CAACI,OAAO,CAAC8Y,SAAS,CAAC,CAACjU,GAAG,CAAC;IAEpE,IAAIqU,SAAS,CAACC,IAAI,KAAKJ,UAAU,CAACI,IAAI,EAAE;MACtCJ,UAAU,CAACK,QAAQ,GAAGF,SAAS,CAACE,QAAQ;MACxCP,IAAI,CAACQ,QAAQ,GAAGP,SAAS;MACzBD,IAAI,CAAChU,GAAG,GAAGmU,YAAG,CAACM,MAAM,CAACP,UAAU,CAAC;IACnC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAcQ,iBAAiBA,CAACjN,OAAe,EAAqB;IAClE,MAAM1J,OAAY,GAAG,IAAI,CAACC,wBAAwB,CAACyJ,OAAO,CAAC;IAC3D,IAAIhL,eAAC,CAACC,KAAK,CAACqB,OAAO,CAAC,EAAE;MACpB,MAAM5B,gBAAU,CAAC+B,gBAAgB,CAAC,4BAA4B,CAAC;IACjE;IAEA,IAAI;MACF,MAAMsL,MAAgB,GAAG,MAAMzL,OAAO,CAACO,WAAW,CAACmJ,OAAO,CAAC;MAC3D,OAAO,IAAA0B,8BAAgB,EAACK,MAAM,CAAC;IACjC,CAAC,CAAC,OAAO/K,GAAQ,EAAE;MACjB,IAAIA,GAAG,CAACC,IAAI,KAAK8D,qBAAO,CAACC,kBAAkB,IAAIhE,GAAG,CAACC,IAAI,KAAKyC,iBAAW,CAACC,SAAS,EAAE;QACjF,OAAO,IAAI,CAAC0S,qBAAqB,CAACrM,OAAO,CAAC;MAC5C,CAAC,MAAM;QACL,IAAI,CAACzM,MAAM,CAACiD,KAAK,CACf;UAAEQ,GAAG,EAAEA,GAAG;UAAE5B,IAAI,EAAE2F,qBAAO,CAAC+G;QAAkB,CAAC,EAC7C,2CACF,CAAC;QAED,MAAMpN,gBAAU,CAAC+B,gBAAgB,CAAC,CAAC;MACrC;IACF;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAGE,MAAauU,kBAAkBA,CAAC7W,IAAY,EAAEmR,cAAwB,EAAqB;IACzFxS,KAAK,CAAC,kCAAkC,EAAEqB,IAAI,CAAC;IAC/C,IAAIyC,aAAuB,GAAG,MAAM,IAAI,CAACqW,iBAAiB,CAAC9Y,IAAI,CAAC;IAChE,IAAI+Y,MAAM,GAAG,KAAK;IAClB;IACAtW,aAAa,CAACiP,MAAM,GAAG,IAAAsH,6BAAe,EAAC7H,cAAc,CAAC;IACtD,IAAIA,cAAc,CAACO,MAAM,KAAKjP,aAAa,CAACiP,MAAM,EAAE;MAClD/S,KAAK,CAAC,gCAAgC,EAAEqB,IAAI,CAAC;MAC7C+Y,MAAM,GAAG,IAAI;IACf;IAEApa,KAAK,CAAC,8BAA8B,CAAC;IACrC,KAAK,MAAMsa,SAAS,IAAI9H,cAAc,CAAC9Q,QAAQ,EAAE;MAC/C;MACA,IAAIQ,eAAC,CAACC,KAAK,CAAC2B,aAAa,CAACpC,QAAQ,CAAC4Y,SAAS,CAAC,CAAC,EAAE;QAAA,IAAAC,SAAA;QAC9Cva,KAAK,CAAC,8BAA8B,EAAEsa,SAAS,CAAC;QAChD,IAAItY,OAAO,GAAGwQ,cAAc,CAAC9Q,QAAQ,CAAC4Y,SAAS,CAAC;;QAEhD;QACA;QACA;QACAtY,OAAO,GAAG,IAAA6S,gBAAa,EAAC7S,OAAO,CAAC;QAChChC,KAAK,CAAC,wBAAwB,EAAEsa,SAAS,CAAC;QAC1CtY,OAAO,CAAC8S,YAAY,GAAG,IAAAC,4BAAqB,EAAC/S,OAAO,CAAC8S,YAAwB,CAAC;QAE9EsF,MAAM,GAAG,IAAI;QACbtW,aAAa,CAACpC,QAAQ,CAAC4Y,SAAS,CAAC,GAAGtY,OAAO;QAE3C,KAAAuY,SAAA,GAAIvY,OAAO,cAAAuY,SAAA,gBAAAA,SAAA,GAAPA,SAAA,CAAS1Q,IAAI,cAAA0Q,SAAA,eAAbA,SAAA,CAAepF,OAAO,EAAE;UAC1B,MAAM/R,QAAQ,GAAGoX,cAAQ,CAACC,kBAAkB,CAACzY,OAAO,CAAC6H,IAAI,CAACsL,OAAO,CAAC;UAClE;UACA;UACA,IAAIjT,eAAC,CAACC,KAAK,CAAC2B,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAE0B,UAAU,CAACpC,QAAQ,CAAC,CAAC,EAAE;YAChD,MAAMqW,IAAc,GAAI3V,aAAa,CAAC0B,UAAU,CAACpC,QAAQ,CAAC,GAAG;cAC3DqC,GAAG,EAAEzD,OAAO,CAAC6H,IAAI,CAACsL,OAAO;cACzBuF,GAAG,EAAE1Y,OAAO,CAAC6H,IAAI,CAAC8K;YACpB,CAAE;YACF;YACA,MAAMgG,MAAc,GAAG3Y,OAAO,CAAC4Y,MAAM,CAACC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAChE,IAAI3Y,eAAC,CAACC,KAAK,CAACwY,MAAM,CAAC,KAAK,KAAK,EAAE;cAC7B,IAAI,CAACnB,4BAA4B,CAACC,IAAI,EAAEkB,MAAM,CAAC;YACjD;UACF;QACF;MACF,CAAC,MAAM;QACL3a,KAAK,CAAC,kCAAkC,EAAEqB,IAAI,CAAC;MACjD;IACF;IAEArB,KAAK,CAAC,kBAAkB,CAAC;IACzB,KAAK,MAAMuP,GAAG,IAAIiD,cAAc,CAAC7Q,eAAS,CAAC,EAAE;MAC3C,IACE,CAACmC,aAAa,CAACnC,eAAS,CAAC,CAAC4N,GAAG,CAAC,IAC9BzL,aAAa,CAACnC,eAAS,CAAC,CAAC4N,GAAG,CAAC,KAAKiD,cAAc,CAAC7Q,eAAS,CAAC,CAAC4N,GAAG,CAAC,EAChE;QACA6K,MAAM,GAAG,IAAI;QACbtW,aAAa,CAACnC,eAAS,CAAC,CAAC4N,GAAG,CAAC,GAAGiD,cAAc,CAAC7Q,eAAS,CAAC,CAAC4N,GAAG,CAAC;MAChE;IACF;IAEA,KAAK,MAAMuL,EAAE,IAAItI,cAAc,CAACiG,QAAQ,EAAE;MACxC,IAAIjZ,MAAM,CAACgD,SAAS,CAAC5C,cAAc,CAACC,IAAI,CAAC2S,cAAc,CAACiG,QAAQ,EAAEqC,EAAE,CAAC,EAAE;QACrE,MAAMC,WAAW,GACf,CAAC,IAAAtZ,eAAQ,EAACqC,aAAa,CAAC2U,QAAQ,CAACqC,EAAE,CAAC,CAAC,IACrCtI,cAAc,CAACiG,QAAQ,CAACqC,EAAE,CAAC,CAAC9B,IAAI,KAAKlV,aAAa,CAAC2U,QAAQ,CAACqC,EAAE,CAAC,CAAC9B,IAAI,IACpExG,cAAc,CAACiG,QAAQ,CAACqC,EAAE,CAAC,CAAClC,OAAO,KAAK9U,aAAa,CAAC2U,QAAQ,CAACqC,EAAE,CAAC,CAAClC,OAAO;QAE5E,IAAImC,WAAW,EAAE;UACfX,MAAM,GAAG,IAAI;UACbtW,aAAa,CAAC2U,QAAQ,CAACqC,EAAE,CAAC,GAAGtI,cAAc,CAACiG,QAAQ,CAACqC,EAAE,CAAC;QAC1D;MACF;IACF;IAEA9a,KAAK,CAAC,aAAa,CAAC;IACpB,IAAI,MAAM,IAAIwS,cAAc,IAAI,CAACtQ,eAAC,CAAC8Y,OAAO,CAAClX,aAAa,CAACzB,IAAI,EAAEmQ,cAAc,CAACnQ,IAAI,CAAC,EAAE;MACnFyB,aAAa,CAACzB,IAAI,GAAGmQ,cAAc,CAACnQ,IAAI;MACxC+X,MAAM,GAAG,IAAI;IACf;IAEA,IAAIA,MAAM,EAAE;MACVpa,KAAK,CAAC,0BAA0B,EAAEqB,IAAI,CAAC;MACvC,MAAM,IAAI,CAACyV,YAAY,CAACzV,IAAI,EAAEyC,aAAa,CAAC;MAC5C,OAAOA,aAAa;IACtB,CAAC,MAAM;MACL,OAAOA,aAAa;IACtB;EACF;EAEA,MAAcgP,eAAeA,CAAC9Q,OAAgB,EAAE0P,MAAc,EAA2B;IAAA,IAAAuJ,aAAA,EAAAC,cAAA;IACvF,IACElZ,OAAO,CAAC6H,IAAI,IAAIsR,SAAS,IACzB,EAAAF,aAAA,GAAAjZ,OAAO,CAAC6H,IAAI,cAAAoR,aAAA,uBAAZA,aAAA,CAAcjG,SAAS,KAAImG,SAAS,IACpC,EAAAD,cAAA,GAAAlZ,OAAO,CAAC6H,IAAI,cAAAqR,cAAA,uBAAZA,cAAA,CAAcjG,YAAY,KAAIkG,SAAS,EACvC;MACAnb,KAAK,CAAC,sCAAsC,CAAC;MAC7C,OAAO,MAAM,IAAAob,0BAAiB,EAAC1J,MAAM,CAAC;IACxC,CAAC,MAAM;MACL1R,KAAK,CAAC,qBAAqB,CAAC;MAC5B,OAAO;QAAEgV,SAAS,EAAEhT,OAAO,CAAC6H,IAAI,CAACmL,SAAS;QAAEC,YAAY,EAAEjT,OAAO,CAAC6H,IAAI,CAACoL;MAAa,CAAC;IACvF;EACF;EAEA,MAAchR,2BAA2BA,CAACG,QAAkB,EAAEnB,QAA4B,EAAE;IAAA,IAAAoY,aAAA;IAC1F;IACArb,KAAK,CAAC,4DAA4D,EAAEiD,QAAQ,CAAC;IAC7E;IACA,IACE,EAAAoY,aAAA,OAAI,CAAC7a,MAAM,cAAA6a,aAAA,gBAAAA,aAAA,GAAXA,aAAA,CAAa/I,OAAO,cAAA+I,aAAA,uBAApBA,aAAA,CAAsBC,YAAY,MAAK,IAAI,IAC3ClX,QAAQ,CAACoM,WAAW,IACpBpM,QAAQ,CAACoM,WAAW,CAAC3L,MAAM,GAAG,CAAC,IAC/B,CAACT,QAAQ,CAACoM,WAAW,CAAC+K,IAAI,CAAEC,UAAU,IAAKA,UAAU,CAACna,IAAI,KAAK4B,QAAQ,CAAC,EACxE;MACA,IAAI,CAACxC,MAAM,CAACiD,KAAK,CAAC;QAAET;MAAS,CAAC,EAAE,iDAAiD,CAAC;MAClF,MAAMwY,KAAK,CAAC,2CAA2C,CAAC;IAC1D;EACF;AACF;AAACtb,OAAA,CAAAG,OAAA,GAAAA,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"storage.js","names":["_assert","_interopRequireDefault","require","_debug","_lodash","_interopRequireWildcard","_path","_stream","_promises","_url","_config","_core","_loaders","_proxy","_search","_tarball","_utils","_2","_starUtils","_storageUtils","_versionsUtils","_localStorage","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","debug","buildDebug","noSuchFile","exports","resourceNotAvailable","PROTO_NAME","Storage","constructor","config","logger","child","module","uplinks","setupUpLinks","searchService","Search","filters","localStorage","keys","ABBREVIATED_HEADER","changePackage","name","metadata","revision","validatioUtils","isObject","versions","DIST_TAGS","errorUtils","getBadData","updatePackage","localData","version","incomingVersion","_","isNil","info","time","file","_attachments","prototype","incomingDeprecated","deprecated","modified","Date","toISOString","USERS","MAINTAINERS","removePackage","username","removePackageByRevision","removeTarball","filename","_revision","assert","validateName","storage","getPrivatePackageStorage","error","getInternalError","API_ERROR","INTERNAL_SERVER_ERROR","cacheManifest","readPackage","getNotFound","checkAllowedToChangePackage","err","code","manifest","data","newData","deletePackage","search","options","cachePackages","getCachedPackages","query","length","remotePackages","totalResults","uniqueResults","removeLowerVersions","getTarballFromUpstream","signal","cachedManifest","getPackageLocalMetadata","_distfiles","url","distFile","current_length","expected_length","passThroughRemoteStream","PassThrough","proxy","getUpLinkForDistFile","remoteStream","fetchTarball","on","cache","localStorageWriteStream","writeTarball","pipeline","emit","res","statusCode","HTTP_STATUS","NOT_FOUND","NOT_FILE_UPLINK","OK","MULTIPLE_CHOICES","headers","HEADER_TYPE","CONTENT_LENGTH","progress","transferred","total","CONTENT_MISMATCH","updatedManifest","syncUplinksMetadata","uplinksLook","NO_SUCH_FILE","getTarball","isOpen","localTarballStream","localStream","getLocalTarball","STORAGE","NO_SUCH_FILE_ERROR","then","uplinkStream","catch","message","getPackageByVersion","queryVersion","VERSION_NOT_EXIST","convertedManifest","getPackageNext","getVersion","convertDistVersionToLocalTarballsUrl","requestOptions","url_prefix","matchedDisTagVersion","disTagVersion","getPackageManifest","byPassCache","getBadRequest","convertDistRemoteToLocalTarballUrls","convertAbbreviatedManifest","abbreviatedVersions","reduce","acc","_version","_version_abbreviated","bin","dist","engines","funding","directories","dependencies","devDependencies","peerDependencies","optionalDependencies","bundleDependencies","cpu","os","peerDependenciesMeta","acceptDependencies","_hasShrinkwrap","hasInstallScript","getPackageByOptions","abbreviated","getLocalDatabase","getStoragePlugin","database","packages","pkg","latest","timeList","users","push","warn","package","saveToken","token","isFunction","Promise","reject","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter","init","LocalStorage","getSecret","asyncLoadPlugin","plugin","filter_metadata","serverSettings","pluginPrefix","PLUGIN_CATEGORY","FILTER","pkgName","getPackageStorage","createFailureStreamResponseNext","readTarball","results","text","q","quality","p","popularity","m","maintenance","s","size","items","searchItem","isEmpty","searchPackage","mapManifestToSearchPackageBody","searchPackageItem","score","verdaccioPkgCached","verdaccioPrivate","flags","searchScore","getServiceUnavailable","normalizePackage","remove","attachments","attachment","PACKAGE_FILE_NAME","result","stream","process","nextTick","mergeTagsNext","tags","tag","isNull","tagVersionNext","uplink","uplinkId","hasProxyTo","ProxyStorage","updateManifest","_id","isDeprecatedManifest","deprecate","isPublishablePackage","star","API_MESSAGE","PKG_CHANGED","Array","isArray","maintainers","changeOwners","validatePublishSingleVersion","mergedManifest","publishANewVersion","notify","packageName","UNSUPORTED_REGISTRY_CALL","localPackage","localStarUsers","userIsAddingStar","includes","isExecutingStarCommand","newUsers","value","key","getPackagelocalByNameNext","getBufferManifest","buffer","Buffer","from","hasPackage","body","successResponseMessage","normalizeMetadata","versionToPublish","firstAttachmentKey","localManifest","getConflict","publish","allow_offline","remoteManifest","checkPackageRemote","hasPackageInStorage","createNewLocalCachePackage","PKG_CREATED","tarballStats","getTarballStats","readme","String","addVersion","readable","Readable","uploadTarball","basename","_manifest","_message","getProxyList","uplinksList","fileName","contentReadable","resolve","uploadTarballAsStream","shaOneHash","createTarballHash","transformHash","Transform","transform","chunk","_encoding","callback","update","uploadStream","getForbidden","fileDoesExist","hasTarball","shasum","digest","cleanUpReadme","contributors","normalizeContributors","fileCount","unpackedSize","isString","tarball","extractTarballFromUrl","errorMessage","currentDate","created","tagVersion","add","currentTime","packageData","generatePackageTemplate","email","DEFAULT_USER","createPackage","FILE_EXIST_ERROR","CONFLICT","upLinksErrors","PACKAGE_EXIST","errorItem","status","UPLINK_OFFLINE_PUBLISH","setDefaultRevision","json","_rev","DEFAULT_REVISION","prev","generateRevision","writePackage","savePackage","updateHandler","INTERNAL_ERROR","retry","remoteAddress","NOT_PACKAGE_UPLINK","normalizedPkg","assign","normalizeDistTags","cleanUpLinksRef","keepUpLinkData","found","syncManifest","upLinks","hasToLookIntoUplinks","uplinksErrors","tempManifest","mergeCacheRemoteMetadata","updatedCacheManifest","updateVersionsNext","filteredManifest","filtersErrors","applyFilters","NOT_MODIFIED","NO_PACKAGE","upLinkMeta","_uplinks","upname","_cacheManifest","fetched","now","maxage","remoteOptions","etag","getRemoteMetadata","updateUpLinkMetadata","mergeUplinkTimeIntoLocalNext","updateVersionsHiddenUpLinkNext","mergeVersions","filterPluginErrors","_createNewPackageNext","updateUplinkToRemoteProtocol","hash","upLinkKey","tarballUrl","URL","parse","uplinkUrl","host","protocol","registry","format","readCreatePackage","change","getLatestReadme","versionId","pkgUtils","extractTarballName","sha","upLink","Symbol","for","up","need_change","isEqual","undefined","getTarballDetails","check_owners","some","maintainer","Error"],"sources":["../src/storage.ts"],"sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _, { isEmpty, isNil } from 'lodash';\nimport { basename } from 'path';\nimport { PassThrough, Readable, Transform } from 'stream';\nimport { pipeline } from 'stream/promises';\nimport { default as URL } from 'url';\n\nimport { hasProxyTo } from '@verdaccio/config';\nimport {\n API_ERROR,\n API_MESSAGE,\n DEFAULT_USER,\n DIST_TAGS,\n HEADER_TYPE,\n HTTP_STATUS,\n MAINTAINERS,\n PLUGIN_CATEGORY,\n SUPPORT_ERRORS,\n USERS,\n errorUtils,\n pkgUtils,\n pluginUtils,\n searchUtils,\n validatioUtils,\n} from '@verdaccio/core';\nimport { asyncLoadPlugin } from '@verdaccio/loaders';\nimport {\n IProxy,\n ISyncUplinksOptions,\n ProxyInstanceList,\n ProxySearchParams,\n ProxyStorage,\n setupUpLinks,\n updateVersionsHiddenUpLinkNext,\n} from '@verdaccio/proxy';\nimport Search from '@verdaccio/search';\nimport {\n TarballDetails,\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n extractTarballFromUrl,\n getTarballDetails,\n} from '@verdaccio/tarball';\nimport {\n AbbreviatedManifest,\n AbbreviatedVersions,\n Author,\n Config,\n DistFile,\n GenericBody,\n Logger,\n Manifest,\n MergeTags,\n PackageUsers,\n StringValue,\n Token,\n TokenFilter,\n Version,\n} from '@verdaccio/types';\nimport { createTarballHash, isObject, normalizeContributors } from '@verdaccio/utils';\n\nimport {\n PublishOptions,\n UpdateManifestOptions,\n cleanUpReadme,\n isDeprecatedManifest,\n tagVersion,\n tagVersionNext,\n} from '.';\nimport { isPublishablePackage } from './lib/star-utils';\nimport { isExecutingStarCommand } from './lib/star-utils';\nimport {\n STORAGE,\n cleanUpLinksRef,\n generatePackageTemplate,\n generateRevision,\n getLatestReadme,\n mapManifestToSearchPackageBody,\n mergeUplinkTimeIntoLocalNext,\n mergeVersions,\n normalizeDistTags,\n normalizePackage,\n updateUpLinkMetadata,\n} from './lib/storage-utils';\nimport { getVersion, removeLowerVersions } from './lib/versions-utils';\nimport { LocalStorage } from './local-storage';\nimport { IGetPackageOptionsNext, OwnerManifestBody, StarManifestBody } from './type';\n\nconst debug = buildDebug('verdaccio:storage');\n\nexport type Filters = pluginUtils.ManifestFilter<Config>[];\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const PROTO_NAME = '__proto__';\n\nclass Storage {\n public localStorage: LocalStorage;\n public filters: Filters | null;\n public readonly config: Config;\n public readonly logger: Logger;\n public readonly uplinks: ProxyInstanceList;\n private searchService: Search;\n public constructor(config: Config, logger: Logger) {\n this.config = config;\n this.logger = logger.child({ module: 'storage' });\n this.uplinks = setupUpLinks(config, this.logger);\n this.searchService = new Search(config, this.logger);\n this.filters = null;\n // @ts-ignore\n this.localStorage = null;\n debug('uplinks available %o', Object.keys(this.uplinks));\n }\n\n static ABBREVIATED_HEADER = 'application/vnd.npm.install-v1+json';\n\n /**\n * Change an existing package (i.e. unpublish one version)\n Function changes a package info from local storage and all uplinks with write access./\n Used storages: local (write)\n */\n public async changePackage(name: string, metadata: Manifest, revision: string): Promise<void> {\n debug('change existing package for package %o revision %o', name, revision);\n debug(`change manifest tags for %o revision %o`, name, revision);\n if (\n !validatioUtils.isObject(metadata.versions) ||\n !validatioUtils.isObject(metadata[DIST_TAGS])\n ) {\n debug(`change manifest bad data for %o`, name);\n throw errorUtils.getBadData();\n }\n\n debug(`change manifest updating manifest for %o`, name);\n await this.updatePackage(name, async (localData: Manifest): Promise<Manifest> => {\n // eslint-disable-next-line guard-for-in\n for (const version in localData.versions) {\n const incomingVersion = metadata.versions[version];\n if (_.isNil(incomingVersion)) {\n this.logger.info({ name: name, version: version }, 'unpublishing @{name}@@{version}');\n\n // FIXME: I prefer return a new object rather mutate the metadata\n delete localData.versions[version];\n delete localData.time![version];\n\n for (const file in localData._attachments) {\n if (localData._attachments[file].version === version) {\n delete localData._attachments[file].version;\n }\n }\n } else if (Object.prototype.hasOwnProperty.call(incomingVersion, 'deprecated')) {\n const incomingDeprecated = incomingVersion.deprecated;\n if (incomingDeprecated != localData.versions[version].deprecated) {\n if (!incomingDeprecated) {\n this.logger.info(\n { name: name, version: version },\n 'undeprecating @{name}@@{version}'\n );\n delete localData.versions[version].deprecated;\n } else {\n this.logger.info({ name: name, version: version }, 'deprecating @{name}@@{version}');\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = metadata[USERS];\n localData[DIST_TAGS] = metadata[DIST_TAGS];\n localData[MAINTAINERS] = metadata[MAINTAINERS];\n return localData;\n });\n }\n\n public async removePackage(name: string, revision: string, username: string): Promise<void> {\n debug('remove package %o', name);\n await this.removePackageByRevision(name, revision, username);\n }\n\n /**\n Remove a tarball from a system\n Function removes a tarball from local storage.\n Tarball in question should not be linked to in any existing\n versions, i.e. package version should be unpublished first.\n Used storage: local (write)\n */\n public async removeTarball(\n name: string,\n filename: string,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _revision: string,\n username: string\n ): Promise<Manifest> {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n if (!storage) {\n debug(`method not implemented for storage`);\n this.logger.error('method for remove tarball not implemented');\n throw errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR);\n }\n\n try {\n const cacheManifest = await storage.readPackage(name);\n if (!cacheManifest._attachments[filename]) {\n throw errorUtils.getNotFound('no such file available');\n }\n\n // check if logged in user is allowed to remove tarball\n await this.checkAllowedToChangePackage(cacheManifest, username);\n } catch (err: any) {\n if (err.code === noSuchFile) {\n throw errorUtils.getNotFound();\n }\n throw err;\n }\n\n const manifest = await this.updatePackage(name, async (data: Manifest): Promise<Manifest> => {\n let newData: Manifest = { ...data };\n delete data._attachments[filename];\n return newData;\n });\n\n try {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n if (!storage) {\n debug(`method not implemented for storage`);\n this.logger.error('method for remove tarball not implemented');\n throw errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR);\n }\n\n await storage.deletePackage(filename);\n debug('package %s removed', filename);\n } catch (err: any) {\n this.logger.error({ err }, 'error removing %s from storage');\n throw err;\n }\n return manifest;\n }\n\n /**\n * Handle search on packages and proxies.\n * Iterate all proxies configured and search in all endpoints in v2 and pipe all responses\n * once the proxies request has finished search in local storage for all packages\n * (privated and cached).\n */\n public async search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]> {\n debug('search on cache packages');\n const cachePackages = await this.getCachedPackages(options.query);\n debug('search found on cache packages %o', cachePackages.length);\n const remotePackages = await this.searchService.search(options);\n debug('search found on remote packages %o', remotePackages.length);\n const totalResults = [...cachePackages, ...remotePackages];\n const uniqueResults = removeLowerVersions(totalResults);\n debug('unique results %o', uniqueResults.length);\n return uniqueResults;\n }\n\n private async getTarballFromUpstream(name: string, filename: string, { signal }) {\n let cachedManifest: Manifest | null = null;\n try {\n cachedManifest = await this.getPackageLocalMetadata(name);\n } catch (err) {\n debug('error on get package local metadata %o', err);\n }\n // dist url should be on local cache metadata\n if (\n cachedManifest?._distfiles &&\n typeof cachedManifest?._distfiles[filename]?.url === 'string'\n ) {\n debug('dist file found, using it %o', cachedManifest?._distfiles[filename].url);\n // dist file found, proceed to download\n const distFile = cachedManifest._distfiles[filename];\n\n let current_length = 0;\n let expected_length;\n const passThroughRemoteStream = new PassThrough();\n const proxy = this.getUpLinkForDistFile(name, distFile);\n const remoteStream = proxy.fetchTarball(distFile.url, {});\n\n remoteStream.on('request', async () => {\n try {\n debug('remote stream request');\n const storage = this.getPrivatePackageStorage(name) as any;\n if (proxy.config.cache === true && storage) {\n const localStorageWriteStream = await storage.writeTarball(filename, {\n signal,\n });\n\n await pipeline(remoteStream, passThroughRemoteStream, localStorageWriteStream, {\n signal,\n });\n } else {\n await pipeline(remoteStream, passThroughRemoteStream, {\n signal,\n });\n }\n } catch (err: any) {\n debug('error on pipeline downloading tarball for package %o', name);\n passThroughRemoteStream.emit('error', err);\n }\n });\n\n remoteStream\n .on('response', async (res) => {\n if (res.statusCode === HTTP_STATUS.NOT_FOUND) {\n debug('remote stream response 404');\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getNotFound(errorUtils.API_ERROR.NOT_FILE_UPLINK)\n );\n return;\n }\n\n if (\n !(res.statusCode >= HTTP_STATUS.OK && res.statusCode < HTTP_STATUS.MULTIPLE_CHOICES)\n ) {\n debug('remote stream response ok');\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getInternalError(`bad uplink status code: ${res.statusCode}`)\n );\n return;\n }\n\n if (res.headers[HEADER_TYPE.CONTENT_LENGTH]) {\n expected_length = res.headers[HEADER_TYPE.CONTENT_LENGTH];\n debug('remote stream response content length %o', expected_length);\n passThroughRemoteStream.emit(\n HEADER_TYPE.CONTENT_LENGTH,\n res.headers[HEADER_TYPE.CONTENT_LENGTH]\n );\n }\n })\n .on('downloadProgress', (progress) => {\n current_length = progress.transferred;\n if (typeof expected_length === 'undefined' && progress.total) {\n expected_length = progress.total;\n }\n })\n .on('end', () => {\n if (expected_length && current_length != expected_length) {\n debug('stream end, but length mismatch %o %o', current_length, expected_length);\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getInternalError(API_ERROR.CONTENT_MISMATCH)\n );\n }\n debug('remote stream end');\n })\n .on('error', (err) => {\n debug('remote stream error %o', err);\n passThroughRemoteStream.emit('error', err);\n });\n return passThroughRemoteStream;\n } else {\n debug('dist file not found, proceed update upstream');\n // no dist url found, proceed to fetch from upstream\n // should not be the case\n const passThroughRemoteStream = new PassThrough();\n // ensure get the latest data\n const [updatedManifest] = await this.syncUplinksMetadata(name, cachedManifest, {\n uplinksLook: true,\n });\n const distFile = (updatedManifest as Manifest)._distfiles[filename];\n\n if (updatedManifest === null || !distFile) {\n debug('remote tarball not found');\n throw errorUtils.getNotFound(API_ERROR.NO_SUCH_FILE);\n }\n\n const proxy = this.getUpLinkForDistFile(name, distFile);\n const remoteStream = proxy.fetchTarball(distFile.url, {});\n remoteStream.on('response', async () => {\n try {\n const storage = this.getPrivatePackageStorage(name);\n if (proxy.config.cache === true && storage) {\n debug('cache remote tarball enabled');\n const localStorageWriteStream = await storage.writeTarball(filename, {\n signal,\n });\n await pipeline(remoteStream, passThroughRemoteStream, localStorageWriteStream, {\n signal,\n });\n } else {\n debug('cache remote tarball disabled');\n await pipeline(remoteStream, passThroughRemoteStream, { signal });\n }\n } catch (err) {\n debug('error on pipeline downloading tarball for package %o', name);\n passThroughRemoteStream.emit('error', err);\n }\n });\n return passThroughRemoteStream;\n }\n }\n\n /**\n *\n * @param name\n * @param filename\n * @param param2\n * @returns\n */\n public async getTarball(name: string, filename: string, { signal }): Promise<PassThrough> {\n debug('get tarball for package %o filename %o', name, filename);\n // TODO: check if isOpen is need it after all.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let isOpen = false;\n const localTarballStream = new PassThrough();\n const localStream = await this.getLocalTarball(name, filename, { signal });\n localStream.on('open', async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isOpen = true;\n await pipeline(localStream, localTarballStream, { signal });\n });\n\n localStream.on('error', (err: any) => {\n // eslint-disable-next-line no-console\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n this.getTarballFromUpstream(name, filename, { signal })\n .then((uplinkStream) => {\n pipeline(uplinkStream, localTarballStream, { signal })\n .then(() => {\n debug('successfully downloaded tarball for package %o filename %o', name, filename);\n })\n .catch((err) => {\n localTarballStream.emit('error', err);\n });\n })\n .catch((err) => {\n localTarballStream.emit('error', err);\n });\n } else {\n this.logger.error({ err: err.message }, 'some error on fatal @{err}');\n localTarballStream.emit('error', err);\n }\n });\n\n return localTarballStream;\n }\n\n public async getPackageByVersion(options: IGetPackageOptionsNext): Promise<Version> {\n const queryVersion = options.version as string;\n if (_.isNil(queryVersion)) {\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n // we have version, so we need to return specific version\n const [convertedManifest] = await this.getPackageNext(options);\n\n const version: Version | undefined = getVersion(convertedManifest.versions, queryVersion);\n\n debug('query by latest version %o and result %o', queryVersion, version);\n if (typeof version !== 'undefined') {\n debug('latest version found %o', version);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n version,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n\n // the version could be a dist-tag eg: beta, alpha, so we find the matched version\n // on disg-tag list\n if (_.isNil(convertedManifest[DIST_TAGS]) === false) {\n if (_.isNil(convertedManifest[DIST_TAGS][queryVersion]) === false) {\n // the version found as a distag\n const matchedDisTagVersion: string = convertedManifest[DIST_TAGS][queryVersion];\n debug('dist-tag version found %o', matchedDisTagVersion);\n const disTagVersion: Version | undefined = getVersion(\n convertedManifest.versions,\n matchedDisTagVersion\n );\n if (typeof disTagVersion !== 'undefined') {\n debug('dist-tag found %o', disTagVersion);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n disTagVersion,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n }\n } else {\n debug('dist tag not detected');\n }\n\n // we didn't find the version, not found error\n debug('package version not found %o', queryVersion);\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n public async getPackageManifest(options: IGetPackageOptionsNext): Promise<Manifest> {\n // convert dist remotes to local bars\n const [manifest] = await this.getPackageNext(options);\n\n // If change access is requested (?write=true), then check if logged in user is allowed to change package\n if (options.byPassCache === true) {\n try {\n await this.checkAllowedToChangePackage(manifest, options.requestOptions.username);\n } catch (error: any) {\n this.logger.error({ error: error.message }, 'getting package has failed: @{error}');\n throw errorUtils.getBadRequest(error.message);\n }\n }\n\n const convertedManifest = convertDistRemoteToLocalTarballUrls(\n manifest,\n options.requestOptions,\n this.config.url_prefix\n );\n\n return convertedManifest;\n }\n\n private convertAbbreviatedManifest(manifest: Manifest): AbbreviatedManifest {\n const abbreviatedVersions = Object.keys(manifest.versions).reduce(\n (acc: AbbreviatedVersions, version: string) => {\n const _version = manifest.versions[version];\n // This should be align with this document\n // https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object\n const _version_abbreviated = {\n name: _version.name,\n version: _version.version,\n deprecated: _version.deprecated,\n bin: _version.bin,\n dist: _version.dist,\n engines: _version.engines,\n funding: _version.funding,\n directories: _version.directories,\n dependencies: _version.dependencies,\n devDependencies: _version.devDependencies,\n peerDependencies: _version.peerDependencies,\n optionalDependencies: _version.optionalDependencies,\n bundleDependencies: _version.bundleDependencies,\n cpu: _version.cpu,\n os: _version.os,\n peerDependenciesMeta: _version.peerDependenciesMeta,\n acceptDependencies: _version.acceptDependencies,\n // npm cli specifics\n _hasShrinkwrap: _version._hasShrinkwrap,\n hasInstallScript: _version.hasInstallScript,\n };\n acc[version] = _version_abbreviated;\n return acc;\n },\n {}\n );\n const convertedManifest = {\n name: manifest['name'],\n [DIST_TAGS]: manifest[DIST_TAGS],\n versions: abbreviatedVersions,\n modified: manifest.time.modified,\n // NOTE: special case for pnpm https://github.com/pnpm/rfcs/pull/2\n time: manifest.time,\n };\n\n return convertedManifest;\n }\n\n /**\n * Return a manifest or version based on the options.\n * @param options {Object}\n * @returns A package manifest or specific version\n */\n public async getPackageByOptions(\n options: IGetPackageOptionsNext\n ): Promise<Manifest | AbbreviatedManifest | Version> {\n // if no version we return the whole manifest\n if (_.isNil(options.version) === false) {\n return this.getPackageByVersion(options);\n } else {\n const manifest = await this.getPackageManifest(options);\n if (options.abbreviated === true) {\n debug('abbreviated manifest');\n return this.convertAbbreviatedManifest(manifest);\n }\n return manifest;\n }\n }\n\n public async getLocalDatabase(): Promise<Version[]> {\n debug('get local database');\n const storage = this.localStorage.getStoragePlugin();\n const database = await storage.get();\n const packages: Version[] = [];\n for (const pkg of database) {\n debug('get local database %o', pkg);\n const manifest = await this.getPackageLocalMetadata(pkg);\n const latest = manifest[DIST_TAGS].latest;\n if (latest && manifest.versions[latest]) {\n const version: Version = manifest.versions[latest];\n const timeList = manifest.time as GenericBody;\n const time = timeList[latest];\n // @ts-ignore\n version.time = time;\n\n // Add for stars api\n // @ts-ignore\n version.users = manifest.users;\n\n packages.push(version);\n } else {\n this.logger.warn({ package: pkg }, 'package @{package} does not have a \"latest\" tag?');\n }\n }\n return packages;\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.localStorage.getStoragePlugin().saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.localStorage.getStoragePlugin().deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.localStorage.getStoragePlugin().readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().readTokens(filter);\n }\n\n /**\n * Initialize the storage asynchronously.\n * @param config Config\n * @param filters Filters\n * @returns Storage instance\n */\n public async init(config: Config): Promise<void> {\n if (this.localStorage === null) {\n this.localStorage = new LocalStorage(this.config, this.logger);\n await this.localStorage.init();\n debug('local init storage initialized');\n await this.localStorage.getSecret(config);\n debug('local storage secret initialized');\n } else {\n debug('storage has been already initialized');\n }\n if (!this.filters) {\n this.filters = await asyncLoadPlugin<pluginUtils.ManifestFilter<unknown>>(\n this.config.filters,\n {\n config: this.config,\n logger: this.logger,\n },\n (plugin: pluginUtils.ManifestFilter<Config>) => {\n return typeof plugin.filter_metadata !== 'undefined';\n },\n this.config?.serverSettings?.pluginPrefix,\n PLUGIN_CATEGORY.FILTER\n );\n debug('filters available %o', this.filters.length);\n }\n return;\n }\n\n /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private getPrivatePackageStorage(pkgName: string): pluginUtils.StorageHandler {\n debug('get local storage for %o', pkgName);\n return this.localStorage.getStoragePlugin().getPackageStorage(pkgName);\n }\n\n /**\n * Create a tarball stream from a package.\n * @param name\n * @param filename\n * @param options\n * @returns\n */\n public async getLocalTarball(\n pkgName: string,\n filename: string,\n { signal }: { signal: AbortSignal }\n ): Promise<Readable> {\n assert(validatioUtils.validateName(filename));\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(pkgName);\n if (typeof storage === 'undefined') {\n return this.createFailureStreamResponseNext();\n }\n\n return await storage.readTarball(filename, { signal });\n }\n\n public async getCachedPackages(\n query?: searchUtils.SearchQuery\n ): Promise<searchUtils.SearchPackageItem[]> {\n debug('search on each package', query);\n const results: searchUtils.SearchPackageItem[] = [];\n if (typeof query === 'undefined' || typeof query?.text === 'undefined') {\n debug('search query for cached not found');\n return results;\n }\n\n this.logger.info(\n { t: query.text, q: query.quality, p: query.popularity, m: query.maintenance, s: query.size },\n 'search by text @{t}| maintenance @{m}| quality @{q}| popularity @{p}'\n );\n\n if (typeof this.localStorage.getStoragePlugin().search === 'undefined') {\n this.logger.info('plugin search not implemented yet');\n } else {\n debug('search on each package by plugin query');\n const items = await this.localStorage.getStoragePlugin().search(query);\n try {\n for (const searchItem of items) {\n const manifest = await this.getPackageLocalMetadata(searchItem.package.name);\n if (_.isEmpty(manifest?.versions) === false) {\n const searchPackage = mapManifestToSearchPackageBody(manifest, searchItem);\n debug('search local stream found %o', searchPackage.name);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n verdaccioPkgCached: searchItem.verdaccioPkgCached,\n verdaccioPrivate: searchItem.verdaccioPrivate,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n results.push(searchPackageItem);\n } else {\n debug('local item without versions detected %s', searchItem.package.name);\n }\n }\n debug('search local stream end');\n } catch (err) {\n this.logger.error({ err, query }, 'error on search by plugin @{err.message}');\n throw err;\n }\n }\n return results;\n }\n\n private async removePackageByRevision(\n pkgName: string,\n revision: string,\n username: string\n ): Promise<void> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(pkgName);\n debug('get package metadata for %o', pkgName);\n if (typeof storage === 'undefined') {\n throw errorUtils.getServiceUnavailable('storage not initialized');\n }\n let manifest;\n try {\n manifest = await storage.readPackage(pkgName);\n manifest = normalizePackage(manifest);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n this.logger.info({ pkgName, revision }, 'package not found');\n throw errorUtils.getNotFound();\n }\n this.logger.error(\n { pkgName, revision, err: err.message },\n 'error @{err} while reading package @{pkgName}-{revision}'\n );\n throw err;\n }\n\n // TODO: move this to another method\n try {\n // check if logged in user is allowed to remove package\n await this.checkAllowedToChangePackage(manifest, username);\n\n await this.localStorage.getStoragePlugin().remove(pkgName);\n // remove each attachment\n const attachments = Object.keys(manifest._attachments);\n debug('attachments to remove %s', attachments?.length);\n for (let attachment of attachments) {\n debug('remove attachment %s', attachment);\n await storage.deletePackage(attachment);\n this.logger.info({ attachment }, 'attachment @{attachment} removed');\n }\n // remove package.json\n debug('remove package.json');\n await storage.deletePackage(STORAGE.PACKAGE_FILE_NAME);\n // remove folder\n debug('remove package folder');\n await storage.removePackage();\n this.logger.info({ pkgName }, 'package @{pkgName} removed');\n } catch (err: any) {\n this.logger.error({ err }, 'removed package has failed @{err.message}');\n throw errorUtils.getBadData(err.message);\n }\n }\n\n /**\n * Get a package local manifest.\n *\n * Fails if package is not found.\n * @param name package name\n * @param revision of package\n * @returns local manifest\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async getPackageLocalMetadata(name: string, _revision?: string): Promise<Manifest> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n throw errorUtils.getServiceUnavailable('storage not initialized');\n }\n\n try {\n const result: Manifest = await storage.readPackage(name);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n throw errorUtils.getNotFound();\n }\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `error reading @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n\n /**\n * Fail the stream response with an not found error.\n * @returns\n */\n private createFailureStreamResponseNext(): PassThrough {\n const stream: PassThrough = new PassThrough();\n\n // we ensure fails on the next tick into the event loop\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound(API_ERROR.NO_SUCH_FILE));\n });\n\n return stream;\n }\n\n /**\n * Update a package and merge tags\n * @param name package name\n * @param tags list of dist-tags\n */\n public async mergeTagsNext(name: string, tags: MergeTags): Promise<Manifest> {\n return await this.updatePackage(name, async (data: Manifest): Promise<Manifest> => {\n let newData: Manifest = { ...data };\n for (const tag of Object.keys(tags)) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete newData[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(newData.versions[tags[tag]])) {\n throw errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST);\n }\n const version: string = tags[tag];\n newData = tagVersionNext(newData, version, tag);\n }\n\n return newData;\n });\n }\n\n private getUpLinkForDistFile(pkgName: string, distFile: DistFile): IProxy {\n let uplink: IProxy | null = null;\n\n for (const uplinkId in this.uplinks) {\n // refer to https://github.com/verdaccio/verdaccio/issues/1642\n if (hasProxyTo(pkgName, uplinkId, this.config.packages)) {\n uplink = this.uplinks[uplinkId];\n }\n }\n\n if (uplink == null) {\n debug('upstream not found creating one for %o', pkgName);\n uplink = new ProxyStorage(\n {\n url: distFile.url,\n cache: true,\n },\n this.config,\n this.logger\n );\n }\n return uplink;\n }\n\n public async updateManifest(\n manifest: Manifest | StarManifestBody | OwnerManifestBody,\n options: UpdateManifestOptions\n ): Promise<string | undefined> {\n debug('update manifest %o for user %o', manifest._id, options.requestOptions.username);\n if (isDeprecatedManifest(manifest as Manifest)) {\n // if the manifest is deprecated, we need to update the package.json\n await this.deprecate(manifest as Manifest, {\n ...options,\n });\n } else if (\n isPublishablePackage(manifest as Manifest) === false &&\n validatioUtils.isObject((manifest as StarManifestBody).users)\n ) {\n // if user request to apply a star to the manifest\n await this.star(manifest as StarManifestBody, {\n ...options,\n });\n return API_MESSAGE.PKG_CHANGED;\n } else if (\n isPublishablePackage(manifest as Manifest) === false &&\n Array.isArray((manifest as OwnerManifestBody).maintainers)\n ) {\n // if user request to change owners of package\n await this.changeOwners(manifest as OwnerManifestBody, {\n ...options,\n });\n return API_MESSAGE.PKG_CHANGED;\n } else if (validatioUtils.validatePublishSingleVersion(manifest)) {\n // if continue, the version to be published does not exist\n // we create a new package\n const [mergedManifest, version, message] = await this.publishANewVersion(\n manifest as Manifest,\n {\n ...options,\n }\n );\n // send notification of publication (notification step, non transactional)\n try {\n const { name } = mergedManifest;\n await this.notify(mergedManifest, `${name}@${version}`);\n this.logger.info({ name, version }, 'notify for @{name}@@{version} has been sent');\n } catch (error: any) {\n this.logger.error({ error: error.message }, 'notify batch service has failed: @{error}');\n }\n return message;\n } else {\n debug('invalid body format');\n this.logger.warn(\n { packageName: options.name },\n `wrong package format on publish a package @{packageName}`\n );\n throw errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL);\n }\n }\n\n private async deprecate(manifest: Manifest, options: UpdateManifestOptions): Promise<void> {\n const { name } = manifest;\n debug('deprecating %s', name);\n return this.changePackage(name, manifest, options.revision as string);\n }\n\n private async star(manifest: StarManifestBody, options: UpdateManifestOptions): Promise<string> {\n const { users } = manifest;\n const { requestOptions, name } = options;\n debug('star %s', name);\n const { username } = requestOptions;\n if (!username) {\n throw errorUtils.getBadRequest('update users only allowed to logged users');\n }\n\n const localPackage = await this.getPackageManifest({\n name,\n requestOptions,\n uplinksLook: false,\n });\n // backward compatible in case users are not in the storage.\n const localStarUsers = localPackage.users || {};\n // if trying to add a star\n const userIsAddingStar = Object.keys(users as PackageUsers).includes(username);\n if (!isExecutingStarCommand(localPackage?.users as PackageUsers, username, userIsAddingStar)) {\n return API_MESSAGE.PKG_CHANGED;\n }\n\n const newUsers = userIsAddingStar\n ? {\n ...localStarUsers,\n [username]: true,\n }\n : _.reduce(\n localStarUsers,\n (users, value, key) => {\n if (key !== username) {\n users[key] = value;\n }\n return users;\n },\n {}\n );\n\n await this.changePackage(\n name,\n { ...localPackage, users: newUsers },\n options.revision as string\n );\n\n return API_MESSAGE.PKG_CHANGED;\n }\n\n private async changeOwners(\n manifest: OwnerManifestBody,\n options: UpdateManifestOptions\n ): Promise<string> {\n const { maintainers } = manifest;\n const { requestOptions, name } = options;\n debug('change owners of %o', name);\n const { username } = requestOptions;\n if (!username) {\n throw errorUtils.getBadRequest('update owners only allowed for logged in users');\n }\n if (!maintainers || maintainers.length === 0) {\n throw errorUtils.getBadRequest('maintainers field is required and must not be empty');\n }\n\n const localPackage = await this.getPackageManifest({\n name,\n requestOptions,\n uplinksLook: false,\n });\n\n await this.changePackage(\n name,\n { ...localPackage, maintainers: maintainers as Author[] },\n options.revision as string\n );\n\n return API_MESSAGE.PKG_CHANGED;\n }\n\n /**\n * Get local package, on fails return null.\n * Errors are considered package not found.\n * @param name\n * @returns\n */\n private async getPackagelocalByNameNext(name: string): Promise<Manifest | null> {\n try {\n return await this.getPackageLocalMetadata(name);\n } catch (err: any) {\n debug('local package %s not found', name);\n return null;\n }\n }\n\n /**\n * Convert tarball as string into a Buffer and validate the length.\n * @param data the tarball data as string\n * @returns\n */\n private getBufferManifest(data: string): Buffer {\n const buffer = Buffer.from(data, 'base64');\n if (buffer.length === 0) {\n throw errorUtils.getBadData('refusing to accept zero-length file');\n }\n return buffer;\n }\n\n /**\n * Verify if the package exists in the local storage\n * (the package refers to the package.json), directory would return false.\n * @param pkgName package name\n * @returns boolean\n */\n private async hasPackage(pkgName: string): Promise<boolean> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(pkgName);\n if (typeof storage === 'undefined') {\n throw errorUtils.getNotFound();\n }\n const hasPackage = await storage.hasPackage();\n debug('has package %o for %o', pkgName, hasPackage);\n return hasPackage;\n }\n\n /**\n * Create a new package.\n * This situation happens only of the package does not exist on the cache.\n *\n * @param body package metadata\n * @param options\n * @returns\n */\n private async publishANewVersion(\n body: Manifest,\n options: PublishOptions\n ): Promise<[Manifest, string, string]> {\n const { name } = options;\n const username = options.requestOptions.username;\n debug('publishing a new package for %o as %o', name, username);\n let successResponseMessage;\n const manifest: Manifest = { ...validatioUtils.normalizeMetadata(body, name) };\n const { _attachments, versions } = manifest;\n\n // validation step, if _attachments is not an object throw error\n // _attachments is need it for holding the tarball buffer in the local storage as file\n // versions is need it for holding the version in the local storage as file\n // _attachments and validation are required otherwise cannot continue.\n if (isEmpty(_attachments)) {\n throw errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL);\n }\n\n // get the unique version available\n const [versionToPublish] = Object.keys(versions);\n\n // at this point document is either created or existed before\n const [firstAttachmentKey] = Object.keys(_attachments);\n const buffer = this.getBufferManifest(body._attachments[firstAttachmentKey].data as string);\n\n try {\n // we check if package exist already locally\n const localManifest = await this.getPackagelocalByNameNext(name);\n // if continue, the version to be published does not exist\n if (localManifest?.versions[versionToPublish] != null) {\n debug('%s version %s already exists (locally)', name, versionToPublish);\n throw errorUtils.getConflict();\n }\n const uplinksLook = this.config?.publish?.allow_offline === false;\n // if execution get here, package does not exist locally, we search upstream\n const remoteManifest = await this.checkPackageRemote(name, uplinksLook);\n if (remoteManifest?.versions[versionToPublish] != null) {\n debug('%s version %s already exists (upstream)', name, versionToPublish);\n throw errorUtils.getConflict();\n }\n\n const hasPackageInStorage = await this.hasPackage(name);\n if (!hasPackageInStorage) {\n await this.createNewLocalCachePackage(name, username);\n successResponseMessage = API_MESSAGE.PKG_CREATED;\n } else {\n await this.checkAllowedToChangePackage(localManifest as Manifest, username);\n successResponseMessage = API_MESSAGE.PKG_CHANGED;\n }\n } catch (err: any) {\n debug('error on change or update a package with %o', err.message);\n this.logger.error({ err: err.message }, 'error on publish new version: @{err}');\n throw err;\n }\n\n // 1. after tarball has been successfully uploaded, we update the version\n try {\n const tarballStats = await this.getTarballStats(versions[versionToPublish], buffer);\n // Older package managers like npm6 do not send readme content as part of version but include it on root level\n if (_.isEmpty(versions[versionToPublish].readme)) {\n versions[versionToPublish].readme =\n _.isNil(manifest.readme) === false ? String(manifest.readme) : '';\n }\n // addVersion will move the readme from the the published version to the root level\n await this.addVersion(name, versionToPublish, versions[versionToPublish], null, tarballStats);\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'updated version has failed: @{err}');\n debug('error on create a version for %o with error %o', name, err.message);\n throw err;\n }\n\n // 2. update and merge tags\n let mergedManifest;\n try {\n // note: I could merge this with addVersion()\n // 1. add version\n // 2. merge versions\n // 3. upload tarball\n // 4. update once to the storage (easy peasy)\n mergedManifest = await this.mergeTagsNext(name, manifest[DIST_TAGS]);\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'merge version has failed: @{err}');\n debug('error on create a version for %o with error %o', name, err.message);\n // TODO: undo if this fails\n // 1. remove updated version\n throw err;\n }\n\n // 3. upload the tarball to the storage\n try {\n const readable = Readable.from(buffer);\n await this.uploadTarball(name, basename(firstAttachmentKey), readable, {\n signal: options.signal,\n });\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'upload tarball has failed: @{err}');\n // TODO: undo if this fails\n // 1. remove updated version\n // 2. remove new dist tags\n throw err;\n }\n\n this.logger.info(\n { name, version: versionToPublish },\n 'package @{name}@@{version} has been published'\n );\n\n return [mergedManifest, versionToPublish, successResponseMessage];\n }\n\n // TODO: pending implementation\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async notify(_manifest: Manifest, _message: string): Promise<void> {\n return;\n }\n\n private getProxyList() {\n const uplinksList = Object.keys(this.uplinks);\n\n return uplinksList;\n }\n\n /**\n * Wrap uploadTarballAsStream into a promise.\n * @param name package name\n * @param fileName tarball name\n * @param contentReadable content as readable stream\n * @param options\n * @returns\n */\n public uploadTarball(\n name: string,\n fileName: string,\n contentReadable: Readable,\n { signal }\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n this.uploadTarballAsStream(name, fileName, {\n signal,\n })\n .then((stream) => {\n stream.on('error', (err) => {\n debug(\n 'error on stream a tarball %o for %o with error %o',\n 'foo.tar.gz',\n name,\n err.message\n );\n reject(err);\n });\n stream.on('success', () => {\n this.logger.debug(\n { fileName, name },\n 'file @{fileName} for package @{name} has been successfully uploaded'\n );\n resolve();\n });\n return stream;\n })\n .then((stream) => {\n pipeline(contentReadable, stream, { signal })\n .then(() => {\n debug('success pipe upload tarball');\n })\n .catch(reject);\n });\n });\n }\n\n private async uploadTarballAsStream(\n pkgName: string,\n filename: string,\n { signal }\n ): Promise<PassThrough> {\n debug(`add a tarball for %o`, pkgName);\n assert(validatioUtils.validateName(filename));\n\n const shaOneHash = createTarballHash();\n const transformHash = new Transform({\n transform(chunk: any, _encoding: string, callback: any): void {\n // measure the length for validation reasons\n shaOneHash.update(chunk);\n callback(null, chunk);\n },\n });\n const uploadStream = new PassThrough();\n const storage = this.getPrivatePackageStorage(pkgName);\n\n // FUTURE: this validation could happen even before\n if (pkgName === PROTO_NAME) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getForbidden());\n });\n return uploadStream;\n }\n\n // FIXME: this condition will never met, storage is always defined\n if (!storage) {\n process.nextTick((): void => {\n uploadStream.emit('error', \"can't upload this package storage is missing\");\n });\n return uploadStream;\n }\n\n const fileDoesExist = await storage.hasTarball(filename);\n if (fileDoesExist) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getConflict());\n });\n } else {\n const localStorageWriteStream = await storage.writeTarball(filename, { signal });\n\n localStorageWriteStream.on('open', async () => {\n await pipeline(uploadStream, transformHash, localStorageWriteStream, { signal });\n });\n\n // once the file descriptor has been closed\n localStorageWriteStream.on('close', async () => {\n try {\n debug('uploaded tarball %o for %o', filename, pkgName);\n // update the package metadata\n await this.updatePackage(pkgName, async (data: Manifest): Promise<Manifest> => {\n const newData: Manifest = { ...data };\n debug('added _attachment for %o', pkgName);\n newData._attachments[filename] = {\n // TODO: add integrity hash here\n shasum: shaOneHash.digest('hex'),\n };\n\n return newData;\n });\n debug('emit success for %o', pkgName);\n uploadStream.emit('success');\n } catch (err: any) {\n // FUTURE: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n debug(\n 'something has failed on upload tarball %o for %o : %s',\n filename,\n pkgName,\n err.message\n );\n uploadStream.emit('error', err);\n }\n });\n\n // something went wrong writing into the local storage\n localStorageWriteStream.on('error', async (err: any) => {\n uploadStream.emit('error', err);\n });\n }\n\n return uploadStream;\n }\n\n /**\n * Add a new version to a package.\n * @param name package name\n * @param version version\n * @param metadata version metadata\n * @param tag tag of the version\n */\n private async addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n tarballStats: TarballDetails\n ): Promise<void> {\n debug(`add version %s package for %s`, version, name);\n await this.updatePackage(name, async (data: Manifest): Promise<Manifest> => {\n // keep only one readme per package\n data.readme = metadata.readme;\n debug('%s readme mutated', name);\n // TODO: lodash remove\n metadata = cleanUpReadme(metadata);\n metadata.contributors = normalizeContributors(metadata.contributors as Author[]);\n debug('%s contributors normalized', name);\n\n // Copy current owners to version\n metadata.maintainers = data.maintainers;\n\n // Update tarball stats\n if (metadata.dist) {\n metadata.dist.fileCount = tarballStats.fileCount;\n metadata.dist.unpackedSize = tarballStats.unpackedSize;\n }\n\n // if uploaded tarball has a different shasum, it's very likely that we\n // have some kind of error\n if (validatioUtils.isObject(metadata.dist) && _.isString(metadata.dist.tarball)) {\n const tarball = extractTarballFromUrl(metadata.dist.tarball);\n if (validatioUtils.isObject(data._attachments[tarball])) {\n if (\n _.isNil(data._attachments[tarball].shasum) === false &&\n _.isNil(metadata.dist.shasum) === false\n ) {\n if (data._attachments[tarball].shasum != metadata.dist.shasum) {\n const errorMessage =\n `shasum error, ` +\n `${data._attachments[tarball].shasum} != ${metadata.dist.shasum}`;\n throw errorUtils.getBadRequest(errorMessage);\n }\n }\n data._attachments[tarball].version = version;\n }\n\n // if the time field doesn't exist, we create it, some old storage\n // might not have it\n // https://github.com/verdaccio/verdaccio/issues/740\n if (_.isNil(data.time)) {\n this.logger.warn(\n { name },\n 'time field could not be found, it has been recreated for @{name}'\n );\n data.time = {};\n }\n\n // populate the time field with the date of the version\n const currentDate = new Date().toISOString();\n data.time.modified = currentDate;\n if (!data.time?.created) {\n data.time.created = currentDate;\n }\n\n if (typeof data.time[version] === 'string') {\n // this should not h appen, but we keep this check to avoid or easy bug report\n this.logger.warn(\n { name, version },\n 'the time for the version @{version} already exists, it has been overwritten for package @{name}'\n );\n }\n data.time[version] = currentDate;\n debug('time added for %s version %s', name, version);\n }\n\n data.versions[version] = metadata;\n // TODO: review this method, it's a bit ugly\n tagVersion(data, version, tag);\n\n try {\n debug('%s add on database', name);\n await this.localStorage.getStoragePlugin().add(name);\n this.logger.debug({ name, version }, 'version @{version} added to database for @{name}');\n } catch (err: any) {\n throw errorUtils.getBadData(err.message);\n }\n return data;\n });\n }\n\n /**\n * Create an empty new local cache package without versions.\n * @param name name of the package\n * @returns\n */\n private async createNewLocalCachePackage(\n name: string,\n username: string | undefined\n ): Promise<void> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n\n if (!storage) {\n debug(`storage is missing for %o package cannot be added`, name);\n throw errorUtils.getNotFound('this package cannot be added');\n }\n\n const currentTime = new Date().toISOString();\n const packageData: Manifest = {\n ...generatePackageTemplate(name),\n time: {\n created: currentTime,\n modified: currentTime,\n },\n };\n\n // Set initial package owner\n // TODO: Add email of user\n packageData.maintainers =\n username && username.length > 0\n ? [{ name: username, email: '' }]\n : [{ name: DEFAULT_USER, email: '' }];\n\n try {\n await storage.createPackage(name, packageData);\n this.logger.info({ name }, 'created new package @{name}');\n return;\n } catch (err: any) {\n if (\n _.isNull(err) === false &&\n (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)\n ) {\n debug(`error on creating a package for %o with error %o`, name, err.message);\n throw errorUtils.getConflict();\n }\n return;\n }\n }\n\n /**\n *\n * @param name package name\n * @param uplinksLook\n * @returns\n */\n private async checkPackageRemote(name: string, uplinksLook: boolean): Promise<Manifest | null> {\n try {\n // we provide a null manifest, thus the manifest returned will be the remote one\n const [remoteManifest, upLinksErrors] = await this.syncUplinksMetadata(name, null, {\n uplinksLook,\n });\n\n // checking package exist already\n if (isNil(remoteManifest) === false) {\n throw 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 (upLinksErrors) {\n return null;\n }\n\n throw errorUtils.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE_PUBLISH);\n }\n }\n }\n return remoteManifest;\n } catch (err: any) {\n if (err && err.status !== HTTP_STATUS.NOT_FOUND) {\n throw err;\n }\n return null;\n }\n }\n\n private setDefaultRevision(json: Manifest): Manifest {\n // calculate revision from couch db\n if (_.isString(json._rev) === false) {\n json._rev = STORAGE.DEFAULT_REVISION;\n }\n\n // this is intended in debug mode we do not want modify the store revision\n if (_.isNil(this.config._debug)) {\n const prev = json._rev;\n json._rev = generateRevision(json._rev);\n debug('revision metadata for %s updated from %s to %s', json.name, prev, json._rev);\n }\n\n return json;\n }\n\n private async writePackage(name: string, json: Manifest): Promise<void> {\n const storage: any = this.getPrivatePackageStorage(name);\n if (_.isNil(storage)) {\n // TODO: replace here 500 error\n throw errorUtils.getBadData();\n }\n await storage.savePackage(name, this.setDefaultRevision(json));\n }\n\n /**\n * @param {*} name package name\n * @param {*} updateHandler function(package, cb) - update function\n * @param {*} callback callback that gets invoked after it's all updated\n * @return {Function}\n */\n private async updatePackage(\n name: string,\n updateHandler: (manifest: Manifest) => Promise<Manifest>\n ): Promise<Manifest> {\n const storage: pluginUtils.StorageHandler = this.getPrivatePackageStorage(name);\n\n if (!storage) {\n throw errorUtils.getNotFound();\n }\n\n // we update the package on the local storage\n const updatedManifest: Manifest = await storage.updatePackage(name, updateHandler);\n // after correctly updated write to the storage\n try {\n await this.writePackage(name, normalizePackage(updatedManifest));\n return updatedManifest;\n } catch (err: any) {\n if (err.code === resourceNotAvailable) {\n throw errorUtils.getInternalError('resource temporarily unavailable');\n } else if (err.code === noSuchFile) {\n throw errorUtils.getNotFound();\n } else {\n throw err;\n }\n }\n }\n\n /**\n *\n * @protected\n * @param {IGetPackageOptionsNext} options\n * @return {*} {Promise<[Manifest, any[]]>}\n * @memberof AbstractStorage\n */\n private async getPackageNext(options: IGetPackageOptionsNext): Promise<[Manifest, any[]]> {\n const { name } = options;\n debug('get package for %o', name);\n let data: Manifest | null = null;\n\n try {\n data = await this.getPackageLocalMetadata(name);\n } catch (err: any) {\n // if error code is higher than 500 stop here\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n throw err;\n }\n }\n\n // if we can't get the local metadata, we try to get the remote metadata\n // if we do to have local metadata, we try to update it with the upstream registry\n debug('sync uplinks for %o', name);\n const [remoteManifest, upLinksErrors] = await this.syncUplinksMetadata(name, data, {\n uplinksLook: options.uplinksLook,\n retry: options.retry,\n remoteAddress: options.requestOptions.remoteAddress,\n // etag??\n });\n\n // if either local data and upstream data are empty, we throw an error\n if (!remoteManifest && _.isNull(data)) {\n throw errorUtils.getNotFound(`${API_ERROR.NOT_PACKAGE_UPLINK}: ${name}`);\n // if the remote manifest is empty, we return local data\n } else if (!remoteManifest && !_.isNull(data)) {\n // no data on uplinks\n return [data as Manifest, upLinksErrors];\n }\n\n // if we have local data, we try to update it with the upstream registry\n const normalizedPkg = Object.assign({}, remoteManifest, {\n // FIXME: clean up mutation within cleanUpLinksRef method\n ...normalizeDistTags(cleanUpLinksRef(remoteManifest as Manifest, options.keepUpLinkData)),\n _attachments: {},\n });\n\n debug('no sync uplinks errors %o for %s', upLinksErrors?.length, name);\n return [normalizedPkg, upLinksErrors];\n }\n\n /**\n * Function fetches package metadata from uplinks and synchronizes it with local data\n if package is available locally, it MUST be provided in pkginfo.\n\n Using this example:\n\n \"jquery\":\n access: $all\n publish: $authenticated\n unpublish: $authenticated\n # two uplinks setup\n proxy: ver npmjs\n # one uplink setup\n proxy: npmjs\n\n A package requires uplinks syncronization if enables the proxy section, uplinks\n can be more than one, the more are the most slow request will take, the request\n are made in serial and if 1st call fails, the second will be triggered, otherwise\n the 1st will reply and others will be discarded. The order is important.\n\n Errors on upkinks are considered are, time outs, connection fails and http status 304,\n in that case the request returns empty body and we want ask next on the list if has fresh\n updates.\n */\n public async syncUplinksMetadata(\n name: string,\n localManifest: Manifest | null,\n options: Partial<ISyncUplinksOptions> = {}\n ): Promise<[Manifest | null, any]> {\n let found = localManifest !== null;\n let syncManifest: Manifest | null = null;\n const upLinks: string[] = [];\n const hasToLookIntoUplinks = _.isNil(options.uplinksLook) || options.uplinksLook;\n debug('is sync uplink enabled %o', hasToLookIntoUplinks);\n\n for (const uplink in this.uplinks) {\n if (hasProxyTo(name, uplink, this.config.packages) && hasToLookIntoUplinks) {\n debug('sync uplink %o', uplink);\n upLinks.push(uplink);\n }\n }\n\n // if none uplink match we return the local manifest\n if (upLinks.length === 0) {\n debug('no uplinks found for %o upstream update aborted', name);\n return [localManifest, []];\n }\n\n const uplinksErrors: any[] = [];\n // we resolve uplinks async in series, first come first serve\n for (const uplink of upLinks) {\n try {\n const tempManifest = _.isNil(localManifest)\n ? generatePackageTemplate(name)\n : { ...localManifest };\n syncManifest = await this.mergeCacheRemoteMetadata(\n this.uplinks[uplink],\n tempManifest,\n options\n );\n debug('syncing on uplink %o', syncManifest.name);\n if (_.isNil(syncManifest) === false) {\n found = true;\n break;\n }\n } catch (err: any) {\n debug('error captured on uplink %o', err.message);\n uplinksErrors.push(err);\n // enforce use next uplink on the list\n continue;\n }\n }\n\n if (found && syncManifest !== null) {\n // updates the local cache manifest with fresh data\n let updatedCacheManifest = await this.updateVersionsNext(name, syncManifest);\n // plugin filter applied to the manifest\n const [filteredManifest, filtersErrors] = await this.applyFilters(updatedCacheManifest);\n return [\n { ...updatedCacheManifest, ...filteredManifest },\n [...uplinksErrors, ...filtersErrors],\n ];\n } else if (found && _.isNil(localManifest) === false) {\n return [localManifest, uplinksErrors];\n } else {\n // if is not found, calculate the right error to return\n debug('uplinks sync failed with %o errors', uplinksErrors.length);\n for (const err of uplinksErrors) {\n const { code } = err;\n if (code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT' || code === 'ECONNRESET') {\n debug('uplinks sync failed with timeout error');\n throw errorUtils.getServiceUnavailable(err.code);\n }\n // we bubble up the 304 special error case\n if (code === HTTP_STATUS.NOT_MODIFIED) {\n debug('uplinks sync failed with 304 error');\n throw err;\n }\n }\n debug('uplinks sync failed with no package found');\n\n throw errorUtils.getNotFound(API_ERROR.NO_PACKAGE);\n }\n }\n\n /**\n * Merge a manifest with a remote manifest.\n *\n * If the uplinks are not available, the local manifest is returned.\n * If the uplinks are available, the local manifest is merged with the remote one.\n *\n *\n * @param uplink uplink instance\n * @param cachedManifest the local cached manifest\n * @param options options\n * @returns Returns a promise that resolves with the merged manifest.\n */\n private async mergeCacheRemoteMetadata(\n uplink: IProxy,\n cachedManifest: Manifest,\n options: Partial<ISyncUplinksOptions>\n ): Promise<Manifest> {\n // we store which uplink is updating the manifest\n const upLinkMeta = cachedManifest._uplinks[uplink.upname];\n let _cacheManifest = { ...cachedManifest };\n\n if (validatioUtils.isObject(upLinkMeta)) {\n const fetched = upLinkMeta.fetched;\n\n // we check the uplink cache is fresh\n if (fetched && Date.now() - fetched < uplink.maxage) {\n return cachedManifest;\n }\n }\n\n const remoteOptions = Object.assign({}, options, {\n etag: upLinkMeta?.etag,\n });\n\n // get the latest metadata from the uplink\n const [remoteManifest, etag] = await uplink.getRemoteMetadata(\n _cacheManifest.name,\n remoteOptions\n );\n\n try {\n _cacheManifest = validatioUtils.normalizeMetadata(_cacheManifest, _cacheManifest.name);\n } catch (err: any) {\n this.logger.error(\n {\n err: err,\n },\n 'package.json validating error @{!err?.message}\\n@{err.stack}'\n );\n throw err;\n }\n // updates the _uplink metadata fields, cache, etc\n _cacheManifest = updateUpLinkMetadata(uplink.upname, _cacheManifest, etag);\n // merge time field cache and remote\n _cacheManifest = mergeUplinkTimeIntoLocalNext(_cacheManifest, remoteManifest);\n // update the _uplinks field in the cache\n _cacheManifest = updateVersionsHiddenUpLinkNext(_cacheManifest, uplink);\n try {\n // merge versions from remote into the cache\n _cacheManifest = mergeVersions(_cacheManifest, remoteManifest);\n return _cacheManifest;\n } catch (err: any) {\n this.logger.error(\n {\n err: err,\n },\n 'package.json merge has failed @{!err?.message}\\n@{err.stack}'\n );\n throw err;\n }\n }\n\n /**\n * Apply filters to manifest.\n * @param manifest\n * @returns\n */\n public async applyFilters(manifest: Manifest): Promise<[Manifest, any]> {\n if (this.filters === null || this.filters.length === 0) {\n return [manifest, []];\n }\n\n let filterPluginErrors: any[] = [];\n let filteredManifest = { ...manifest };\n for (const filter of this.filters) {\n // These filters can assume it's save to modify packageJsonLocal\n // and return it directly for\n // performance (i.e. need not be pure)\n try {\n filteredManifest = await filter.filter_metadata(manifest);\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'filter has failed @{err}');\n filterPluginErrors.push(err);\n }\n }\n return [filteredManifest, filterPluginErrors];\n }\n\n private _createNewPackageNext(name: string): Manifest {\n return normalizePackage(generatePackageTemplate(name));\n }\n\n /**\n * Ensure the dist file remains as the same protocol\n * @param {Object} hash metadata\n * @param {String} upLinkKey registry key\n * @private\n * @deprecated use _updateUplinkToRemoteProtocolNext (???)\n */\n private updateUplinkToRemoteProtocol(hash: DistFile, upLinkKey: string): void {\n // if we got this information from a known registry,\n // use the same protocol for the tarball\n const tarballUrl: any = URL.parse(hash.url);\n const uplinkUrl: any = URL.parse(this.config.uplinks[upLinkKey].url);\n\n if (uplinkUrl.host === tarballUrl.host) {\n tarballUrl.protocol = uplinkUrl.protocol;\n hash.registry = upLinkKey;\n hash.url = URL.format(tarballUrl);\n }\n }\n\n /**\n * Create or read a package.\n *\n * If the package already exists, it will be read.\n * If the package is not found, it will be created.\n * If the error is anything else will throw an error\n *\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private async readCreatePackage(pkgName: string): Promise<Manifest> {\n const storage: any = this.getPrivatePackageStorage(pkgName);\n if (_.isNil(storage)) {\n throw errorUtils.getInternalError('storage could not be found');\n }\n\n try {\n const result: Manifest = await storage.readPackage(pkgName);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n return this._createNewPackageNext(pkgName);\n } else {\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `'error reading' @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n }\n\n /**\n Updates the local cache with the merge from the remote/client manifest.\n\n The steps are the following.\n 1. Get the latest version of the package from the cache.\n 2. If does not exist will return a \n\n @param name\n @param remoteManifest\n @returns return a merged manifest.\n */\n public async updateVersionsNext(name: string, remoteManifest: Manifest): Promise<Manifest> {\n debug(`updating versions for package %o`, name);\n let cacheManifest: Manifest = await this.readCreatePackage(name);\n let change = false;\n // updating readme\n cacheManifest.readme = getLatestReadme(remoteManifest);\n if (remoteManifest.readme !== cacheManifest.readme) {\n debug('manifest readme updated for %o', name);\n change = true;\n }\n\n debug('updating new remote versions');\n for (const versionId in remoteManifest.versions) {\n // if detect a new remote version does not exist cache\n if (_.isNil(cacheManifest.versions[versionId])) {\n debug('new version from upstream %o', versionId);\n let version = remoteManifest.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\n // TODO: readme clean up could be saved in configured eventually\n version = cleanUpReadme(version);\n debug('clean up readme for %o', versionId);\n version.contributors = normalizeContributors(version.contributors as Author[]);\n\n change = true;\n cacheManifest.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const filename = pkgUtils.extractTarballName(version.dist.tarball);\n // store a fast access to the dist file by tarball name\n // it does NOT overwrite any existing records\n if (_.isNil(cacheManifest?._distfiles[filename])) {\n const hash: DistFile = (cacheManifest._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n // store cache metadata this the manifest\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n if (_.isNil(upLink) === false) {\n this.updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n } else {\n debug('no new versions from upstream %s', name);\n }\n }\n\n debug('update dist-tags');\n for (const tag in remoteManifest[DIST_TAGS]) {\n if (\n !cacheManifest[DIST_TAGS][tag] ||\n cacheManifest[DIST_TAGS][tag] !== remoteManifest[DIST_TAGS][tag]\n ) {\n change = true;\n cacheManifest[DIST_TAGS][tag] = remoteManifest[DIST_TAGS][tag];\n }\n }\n\n for (const up in remoteManifest._uplinks) {\n if (Object.prototype.hasOwnProperty.call(remoteManifest._uplinks, up)) {\n const need_change =\n !isObject(cacheManifest._uplinks[up]) ||\n remoteManifest._uplinks[up].etag !== cacheManifest._uplinks[up].etag ||\n remoteManifest._uplinks[up].fetched !== cacheManifest._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n cacheManifest._uplinks[up] = remoteManifest._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in remoteManifest && !_.isEqual(cacheManifest.time, remoteManifest.time)) {\n cacheManifest.time = remoteManifest.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n await this.writePackage(name, cacheManifest);\n return cacheManifest;\n } else {\n return cacheManifest;\n }\n }\n\n private async getTarballStats(version: Version, buffer: Buffer): Promise<TarballDetails> {\n if (\n version.dist == undefined ||\n version.dist?.fileCount == undefined ||\n version.dist?.unpackedSize == undefined\n ) {\n debug('tarball stats not found, calculating');\n return await getTarballDetails(buffer);\n } else {\n debug('tarball stats found');\n return { fileCount: version.dist.fileCount, unpackedSize: version.dist.unpackedSize };\n }\n }\n\n private async checkAllowedToChangePackage(manifest: Manifest, username: string | undefined) {\n // Checks to perform if config \"publish:check_owners\" is true\n debug('check if user %o is an owner and allowed to change package', username);\n // if name of owner is not included in list of maintainers, then throw an error\n if (\n this.config?.publish?.check_owners === true &&\n manifest.maintainers &&\n manifest.maintainers.length > 0 &&\n !manifest.maintainers.some((maintainer) => maintainer.name === username)\n ) {\n this.logger.error({ username }, '@{username} is not a maintainer (package owner)');\n throw Error('only owners are allowed to change package');\n }\n }\n}\n\nexport { Storage };\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/store",
3
- "version": "8.0.0-next-8.0",
3
+ "version": "8.0.0-next-8.2",
4
4
  "description": "loaders logic",
5
5
  "main": "./build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -29,17 +29,17 @@
29
29
  "node": ">=18"
30
30
  },
31
31
  "dependencies": {
32
- "@verdaccio/config": "8.0.0-next-8.0",
33
- "@verdaccio/core": "8.0.0-next-8.0",
34
- "@verdaccio/hooks": "8.0.0-next-8.0",
35
- "@verdaccio/loaders": "8.0.0-next-8.0",
36
- "@verdaccio/local-storage": "13.0.0-next-8.0",
37
- "@verdaccio/logger": "8.0.0-next-8.0",
38
- "@verdaccio/proxy": "8.0.0-next-8.0",
39
- "@verdaccio/search": "8.0.0-next-8.0",
40
- "@verdaccio/tarball": "13.0.0-next-8.0",
41
- "@verdaccio/url": "13.0.0-next-8.0",
42
- "@verdaccio/utils": "7.0.1-next-8.0",
32
+ "@verdaccio/config": "8.0.0-next-8.2",
33
+ "@verdaccio/core": "8.0.0-next-8.2",
34
+ "@verdaccio/hooks": "8.0.0-next-8.2",
35
+ "@verdaccio/loaders": "8.0.0-next-8.2",
36
+ "@verdaccio/local-storage": "13.0.0-next-8.2",
37
+ "@verdaccio/logger": "8.0.0-next-8.2",
38
+ "@verdaccio/proxy": "8.0.0-next-8.2",
39
+ "@verdaccio/search": "8.0.0-next-8.2",
40
+ "@verdaccio/tarball": "13.0.0-next-8.2",
41
+ "@verdaccio/url": "13.0.0-next-8.2",
42
+ "@verdaccio/utils": "7.1.0-next-8.2",
43
43
  "JSONStream": "1.3.5",
44
44
  "debug": "4.3.7",
45
45
  "lodash": "4.17.21",
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "devDependencies": {
50
50
  "@verdaccio/test-helper": "4.0.0-next-8.0",
51
- "@verdaccio/types": "13.0.0-next-8.0",
51
+ "@verdaccio/types": "13.0.0-next-8.1",
52
52
  "mockdate": "3.0.5",
53
53
  "nock": "13.5.1",
54
54
  "node-mocks-http": "1.14.1"