@verdaccio/core 8.0.0-next-8.5 → 8.0.0-next-8.7

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,13 @@
1
1
  # @verdaccio/core
2
2
 
3
+ ## 8.0.0-next-8.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 589ea7f: chore: move tarball utils to core
8
+
9
+ ## 8.0.0-next-8.6
10
+
3
11
  ## 8.0.0-next-8.5
4
12
 
5
13
  ### Patch Changes
package/build/index.d.ts CHANGED
@@ -6,9 +6,10 @@ import * as pluginUtils from './plugin-utils';
6
6
  import * as searchUtils from './search-utils';
7
7
  import * as streamUtils from './stream-utils';
8
8
  import * as stringUtils from './string-utils';
9
+ import * as tarballUtils from './tarball-utils';
9
10
  import * as validatioUtils from './validation-utils';
10
11
  import * as warningUtils from './warning-utils';
11
12
  export { VerdaccioError, API_ERROR, SUPPORT_ERRORS, APP_ERROR } from './error-utils';
12
13
  export { TOKEN_BASIC, TOKEN_BEARER, HTTP_STATUS, API_MESSAGE, HEADERS, DIST_TAGS, CHARACTER_ENCODING, HEADER_TYPE, LATEST, DEFAULT_PASSWORD_VALIDATION, DEFAULT_USER, USERS, MAINTAINERS, PLUGIN_CATEGORY, HtpasswdHashAlgorithm, } from './constants';
13
14
  declare const validationUtils: typeof validatioUtils;
14
- export { fileUtils, pkgUtils, searchUtils, streamUtils, errorUtils, validatioUtils, validationUtils, stringUtils, constants, pluginUtils, warningUtils, };
15
+ export { fileUtils, pkgUtils, searchUtils, streamUtils, errorUtils, validatioUtils, validationUtils, stringUtils, constants, pluginUtils, warningUtils, tarballUtils, };
package/build/index.js CHANGED
@@ -117,7 +117,7 @@ Object.defineProperty(exports, "VerdaccioError", {
117
117
  return errorUtils.VerdaccioError;
118
118
  }
119
119
  });
120
- exports.warningUtils = exports.validationUtils = exports.validatioUtils = exports.stringUtils = exports.streamUtils = exports.searchUtils = exports.pluginUtils = exports.pkgUtils = exports.fileUtils = exports.errorUtils = exports.constants = void 0;
120
+ exports.warningUtils = exports.validationUtils = exports.validatioUtils = exports.tarballUtils = exports.stringUtils = exports.streamUtils = exports.searchUtils = exports.pluginUtils = exports.pkgUtils = exports.fileUtils = exports.errorUtils = exports.constants = void 0;
121
121
  var constants = _interopRequireWildcard(require("./constants"));
122
122
  exports.constants = constants;
123
123
  var errorUtils = _interopRequireWildcard(require("./error-utils"));
@@ -134,6 +134,8 @@ var streamUtils = _interopRequireWildcard(require("./stream-utils"));
134
134
  exports.streamUtils = streamUtils;
135
135
  var stringUtils = _interopRequireWildcard(require("./string-utils"));
136
136
  exports.stringUtils = stringUtils;
137
+ var tarballUtils = _interopRequireWildcard(require("./tarball-utils"));
138
+ exports.tarballUtils = tarballUtils;
137
139
  var validatioUtils = _interopRequireWildcard(require("./validation-utils"));
138
140
  exports.validatioUtils = validatioUtils;
139
141
  var warningUtils = _interopRequireWildcard(require("./warning-utils"));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["constants","_interopRequireWildcard","require","exports","errorUtils","fileUtils","pkgUtils","pluginUtils","searchUtils","streamUtils","stringUtils","validatioUtils","warningUtils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","validationUtils"],"sources":["../src/index.ts"],"sourcesContent":["import * as constants from './constants';\nimport * as errorUtils from './error-utils';\nimport * as fileUtils from './file-utils';\nimport * as pkgUtils from './pkg-utils';\nimport * as pluginUtils from './plugin-utils';\nimport * as searchUtils from './search-utils';\nimport * as streamUtils from './stream-utils';\nimport * as stringUtils from './string-utils';\nimport * as validatioUtils from './validation-utils';\nimport * as warningUtils from './warning-utils';\n\nexport { VerdaccioError, API_ERROR, SUPPORT_ERRORS, APP_ERROR } from './error-utils';\nexport {\n TOKEN_BASIC,\n TOKEN_BEARER,\n HTTP_STATUS,\n API_MESSAGE,\n HEADERS,\n DIST_TAGS,\n CHARACTER_ENCODING,\n HEADER_TYPE,\n LATEST,\n DEFAULT_PASSWORD_VALIDATION,\n DEFAULT_USER,\n USERS,\n MAINTAINERS,\n PLUGIN_CATEGORY,\n HtpasswdHashAlgorithm,\n} from './constants';\nconst validationUtils = validatioUtils;\nexport {\n fileUtils,\n pkgUtils,\n searchUtils,\n streamUtils,\n errorUtils,\n // TODO: remove this typo\n validatioUtils,\n validationUtils,\n stringUtils,\n constants,\n pluginUtils,\n warningUtils,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAyCC,OAAA,CAAAH,SAAA,GAAAA,SAAA;AACzC,IAAAI,UAAA,GAAAH,uBAAA,CAAAC,OAAA;AAA4CC,OAAA,CAAAC,UAAA,GAAAA,UAAA;AAC5C,IAAAC,SAAA,GAAAJ,uBAAA,CAAAC,OAAA;AAA0CC,OAAA,CAAAE,SAAA,GAAAA,SAAA;AAC1C,IAAAC,QAAA,GAAAL,uBAAA,CAAAC,OAAA;AAAwCC,OAAA,CAAAG,QAAA,GAAAA,QAAA;AACxC,IAAAC,WAAA,GAAAN,uBAAA,CAAAC,OAAA;AAA8CC,OAAA,CAAAI,WAAA,GAAAA,WAAA;AAC9C,IAAAC,WAAA,GAAAP,uBAAA,CAAAC,OAAA;AAA8CC,OAAA,CAAAK,WAAA,GAAAA,WAAA;AAC9C,IAAAC,WAAA,GAAAR,uBAAA,CAAAC,OAAA;AAA8CC,OAAA,CAAAM,WAAA,GAAAA,WAAA;AAC9C,IAAAC,WAAA,GAAAT,uBAAA,CAAAC,OAAA;AAA8CC,OAAA,CAAAO,WAAA,GAAAA,WAAA;AAC9C,IAAAC,cAAA,GAAAV,uBAAA,CAAAC,OAAA;AAAqDC,OAAA,CAAAQ,cAAA,GAAAA,cAAA;AACrD,IAAAC,YAAA,GAAAX,uBAAA,CAAAC,OAAA;AAAgDC,OAAA,CAAAS,YAAA,GAAAA,YAAA;AAAA,SAAAC,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,SAAAb,wBAAAa,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;AAoBhD,MAAMW,eAAe,GAAA9B,OAAA,CAAA8B,eAAA,GAAGtB,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["constants","_interopRequireWildcard","require","exports","errorUtils","fileUtils","pkgUtils","pluginUtils","searchUtils","streamUtils","stringUtils","tarballUtils","validatioUtils","warningUtils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","validationUtils"],"sources":["../src/index.ts"],"sourcesContent":["import * as constants from './constants';\nimport * as errorUtils from './error-utils';\nimport * as fileUtils from './file-utils';\nimport * as pkgUtils from './pkg-utils';\nimport * as pluginUtils from './plugin-utils';\nimport * as searchUtils from './search-utils';\nimport * as streamUtils from './stream-utils';\nimport * as stringUtils from './string-utils';\nimport * as tarballUtils from './tarball-utils';\nimport * as validatioUtils from './validation-utils';\nimport * as warningUtils from './warning-utils';\n\nexport { VerdaccioError, API_ERROR, SUPPORT_ERRORS, APP_ERROR } from './error-utils';\nexport {\n TOKEN_BASIC,\n TOKEN_BEARER,\n HTTP_STATUS,\n API_MESSAGE,\n HEADERS,\n DIST_TAGS,\n CHARACTER_ENCODING,\n HEADER_TYPE,\n LATEST,\n DEFAULT_PASSWORD_VALIDATION,\n DEFAULT_USER,\n USERS,\n MAINTAINERS,\n PLUGIN_CATEGORY,\n HtpasswdHashAlgorithm,\n} from './constants';\nconst validationUtils = validatioUtils;\nexport {\n fileUtils,\n pkgUtils,\n searchUtils,\n streamUtils,\n errorUtils,\n // TODO: remove this typo\n validatioUtils,\n validationUtils,\n stringUtils,\n constants,\n pluginUtils,\n warningUtils,\n tarballUtils,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAyCC,OAAA,CAAAH,SAAA,GAAAA,SAAA;AACzC,IAAAI,UAAA,GAAAH,uBAAA,CAAAC,OAAA;AAA4CC,OAAA,CAAAC,UAAA,GAAAA,UAAA;AAC5C,IAAAC,SAAA,GAAAJ,uBAAA,CAAAC,OAAA;AAA0CC,OAAA,CAAAE,SAAA,GAAAA,SAAA;AAC1C,IAAAC,QAAA,GAAAL,uBAAA,CAAAC,OAAA;AAAwCC,OAAA,CAAAG,QAAA,GAAAA,QAAA;AACxC,IAAAC,WAAA,GAAAN,uBAAA,CAAAC,OAAA;AAA8CC,OAAA,CAAAI,WAAA,GAAAA,WAAA;AAC9C,IAAAC,WAAA,GAAAP,uBAAA,CAAAC,OAAA;AAA8CC,OAAA,CAAAK,WAAA,GAAAA,WAAA;AAC9C,IAAAC,WAAA,GAAAR,uBAAA,CAAAC,OAAA;AAA8CC,OAAA,CAAAM,WAAA,GAAAA,WAAA;AAC9C,IAAAC,WAAA,GAAAT,uBAAA,CAAAC,OAAA;AAA8CC,OAAA,CAAAO,WAAA,GAAAA,WAAA;AAC9C,IAAAC,YAAA,GAAAV,uBAAA,CAAAC,OAAA;AAAgDC,OAAA,CAAAQ,YAAA,GAAAA,YAAA;AAChD,IAAAC,cAAA,GAAAX,uBAAA,CAAAC,OAAA;AAAqDC,OAAA,CAAAS,cAAA,GAAAA,cAAA;AACrD,IAAAC,YAAA,GAAAZ,uBAAA,CAAAC,OAAA;AAAgDC,OAAA,CAAAU,YAAA,GAAAA,YAAA;AAAA,SAAAC,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,SAAAd,wBAAAc,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;AAoBhD,MAAMW,eAAe,GAAA/B,OAAA,CAAA+B,eAAA,GAAGtB,cAAc","ignoreList":[]}
@@ -1,11 +1,4 @@
1
1
  import { Manifest } from '@verdaccio/types';
2
- /**
3
- * Extract the tarball name from a registry dist url
4
- * 'https://registry.npmjs.org/test/-/test-0.0.2.tgz'
5
- * @param tarball tarball url
6
- * @returns tarball filename
7
- */
8
- export declare function extractTarballName(tarball: string): any;
9
2
  /**
10
3
  * Function filters out bad semver versions and sorts the array.
11
4
  * @return {Array} sorted Array
@@ -3,26 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.extractTarballName = extractTarballName;
7
6
  exports.getLatest = getLatest;
8
7
  exports.mergeVersions = mergeVersions;
9
8
  exports.semverSort = semverSort;
10
9
  var _semver = _interopRequireDefault(require("semver"));
11
- var _url = require("url");
12
10
  var _constants = require("./constants");
13
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
- /**
15
- * Extract the tarball name from a registry dist url
16
- * 'https://registry.npmjs.org/test/-/test-0.0.2.tgz'
17
- * @param tarball tarball url
18
- * @returns tarball filename
19
- */
20
- function extractTarballName(tarball) {
21
- const urlObject = new _url.URL(tarball);
22
- const filename = urlObject.pathname.replace(/^.*\//, '');
23
- return filename;
24
- }
25
-
26
12
  /**
27
13
  * Function filters out bad semver versions and sorts the array.
28
14
  * @return {Array} sorted Array
@@ -1 +1 @@
1
- {"version":3,"file":"pkg-utils.js","names":["_semver","_interopRequireDefault","require","_url","_constants","e","__esModule","default","extractTarballName","tarball","urlObject","URL","filename","pathname","replace","semverSort","listVersions","filter","x","semver","parse","sort","compareLoose","map","String","getLatest","pkg","Object","keys","versions","length","Error","latest","DIST_TAGS","mergeVersions","local","upstream","i","lte","readme"],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import semver from 'semver';\nimport { URL } from 'url';\n\nimport { Manifest } from '@verdaccio/types';\n\nimport { DIST_TAGS } from './constants';\n\n/**\n * Extract the tarball name from a registry dist url\n * 'https://registry.npmjs.org/test/-/test-0.0.2.tgz'\n * @param tarball tarball url\n * @returns tarball filename\n */\nexport function extractTarballName(tarball: string) {\n const urlObject: any = new URL(tarball);\n const filename = urlObject.pathname.replace(/^.*\\//, '');\n return filename;\n}\n\n/**\n * Function filters out bad semver versions and sorts the array.\n * @return {Array} sorted Array\n */\nexport function semverSort(listVersions: string[]): string[] {\n return listVersions\n .filter(function (x): boolean {\n if (!semver.parse(x, true)) {\n return false;\n }\n return true;\n })\n .sort(semver.compareLoose)\n .map(String);\n}\n\n/**\n * Get the latest publihsed version of a package.\n * @param package metadata\n **/\nexport function getLatest(pkg: Manifest): string {\n const listVersions: string[] = Object.keys(pkg.versions);\n if (listVersions.length < 1) {\n throw Error('cannot get lastest version of none');\n }\n\n const versions: string[] = semverSort(listVersions);\n const latest: string | undefined = pkg[DIST_TAGS]?.latest ? pkg[DIST_TAGS].latest : versions[0];\n\n return latest;\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 {*} upstream\n * @param {*} config sds\n * @deprecated use @verdaccio/storage mergeVersions method\n */\n// @deprecated\nexport function mergeVersions(local: Manifest, upstream: Manifest) {\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 upstream.versions) {\n if (typeof local.versions[i] === 'undefined') {\n local.versions[i] = upstream.versions[i];\n }\n }\n\n for (const i in upstream[DIST_TAGS]) {\n if (local[DIST_TAGS][i] !== upstream[DIST_TAGS][i]) {\n if (!local[DIST_TAGS][i] || semver.lte(local[DIST_TAGS][i], upstream[DIST_TAGS][i])) {\n local[DIST_TAGS][i] = upstream[DIST_TAGS][i];\n }\n if (i === 'latest' && local[DIST_TAGS][i] === upstream[DIST_TAGS][i]) {\n // if remote has more fresh package, we should borrow its readme\n local.readme = upstream.readme;\n }\n }\n }\n}\n"],"mappings":";;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AAIA,IAAAE,UAAA,GAAAF,OAAA;AAAwC,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExC;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,kBAAkBA,CAACC,OAAe,EAAE;EAClD,MAAMC,SAAc,GAAG,IAAIC,QAAG,CAACF,OAAO,CAAC;EACvC,MAAMG,QAAQ,GAAGF,SAAS,CAACG,QAAQ,CAACC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;EACxD,OAAOF,QAAQ;AACjB;;AAEA;AACA;AACA;AACA;AACO,SAASG,UAAUA,CAACC,YAAsB,EAAY;EAC3D,OAAOA,YAAY,CAChBC,MAAM,CAAC,UAAUC,CAAC,EAAW;IAC5B,IAAI,CAACC,eAAM,CAACC,KAAK,CAACF,CAAC,EAAE,IAAI,CAAC,EAAE;MAC1B,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb,CAAC,CAAC,CACDG,IAAI,CAACF,eAAM,CAACG,YAAY,CAAC,CACzBC,GAAG,CAACC,MAAM,CAAC;AAChB;;AAEA;AACA;AACA;AACA;AACO,SAASC,SAASA,CAACC,GAAa,EAAU;EAC/C,MAAMV,YAAsB,GAAGW,MAAM,CAACC,IAAI,CAACF,GAAG,CAACG,QAAQ,CAAC;EACxD,IAAIb,YAAY,CAACc,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAMC,KAAK,CAAC,oCAAoC,CAAC;EACnD;EAEA,MAAMF,QAAkB,GAAGd,UAAU,CAACC,YAAY,CAAC;EACnD,MAAMgB,MAA0B,GAAGN,GAAG,CAACO,oBAAS,CAAC,EAAED,MAAM,GAAGN,GAAG,CAACO,oBAAS,CAAC,CAACD,MAAM,GAAGH,QAAQ,CAAC,CAAC,CAAC;EAE/F,OAAOG,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,aAAaA,CAACC,KAAe,EAAEC,QAAkB,EAAE;EACjE;EACA;EACA,KAAK,MAAMC,CAAC,IAAID,QAAQ,CAACP,QAAQ,EAAE;IACjC,IAAI,OAAOM,KAAK,CAACN,QAAQ,CAACQ,CAAC,CAAC,KAAK,WAAW,EAAE;MAC5CF,KAAK,CAACN,QAAQ,CAACQ,CAAC,CAAC,GAAGD,QAAQ,CAACP,QAAQ,CAACQ,CAAC,CAAC;IAC1C;EACF;EAEA,KAAK,MAAMA,CAAC,IAAID,QAAQ,CAACH,oBAAS,CAAC,EAAE;IACnC,IAAIE,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,KAAKD,QAAQ,CAACH,oBAAS,CAAC,CAACI,CAAC,CAAC,EAAE;MAClD,IAAI,CAACF,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,IAAIlB,eAAM,CAACmB,GAAG,CAACH,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,EAAED,QAAQ,CAACH,oBAAS,CAAC,CAACI,CAAC,CAAC,CAAC,EAAE;QACnFF,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,GAAGD,QAAQ,CAACH,oBAAS,CAAC,CAACI,CAAC,CAAC;MAC9C;MACA,IAAIA,CAAC,KAAK,QAAQ,IAAIF,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,KAAKD,QAAQ,CAACH,oBAAS,CAAC,CAACI,CAAC,CAAC,EAAE;QACpE;QACAF,KAAK,CAACI,MAAM,GAAGH,QAAQ,CAACG,MAAM;MAChC;IACF;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"pkg-utils.js","names":["_semver","_interopRequireDefault","require","_constants","e","__esModule","default","semverSort","listVersions","filter","x","semver","parse","sort","compareLoose","map","String","getLatest","pkg","Object","keys","versions","length","Error","latest","DIST_TAGS","mergeVersions","local","upstream","i","lte","readme"],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import semver from 'semver';\n\nimport { Manifest } from '@verdaccio/types';\n\nimport { DIST_TAGS } from './constants';\n\n/**\n * Function filters out bad semver versions and sorts the array.\n * @return {Array} sorted Array\n */\nexport function semverSort(listVersions: string[]): string[] {\n return listVersions\n .filter(function (x): boolean {\n if (!semver.parse(x, true)) {\n return false;\n }\n return true;\n })\n .sort(semver.compareLoose)\n .map(String);\n}\n\n/**\n * Get the latest publihsed version of a package.\n * @param package metadata\n **/\nexport function getLatest(pkg: Manifest): string {\n const listVersions: string[] = Object.keys(pkg.versions);\n if (listVersions.length < 1) {\n throw Error('cannot get lastest version of none');\n }\n\n const versions: string[] = semverSort(listVersions);\n const latest: string | undefined = pkg[DIST_TAGS]?.latest ? pkg[DIST_TAGS].latest : versions[0];\n\n return latest;\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 {*} upstream\n * @param {*} config sds\n * @deprecated use @verdaccio/storage mergeVersions method\n */\n// @deprecated\nexport function mergeVersions(local: Manifest, upstream: Manifest) {\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 upstream.versions) {\n if (typeof local.versions[i] === 'undefined') {\n local.versions[i] = upstream.versions[i];\n }\n }\n\n for (const i in upstream[DIST_TAGS]) {\n if (local[DIST_TAGS][i] !== upstream[DIST_TAGS][i]) {\n if (!local[DIST_TAGS][i] || semver.lte(local[DIST_TAGS][i], upstream[DIST_TAGS][i])) {\n local[DIST_TAGS][i] = upstream[DIST_TAGS][i];\n }\n if (i === 'latest' && local[DIST_TAGS][i] === upstream[DIST_TAGS][i]) {\n // if remote has more fresh package, we should borrow its readme\n local.readme = upstream.readme;\n }\n }\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAIA,IAAAC,UAAA,GAAAD,OAAA;AAAwC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExC;AACA;AACA;AACA;AACO,SAASG,UAAUA,CAACC,YAAsB,EAAY;EAC3D,OAAOA,YAAY,CAChBC,MAAM,CAAC,UAAUC,CAAC,EAAW;IAC5B,IAAI,CAACC,eAAM,CAACC,KAAK,CAACF,CAAC,EAAE,IAAI,CAAC,EAAE;MAC1B,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb,CAAC,CAAC,CACDG,IAAI,CAACF,eAAM,CAACG,YAAY,CAAC,CACzBC,GAAG,CAACC,MAAM,CAAC;AAChB;;AAEA;AACA;AACA;AACA;AACO,SAASC,SAASA,CAACC,GAAa,EAAU;EAC/C,MAAMV,YAAsB,GAAGW,MAAM,CAACC,IAAI,CAACF,GAAG,CAACG,QAAQ,CAAC;EACxD,IAAIb,YAAY,CAACc,MAAM,GAAG,CAAC,EAAE;IAC3B,MAAMC,KAAK,CAAC,oCAAoC,CAAC;EACnD;EAEA,MAAMF,QAAkB,GAAGd,UAAU,CAACC,YAAY,CAAC;EACnD,MAAMgB,MAA0B,GAAGN,GAAG,CAACO,oBAAS,CAAC,EAAED,MAAM,GAAGN,GAAG,CAACO,oBAAS,CAAC,CAACD,MAAM,GAAGH,QAAQ,CAAC,CAAC,CAAC;EAE/F,OAAOG,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,aAAaA,CAACC,KAAe,EAAEC,QAAkB,EAAE;EACjE;EACA;EACA,KAAK,MAAMC,CAAC,IAAID,QAAQ,CAACP,QAAQ,EAAE;IACjC,IAAI,OAAOM,KAAK,CAACN,QAAQ,CAACQ,CAAC,CAAC,KAAK,WAAW,EAAE;MAC5CF,KAAK,CAACN,QAAQ,CAACQ,CAAC,CAAC,GAAGD,QAAQ,CAACP,QAAQ,CAACQ,CAAC,CAAC;IAC1C;EACF;EAEA,KAAK,MAAMA,CAAC,IAAID,QAAQ,CAACH,oBAAS,CAAC,EAAE;IACnC,IAAIE,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,KAAKD,QAAQ,CAACH,oBAAS,CAAC,CAACI,CAAC,CAAC,EAAE;MAClD,IAAI,CAACF,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,IAAIlB,eAAM,CAACmB,GAAG,CAACH,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,EAAED,QAAQ,CAACH,oBAAS,CAAC,CAACI,CAAC,CAAC,CAAC,EAAE;QACnFF,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,GAAGD,QAAQ,CAACH,oBAAS,CAAC,CAACI,CAAC,CAAC;MAC9C;MACA,IAAIA,CAAC,KAAK,QAAQ,IAAIF,KAAK,CAACF,oBAAS,CAAC,CAACI,CAAC,CAAC,KAAKD,QAAQ,CAACH,oBAAS,CAAC,CAACI,CAAC,CAAC,EAAE;QACpE;QACAF,KAAK,CAACI,MAAM,GAAGH,QAAQ,CAACG,MAAM;MAChC;IACF;EACF;AACF","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Return package version from tarball name
3
+ *
4
+ * test-1.2.4.tgz -> 1.2.4
5
+ * @param {String} fileName
6
+ * @returns {String}
7
+ */
8
+ export declare function getVersionFromTarball(fileName: string): string | void;
9
+ /**
10
+ * Extract the tarball name from a registry dist url
11
+ *
12
+ * https://registry.npmjs.org/test/-/test-0.0.2.tgz -> test-0.0.2.tgz
13
+ * @param tarball tarball url
14
+ * @returns tarball filename
15
+ */
16
+ export declare function extractTarballFromUrl(url: string): string;
17
+ /**
18
+ * Build the tarball filename from paackage name and version
19
+ *
20
+ * test, 1.2.4 -> test-1.2.4.tgz
21
+ * @scope/name, 1.2.4 -> name-1.2.4.tgz
22
+ * @param name package name
23
+ * @param version package version
24
+ * @returns tarball filename
25
+ */
26
+ export declare function composeTarballFromPackage(name: string, version: string): string;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.composeTarballFromPackage = composeTarballFromPackage;
7
+ exports.extractTarballFromUrl = extractTarballFromUrl;
8
+ exports.getVersionFromTarball = getVersionFromTarball;
9
+ var _url = require("url");
10
+ /**
11
+ * Return package version from tarball name
12
+ *
13
+ * test-1.2.4.tgz -> 1.2.4
14
+ * @param {String} fileName
15
+ * @returns {String}
16
+ */
17
+ function getVersionFromTarball(fileName) {
18
+ const groups = fileName.replace(/\.tgz$/, '').match(/^[^/]+-(\d+\.\d+\.\d+.*)/);
19
+ return groups !== null ? groups[1] : undefined;
20
+ }
21
+
22
+ /**
23
+ * Extract the tarball name from a registry dist url
24
+ *
25
+ * https://registry.npmjs.org/test/-/test-0.0.2.tgz -> test-0.0.2.tgz
26
+ * @param tarball tarball url
27
+ * @returns tarball filename
28
+ */
29
+ function extractTarballFromUrl(url) {
30
+ const urlObject = new _url.URL(url);
31
+ return urlObject.pathname.replace(/^.*\//, '');
32
+ }
33
+
34
+ /**
35
+ * Build the tarball filename from paackage name and version
36
+ *
37
+ * test, 1.2.4 -> test-1.2.4.tgz
38
+ * @scope/name, 1.2.4 -> name-1.2.4.tgz
39
+ * @param name package name
40
+ * @param version package version
41
+ * @returns tarball filename
42
+ */
43
+ function composeTarballFromPackage(name, version) {
44
+ if (name.includes('/')) {
45
+ return `${name.split('/')[1]}-${version}.tgz`;
46
+ } else {
47
+ return `${name}-${version}.tgz`;
48
+ }
49
+ }
50
+ //# sourceMappingURL=tarball-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tarball-utils.js","names":["_url","require","getVersionFromTarball","fileName","groups","replace","match","undefined","extractTarballFromUrl","url","urlObject","URL","pathname","composeTarballFromPackage","name","version","includes","split"],"sources":["../src/tarball-utils.ts"],"sourcesContent":["import { URL } from 'url';\n\n/**\n * Return package version from tarball name\n *\n * test-1.2.4.tgz -> 1.2.4\n * @param {String} fileName\n * @returns {String}\n */\nexport function getVersionFromTarball(fileName: string): string | void {\n const groups = fileName.replace(/\\.tgz$/, '').match(/^[^/]+-(\\d+\\.\\d+\\.\\d+.*)/);\n\n return groups !== null ? groups[1] : undefined;\n}\n\n/**\n * Extract the tarball name from a registry dist url\n *\n * https://registry.npmjs.org/test/-/test-0.0.2.tgz -> test-0.0.2.tgz\n * @param tarball tarball url\n * @returns tarball filename\n */\nexport function extractTarballFromUrl(url: string): string {\n const urlObject = new URL(url);\n return urlObject.pathname.replace(/^.*\\//, '');\n}\n\n/**\n * Build the tarball filename from paackage name and version\n *\n * test, 1.2.4 -> test-1.2.4.tgz\n * @scope/name, 1.2.4 -> name-1.2.4.tgz\n * @param name package name\n * @param version package version\n * @returns tarball filename\n */\nexport function composeTarballFromPackage(name: string, version: string): string {\n if (name.includes('/')) {\n return `${name.split('/')[1]}-${version}.tgz`;\n } else {\n return `${name}-${version}.tgz`;\n }\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAACC,QAAgB,EAAiB;EACrE,MAAMC,MAAM,GAAGD,QAAQ,CAACE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAACC,KAAK,CAAC,0BAA0B,CAAC;EAE/E,OAAOF,MAAM,KAAK,IAAI,GAAGA,MAAM,CAAC,CAAC,CAAC,GAAGG,SAAS;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAACC,GAAW,EAAU;EACzD,MAAMC,SAAS,GAAG,IAAIC,QAAG,CAACF,GAAG,CAAC;EAC9B,OAAOC,SAAS,CAACE,QAAQ,CAACP,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASQ,yBAAyBA,CAACC,IAAY,EAAEC,OAAe,EAAU;EAC/E,IAAID,IAAI,CAACE,QAAQ,CAAC,GAAG,CAAC,EAAE;IACtB,OAAO,GAAGF,IAAI,CAACG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAIF,OAAO,MAAM;EAC/C,CAAC,MAAM;IACL,OAAO,GAAGD,IAAI,IAAIC,OAAO,MAAM;EACjC;AACF","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/core",
3
- "version": "8.0.0-next-8.5",
3
+ "version": "8.0.0-next-8.7",
4
4
  "description": "core utilities",
5
5
  "keywords": [
6
6
  "private",
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ import * as pluginUtils from './plugin-utils';
6
6
  import * as searchUtils from './search-utils';
7
7
  import * as streamUtils from './stream-utils';
8
8
  import * as stringUtils from './string-utils';
9
+ import * as tarballUtils from './tarball-utils';
9
10
  import * as validatioUtils from './validation-utils';
10
11
  import * as warningUtils from './warning-utils';
11
12
 
@@ -41,4 +42,5 @@ export {
41
42
  constants,
42
43
  pluginUtils,
43
44
  warningUtils,
45
+ tarballUtils,
44
46
  };
package/src/pkg-utils.ts CHANGED
@@ -1,22 +1,9 @@
1
1
  import semver from 'semver';
2
- import { URL } from 'url';
3
2
 
4
3
  import { Manifest } from '@verdaccio/types';
5
4
 
6
5
  import { DIST_TAGS } from './constants';
7
6
 
8
- /**
9
- * Extract the tarball name from a registry dist url
10
- * 'https://registry.npmjs.org/test/-/test-0.0.2.tgz'
11
- * @param tarball tarball url
12
- * @returns tarball filename
13
- */
14
- export function extractTarballName(tarball: string) {
15
- const urlObject: any = new URL(tarball);
16
- const filename = urlObject.pathname.replace(/^.*\//, '');
17
- return filename;
18
- }
19
-
20
7
  /**
21
8
  * Function filters out bad semver versions and sorts the array.
22
9
  * @return {Array} sorted Array
@@ -0,0 +1,43 @@
1
+ import { URL } from 'url';
2
+
3
+ /**
4
+ * Return package version from tarball name
5
+ *
6
+ * test-1.2.4.tgz -> 1.2.4
7
+ * @param {String} fileName
8
+ * @returns {String}
9
+ */
10
+ export function getVersionFromTarball(fileName: string): string | void {
11
+ const groups = fileName.replace(/\.tgz$/, '').match(/^[^/]+-(\d+\.\d+\.\d+.*)/);
12
+
13
+ return groups !== null ? groups[1] : undefined;
14
+ }
15
+
16
+ /**
17
+ * Extract the tarball name from a registry dist url
18
+ *
19
+ * https://registry.npmjs.org/test/-/test-0.0.2.tgz -> test-0.0.2.tgz
20
+ * @param tarball tarball url
21
+ * @returns tarball filename
22
+ */
23
+ export function extractTarballFromUrl(url: string): string {
24
+ const urlObject = new URL(url);
25
+ return urlObject.pathname.replace(/^.*\//, '');
26
+ }
27
+
28
+ /**
29
+ * Build the tarball filename from paackage name and version
30
+ *
31
+ * test, 1.2.4 -> test-1.2.4.tgz
32
+ * @scope/name, 1.2.4 -> name-1.2.4.tgz
33
+ * @param name package name
34
+ * @param version package version
35
+ * @returns tarball filename
36
+ */
37
+ export function composeTarballFromPackage(name: string, version: string): string {
38
+ if (name.includes('/')) {
39
+ return `${name.split('/')[1]}-${version}.tgz`;
40
+ } else {
41
+ return `${name}-${version}.tgz`;
42
+ }
43
+ }
@@ -3,22 +3,6 @@ import { describe, expect, test } from 'vitest';
3
3
  import { DIST_TAGS, pkgUtils } from '../src';
4
4
 
5
5
  describe('pkg-utils', () => {
6
- test('extractTarballName', () => {
7
- expect(pkgUtils.extractTarballName('https://registry.npmjs.org/test/-/test-0.0.2.tgz')).toBe(
8
- 'test-0.0.2.tgz'
9
- );
10
- });
11
-
12
- test('extractTarballName with no tarball should not fails', () => {
13
- expect(pkgUtils.extractTarballName('https://registry.npmjs.org/')).toBe('');
14
- });
15
-
16
- test('extractTarballName fails', () => {
17
- expect(() =>
18
- pkgUtils.extractTarballName('xxxxregistry.npmjs.org/test/-/test-0.0.2.tgz')
19
- ).toThrow();
20
- });
21
-
22
6
  test('getLatest fails if no versions', () => {
23
7
  expect(() =>
24
8
  // @ts-expect-error
@@ -0,0 +1,81 @@
1
+ import { describe, expect, test } from 'vitest';
2
+
3
+ import {
4
+ composeTarballFromPackage,
5
+ extractTarballFromUrl,
6
+ getVersionFromTarball,
7
+ } from '../src/tarball-utils';
8
+
9
+ describe('Utilities', () => {
10
+ describe('getVersionFromTarball', () => {
11
+ test('should get the right version', () => {
12
+ const simpleName = 'test-name-4.2.12.tgz';
13
+ const complexName = 'test-5.6.4-beta.2.tgz';
14
+ const otherComplexName = 'test-3.5.0-6.tgz';
15
+ expect(getVersionFromTarball(simpleName)).toEqual('4.2.12');
16
+ expect(getVersionFromTarball(complexName)).toEqual('5.6.4-beta.2');
17
+ expect(getVersionFromTarball(otherComplexName)).toEqual('3.5.0-6');
18
+ });
19
+
20
+ test('should fail at incorrect tarball name', () => {
21
+ expect(getVersionFromTarball('incorrectName')).toBeUndefined();
22
+ expect(getVersionFromTarball('test-1.2.tgz')).toBeUndefined();
23
+ });
24
+ });
25
+ });
26
+
27
+ describe('extractTarballFromUrl', () => {
28
+ const metadata: any = {
29
+ name: 'npm_test',
30
+ versions: {
31
+ '1.0.0': {
32
+ dist: {
33
+ tarball: 'http://registry.org/npm_test/-/npm_test-1.0.0.tgz',
34
+ },
35
+ },
36
+ '1.0.1': {
37
+ dist: {
38
+ tarball: 'https://localhost:4873/npm_test/-/npm_test-1.0.1.tgz',
39
+ },
40
+ },
41
+ '1.0.2': {
42
+ dist: {
43
+ tarball: 'https://localhost/npm_test-1.0.2.tgz',
44
+ },
45
+ },
46
+ '1.0.3': {
47
+ dist: {
48
+ tarball: 'http://registry.org/@org/npm_test/-/npm_test-1.0.3.tgz',
49
+ },
50
+ },
51
+ },
52
+ };
53
+
54
+ test('should return only name of tarball', () => {
55
+ expect(extractTarballFromUrl(metadata.versions['1.0.0'].dist.tarball)).toEqual(
56
+ 'npm_test-1.0.0.tgz'
57
+ );
58
+ expect(extractTarballFromUrl(metadata.versions['1.0.1'].dist.tarball)).toEqual(
59
+ 'npm_test-1.0.1.tgz'
60
+ );
61
+ expect(extractTarballFromUrl(metadata.versions['1.0.2'].dist.tarball)).toEqual(
62
+ 'npm_test-1.0.2.tgz'
63
+ );
64
+ expect(extractTarballFromUrl(metadata.versions['1.0.3'].dist.tarball)).toEqual(
65
+ 'npm_test-1.0.3.tgz'
66
+ );
67
+ });
68
+
69
+ test('without tarball should not fails', () => {
70
+ expect(extractTarballFromUrl('https://registry.npmjs.org/')).toBe('');
71
+ });
72
+
73
+ test('fails with incomplete URL', () => {
74
+ expect(() => extractTarballFromUrl('xxxxregistry.npmjs.org/test/-/test-0.0.2.tgz')).toThrow();
75
+ });
76
+ });
77
+
78
+ test('composeTarballFromPackage - should return filename of tarball', () => {
79
+ expect(composeTarballFromPackage('npm_test', '1.0.0')).toEqual('npm_test-1.0.0.tgz');
80
+ expect(composeTarballFromPackage('@mbtools/npm_test', '1.0.1')).toEqual('npm_test-1.0.1.tgz');
81
+ });