@verdaccio/store 8.0.0-next-8.30 → 8.0.0-next-8.31
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/build/index.js +5 -5
- package/build/index.js.map +1 -1
- package/build/lib/star-utils.js +2 -2
- package/build/lib/star-utils.js.map +1 -1
- package/build/lib/storage-utils.js +81 -111
- package/build/lib/storage-utils.js.map +1 -1
- package/build/lib/versions-utils.js +31 -27
- package/build/lib/versions-utils.js.map +1 -1
- package/build/local-storage.d.ts +2 -2
- package/build/local-storage.js +145 -54
- package/build/local-storage.js.map +1 -1
- package/build/storage.d.ts +5 -5
- package/build/storage.js +3057 -1755
- package/build/storage.js.map +1 -1
- package/build/type.d.ts +3 -3
- package/build/type.js.map +1 -1
- package/package.json +12 -12
package/build/index.js
CHANGED
|
@@ -8,7 +8,7 @@ var _exportNames = {
|
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "Storage", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () {
|
|
11
|
+
get: function get() {
|
|
12
12
|
return _storage.Storage;
|
|
13
13
|
}
|
|
14
14
|
});
|
|
@@ -20,7 +20,7 @@ Object.keys(_storageUtils).forEach(function (key) {
|
|
|
20
20
|
if (key in exports && exports[key] === _storageUtils[key]) return;
|
|
21
21
|
Object.defineProperty(exports, key, {
|
|
22
22
|
enumerable: true,
|
|
23
|
-
get: function () {
|
|
23
|
+
get: function get() {
|
|
24
24
|
return _storageUtils[key];
|
|
25
25
|
}
|
|
26
26
|
});
|
|
@@ -32,7 +32,7 @@ Object.keys(_versionsUtils).forEach(function (key) {
|
|
|
32
32
|
if (key in exports && exports[key] === _versionsUtils[key]) return;
|
|
33
33
|
Object.defineProperty(exports, key, {
|
|
34
34
|
enumerable: true,
|
|
35
|
-
get: function () {
|
|
35
|
+
get: function get() {
|
|
36
36
|
return _versionsUtils[key];
|
|
37
37
|
}
|
|
38
38
|
});
|
|
@@ -44,7 +44,7 @@ Object.keys(_starUtils).forEach(function (key) {
|
|
|
44
44
|
if (key in exports && exports[key] === _starUtils[key]) return;
|
|
45
45
|
Object.defineProperty(exports, key, {
|
|
46
46
|
enumerable: true,
|
|
47
|
-
get: function () {
|
|
47
|
+
get: function get() {
|
|
48
48
|
return _starUtils[key];
|
|
49
49
|
}
|
|
50
50
|
});
|
|
@@ -56,7 +56,7 @@ Object.keys(_type).forEach(function (key) {
|
|
|
56
56
|
if (key in exports && exports[key] === _type[key]) return;
|
|
57
57
|
Object.defineProperty(exports, key, {
|
|
58
58
|
enumerable: true,
|
|
59
|
-
get: function () {
|
|
59
|
+
get: function get() {
|
|
60
60
|
return _type[key];
|
|
61
61
|
}
|
|
62
62
|
});
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_storage","require","_storageUtils","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_versionsUtils","_starUtils","_type"],"sources":["../src/index.ts"],"sourcesContent":["export { Storage } from './storage';\nexport * from './lib/storage-utils';\nexport * from './lib/versions-utils';\nexport * from './lib/star-utils';\nexport * from './type';\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,aAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,aAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["_storage","require","_storageUtils","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_versionsUtils","_starUtils","_type"],"sources":["../src/index.ts"],"sourcesContent":["export { Storage } from './storage';\nexport * from './lib/storage-utils';\nexport * from './lib/versions-utils';\nexport * from './lib/star-utils';\nexport * from './type';\n"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,aAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,aAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAZ,aAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,cAAA,GAAAd,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAW,cAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,cAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAC,cAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,UAAA,GAAAf,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAY,UAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,UAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAE,UAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AACA,IAAAW,KAAA,GAAAhB,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAa,KAAA,EAAAZ,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAW,KAAA,CAAAX,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAG,KAAA,CAAAX,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
package/build/lib/star-utils.js
CHANGED
|
@@ -13,7 +13,7 @@ var _core = require("@verdaccio/core");
|
|
|
13
13
|
*/
|
|
14
14
|
function isPublishablePackage(pkg) {
|
|
15
15
|
// TODO: we can do better, no need get keys
|
|
16
|
-
|
|
16
|
+
var keys = Object.keys(pkg);
|
|
17
17
|
return keys.includes('versions');
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -26,7 +26,7 @@ function isPublishablePackage(pkg) {
|
|
|
26
26
|
* @returns boolean
|
|
27
27
|
*/
|
|
28
28
|
function isExecutingStarCommand(localUsers, username, userIsAddingStar) {
|
|
29
|
-
|
|
29
|
+
var isExist = typeof localUsers[username] !== 'undefined';
|
|
30
30
|
// fails if user already exist and us trying to add star.
|
|
31
31
|
if (userIsAddingStar && isExist && localUsers[username]) {
|
|
32
32
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"star-utils.js","names":["_core","require","isPublishablePackage","pkg","keys","Object","includes","isExecutingStarCommand","localUsers","username","userIsAddingStar","isExist","isStarManifest","manifest","validationUtils","isObject","users"],"sources":["../../src/lib/star-utils.ts"],"sourcesContent":["import { validationUtils } from '@verdaccio/core';\nimport { Manifest, PackageUsers } from '@verdaccio/types';\n\n/**\n * Check whether the package metadata has enough data to be published\n * @param pkg metadata\n */\nexport function isPublishablePackage(pkg: Manifest): boolean {\n // TODO: we can do better, no need get keys\n const keys: string[] = Object.keys(pkg);\n\n return keys.includes('versions');\n}\n\n/**\n * Verify if the user is actually executing an action, to avoid unnecessary calls\n * to the storage.\n * @param localUsers current state at cache\n * @param username user is executing the action\n * @param userIsAddingStar whether user is removing or adding star\n * @returns boolean\n */\nexport function isExecutingStarCommand(\n localUsers: PackageUsers,\n username: string,\n userIsAddingStar: boolean\n): boolean {\n const isExist = typeof localUsers[username] !== 'undefined';\n // fails if user already exist and us trying to add star.\n if (userIsAddingStar && isExist && localUsers[username]) {\n return false;\n // if is not adding a start but user exists (removing star)\n } else if (!userIsAddingStar && isExist) {\n return true;\n // fails if user does not exist and is not adding any star\n } else if (!userIsAddingStar && !isExist) {\n return false;\n }\n return true;\n}\n\nexport function isStarManifest(manifest: Manifest): boolean {\n return isPublishablePackage(manifest) === false && validationUtils.isObject(manifest.users);\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAACC,GAAa,EAAW;EAC3D;EACA,
|
|
1
|
+
{"version":3,"file":"star-utils.js","names":["_core","require","isPublishablePackage","pkg","keys","Object","includes","isExecutingStarCommand","localUsers","username","userIsAddingStar","isExist","isStarManifest","manifest","validationUtils","isObject","users"],"sources":["../../src/lib/star-utils.ts"],"sourcesContent":["import { validationUtils } from '@verdaccio/core';\nimport { Manifest, PackageUsers } from '@verdaccio/types';\n\n/**\n * Check whether the package metadata has enough data to be published\n * @param pkg metadata\n */\nexport function isPublishablePackage(pkg: Manifest): boolean {\n // TODO: we can do better, no need get keys\n const keys: string[] = Object.keys(pkg);\n\n return keys.includes('versions');\n}\n\n/**\n * Verify if the user is actually executing an action, to avoid unnecessary calls\n * to the storage.\n * @param localUsers current state at cache\n * @param username user is executing the action\n * @param userIsAddingStar whether user is removing or adding star\n * @returns boolean\n */\nexport function isExecutingStarCommand(\n localUsers: PackageUsers,\n username: string,\n userIsAddingStar: boolean\n): boolean {\n const isExist = typeof localUsers[username] !== 'undefined';\n // fails if user already exist and us trying to add star.\n if (userIsAddingStar && isExist && localUsers[username]) {\n return false;\n // if is not adding a start but user exists (removing star)\n } else if (!userIsAddingStar && isExist) {\n return true;\n // fails if user does not exist and is not adding any star\n } else if (!userIsAddingStar && !isExist) {\n return false;\n }\n return true;\n}\n\nexport function isStarManifest(manifest: Manifest): boolean {\n return isPublishablePackage(manifest) === false && validationUtils.isObject(manifest.users);\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAACC,GAAa,EAAW;EAC3D;EACA,IAAMC,IAAc,GAAGC,MAAM,CAACD,IAAI,CAACD,GAAG,CAAC;EAEvC,OAAOC,IAAI,CAACE,QAAQ,CAAC,UAAU,CAAC;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CACpCC,UAAwB,EACxBC,QAAgB,EAChBC,gBAAyB,EAChB;EACT,IAAMC,OAAO,GAAG,OAAOH,UAAU,CAACC,QAAQ,CAAC,KAAK,WAAW;EAC3D;EACA,IAAIC,gBAAgB,IAAIC,OAAO,IAAIH,UAAU,CAACC,QAAQ,CAAC,EAAE;IACvD,OAAO,KAAK;IACZ;EACF,CAAC,MAAM,IAAI,CAACC,gBAAgB,IAAIC,OAAO,EAAE;IACvC,OAAO,IAAI;IACX;EACF,CAAC,MAAM,IAAI,CAACD,gBAAgB,IAAI,CAACC,OAAO,EAAE;IACxC,OAAO,KAAK;EACd;EACA,OAAO,IAAI;AACb;AAEO,SAASC,cAAcA,CAACC,QAAkB,EAAW;EAC1D,OAAOX,oBAAoB,CAACW,QAAQ,CAAC,KAAK,KAAK,IAAIC,qBAAe,CAACC,QAAQ,CAACF,QAAQ,CAACG,KAAK,CAAC;AAC7F","ignoreList":[]}
|
|
@@ -25,8 +25,14 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
25
25
|
var _semver = _interopRequireDefault(require("semver"));
|
|
26
26
|
var _core = require("@verdaccio/core");
|
|
27
27
|
var _versionsUtils = require("./versions-utils");
|
|
28
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
29
|
-
|
|
28
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
29
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
30
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
31
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
32
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
33
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
34
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
35
|
+
var STORAGE = exports.STORAGE = {
|
|
30
36
|
PACKAGE_FILE_NAME: 'package.json',
|
|
31
37
|
FILE_EXIST_ERROR: 'EEXISTS',
|
|
32
38
|
NO_SUCH_FILE_ERROR: 'ENOENT',
|
|
@@ -39,19 +45,12 @@ const STORAGE = exports.STORAGE = {
|
|
|
39
45
|
* @returns {Manifest}
|
|
40
46
|
*/
|
|
41
47
|
function generatePackageTemplate(name) {
|
|
42
|
-
return {
|
|
48
|
+
return _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
|
|
43
49
|
// standard things
|
|
44
|
-
name,
|
|
50
|
+
name: name,
|
|
45
51
|
versions: {},
|
|
46
|
-
time: {}
|
|
47
|
-
|
|
48
|
-
[_core.DIST_TAGS]: {},
|
|
49
|
-
[_core.MAINTAINERS]: [],
|
|
50
|
-
_uplinks: {},
|
|
51
|
-
_distfiles: {},
|
|
52
|
-
_attachments: {},
|
|
53
|
-
_rev: ''
|
|
54
|
-
};
|
|
52
|
+
time: {}
|
|
53
|
+
}, _core.USERS, {}), _core.DIST_TAGS, {}), _core.MAINTAINERS, []), "_uplinks", {}), "_distfiles", {}), "_attachments", {}), "_rev", '');
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
/**
|
|
@@ -59,17 +58,17 @@ function generatePackageTemplate(name) {
|
|
|
59
58
|
* @param {Object} pkg package reference.
|
|
60
59
|
*/
|
|
61
60
|
function normalizePackage(pkg) {
|
|
62
|
-
|
|
63
|
-
pkgProperties.forEach(key
|
|
64
|
-
|
|
65
|
-
if (_lodash
|
|
61
|
+
var pkgProperties = ['versions', 'dist-tags', '_distfiles', '_attachments', '_uplinks', 'time'];
|
|
62
|
+
pkgProperties.forEach(function (key) {
|
|
63
|
+
var pkgProp = pkg[key];
|
|
64
|
+
if (_lodash["default"].isNil(pkgProp) || _core.validationUtils.isObject(pkgProp) === false) {
|
|
66
65
|
pkg[key] = {};
|
|
67
66
|
}
|
|
68
67
|
});
|
|
69
|
-
if (typeof pkg
|
|
68
|
+
if (typeof (pkg === null || pkg === void 0 ? void 0 : pkg._rev) !== 'string') {
|
|
70
69
|
pkg._rev = STORAGE.DEFAULT_REVISION;
|
|
71
70
|
}
|
|
72
|
-
if (typeof pkg
|
|
71
|
+
if (typeof (pkg === null || pkg === void 0 ? void 0 : pkg._id) !== 'string') {
|
|
73
72
|
pkg._id = pkg.name;
|
|
74
73
|
}
|
|
75
74
|
|
|
@@ -77,28 +76,28 @@ function normalizePackage(pkg) {
|
|
|
77
76
|
return normalizeDistTags(pkg);
|
|
78
77
|
}
|
|
79
78
|
function generateRevision(rev) {
|
|
80
|
-
|
|
79
|
+
var _rev = rev.split('-');
|
|
81
80
|
return (+_rev[0] || 0) + 1 + '-' + _core.cryptoUtils.generateRandomHexString();
|
|
82
81
|
}
|
|
83
82
|
function getLatestReadme(pkg) {
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
var versions = pkg['versions'] || {};
|
|
84
|
+
var distTags = pkg[_core.DIST_TAGS] || {};
|
|
86
85
|
// FIXME: here is a bit tricky add the types
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
var latestVersion = distTags['latest'] ? versions[distTags['latest']] || {} : {};
|
|
87
|
+
var readme = _lodash["default"].trim(pkg.readme || latestVersion.readme || '');
|
|
89
88
|
if (readme) {
|
|
90
89
|
return readme;
|
|
91
90
|
}
|
|
92
91
|
|
|
93
92
|
// In case of empty readme - trying to get ANY readme in the following order:
|
|
94
93
|
// 'next','beta','alpha','test','dev','canary'
|
|
95
|
-
|
|
94
|
+
var readmeDistTagsPriority = ['next', 'beta', 'alpha', 'test', 'dev', 'canary'];
|
|
96
95
|
readmeDistTagsPriority.forEach(function (tag) {
|
|
97
96
|
if (readme) {
|
|
98
97
|
return readme;
|
|
99
98
|
}
|
|
100
|
-
|
|
101
|
-
readme = _lodash
|
|
99
|
+
var version = distTags[tag] ? versions[distTags[tag]] || {} : {};
|
|
100
|
+
readme = _lodash["default"].trim(version.readme || readme);
|
|
102
101
|
});
|
|
103
102
|
return readme;
|
|
104
103
|
}
|
|
@@ -118,18 +117,18 @@ function cleanUpReadme(version, distTags, keepReadmes) {
|
|
|
118
117
|
return version;
|
|
119
118
|
}
|
|
120
119
|
}
|
|
121
|
-
if (_lodash
|
|
120
|
+
if (_lodash["default"].isNil(version) === false) {
|
|
122
121
|
version.readme = '';
|
|
123
122
|
}
|
|
124
123
|
return version;
|
|
125
124
|
}
|
|
126
|
-
|
|
125
|
+
var WHITELIST = exports.WHITELIST = ['_rev', 'name', 'versions', 'dist-tags', 'readme', 'time', '_id', 'users', 'maintainers'];
|
|
127
126
|
function cleanUpLinksRef(result, keepUpLinkData) {
|
|
128
|
-
|
|
127
|
+
var propertyToKeep = [].concat(WHITELIST);
|
|
129
128
|
if (keepUpLinkData === true) {
|
|
130
129
|
propertyToKeep.push('_uplinks');
|
|
131
130
|
}
|
|
132
|
-
for (
|
|
131
|
+
for (var i in result) {
|
|
133
132
|
if (propertyToKeep.indexOf(i) === -1) {
|
|
134
133
|
// Remove sections like '_uplinks' from response
|
|
135
134
|
delete result[i];
|
|
@@ -141,21 +140,21 @@ function cleanUpLinksRef(result, keepUpLinkData) {
|
|
|
141
140
|
// TODO: move to abstract storage
|
|
142
141
|
// @deprecated use abstract.storage.ts:checkPackageRemote
|
|
143
142
|
function checkPackageRemote(name, isAllowPublishOffline, syncMetadata) {
|
|
144
|
-
return new Promise((resolve, reject)
|
|
145
|
-
syncMetadata(name, null, {}, (err, packageJsonLocal, upLinksErrors)
|
|
143
|
+
return new Promise(function (resolve, reject) {
|
|
144
|
+
syncMetadata(name, null, {}, function (err, packageJsonLocal, upLinksErrors) {
|
|
146
145
|
// something weird
|
|
147
146
|
if (err && err.status !== _core.HTTP_STATUS.NOT_FOUND) {
|
|
148
147
|
return reject(err);
|
|
149
148
|
}
|
|
150
149
|
|
|
151
150
|
// checking package exist already
|
|
152
|
-
if (_lodash
|
|
151
|
+
if (_lodash["default"].isNil(packageJsonLocal) === false) {
|
|
153
152
|
return reject(_core.errorUtils.getConflict(_core.API_ERROR.PACKAGE_EXIST));
|
|
154
153
|
}
|
|
155
|
-
for (
|
|
154
|
+
for (var errorItem = 0; errorItem < upLinksErrors.length; errorItem++) {
|
|
156
155
|
// checking error
|
|
157
156
|
// if uplink fails with a status other than 404, we report failure
|
|
158
|
-
if (_lodash
|
|
157
|
+
if (_lodash["default"].isNil(upLinksErrors[errorItem][0]) === false) {
|
|
159
158
|
if (upLinksErrors[errorItem][0].status !== _core.HTTP_STATUS.NOT_FOUND) {
|
|
160
159
|
if (isAllowPublishOffline) {
|
|
161
160
|
return resolve();
|
|
@@ -179,55 +178,32 @@ function mergeUplinkTimeIntoLocal(localMetadata, remoteMetadata) {
|
|
|
179
178
|
function mergeUplinkTimeIntoLocalNext(cacheManifest, remoteManifest) {
|
|
180
179
|
if ('time' in remoteManifest) {
|
|
181
180
|
// remote override cache time conflicts
|
|
182
|
-
return {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
...cacheManifest.time,
|
|
186
|
-
...remoteManifest.time
|
|
187
|
-
}
|
|
188
|
-
};
|
|
181
|
+
return _objectSpread(_objectSpread({}, cacheManifest), {}, {
|
|
182
|
+
time: _objectSpread(_objectSpread({}, cacheManifest.time), remoteManifest.time)
|
|
183
|
+
});
|
|
189
184
|
}
|
|
190
185
|
return cacheManifest;
|
|
191
186
|
}
|
|
192
187
|
function updateUpLinkMetadata(uplinkName, manifest, etag) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
};
|
|
200
|
-
return {
|
|
201
|
-
...manifest,
|
|
202
|
-
_uplinks
|
|
203
|
-
};
|
|
188
|
+
var _uplinks = _objectSpread(_objectSpread({}, manifest._uplinks), {}, _defineProperty({}, uplinkName, {
|
|
189
|
+
etag: etag,
|
|
190
|
+
fetched: Date.now()
|
|
191
|
+
}));
|
|
192
|
+
return _objectSpread(_objectSpread({}, manifest), {}, {
|
|
193
|
+
_uplinks: _uplinks
|
|
194
|
+
});
|
|
204
195
|
}
|
|
205
196
|
function prepareSearchPackage(data) {
|
|
206
|
-
|
|
197
|
+
var latest = _core.pkgUtils.getLatest(data);
|
|
207
198
|
if (latest && data.versions[latest]) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
};
|
|
212
|
-
const pkg = {
|
|
199
|
+
var version = data.versions[latest];
|
|
200
|
+
var versions = _defineProperty({}, latest, 'latest');
|
|
201
|
+
var pkg = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
|
|
213
202
|
name: version.name,
|
|
214
|
-
description: version.description
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
maintainers: version.maintainers || [version.author].filter(Boolean),
|
|
219
|
-
author: version.author,
|
|
220
|
-
repository: version.repository,
|
|
221
|
-
readmeFilename: version.readmeFilename || '',
|
|
222
|
-
homepage: version.homepage,
|
|
223
|
-
keywords: version.keywords,
|
|
224
|
-
bugs: version.bugs,
|
|
225
|
-
license: version.license,
|
|
226
|
-
// time: {
|
|
227
|
-
// modified: time,
|
|
228
|
-
// },
|
|
229
|
-
versions
|
|
230
|
-
};
|
|
203
|
+
description: version.description
|
|
204
|
+
}, _core.DIST_TAGS, {
|
|
205
|
+
latest: latest
|
|
206
|
+
}), "maintainers", version.maintainers || [version.author].filter(Boolean)), "author", version.author), "repository", version.repository), "readmeFilename", version.readmeFilename || ''), "homepage", version.homepage), "keywords", version.keywords), "bugs", version.bugs), "license", version.license), "versions", versions);
|
|
231
207
|
return pkg;
|
|
232
208
|
}
|
|
233
209
|
}
|
|
@@ -239,40 +215,35 @@ function prepareSearchPackage(data) {
|
|
|
239
215
|
* @param {*} remoteManifest
|
|
240
216
|
*/
|
|
241
217
|
function mergeVersions(cacheManifest, remoteManifest) {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
const {
|
|
246
|
-
versions,
|
|
247
|
-
time
|
|
248
|
-
} = remoteManifest;
|
|
218
|
+
var _cacheManifest = _objectSpread({}, cacheManifest);
|
|
219
|
+
var versions = remoteManifest.versions,
|
|
220
|
+
time = remoteManifest.time;
|
|
249
221
|
// copy new versions to a cache
|
|
250
222
|
// NOTE: if a certain version was updated, we can't refresh it reliably
|
|
251
223
|
// however, we can refresh the deprecated status
|
|
252
|
-
for (
|
|
224
|
+
for (var i in versions) {
|
|
253
225
|
if (typeof _cacheManifest.versions[i] === 'undefined') {
|
|
254
226
|
_cacheManifest.versions[i] = versions[i];
|
|
255
227
|
} else if (versions[i].deprecated) {
|
|
256
228
|
_cacheManifest.versions[i].deprecated = versions[i].deprecated;
|
|
257
229
|
}
|
|
258
230
|
}
|
|
259
|
-
for (
|
|
260
|
-
if (typeof _cacheManifest.time[
|
|
261
|
-
_cacheManifest.time[
|
|
231
|
+
for (var _i in time) {
|
|
232
|
+
if (typeof _cacheManifest.time[_i] === 'undefined') {
|
|
233
|
+
_cacheManifest.time[_i] = time[_i];
|
|
262
234
|
}
|
|
263
235
|
}
|
|
264
|
-
for (
|
|
236
|
+
for (var distTag in remoteManifest[_core.DIST_TAGS]) {
|
|
265
237
|
if (_cacheManifest[_core.DIST_TAGS][distTag] !== remoteManifest[_core.DIST_TAGS][distTag]) {
|
|
266
|
-
if (!_cacheManifest[_core.DIST_TAGS][distTag] || _semver
|
|
238
|
+
if (!_cacheManifest[_core.DIST_TAGS][distTag] || _semver["default"].lte(_cacheManifest[_core.DIST_TAGS][distTag], remoteManifest[_core.DIST_TAGS][distTag])) {
|
|
267
239
|
_cacheManifest[_core.DIST_TAGS][distTag] = remoteManifest[_core.DIST_TAGS][distTag];
|
|
268
240
|
}
|
|
269
241
|
if (distTag === 'latest' && _cacheManifest[_core.DIST_TAGS][distTag] === remoteManifest[_core.DIST_TAGS][distTag]) {
|
|
270
242
|
// NOTE: this override the latest publish readme from local cache with
|
|
271
243
|
// the remote one
|
|
272
|
-
_cacheManifest = {
|
|
273
|
-
..._cacheManifest,
|
|
244
|
+
_cacheManifest = _objectSpread(_objectSpread({}, _cacheManifest), {}, {
|
|
274
245
|
readme: remoteManifest.readme
|
|
275
|
-
};
|
|
246
|
+
});
|
|
276
247
|
}
|
|
277
248
|
}
|
|
278
249
|
}
|
|
@@ -295,20 +266,21 @@ function mergeVersions(cacheManifest, remoteManifest) {
|
|
|
295
266
|
* @param {*} data
|
|
296
267
|
*/
|
|
297
268
|
function normalizeDistTags(manifest) {
|
|
298
|
-
|
|
269
|
+
var sorted;
|
|
299
270
|
// handle missing latest dist-tag
|
|
300
271
|
if (!manifest[_core.DIST_TAGS].latest) {
|
|
272
|
+
var _sorted;
|
|
301
273
|
// if there is no latest tag, set the highest known version based on semver sort
|
|
302
274
|
sorted = (0, _versionsUtils.sortVersionsAndFilterInvalid)(Object.keys(manifest.versions));
|
|
303
|
-
if (sorted
|
|
275
|
+
if ((_sorted = sorted) !== null && _sorted !== void 0 && _sorted.length) {
|
|
304
276
|
// get the highest published version
|
|
305
277
|
manifest[_core.DIST_TAGS].latest = sorted.pop();
|
|
306
278
|
}
|
|
307
279
|
}
|
|
308
|
-
for (
|
|
280
|
+
for (var tag in manifest[_core.DIST_TAGS]) {
|
|
309
281
|
// deprecated (will be removed un future majors)
|
|
310
282
|
// this should not happen, tags should be plain strings, legacy fallback
|
|
311
|
-
if (_lodash
|
|
283
|
+
if (_lodash["default"].isArray(manifest[_core.DIST_TAGS][tag])) {
|
|
312
284
|
if (manifest[_core.DIST_TAGS][tag].length) {
|
|
313
285
|
// sort array
|
|
314
286
|
// FIXME: this is clearly wrong, we need to research why this is like this.
|
|
@@ -321,8 +293,8 @@ function normalizeDistTags(manifest) {
|
|
|
321
293
|
} else {
|
|
322
294
|
delete manifest[_core.DIST_TAGS][tag];
|
|
323
295
|
}
|
|
324
|
-
} else if (_lodash
|
|
325
|
-
if (!_semver
|
|
296
|
+
} else if (_lodash["default"].isString(manifest[_core.DIST_TAGS][tag])) {
|
|
297
|
+
if (!_semver["default"].parse(manifest[_core.DIST_TAGS][tag], true)) {
|
|
326
298
|
// if the version is invalid, delete the dist-tag entry
|
|
327
299
|
delete manifest[_core.DIST_TAGS][tag];
|
|
328
300
|
}
|
|
@@ -331,10 +303,8 @@ function normalizeDistTags(manifest) {
|
|
|
331
303
|
return manifest;
|
|
332
304
|
}
|
|
333
305
|
function hasDeprecatedVersions(pkgInfo) {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
} = pkgInfo;
|
|
337
|
-
for (const version in versions) {
|
|
306
|
+
var versions = pkgInfo.versions;
|
|
307
|
+
for (var version in versions) {
|
|
338
308
|
if (Object.prototype.hasOwnProperty.call(versions[version], 'deprecated')) {
|
|
339
309
|
return true;
|
|
340
310
|
}
|
|
@@ -345,9 +315,9 @@ function isDeprecatedManifest(manifest) {
|
|
|
345
315
|
return hasDeprecatedVersions(manifest) && (typeof manifest._attachments === 'undefined' || Object.keys(manifest._attachments).length === 0);
|
|
346
316
|
}
|
|
347
317
|
function mapManifestToSearchPackageBody(pkg, searchItem) {
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
318
|
+
var latest = _core.pkgUtils.getLatest(pkg);
|
|
319
|
+
var version = pkg.versions[latest];
|
|
320
|
+
var result = {
|
|
351
321
|
name: version.name,
|
|
352
322
|
scope: '',
|
|
353
323
|
description: version.description,
|
|
@@ -367,17 +337,17 @@ function mapManifestToSearchPackageBody(pkg, searchItem) {
|
|
|
367
337
|
bugs: version.bugs
|
|
368
338
|
}
|
|
369
339
|
};
|
|
370
|
-
if (typeof searchItem
|
|
371
|
-
result.scope = searchItem
|
|
340
|
+
if (typeof searchItem["package"].scoped === 'string') {
|
|
341
|
+
result.scope = searchItem["package"].scoped;
|
|
372
342
|
}
|
|
373
343
|
return result;
|
|
374
344
|
}
|
|
375
345
|
function normalizeContributors(contributors) {
|
|
376
|
-
if (_lodash
|
|
346
|
+
if (_lodash["default"].isNil(contributors)) {
|
|
377
347
|
return [];
|
|
378
|
-
} else if (contributors && _lodash
|
|
348
|
+
} else if (contributors && _lodash["default"].isArray(contributors) === false) {
|
|
379
349
|
return [contributors];
|
|
380
|
-
} else if (_lodash
|
|
350
|
+
} else if (_lodash["default"].isString(contributors)) {
|
|
381
351
|
return [{
|
|
382
352
|
name: contributors
|
|
383
353
|
}];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-utils.js","names":["_lodash","_interopRequireDefault","require","_semver","_core","_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","validationUtils","isObject","_id","normalizeDistTags","generateRevision","rev","split","cryptoUtils","generateRandomHexString","getLatestReadme","distTags","latestVersion","readme","trim","readmeDistTagsPriority","tag","version","cleanUpReadme","keepReadmes","Object","values","includes","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","assign","mergeUplinkTimeIntoLocalNext","cacheManifest","remoteManifest","updateUpLinkMetadata","uplinkName","manifest","etag","fetched","Date","now","prepareSearchPackage","data","latest","pkgUtils","getLatest","description","maintainers","author","filter","Boolean","repository","readmeFilename","homepage","keywords","bugs","license","mergeVersions","_cacheManifest","deprecated","distTag","semver","lte","sorted","sortVersionsAndFilterInvalid","keys","pop","isArray","isString","parse","hasDeprecatedVersions","pkgInfo","prototype","hasOwnProperty","call","isDeprecatedManifest","mapManifestToSearchPackageBody","searchItem","scope","date","publisher","links","npm","package","scoped","normalizeContributors","contributors"],"sources":["../../src/lib/storage-utils.ts"],"sourcesContent":["import _ from 'lodash';\nimport semver from 'semver';\n\nimport {\n API_ERROR,\n DIST_TAGS,\n HTTP_STATUS,\n MAINTAINERS,\n USERS,\n cryptoUtils,\n errorUtils,\n pkgUtils,\n searchUtils,\n validationUtils,\n} from '@verdaccio/core';\nimport { Author, GenericBody, Manifest, ReadmeOptions, Version } from '@verdaccio/types';\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) || validationUtils.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 + '-' + cryptoUtils.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/**\n * Cleanup readme from package version\n *\n * By default, we don't keep readmes for package versions, only one readme per package.\n * Using publish.keep_readmes you can override this behavior and keep all readmes\n * or only readmes for tagged versions.\n */\nexport function cleanUpReadme(\n version: Version,\n distTags?: GenericBody,\n keepReadmes?: ReadmeOptions\n): Version {\n if (keepReadmes === 'all') {\n return version;\n } else if (keepReadmes === 'tagged') {\n if (distTags && Object.values(distTags).includes(version.version)) {\n return version;\n }\n }\n\n if (_.isNil(version) === false) {\n 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(uplinkName: string, manifest: Manifest, etag: string) {\n const _uplinks = {\n ...manifest._uplinks,\n [uplinkName]: {\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\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 {*} cacheManifest\n * @param {*} remoteManifest\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 // however, we can refresh the deprecated status\n for (const i in versions) {\n if (typeof _cacheManifest.versions[i] === 'undefined') {\n _cacheManifest.versions[i] = versions[i];\n } else if (versions[i].deprecated) {\n _cacheManifest.versions[i].deprecated = versions[i].deprecated;\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 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 (\n hasDeprecatedVersions(manifest) &&\n (typeof manifest._attachments === 'undefined' ||\n Object.keys(manifest._attachments).length === 0)\n );\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\nexport function normalizeContributors(contributors: Author[]): Author[] {\n if (_.isNil(contributors)) {\n return [];\n } else if (contributors && _.isArray(contributors) === false) {\n return [contributors];\n } else if (_.isString(contributors)) {\n return [\n {\n name: contributors,\n },\n ];\n }\n\n return contributors;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"storage-utils.js","names":["_lodash","_interopRequireDefault","require","_semver","_core","_versionsUtils","e","__esModule","_typeof","o","Symbol","iterator","constructor","prototype","ownKeys","r","t","Object","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","toPrimitive","call","TypeError","String","Number","STORAGE","exports","PACKAGE_FILE_NAME","FILE_EXIST_ERROR","NO_SUCH_FILE_ERROR","DEFAULT_REVISION","generatePackageTemplate","name","versions","time","USERS","DIST_TAGS","MAINTAINERS","normalizePackage","pkg","pkgProperties","key","pkgProp","_","isNil","validationUtils","isObject","_rev","_id","normalizeDistTags","generateRevision","rev","split","cryptoUtils","generateRandomHexString","getLatestReadme","distTags","latestVersion","readme","trim","readmeDistTagsPriority","tag","version","cleanUpReadme","keepReadmes","values","includes","WHITELIST","cleanUpLinksRef","result","keepUpLinkData","propertyToKeep","concat","indexOf","checkPackageRemote","isAllowPublishOffline","syncMetadata","Promise","resolve","reject","err","packageJsonLocal","upLinksErrors","status","HTTP_STATUS","NOT_FOUND","errorUtils","getConflict","API_ERROR","PACKAGE_EXIST","errorItem","getServiceUnavailable","UPLINK_OFFLINE_PUBLISH","mergeUplinkTimeIntoLocal","localMetadata","remoteMetadata","assign","mergeUplinkTimeIntoLocalNext","cacheManifest","remoteManifest","updateUpLinkMetadata","uplinkName","manifest","etag","_uplinks","fetched","Date","now","prepareSearchPackage","data","latest","pkgUtils","getLatest","description","maintainers","author","Boolean","repository","readmeFilename","homepage","keywords","bugs","license","mergeVersions","_cacheManifest","deprecated","distTag","semver","lte","sorted","_sorted","sortVersionsAndFilterInvalid","pop","isArray","isString","parse","hasDeprecatedVersions","pkgInfo","hasOwnProperty","isDeprecatedManifest","_attachments","mapManifestToSearchPackageBody","searchItem","scope","date","publisher","links","npm","scoped","normalizeContributors","contributors"],"sources":["../../src/lib/storage-utils.ts"],"sourcesContent":["import _ from 'lodash';\nimport semver from 'semver';\n\nimport {\n API_ERROR,\n DIST_TAGS,\n HTTP_STATUS,\n MAINTAINERS,\n USERS,\n cryptoUtils,\n errorUtils,\n pkgUtils,\n searchUtils,\n validationUtils,\n} from '@verdaccio/core';\nimport { Author, GenericBody, Manifest, ReadmeOptions, Version } from '@verdaccio/types';\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) || validationUtils.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 + '-' + cryptoUtils.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/**\n * Cleanup readme from package version\n *\n * By default, we don't keep readmes for package versions, only one readme per package.\n * Using publish.keep_readmes you can override this behavior and keep all readmes\n * or only readmes for tagged versions.\n */\nexport function cleanUpReadme(\n version: Version,\n distTags?: GenericBody,\n keepReadmes?: ReadmeOptions\n): Version {\n if (keepReadmes === 'all') {\n return version;\n } else if (keepReadmes === 'tagged') {\n if (distTags && Object.values(distTags).includes(version.version)) {\n return version;\n }\n }\n\n if (_.isNil(version) === false) {\n 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(uplinkName: string, manifest: Manifest, etag: string) {\n const _uplinks = {\n ...manifest._uplinks,\n [uplinkName]: {\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\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 {*} cacheManifest\n * @param {*} remoteManifest\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 // however, we can refresh the deprecated status\n for (const i in versions) {\n if (typeof _cacheManifest.versions[i] === 'undefined') {\n _cacheManifest.versions[i] = versions[i];\n } else if (versions[i].deprecated) {\n _cacheManifest.versions[i].deprecated = versions[i].deprecated;\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 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 (\n hasDeprecatedVersions(manifest) &&\n (typeof manifest._attachments === 'undefined' ||\n Object.keys(manifest._attachments).length === 0)\n );\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\nexport function normalizeContributors(contributors: Author[]): Author[] {\n if (_.isNil(contributors)) {\n return [];\n } else if (contributors && _.isArray(contributors) === false) {\n return [contributors];\n } else if (_.isString(contributors)) {\n return [\n {\n name: contributors,\n },\n ];\n }\n\n return contributors;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,KAAA,GAAAF,OAAA;AAcA,IAAAG,cAAA,GAAAH,OAAA;AAAgE,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,gBAAAA,CAAA;AAAA,SAAAE,QAAAC,CAAA,sCAAAD,OAAA,wBAAAE,MAAA,uBAAAA,MAAA,CAAAC,QAAA,aAAAF,CAAA,kBAAAA,CAAA,gBAAAA,CAAA,WAAAA,CAAA,yBAAAC,MAAA,IAAAD,CAAA,CAAAG,WAAA,KAAAF,MAAA,IAAAD,CAAA,KAAAC,MAAA,CAAAG,SAAA,qBAAAJ,CAAA,KAAAD,OAAA,CAAAC,CAAA;AAAA,SAAAK,QAAAR,CAAA,EAAAS,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAZ,CAAA,OAAAW,MAAA,CAAAE,qBAAA,QAAAV,CAAA,GAAAQ,MAAA,CAAAE,qBAAA,CAAAb,CAAA,GAAAS,CAAA,KAAAN,CAAA,GAAAA,CAAA,CAAAW,MAAA,WAAAL,CAAA,WAAAE,MAAA,CAAAI,wBAAA,CAAAf,CAAA,EAAAS,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAP,CAAA,YAAAO,CAAA;AAAA,SAAAS,cAAAnB,CAAA,aAAAS,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAD,OAAA,CAAAG,MAAA,CAAAD,CAAA,OAAAY,OAAA,WAAAb,CAAA,IAAAc,eAAA,CAAAvB,CAAA,EAAAS,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAa,yBAAA,GAAAb,MAAA,CAAAc,gBAAA,CAAAzB,CAAA,EAAAW,MAAA,CAAAa,yBAAA,CAAAd,CAAA,KAAAF,OAAA,CAAAG,MAAA,CAAAD,CAAA,GAAAY,OAAA,WAAAb,CAAA,IAAAE,MAAA,CAAAe,cAAA,CAAA1B,CAAA,EAAAS,CAAA,EAAAE,MAAA,CAAAI,wBAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAT,CAAA;AAAA,SAAAuB,gBAAAvB,CAAA,EAAAS,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAkB,cAAA,CAAAlB,CAAA,MAAAT,CAAA,GAAAW,MAAA,CAAAe,cAAA,CAAA1B,CAAA,EAAAS,CAAA,IAAAmB,KAAA,EAAAlB,CAAA,EAAAM,UAAA,MAAAa,YAAA,MAAAC,QAAA,UAAA9B,CAAA,CAAAS,CAAA,IAAAC,CAAA,EAAAV,CAAA;AAAA,SAAA2B,eAAAjB,CAAA,QAAAqB,CAAA,GAAAC,YAAA,CAAAtB,CAAA,gCAAAR,OAAA,CAAA6B,CAAA,IAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAtB,CAAA,EAAAD,CAAA,oBAAAP,OAAA,CAAAQ,CAAA,MAAAA,CAAA,SAAAA,CAAA,MAAAV,CAAA,GAAAU,CAAA,CAAAN,MAAA,CAAA6B,WAAA,kBAAAjC,CAAA,QAAA+B,CAAA,GAAA/B,CAAA,CAAAkC,IAAA,CAAAxB,CAAA,EAAAD,CAAA,gCAAAP,OAAA,CAAA6B,CAAA,UAAAA,CAAA,YAAAI,SAAA,yEAAA1B,CAAA,GAAA2B,MAAA,GAAAC,MAAA,EAAA3B,CAAA;AAEzD,IAAM4B,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG;EACrBE,iBAAiB,EAAE,cAAc;EACjCC,gBAAgB,EAAE,SAAS;EAC3BC,kBAAkB,EAAE,QAAQ;EAC5BC,gBAAgB,EAAE;AACpB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,SAASC,uBAAuBA,CAACC,IAAY,EAAY;EAC9D,OAAAtB,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA;IACE;IACAsB,IAAI,EAAJA,IAAI;IACJC,QAAQ,EAAE,CAAC,CAAC;IACZC,IAAI,EAAE,CAAC;EAAC,GACPC,WAAK,EAAG,CAAC,CAAC,GACVC,eAAS,EAAG,CAAC,CAAC,GACdC,iBAAW,EAAG,EAAE,eACP,CAAC,CAAC,iBACA,CAAC,CAAC,mBACA,CAAC,CAAC,WACV,EAAE;AAEZ;;AAEA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAACC,GAAa,EAAY;EACxD,IAAMC,aAAa,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC;EAEjGA,aAAa,CAAC/B,OAAO,CAAC,UAACgC,GAAG,EAAW;IACnC,IAAMC,OAAO,GAAGH,GAAG,CAACE,GAAG,CAAC;IAExB,IAAIE,kBAAC,CAACC,KAAK,CAACF,OAAO,CAAC,IAAIG,qBAAe,CAACC,QAAQ,CAACJ,OAAO,CAAC,KAAK,KAAK,EAAE;MACnEH,GAAG,CAACE,GAAG,CAAC,GAAG,CAAC,CAAC;IACf;EACF,CAAC,CAAC;EAEF,IAAI,QAAOF,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEQ,IAAI,MAAK,QAAQ,EAAE;IACjCR,GAAG,CAACQ,IAAI,GAAGtB,OAAO,CAACK,gBAAgB;EACrC;EAEA,IAAI,QAAOS,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAES,GAAG,MAAK,QAAQ,EAAE;IAChCT,GAAG,CAACS,GAAG,GAAGT,GAAG,CAACP,IAAI;EACpB;;EAEA;EACA,OAAOiB,iBAAiB,CAACV,GAAG,CAAC;AAC/B;AAEO,SAASW,gBAAgBA,CAACC,GAAW,EAAU;EACpD,IAAMJ,IAAI,GAAGI,GAAG,CAACC,KAAK,CAAC,GAAG,CAAC;EAE3B,OAAO,CAAC,CAACL,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAGM,iBAAW,CAACC,uBAAuB,CAAC,CAAC;AAC1E;AAEO,SAASC,eAAeA,CAAChB,GAAa,EAAU;EACrD,IAAMN,QAAQ,GAAGM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;EACtC,IAAMiB,QAAQ,GAAGjB,GAAG,CAACH,eAAS,CAAC,IAAI,CAAC,CAAC;EACrC;EACA,IAAMqB,aAA4B,GAAGD,QAAQ,CAAC,QAAQ,CAAC,GAAGvB,QAAQ,CAACuB,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;EACjG,IAAIE,MAAM,GAAGf,kBAAC,CAACgB,IAAI,CAACpB,GAAG,CAACmB,MAAM,IAAID,aAAa,CAACC,MAAM,IAAI,EAAE,CAAC;EAC7D,IAAIA,MAAM,EAAE;IACV,OAAOA,MAAM;EACf;;EAEA;EACA;EACA,IAAME,sBAAsB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;EACjFA,sBAAsB,CAACnD,OAAO,CAAC,UAAUoD,GAAG,EAAiB;IAC3D,IAAIH,MAAM,EAAE;MACV,OAAOA,MAAM;IACf;IACA,IAAMI,OAAsB,GAAGN,QAAQ,CAACK,GAAG,CAAC,GAAG5B,QAAQ,CAACuB,QAAQ,CAACK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACjFH,MAAM,GAAGf,kBAAC,CAACgB,IAAI,CAACG,OAAO,CAACJ,MAAM,IAAIA,MAAM,CAAC;EAC3C,CAAC,CAAC;EACF,OAAOA,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASK,aAAaA,CAC3BD,OAAgB,EAChBN,QAAsB,EACtBQ,WAA2B,EAClB;EACT,IAAIA,WAAW,KAAK,KAAK,EAAE;IACzB,OAAOF,OAAO;EAChB,CAAC,MAAM,IAAIE,WAAW,KAAK,QAAQ,EAAE;IACnC,IAAIR,QAAQ,IAAI1D,MAAM,CAACmE,MAAM,CAACT,QAAQ,CAAC,CAACU,QAAQ,CAACJ,OAAO,CAACA,OAAO,CAAC,EAAE;MACjE,OAAOA,OAAO;IAChB;EACF;EAEA,IAAInB,kBAAC,CAACC,KAAK,CAACkB,OAAO,CAAC,KAAK,KAAK,EAAE;IAC9BA,OAAO,CAACJ,MAAM,GAAG,EAAE;EACrB;EAEA,OAAOI,OAAO;AAChB;AAEO,IAAMK,SAAS,GAAAzC,OAAA,CAAAyC,SAAA,GAAG,CACvB,MAAM,EACN,MAAM,EACN,UAAU,EACV,WAAW,EACX,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAO,EACP,aAAa,CACd;AAEM,SAASC,eAAeA,CAACC,MAAgB,EAAEC,cAAwB,EAAY;EACpF,IAAMC,cAAc,MAAAC,MAAA,CAAOL,SAAS,CAAC;EACrC,IAAIG,cAAc,KAAK,IAAI,EAAE;IAC3BC,cAAc,CAACnE,IAAI,CAAC,UAAU,CAAC;EACjC;EAEA,KAAK,IAAMc,CAAC,IAAImD,MAAM,EAAE;IACtB,IAAIE,cAAc,CAACE,OAAO,CAACvD,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;MACpC;MACA,OAAOmD,MAAM,CAACnD,CAAC,CAAC;IAClB;EACF;EAEA,OAAOmD,MAAM;AACf;;AAEA;AACA;AACO,SAASK,kBAAkBA,CAChC1C,IAAY,EACZ2C,qBAA8B,EAC9BC,YAAsB,EACR;EACd,OAAO,IAAIC,OAAO,CAAO,UAACC,OAAO,EAAEC,MAAM,EAAW;IAClDH,YAAY,CAAC5C,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,UAACgD,GAAG,EAAEC,gBAAgB,EAAEC,aAAa,EAAW;MAC3E;MACA,IAAIF,GAAG,IAAIA,GAAG,CAACG,MAAM,KAAKC,iBAAW,CAACC,SAAS,EAAE;QAC/C,OAAON,MAAM,CAACC,GAAG,CAAC;MACpB;;MAEA;MACA,IAAIrC,kBAAC,CAACC,KAAK,CAACqC,gBAAgB,CAAC,KAAK,KAAK,EAAE;QACvC,OAAOF,MAAM,CAACO,gBAAU,CAACC,WAAW,CAACC,eAAS,CAACC,aAAa,CAAC,CAAC;MAChE;MAEA,KAAK,IAAIC,SAAS,GAAG,CAAC,EAAEA,SAAS,GAAGR,aAAa,CAAC1E,MAAM,EAAEkF,SAAS,EAAE,EAAE;QACrE;QACA;QACA,IAAI/C,kBAAC,CAACC,KAAK,CAACsC,aAAa,CAACQ,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;UAClD,IAAIR,aAAa,CAACQ,SAAS,CAAC,CAAC,CAAC,CAAC,CAACP,MAAM,KAAKC,iBAAW,CAACC,SAAS,EAAE;YAChE,IAAIV,qBAAqB,EAAE;cACzB,OAAOG,OAAO,CAAC,CAAC;YAClB;YAEA,OAAOC,MAAM,CAACO,gBAAU,CAACK,qBAAqB,CAACH,eAAS,CAACI,sBAAsB,CAAC,CAAC;UACnF;QACF;MACF;MAEA,OAAOd,OAAO,CAAC,CAAC;IAClB,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ;;AAEA;AACO,SAASe,wBAAwBA,CAACC,aAAuB,EAAEC,cAAwB,EAAO;EAC/F,IAAI,MAAM,IAAIA,cAAc,EAAE;IAC5B,OAAOjG,MAAM,CAACkG,MAAM,CAAC,CAAC,CAAC,EAAEF,aAAa,CAAC5D,IAAI,EAAE6D,cAAc,CAAC7D,IAAI,CAAC;EACnE;EAEA,OAAO4D,aAAa,CAAC5D,IAAI;AAC3B;AAEO,SAAS+D,4BAA4BA,CAC1CC,aAAuB,EACvBC,cAAwB,EACd;EACV,IAAI,MAAM,IAAIA,cAAc,EAAE;IAC5B;IACA,OAAA7F,aAAA,CAAAA,aAAA,KAAY4F,aAAa;MAAEhE,IAAI,EAAA5B,aAAA,CAAAA,aAAA,KAAO4F,aAAa,CAAChE,IAAI,GAAKiE,cAAc,CAACjE,IAAI;IAAE;EACpF;EAEA,OAAOgE,aAAa;AACtB;AAEO,SAASE,oBAAoBA,CAACC,UAAkB,EAAEC,QAAkB,EAAEC,IAAY,EAAE;EACzF,IAAMC,QAAQ,GAAAlG,aAAA,CAAAA,aAAA,KACTgG,QAAQ,CAACE,QAAQ,OAAA9F,eAAA,KACnB2F,UAAU,EAAG;IACZE,IAAI,EAAJA,IAAI;IACJE,OAAO,EAAEC,IAAI,CAACC,GAAG,CAAC;EACpB,CAAC,EACF;EACD,OAAArG,aAAA,CAAAA,aAAA,KACKgG,QAAQ;IACXE,QAAQ,EAARA;EAAQ;AAEZ;AAEO,SAASI,oBAAoBA,CAACC,IAAc,EAAO;EACxD,IAAMC,MAAM,GAAGC,cAAQ,CAACC,SAAS,CAACH,IAAI,CAAC;EAEvC,IAAIC,MAAM,IAAID,IAAI,CAAC5E,QAAQ,CAAC6E,MAAM,CAAC,EAAE;IACnC,IAAMhD,OAAgB,GAAG+C,IAAI,CAAC5E,QAAQ,CAAC6E,MAAM,CAAC;IAC9C,IAAM7E,QAAa,GAAAvB,eAAA,KAAMoG,MAAM,EAAG,QAAQ,CAAE;IAC5C,IAAMvE,GAAQ,GAAA7B,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA,CAAAA,eAAA;MACZsB,IAAI,EAAE8B,OAAO,CAAC9B,IAAI;MAClBiF,WAAW,EAAEnD,OAAO,CAACmD;IAAW,GAC/B7E,eAAS,EAAG;MAAE0E,MAAM,EAANA;IAAO,CAAC,kBACVhD,OAAO,CAACoD,WAAW,IAAI,CAACpD,OAAO,CAACqD,MAAM,CAAC,CAAClH,MAAM,CAACmH,OAAO,CAAC,aAC5DtD,OAAO,CAACqD,MAAM,iBACVrD,OAAO,CAACuD,UAAU,qBACdvD,OAAO,CAACwD,cAAc,IAAI,EAAE,eAClCxD,OAAO,CAACyD,QAAQ,eAChBzD,OAAO,CAAC0D,QAAQ,WACpB1D,OAAO,CAAC2D,IAAI,cACT3D,OAAO,CAAC4D,OAAO,eAIxBzF,QAAQ,CACT;IAED,OAAOM,GAAG;EACZ;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASoF,aAAaA,CAACzB,aAAuB,EAAEC,cAAwB,EAAY;EACzF,IAAIyB,cAAc,GAAAtH,aAAA,KAAQ4F,aAAa,CAAE;EACzC,IAAQjE,QAAQ,GAAWkE,cAAc,CAAjClE,QAAQ;IAAEC,IAAI,GAAKiE,cAAc,CAAvBjE,IAAI;EACtB;EACA;EACA;EACA,KAAK,IAAMhB,CAAC,IAAIe,QAAQ,EAAE;IACxB,IAAI,OAAO2F,cAAc,CAAC3F,QAAQ,CAACf,CAAC,CAAC,KAAK,WAAW,EAAE;MACrD0G,cAAc,CAAC3F,QAAQ,CAACf,CAAC,CAAC,GAAGe,QAAQ,CAACf,CAAC,CAAC;IAC1C,CAAC,MAAM,IAAIe,QAAQ,CAACf,CAAC,CAAC,CAAC2G,UAAU,EAAE;MACjCD,cAAc,CAAC3F,QAAQ,CAACf,CAAC,CAAC,CAAC2G,UAAU,GAAG5F,QAAQ,CAACf,CAAC,CAAC,CAAC2G,UAAU;IAChE;EACF;EAEA,KAAK,IAAM3G,EAAC,IAAIgB,IAAI,EAAE;IACpB,IAAI,OAAO0F,cAAc,CAAC1F,IAAI,CAAChB,EAAC,CAAC,KAAK,WAAW,EAAE;MACjD0G,cAAc,CAAC1F,IAAI,CAAChB,EAAC,CAAC,GAAGgB,IAAI,CAAChB,EAAC,CAAC;IAClC;EACF;EAEA,KAAK,IAAM4G,OAAO,IAAI3B,cAAc,CAAC/D,eAAS,CAAC,EAAE;IAC/C,IAAIwF,cAAc,CAACxF,eAAS,CAAC,CAAC0F,OAAO,CAAC,KAAK3B,cAAc,CAAC/D,eAAS,CAAC,CAAC0F,OAAO,CAAC,EAAE;MAC7E,IACE,CAACF,cAAc,CAACxF,eAAS,CAAC,CAAC0F,OAAO,CAAC,IACnCC,kBAAM,CAACC,GAAG,CAACJ,cAAc,CAACxF,eAAS,CAAC,CAAC0F,OAAO,CAAC,EAAE3B,cAAc,CAAC/D,eAAS,CAAC,CAAC0F,OAAO,CAAC,CAAC,EAClF;QACAF,cAAc,CAACxF,eAAS,CAAC,CAAC0F,OAAO,CAAC,GAAG3B,cAAc,CAAC/D,eAAS,CAAC,CAAC0F,OAAO,CAAC;MACzE;MACA,IACEA,OAAO,KAAK,QAAQ,IACpBF,cAAc,CAACxF,eAAS,CAAC,CAAC0F,OAAO,CAAC,KAAK3B,cAAc,CAAC/D,eAAS,CAAC,CAAC0F,OAAO,CAAC,EACzE;QACA;QACA;QACAF,cAAc,GAAAtH,aAAA,CAAAA,aAAA,KAAQsH,cAAc;UAAElE,MAAM,EAAEyC,cAAc,CAACzC;QAAM,EAAE;MACvE;IACF;EACF;EACA,OAAOkE,cAAc;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS3E,iBAAiBA,CAACqD,QAAkB,EAAY;EAC9D,IAAI2B,MAAM;EACV;EACA,IAAI,CAAC3B,QAAQ,CAAClE,eAAS,CAAC,CAAC0E,MAAM,EAAE;IAAA,IAAAoB,OAAA;IAC/B;IACAD,MAAM,GAAG,IAAAE,2CAA4B,EAACrI,MAAM,CAACC,IAAI,CAACuG,QAAQ,CAACrE,QAAQ,CAAC,CAAC;IACrE,KAAAiG,OAAA,GAAID,MAAM,cAAAC,OAAA,eAANA,OAAA,CAAQ1H,MAAM,EAAE;MAClB;MACA8F,QAAQ,CAAClE,eAAS,CAAC,CAAC0E,MAAM,GAAGmB,MAAM,CAACG,GAAG,CAAC,CAAC;IAC3C;EACF;EAEA,KAAK,IAAMvE,GAAG,IAAIyC,QAAQ,CAAClE,eAAS,CAAC,EAAE;IACrC;IACA;IACA,IAAIO,kBAAC,CAAC0F,OAAO,CAAC/B,QAAQ,CAAClE,eAAS,CAAC,CAACyB,GAAG,CAAC,CAAC,EAAE;MACvC,IAAIyC,QAAQ,CAAClE,eAAS,CAAC,CAACyB,GAAG,CAAC,CAACrD,MAAM,EAAE;QACnC;QACA;QACA;QACAyH,MAAM,GAAG,IAAAE,2CAA4B,EAAC7B,QAAQ,CAAClE,eAAS,CAAC,CAACyB,GAAG,CAAC,CAAC;QAC/D,IAAIoE,MAAM,CAACzH,MAAM,EAAE;UACjB;UACA8F,QAAQ,CAAClE,eAAS,CAAC,CAACyB,GAAG,CAAC,GAAGoE,MAAM,CAACG,GAAG,CAAC,CAAC;QACzC;MACF,CAAC,MAAM;QACL,OAAO9B,QAAQ,CAAClE,eAAS,CAAC,CAACyB,GAAG,CAAC;MACjC;IACF,CAAC,MAAM,IAAIlB,kBAAC,CAAC2F,QAAQ,CAAChC,QAAQ,CAAClE,eAAS,CAAC,CAACyB,GAAG,CAAC,CAAC,EAAE;MAC/C,IAAI,CAACkE,kBAAM,CAACQ,KAAK,CAACjC,QAAQ,CAAClE,eAAS,CAAC,CAACyB,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE;QACjD;QACA,OAAOyC,QAAQ,CAAClE,eAAS,CAAC,CAACyB,GAAG,CAAC;MACjC;IACF;EACF;EAEA,OAAOyC,QAAQ;AACjB;AAEO,SAASkC,qBAAqBA,CAACC,OAAiB,EAAW;EAChE,IAAQxG,QAAQ,GAAKwG,OAAO,CAApBxG,QAAQ;EAChB,KAAK,IAAM6B,OAAO,IAAI7B,QAAQ,EAAE;IAC9B,IAAInC,MAAM,CAACJ,SAAS,CAACgJ,cAAc,CAACrH,IAAI,CAACY,QAAQ,CAAC6B,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE;MACzE,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd;AAEO,SAAS6E,oBAAoBA,CAACrC,QAAkB,EAAW;EAChE,OACEkC,qBAAqB,CAAClC,QAAQ,CAAC,KAC9B,OAAOA,QAAQ,CAACsC,YAAY,KAAK,WAAW,IAC3C9I,MAAM,CAACC,IAAI,CAACuG,QAAQ,CAACsC,YAAY,CAAC,CAACpI,MAAM,KAAK,CAAC,CAAC;AAEtD;AAEO,SAASqI,8BAA8BA,CAC5CtG,GAAa,EACbuG,UAAkC,EACH;EAC/B,IAAMhC,MAAM,GAAGC,cAAQ,CAACC,SAAS,CAACzE,GAAG,CAAC;EACtC,IAAMuB,OAAgB,GAAGvB,GAAG,CAACN,QAAQ,CAAC6E,MAAM,CAAC;EAC7C,IAAMzC,MAAqC,GAAG;IAC5CrC,IAAI,EAAE8B,OAAO,CAAC9B,IAAI;IAClB+G,KAAK,EAAE,EAAE;IACT9B,WAAW,EAAEnD,OAAO,CAACmD,WAAW;IAChCnD,OAAO,EAAEgD,MAAM;IACfU,QAAQ,EAAE1D,OAAO,CAAC0D,QAAQ;IAC1BwB,IAAI,EAAEzG,GAAG,CAACL,IAAI,CAAC4E,MAAM,CAAC;IACtB;IACAK,MAAM,EAAErD,OAAO,CAACqD,MAAa;IAC7B;IACA8B,SAAS,EAAE,CAAC,CAAC;IACb;IACA/B,WAAW,EAAEpD,OAAO,CAACoD,WAAkB;IACvCgC,KAAK,EAAE;MACLC,GAAG,EAAE,EAAE;MACP5B,QAAQ,EAAEzD,OAAO,CAACyD,QAAQ;MAC1BF,UAAU,EAAEvD,OAAO,CAACuD,UAAU;MAC9BI,IAAI,EAAE3D,OAAO,CAAC2D;IAChB;EACF,CAAC;EAED,IAAI,OAAOqB,UAAU,WAAQ,CAACM,MAAM,KAAK,QAAQ,EAAE;IACjD/E,MAAM,CAAC0E,KAAK,GAAGD,UAAU,WAAQ,CAACM,MAAM;EAC1C;EAEA,OAAO/E,MAAM;AACf;AAEO,SAASgF,qBAAqBA,CAACC,YAAsB,EAAY;EACtE,IAAI3G,kBAAC,CAACC,KAAK,CAAC0G,YAAY,CAAC,EAAE;IACzB,OAAO,EAAE;EACX,CAAC,MAAM,IAAIA,YAAY,IAAI3G,kBAAC,CAAC0F,OAAO,CAACiB,YAAY,CAAC,KAAK,KAAK,EAAE;IAC5D,OAAO,CAACA,YAAY,CAAC;EACvB,CAAC,MAAM,IAAI3G,kBAAC,CAAC2F,QAAQ,CAACgB,YAAY,CAAC,EAAE;IACnC,OAAO,CACL;MACEtH,IAAI,EAAEsH;IACR,CAAC,CACF;EACH;EAEA,OAAOA,YAAY;AACrB","ignoreList":[]}
|