@verdaccio/core 8.1.4 → 8.2.0

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.
Files changed (78) hide show
  1. package/build/_virtual/_rolldown/runtime.js +33 -0
  2. package/build/_virtual/_rolldown/runtime.mjs +13 -0
  3. package/build/auth-utils.d.ts +0 -1
  4. package/build/auth-utils.js +23 -25
  5. package/build/auth-utils.js.map +1 -1
  6. package/build/auth-utils.mjs +32 -0
  7. package/build/auth-utils.mjs.map +1 -0
  8. package/build/constants.js +201 -157
  9. package/build/constants.js.map +1 -1
  10. package/build/constants.mjs +185 -0
  11. package/build/constants.mjs.map +1 -0
  12. package/build/crypto-utils.d.ts +0 -2
  13. package/build/crypto-utils.js +33 -29
  14. package/build/crypto-utils.js.map +1 -1
  15. package/build/crypto-utils.mjs +40 -0
  16. package/build/crypto-utils.mjs.map +1 -0
  17. package/build/error-utils.js +92 -80
  18. package/build/error-utils.js.map +1 -1
  19. package/build/error-utils.mjs +107 -0
  20. package/build/error-utils.mjs.map +1 -0
  21. package/build/file-utils.js +35 -31
  22. package/build/file-utils.js.map +1 -1
  23. package/build/file-utils.mjs +35 -0
  24. package/build/file-utils.mjs.map +1 -0
  25. package/build/index.d.ts +2 -1
  26. package/build/index.js +125 -185
  27. package/build/index.mjs +15 -0
  28. package/build/ip-utils.js +52 -69
  29. package/build/ip-utils.js.map +1 -1
  30. package/build/ip-utils.mjs +60 -0
  31. package/build/ip-utils.mjs.map +1 -0
  32. package/build/pkg-utils.js +60 -76
  33. package/build/pkg-utils.js.map +1 -1
  34. package/build/pkg-utils.mjs +69 -0
  35. package/build/pkg-utils.mjs.map +1 -0
  36. package/build/plugin-utils.d.ts +0 -1
  37. package/build/plugin-utils.js +27 -78
  38. package/build/plugin-utils.js.map +1 -1
  39. package/build/plugin-utils.mjs +26 -0
  40. package/build/plugin-utils.mjs.map +1 -0
  41. package/build/schemes/publish-manifest.js +33 -43
  42. package/build/schemes/publish-manifest.js.map +1 -1
  43. package/build/schemes/publish-manifest.mjs +36 -0
  44. package/build/schemes/publish-manifest.mjs.map +1 -0
  45. package/build/schemes/unpublish-manifest.js +51 -72
  46. package/build/schemes/unpublish-manifest.js.map +1 -1
  47. package/build/schemes/unpublish-manifest.mjs +54 -0
  48. package/build/schemes/unpublish-manifest.mjs.map +1 -0
  49. package/build/search-utils.js +9 -9
  50. package/build/search-utils.js.map +1 -1
  51. package/build/search-utils.mjs +8 -0
  52. package/build/search-utils.mjs.map +1 -0
  53. package/build/stream-utils.d.ts +0 -1
  54. package/build/stream-utils.js +29 -28
  55. package/build/stream-utils.js.map +1 -1
  56. package/build/stream-utils.mjs +30 -0
  57. package/build/stream-utils.mjs.map +1 -0
  58. package/build/string-utils.js +31 -34
  59. package/build/string-utils.js.map +1 -1
  60. package/build/string-utils.mjs +31 -0
  61. package/build/string-utils.mjs.map +1 -0
  62. package/build/tarball-utils.js +40 -39
  63. package/build/tarball-utils.js.map +1 -1
  64. package/build/tarball-utils.mjs +46 -0
  65. package/build/tarball-utils.mjs.map +1 -0
  66. package/build/validation-utils.js +78 -112
  67. package/build/validation-utils.js.map +1 -1
  68. package/build/validation-utils.mjs +91 -0
  69. package/build/validation-utils.mjs.map +1 -0
  70. package/build/warning-utils.d.ts +1 -0
  71. package/build/warning-utils.js +38 -33
  72. package/build/warning-utils.js.map +1 -1
  73. package/build/warning-utils.mjs +40 -0
  74. package/build/warning-utils.mjs.map +1 -0
  75. package/package.json +19 -6
  76. package/build/index.js.map +0 -1
  77. package/build/path-utils.js +0 -2
  78. package/build/path-utils.js.map +0 -1
package/build/ip-utils.js CHANGED
@@ -1,83 +1,66 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.js");
2
+ let node_net = require("node:net");
3
+ node_net = require_runtime.__toESM(node_net);
4
+ //#region src/ip-utils.ts
5
+ var ip_utils_exports = /* @__PURE__ */ require_runtime.__exportAll({
6
+ isAddressAllowed: () => isAddressAllowed,
7
+ isIPv4InCIDR: () => isIPv4InCIDR,
8
+ normalizeAddress: () => normalizeAddress,
9
+ parseIPv4: () => parseIPv4
5
10
  });
6
- exports.isAddressAllowed = isAddressAllowed;
7
- exports.isIPv4InCIDR = isIPv4InCIDR;
8
- exports.normalizeAddress = normalizeAddress;
9
- exports.parseIPv4 = parseIPv4;
10
- var _nodeNet = _interopRequireDefault(require("node:net"));
11
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
- const IPV4_MAPPED_PREFIX = '::ffff:';
13
-
11
+ var IPV4_MAPPED_PREFIX = "::ffff:";
14
12
  /**
15
- * Trim an address and strip the IPv4-mapped IPv6 prefix (`::ffff:`) so that
16
- * mapped addresses are compared as plain IPv4.
17
- */
13
+ * Trim an address and strip the IPv4-mapped IPv6 prefix (`::ffff:`) so that
14
+ * mapped addresses are compared as plain IPv4.
15
+ */
18
16
  function normalizeAddress(address) {
19
- if (!address) {
20
- return;
21
- }
22
- const trimmedAddress = address.trim();
23
- if (trimmedAddress.startsWith(IPV4_MAPPED_PREFIX)) {
24
- return trimmedAddress.slice(IPV4_MAPPED_PREFIX.length);
25
- }
26
- return trimmedAddress;
17
+ if (!address) return;
18
+ const trimmedAddress = address.trim();
19
+ if (trimmedAddress.startsWith(IPV4_MAPPED_PREFIX)) return trimmedAddress.slice(7);
20
+ return trimmedAddress;
27
21
  }
28
-
29
22
  /**
30
- * Convert a dotted-quad IPv4 address into its unsigned 32-bit integer value.
31
- */
23
+ * Convert a dotted-quad IPv4 address into its unsigned 32-bit integer value.
24
+ */
32
25
  function parseIPv4(address) {
33
- if (_nodeNet.default.isIP(address) !== 4) {
34
- return;
35
- }
36
- return address.split('.').map(Number).reduce((accumulator, octet) => (accumulator << 8) + octet, 0) >>> 0;
26
+ if (node_net.default.isIP(address) !== 4) return;
27
+ return address.split(".").map(Number).reduce((accumulator, octet) => (accumulator << 8) + octet, 0) >>> 0;
37
28
  }
38
-
39
29
  /**
40
- * Whether an IPv4 `address` falls inside the `range`/`prefix` CIDR block.
41
- */
30
+ * Whether an IPv4 `address` falls inside the `range`/`prefix` CIDR block.
31
+ */
42
32
  function isIPv4InCIDR(address, range, prefix) {
43
- const addressNumber = parseIPv4(address);
44
- const rangeNumber = parseIPv4(range);
45
- if (addressNumber === undefined || rangeNumber === undefined || prefix < 0 || prefix > 32) {
46
- return false;
47
- }
48
- const mask = prefix === 0 ? 0 : 0xffffffff << 32 - prefix >>> 0;
49
- return (addressNumber & mask) === (rangeNumber & mask);
33
+ const addressNumber = parseIPv4(address);
34
+ const rangeNumber = parseIPv4(range);
35
+ if (addressNumber === void 0 || rangeNumber === void 0 || prefix < 0 || prefix > 32) return false;
36
+ const mask = prefix === 0 ? 0 : 4294967295 << 32 - prefix >>> 0;
37
+ return (addressNumber & mask) === (rangeNumber & mask);
50
38
  }
51
-
52
39
  /**
53
- * Whether `address` is allowed by the provided `cidr` whitelist. An empty or
54
- * missing whitelist allows every address; an unparseable address is rejected.
55
- */
40
+ * Whether `address` is allowed by the provided `cidr` whitelist. An empty or
41
+ * missing whitelist allows every address; an unparseable address is rejected.
42
+ */
56
43
  function isAddressAllowed(address, cidr) {
57
- if (!cidr || cidr.length === 0) {
58
- return true;
59
- }
60
- const normalizedAddress = normalizeAddress(address);
61
- if (!normalizedAddress) {
62
- return false;
63
- }
64
- return cidr.some(entry => {
65
- const [range, prefixValue] = entry.split('/');
66
- const normalizedRange = normalizeAddress(range);
67
- if (!normalizedRange) {
68
- return false;
69
- }
70
- if (typeof prefixValue === 'undefined') {
71
- return normalizedAddress === normalizedRange;
72
- }
73
- const prefix = Number(prefixValue);
74
- if (Number.isInteger(prefix) === false) {
75
- return false;
76
- }
77
- if (_nodeNet.default.isIP(normalizedAddress) === 4 && _nodeNet.default.isIP(normalizedRange) === 4) {
78
- return isIPv4InCIDR(normalizedAddress, normalizedRange, prefix);
79
- }
80
- return prefix === 128 && normalizedAddress === normalizedRange;
81
- });
44
+ if (!cidr || cidr.length === 0) return true;
45
+ const normalizedAddress = normalizeAddress(address);
46
+ if (!normalizedAddress) return false;
47
+ return cidr.some((entry) => {
48
+ const [range, prefixValue] = entry.split("/");
49
+ const normalizedRange = normalizeAddress(range);
50
+ if (!normalizedRange) return false;
51
+ if (typeof prefixValue === "undefined") return normalizedAddress === normalizedRange;
52
+ const prefix = Number(prefixValue);
53
+ if (Number.isInteger(prefix) === false) return false;
54
+ if (node_net.default.isIP(normalizedAddress) === 4 && node_net.default.isIP(normalizedRange) === 4) return isIPv4InCIDR(normalizedAddress, normalizedRange, prefix);
55
+ return prefix === 128 && normalizedAddress === normalizedRange;
56
+ });
82
57
  }
58
+ //#endregion
59
+ Object.defineProperty(exports, "ip_utils_exports", {
60
+ enumerable: true,
61
+ get: function() {
62
+ return ip_utils_exports;
63
+ }
64
+ });
65
+
83
66
  //# sourceMappingURL=ip-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ip-utils.js","names":["_nodeNet","_interopRequireDefault","require","e","__esModule","default","IPV4_MAPPED_PREFIX","normalizeAddress","address","trimmedAddress","trim","startsWith","slice","length","parseIPv4","net","isIP","split","map","Number","reduce","accumulator","octet","isIPv4InCIDR","range","prefix","addressNumber","rangeNumber","undefined","mask","isAddressAllowed","cidr","normalizedAddress","some","entry","prefixValue","normalizedRange","isInteger"],"sources":["../src/ip-utils.ts"],"sourcesContent":["import net from 'node:net';\n\nconst IPV4_MAPPED_PREFIX = '::ffff:';\n\n/**\n * Trim an address and strip the IPv4-mapped IPv6 prefix (`::ffff:`) so that\n * mapped addresses are compared as plain IPv4.\n */\nexport function normalizeAddress(address?: string): string | undefined {\n if (!address) {\n return;\n }\n\n const trimmedAddress = address.trim();\n\n if (trimmedAddress.startsWith(IPV4_MAPPED_PREFIX)) {\n return trimmedAddress.slice(IPV4_MAPPED_PREFIX.length);\n }\n\n return trimmedAddress;\n}\n\n/**\n * Convert a dotted-quad IPv4 address into its unsigned 32-bit integer value.\n */\nexport function parseIPv4(address: string): number | undefined {\n if (net.isIP(address) !== 4) {\n return;\n }\n\n return (\n address\n .split('.')\n .map(Number)\n .reduce((accumulator, octet) => (accumulator << 8) + octet, 0) >>> 0\n );\n}\n\n/**\n * Whether an IPv4 `address` falls inside the `range`/`prefix` CIDR block.\n */\nexport function isIPv4InCIDR(address: string, range: string, prefix: number): boolean {\n const addressNumber = parseIPv4(address);\n const rangeNumber = parseIPv4(range);\n\n if (addressNumber === undefined || rangeNumber === undefined || prefix < 0 || prefix > 32) {\n return false;\n }\n\n const mask = prefix === 0 ? 0 : (0xffffffff << (32 - prefix)) >>> 0;\n\n return (addressNumber & mask) === (rangeNumber & mask);\n}\n\n/**\n * Whether `address` is allowed by the provided `cidr` whitelist. An empty or\n * missing whitelist allows every address; an unparseable address is rejected.\n */\nexport function isAddressAllowed(address: string | undefined, cidr: string[] | undefined): boolean {\n if (!cidr || cidr.length === 0) {\n return true;\n }\n\n const normalizedAddress = normalizeAddress(address);\n\n if (!normalizedAddress) {\n return false;\n }\n\n return cidr.some((entry) => {\n const [range, prefixValue] = entry.split('/');\n const normalizedRange = normalizeAddress(range);\n\n if (!normalizedRange) {\n return false;\n }\n\n if (typeof prefixValue === 'undefined') {\n return normalizedAddress === normalizedRange;\n }\n\n const prefix = Number(prefixValue);\n\n if (Number.isInteger(prefix) === false) {\n return false;\n }\n\n if (net.isIP(normalizedAddress) === 4 && net.isIP(normalizedRange) === 4) {\n return isIPv4InCIDR(normalizedAddress, normalizedRange, prefix);\n }\n\n return prefix === 128 && normalizedAddress === normalizedRange;\n });\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ip-utils.js","names":[],"sources":["../src/ip-utils.ts"],"sourcesContent":["import net from 'node:net';\n\nconst IPV4_MAPPED_PREFIX = '::ffff:';\n\n/**\n * Trim an address and strip the IPv4-mapped IPv6 prefix (`::ffff:`) so that\n * mapped addresses are compared as plain IPv4.\n */\nexport function normalizeAddress(address?: string): string | undefined {\n if (!address) {\n return;\n }\n\n const trimmedAddress = address.trim();\n\n if (trimmedAddress.startsWith(IPV4_MAPPED_PREFIX)) {\n return trimmedAddress.slice(IPV4_MAPPED_PREFIX.length);\n }\n\n return trimmedAddress;\n}\n\n/**\n * Convert a dotted-quad IPv4 address into its unsigned 32-bit integer value.\n */\nexport function parseIPv4(address: string): number | undefined {\n if (net.isIP(address) !== 4) {\n return;\n }\n\n return (\n address\n .split('.')\n .map(Number)\n .reduce((accumulator, octet) => (accumulator << 8) + octet, 0) >>> 0\n );\n}\n\n/**\n * Whether an IPv4 `address` falls inside the `range`/`prefix` CIDR block.\n */\nexport function isIPv4InCIDR(address: string, range: string, prefix: number): boolean {\n const addressNumber = parseIPv4(address);\n const rangeNumber = parseIPv4(range);\n\n if (addressNumber === undefined || rangeNumber === undefined || prefix < 0 || prefix > 32) {\n return false;\n }\n\n const mask = prefix === 0 ? 0 : (0xffffffff << (32 - prefix)) >>> 0;\n\n return (addressNumber & mask) === (rangeNumber & mask);\n}\n\n/**\n * Whether `address` is allowed by the provided `cidr` whitelist. An empty or\n * missing whitelist allows every address; an unparseable address is rejected.\n */\nexport function isAddressAllowed(address: string | undefined, cidr: string[] | undefined): boolean {\n if (!cidr || cidr.length === 0) {\n return true;\n }\n\n const normalizedAddress = normalizeAddress(address);\n\n if (!normalizedAddress) {\n return false;\n }\n\n return cidr.some((entry) => {\n const [range, prefixValue] = entry.split('/');\n const normalizedRange = normalizeAddress(range);\n\n if (!normalizedRange) {\n return false;\n }\n\n if (typeof prefixValue === 'undefined') {\n return normalizedAddress === normalizedRange;\n }\n\n const prefix = Number(prefixValue);\n\n if (Number.isInteger(prefix) === false) {\n return false;\n }\n\n if (net.isIP(normalizedAddress) === 4 && net.isIP(normalizedRange) === 4) {\n return isIPv4InCIDR(normalizedAddress, normalizedRange, prefix);\n }\n\n return prefix === 128 && normalizedAddress === normalizedRange;\n });\n}\n"],"mappings":";;;;;;;;;;AAEA,IAAM,qBAAqB;;;;;AAM3B,SAAgB,iBAAiB,SAAsC;CACrE,IAAI,CAAC,SACH;CAGF,MAAM,iBAAiB,QAAQ,KAAK;CAEpC,IAAI,eAAe,WAAW,kBAAkB,GAC9C,OAAO,eAAe,MAAM,CAAyB;CAGvD,OAAO;AACT;;;;AAKA,SAAgB,UAAU,SAAqC;CAC7D,IAAI,SAAA,QAAI,KAAK,OAAO,MAAM,GACxB;CAGF,OACE,QACG,MAAM,GAAG,EACT,IAAI,MAAM,EACV,QAAQ,aAAa,WAAW,eAAe,KAAK,OAAO,CAAC,MAAM;AAEzE;;;;AAKA,SAAgB,aAAa,SAAiB,OAAe,QAAyB;CACpF,MAAM,gBAAgB,UAAU,OAAO;CACvC,MAAM,cAAc,UAAU,KAAK;CAEnC,IAAI,kBAAkB,KAAA,KAAa,gBAAgB,KAAA,KAAa,SAAS,KAAK,SAAS,IACrF,OAAO;CAGT,MAAM,OAAO,WAAW,IAAI,IAAK,cAAe,KAAK,WAAa;CAElE,QAAQ,gBAAgB,WAAW,cAAc;AACnD;;;;;AAMA,SAAgB,iBAAiB,SAA6B,MAAqC;CACjG,IAAI,CAAC,QAAQ,KAAK,WAAW,GAC3B,OAAO;CAGT,MAAM,oBAAoB,iBAAiB,OAAO;CAElD,IAAI,CAAC,mBACH,OAAO;CAGT,OAAO,KAAK,MAAM,UAAU;EAC1B,MAAM,CAAC,OAAO,eAAe,MAAM,MAAM,GAAG;EAC5C,MAAM,kBAAkB,iBAAiB,KAAK;EAE9C,IAAI,CAAC,iBACH,OAAO;EAGT,IAAI,OAAO,gBAAgB,aACzB,OAAO,sBAAsB;EAG/B,MAAM,SAAS,OAAO,WAAW;EAEjC,IAAI,OAAO,UAAU,MAAM,MAAM,OAC/B,OAAO;EAGT,IAAI,SAAA,QAAI,KAAK,iBAAiB,MAAM,KAAK,SAAA,QAAI,KAAK,eAAe,MAAM,GACrE,OAAO,aAAa,mBAAmB,iBAAiB,MAAM;EAGhE,OAAO,WAAW,OAAO,sBAAsB;CACjD,CAAC;AACH"}
@@ -0,0 +1,60 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
2
+ import net from "node:net";
3
+ //#region src/ip-utils.ts
4
+ var ip_utils_exports = /* @__PURE__ */ __exportAll({
5
+ isAddressAllowed: () => isAddressAllowed,
6
+ isIPv4InCIDR: () => isIPv4InCIDR,
7
+ normalizeAddress: () => normalizeAddress,
8
+ parseIPv4: () => parseIPv4
9
+ });
10
+ var IPV4_MAPPED_PREFIX = "::ffff:";
11
+ /**
12
+ * Trim an address and strip the IPv4-mapped IPv6 prefix (`::ffff:`) so that
13
+ * mapped addresses are compared as plain IPv4.
14
+ */
15
+ function normalizeAddress(address) {
16
+ if (!address) return;
17
+ const trimmedAddress = address.trim();
18
+ if (trimmedAddress.startsWith(IPV4_MAPPED_PREFIX)) return trimmedAddress.slice(7);
19
+ return trimmedAddress;
20
+ }
21
+ /**
22
+ * Convert a dotted-quad IPv4 address into its unsigned 32-bit integer value.
23
+ */
24
+ function parseIPv4(address) {
25
+ if (net.isIP(address) !== 4) return;
26
+ return address.split(".").map(Number).reduce((accumulator, octet) => (accumulator << 8) + octet, 0) >>> 0;
27
+ }
28
+ /**
29
+ * Whether an IPv4 `address` falls inside the `range`/`prefix` CIDR block.
30
+ */
31
+ function isIPv4InCIDR(address, range, prefix) {
32
+ const addressNumber = parseIPv4(address);
33
+ const rangeNumber = parseIPv4(range);
34
+ if (addressNumber === void 0 || rangeNumber === void 0 || prefix < 0 || prefix > 32) return false;
35
+ const mask = prefix === 0 ? 0 : 4294967295 << 32 - prefix >>> 0;
36
+ return (addressNumber & mask) === (rangeNumber & mask);
37
+ }
38
+ /**
39
+ * Whether `address` is allowed by the provided `cidr` whitelist. An empty or
40
+ * missing whitelist allows every address; an unparseable address is rejected.
41
+ */
42
+ function isAddressAllowed(address, cidr) {
43
+ if (!cidr || cidr.length === 0) return true;
44
+ const normalizedAddress = normalizeAddress(address);
45
+ if (!normalizedAddress) return false;
46
+ return cidr.some((entry) => {
47
+ const [range, prefixValue] = entry.split("/");
48
+ const normalizedRange = normalizeAddress(range);
49
+ if (!normalizedRange) return false;
50
+ if (typeof prefixValue === "undefined") return normalizedAddress === normalizedRange;
51
+ const prefix = Number(prefixValue);
52
+ if (Number.isInteger(prefix) === false) return false;
53
+ if (net.isIP(normalizedAddress) === 4 && net.isIP(normalizedRange) === 4) return isIPv4InCIDR(normalizedAddress, normalizedRange, prefix);
54
+ return prefix === 128 && normalizedAddress === normalizedRange;
55
+ });
56
+ }
57
+ //#endregion
58
+ export { ip_utils_exports };
59
+
60
+ //# sourceMappingURL=ip-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip-utils.mjs","names":[],"sources":["../src/ip-utils.ts"],"sourcesContent":["import net from 'node:net';\n\nconst IPV4_MAPPED_PREFIX = '::ffff:';\n\n/**\n * Trim an address and strip the IPv4-mapped IPv6 prefix (`::ffff:`) so that\n * mapped addresses are compared as plain IPv4.\n */\nexport function normalizeAddress(address?: string): string | undefined {\n if (!address) {\n return;\n }\n\n const trimmedAddress = address.trim();\n\n if (trimmedAddress.startsWith(IPV4_MAPPED_PREFIX)) {\n return trimmedAddress.slice(IPV4_MAPPED_PREFIX.length);\n }\n\n return trimmedAddress;\n}\n\n/**\n * Convert a dotted-quad IPv4 address into its unsigned 32-bit integer value.\n */\nexport function parseIPv4(address: string): number | undefined {\n if (net.isIP(address) !== 4) {\n return;\n }\n\n return (\n address\n .split('.')\n .map(Number)\n .reduce((accumulator, octet) => (accumulator << 8) + octet, 0) >>> 0\n );\n}\n\n/**\n * Whether an IPv4 `address` falls inside the `range`/`prefix` CIDR block.\n */\nexport function isIPv4InCIDR(address: string, range: string, prefix: number): boolean {\n const addressNumber = parseIPv4(address);\n const rangeNumber = parseIPv4(range);\n\n if (addressNumber === undefined || rangeNumber === undefined || prefix < 0 || prefix > 32) {\n return false;\n }\n\n const mask = prefix === 0 ? 0 : (0xffffffff << (32 - prefix)) >>> 0;\n\n return (addressNumber & mask) === (rangeNumber & mask);\n}\n\n/**\n * Whether `address` is allowed by the provided `cidr` whitelist. An empty or\n * missing whitelist allows every address; an unparseable address is rejected.\n */\nexport function isAddressAllowed(address: string | undefined, cidr: string[] | undefined): boolean {\n if (!cidr || cidr.length === 0) {\n return true;\n }\n\n const normalizedAddress = normalizeAddress(address);\n\n if (!normalizedAddress) {\n return false;\n }\n\n return cidr.some((entry) => {\n const [range, prefixValue] = entry.split('/');\n const normalizedRange = normalizeAddress(range);\n\n if (!normalizedRange) {\n return false;\n }\n\n if (typeof prefixValue === 'undefined') {\n return normalizedAddress === normalizedRange;\n }\n\n const prefix = Number(prefixValue);\n\n if (Number.isInteger(prefix) === false) {\n return false;\n }\n\n if (net.isIP(normalizedAddress) === 4 && net.isIP(normalizedRange) === 4) {\n return isIPv4InCIDR(normalizedAddress, normalizedRange, prefix);\n }\n\n return prefix === 128 && normalizedAddress === normalizedRange;\n });\n}\n"],"mappings":";;;;;;;;;AAEA,IAAM,qBAAqB;;;;;AAM3B,SAAgB,iBAAiB,SAAsC;CACrE,IAAI,CAAC,SACH;CAGF,MAAM,iBAAiB,QAAQ,KAAK;CAEpC,IAAI,eAAe,WAAW,kBAAkB,GAC9C,OAAO,eAAe,MAAM,CAAyB;CAGvD,OAAO;AACT;;;;AAKA,SAAgB,UAAU,SAAqC;CAC7D,IAAI,IAAI,KAAK,OAAO,MAAM,GACxB;CAGF,OACE,QACG,MAAM,GAAG,EACT,IAAI,MAAM,EACV,QAAQ,aAAa,WAAW,eAAe,KAAK,OAAO,CAAC,MAAM;AAEzE;;;;AAKA,SAAgB,aAAa,SAAiB,OAAe,QAAyB;CACpF,MAAM,gBAAgB,UAAU,OAAO;CACvC,MAAM,cAAc,UAAU,KAAK;CAEnC,IAAI,kBAAkB,KAAA,KAAa,gBAAgB,KAAA,KAAa,SAAS,KAAK,SAAS,IACrF,OAAO;CAGT,MAAM,OAAO,WAAW,IAAI,IAAK,cAAe,KAAK,WAAa;CAElE,QAAQ,gBAAgB,WAAW,cAAc;AACnD;;;;;AAMA,SAAgB,iBAAiB,SAA6B,MAAqC;CACjG,IAAI,CAAC,QAAQ,KAAK,WAAW,GAC3B,OAAO;CAGT,MAAM,oBAAoB,iBAAiB,OAAO;CAElD,IAAI,CAAC,mBACH,OAAO;CAGT,OAAO,KAAK,MAAM,UAAU;EAC1B,MAAM,CAAC,OAAO,eAAe,MAAM,MAAM,GAAG;EAC5C,MAAM,kBAAkB,iBAAiB,KAAK;EAE9C,IAAI,CAAC,iBACH,OAAO;EAGT,IAAI,OAAO,gBAAgB,aACzB,OAAO,sBAAsB;EAG/B,MAAM,SAAS,OAAO,WAAW;EAEjC,IAAI,OAAO,UAAU,MAAM,MAAM,OAC/B,OAAO;EAGT,IAAI,IAAI,KAAK,iBAAiB,MAAM,KAAK,IAAI,KAAK,eAAe,MAAM,GACrE,OAAO,aAAa,mBAAmB,iBAAiB,MAAM;EAGhE,OAAO,WAAW,OAAO,sBAAsB;CACjD,CAAC;AACH"}
@@ -1,93 +1,77 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
1
+ const require_runtime = require("./_virtual/_rolldown/runtime.js");
2
+ const require_constants = require("./constants.js");
3
+ let node_path = require("node:path");
4
+ node_path = require_runtime.__toESM(node_path);
5
+ let node_fs = require("node:fs");
6
+ node_fs = require_runtime.__toESM(node_fs);
7
+ let semver = require("semver");
8
+ semver = require_runtime.__toESM(semver);
9
+ //#region src/pkg-utils.ts
10
+ var pkg_utils_exports = /* @__PURE__ */ require_runtime.__exportAll({
11
+ getLatest: () => getLatest,
12
+ getPackageJson: () => getPackageJson,
13
+ mergeVersions: () => mergeVersions,
14
+ semverSanitize: () => semverSanitize,
15
+ semverSort: () => semverSort
5
16
  });
6
- exports.getLatest = getLatest;
7
- exports.getPackageJson = getPackageJson;
8
- exports.mergeVersions = mergeVersions;
9
- exports.semverSanitize = semverSanitize;
10
- exports.semverSort = semverSort;
11
- var _nodeFs = _interopRequireDefault(require("node:fs"));
12
- var _nodePath = _interopRequireDefault(require("node:path"));
13
- var _semver = _interopRequireDefault(require("semver"));
14
- var _constants = require("./constants");
15
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
17
  /**
17
- * Function filters out bad semver versions and sorts the array.
18
- * @return {Array} sorted Array
19
- */
18
+ * Function filters out bad semver versions and sorts the array.
19
+ * @return {Array} sorted Array
20
+ */
20
21
  function semverSort(listVersions) {
21
- return listVersions.filter(function (x) {
22
- if (!_semver.default.parse(x, true)) {
23
- return false;
24
- }
25
- return true;
26
- }).sort(_semver.default.compareLoose).map(String);
22
+ return listVersions.filter(function(x) {
23
+ if (!semver.default.parse(x, true)) return false;
24
+ return true;
25
+ }).sort(semver.default.compareLoose).map(String);
27
26
  }
28
-
29
27
  /**
30
- * Sanitize a version string to a valid semver version.
31
- * @param version - The version string to sanitize.
32
- * @returns The sanitized version string.
33
- */
28
+ * Sanitize a version string to a valid semver version.
29
+ * @param version - The version string to sanitize.
30
+ * @returns The sanitized version string.
31
+ */
34
32
  function semverSanitize(version) {
35
- return _semver.default.valid(version) || _semver.default.coerce(version, {
36
- includePrerelease: true
37
- })?.version || '';
33
+ return semver.default.valid(version) || semver.default.coerce(version, { includePrerelease: true })?.version || "";
38
34
  }
39
-
40
35
  /**
41
- * Get the latest publihsed version of a package.
42
- * @param package metadata
43
- **/
36
+ * Get the latest publihsed version of a package.
37
+ * @param package metadata
38
+ **/
44
39
  function getLatest(pkg) {
45
- const listVersions = Object.keys(pkg.versions);
46
- if (listVersions.length < 1) {
47
- throw Error('cannot get lastest version of none');
48
- }
49
- const versions = semverSort(listVersions);
50
- const latest = pkg[_constants.DIST_TAGS]?.latest ? pkg[_constants.DIST_TAGS].latest : versions[0];
51
- return latest;
40
+ const listVersions = Object.keys(pkg.versions);
41
+ if (listVersions.length < 1) throw Error("cannot get lastest version of none");
42
+ const versions = semverSort(listVersions);
43
+ return pkg["dist-tags"]?.latest ? pkg[require_constants.DIST_TAGS].latest : versions[0];
52
44
  }
53
-
54
45
  /**
55
- * Function gets a local info and an info from uplinks and tries to merge it
56
- exported for unit tests only.
57
- * @param {*} local
58
- * @param {*} upstream
59
- * @param {*} config sds
60
- * @deprecated use @verdaccio/storage mergeVersions method
61
- */
62
- // @deprecated
46
+ * Function gets a local info and an info from uplinks and tries to merge it
47
+ exported for unit tests only.
48
+ * @param {*} local
49
+ * @param {*} upstream
50
+ * @param {*} config sds
51
+ * @deprecated use @verdaccio/storage mergeVersions method
52
+ */
63
53
  function mergeVersions(local, upstream) {
64
- // copy new versions to a cache
65
- // NOTE: if a certain version was updated, we can't refresh it reliably
66
- for (const i in upstream.versions) {
67
- if (typeof local.versions[i] === 'undefined') {
68
- local.versions[i] = upstream.versions[i];
69
- }
70
- }
71
- for (const i in upstream[_constants.DIST_TAGS]) {
72
- if (local[_constants.DIST_TAGS][i] !== upstream[_constants.DIST_TAGS][i]) {
73
- if (!local[_constants.DIST_TAGS][i] || _semver.default.lte(local[_constants.DIST_TAGS][i], upstream[_constants.DIST_TAGS][i])) {
74
- local[_constants.DIST_TAGS][i] = upstream[_constants.DIST_TAGS][i];
75
- }
76
- if (i === 'latest' && local[_constants.DIST_TAGS][i] === upstream[_constants.DIST_TAGS][i]) {
77
- // if remote has more fresh package, we should borrow its readme
78
- local.readme = upstream.readme;
79
- }
80
- }
81
- }
54
+ for (const i in upstream.versions) if (typeof local.versions[i] === "undefined") local.versions[i] = upstream.versions[i];
55
+ for (const i in upstream[require_constants.DIST_TAGS]) if (local["dist-tags"][i] !== upstream["dist-tags"][i]) {
56
+ if (!local["dist-tags"][i] || semver.default.lte(local["dist-tags"][i], upstream["dist-tags"][i])) local[require_constants.DIST_TAGS][i] = upstream[require_constants.DIST_TAGS][i];
57
+ if (i === "latest" && local["dist-tags"][i] === upstream["dist-tags"][i]) local.readme = upstream.readme;
58
+ }
82
59
  }
83
-
84
60
  /**
85
- * Get package informations from package.json
86
- * @param packagePath - The path to the package.json file.
87
- * @returns The package.json content
88
- */
61
+ * Get package informations from package.json
62
+ * @param packagePath - The path to the package.json file.
63
+ * @returns The package.json content
64
+ */
89
65
  function getPackageJson(packagePath, relativePath) {
90
- const packageJsonPath = _nodePath.default.join(packagePath, relativePath, 'package.json');
91
- return JSON.parse(_nodeFs.default.readFileSync(packageJsonPath, 'utf8'));
66
+ const packageJsonPath = node_path.default.join(packagePath, relativePath, "package.json");
67
+ return JSON.parse(node_fs.default.readFileSync(packageJsonPath, "utf8"));
92
68
  }
69
+ //#endregion
70
+ Object.defineProperty(exports, "pkg_utils_exports", {
71
+ enumerable: true,
72
+ get: function() {
73
+ return pkg_utils_exports;
74
+ }
75
+ });
76
+
93
77
  //# sourceMappingURL=pkg-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pkg-utils.js","names":["_nodeFs","_interopRequireDefault","require","_nodePath","_semver","_constants","e","__esModule","default","semverSort","listVersions","filter","x","semver","parse","sort","compareLoose","map","String","semverSanitize","version","valid","coerce","includePrerelease","getLatest","pkg","Object","keys","versions","length","Error","latest","DIST_TAGS","mergeVersions","local","upstream","i","lte","readme","getPackageJson","packagePath","relativePath","packageJsonPath","path","join","JSON","fs","readFileSync"],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport semver from 'semver';\n\nimport type { 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 * Sanitize a version string to a valid semver version.\n * @param version - The version string to sanitize.\n * @returns The sanitized version string.\n */\nexport function semverSanitize(version: string): string {\n return (\n semver.valid(version) || semver.coerce(version, { includePrerelease: true })?.version || ''\n );\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\n/**\n * Get package informations from package.json\n * @param packagePath - The path to the package.json file.\n * @returns The package.json content\n */\nexport function getPackageJson(packagePath: string, relativePath: string): Record<string, unknown> {\n const packageJsonPath = path.join(packagePath, relativePath, 'package.json');\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"pkg-utils.js","names":[],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport semver from 'semver';\n\nimport type { 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 * Sanitize a version string to a valid semver version.\n * @param version - The version string to sanitize.\n * @returns The sanitized version string.\n */\nexport function semverSanitize(version: string): string {\n return (\n semver.valid(version) || semver.coerce(version, { includePrerelease: true })?.version || ''\n );\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\n/**\n * Get package informations from package.json\n * @param packagePath - The path to the package.json file.\n * @returns The package.json content\n */\nexport function getPackageJson(packagePath: string, relativePath: string): Record<string, unknown> {\n const packageJsonPath = path.join(packagePath, relativePath, 'package.json');\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAYA,SAAgB,WAAW,cAAkC;CAC3D,OAAO,aACJ,OAAO,SAAU,GAAY;EAC5B,IAAI,CAAC,OAAA,QAAO,MAAM,GAAG,IAAI,GACvB,OAAO;EAET,OAAO;CACT,CAAC,EACA,KAAK,OAAA,QAAO,YAAY,EACxB,IAAI,MAAM;AACf;;;;;;AAOA,SAAgB,eAAe,SAAyB;CACtD,OACE,OAAA,QAAO,MAAM,OAAO,KAAK,OAAA,QAAO,OAAO,SAAS,EAAE,mBAAmB,KAAK,CAAC,GAAG,WAAW;AAE7F;;;;;AAMA,SAAgB,UAAU,KAAuB;CAC/C,MAAM,eAAyB,OAAO,KAAK,IAAI,QAAQ;CACvD,IAAI,aAAa,SAAS,GACxB,MAAM,MAAM,oCAAoC;CAGlD,MAAM,WAAqB,WAAW,YAAY;CAGlD,OAFmC,IAAA,cAAgB,SAAS,IAAI,kBAAA,WAAW,SAAS,SAAS;AAG/F;;;;;;;;;AAWA,SAAgB,cAAc,OAAiB,UAAoB;CAGjE,KAAK,MAAM,KAAK,SAAS,UACvB,IAAI,OAAO,MAAM,SAAS,OAAO,aAC/B,MAAM,SAAS,KAAK,SAAS,SAAS;CAI1C,KAAK,MAAM,KAAK,SAAS,kBAAA,YACvB,IAAI,MAAA,aAAiB,OAAO,SAAA,aAAoB,IAAI;EAClD,IAAI,CAAC,MAAA,aAAiB,MAAM,OAAA,QAAO,IAAI,MAAA,aAAiB,IAAI,SAAA,aAAoB,EAAE,GAChF,MAAM,kBAAA,WAAW,KAAK,SAAS,kBAAA,WAAW;EAE5C,IAAI,MAAM,YAAY,MAAA,aAAiB,OAAO,SAAA,aAAoB,IAEhE,MAAM,SAAS,SAAS;CAE5B;AAEJ;;;;;;AAOA,SAAgB,eAAe,aAAqB,cAA+C;CACjG,MAAM,kBAAkB,UAAA,QAAK,KAAK,aAAa,cAAc,cAAc;CAC3E,OAAO,KAAK,MAAM,QAAA,QAAG,aAAa,iBAAiB,MAAM,CAAC;AAC5D"}
@@ -0,0 +1,69 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.mjs";
2
+ import { DIST_TAGS } from "./constants.mjs";
3
+ import path from "node:path";
4
+ import fs from "node:fs";
5
+ import semver from "semver";
6
+ //#region src/pkg-utils.ts
7
+ var pkg_utils_exports = /* @__PURE__ */ __exportAll({
8
+ getLatest: () => getLatest,
9
+ getPackageJson: () => getPackageJson,
10
+ mergeVersions: () => mergeVersions,
11
+ semverSanitize: () => semverSanitize,
12
+ semverSort: () => semverSort
13
+ });
14
+ /**
15
+ * Function filters out bad semver versions and sorts the array.
16
+ * @return {Array} sorted Array
17
+ */
18
+ function semverSort(listVersions) {
19
+ return listVersions.filter(function(x) {
20
+ if (!semver.parse(x, true)) return false;
21
+ return true;
22
+ }).sort(semver.compareLoose).map(String);
23
+ }
24
+ /**
25
+ * Sanitize a version string to a valid semver version.
26
+ * @param version - The version string to sanitize.
27
+ * @returns The sanitized version string.
28
+ */
29
+ function semverSanitize(version) {
30
+ return semver.valid(version) || semver.coerce(version, { includePrerelease: true })?.version || "";
31
+ }
32
+ /**
33
+ * Get the latest publihsed version of a package.
34
+ * @param package metadata
35
+ **/
36
+ function getLatest(pkg) {
37
+ const listVersions = Object.keys(pkg.versions);
38
+ if (listVersions.length < 1) throw Error("cannot get lastest version of none");
39
+ const versions = semverSort(listVersions);
40
+ return pkg["dist-tags"]?.latest ? pkg[DIST_TAGS].latest : versions[0];
41
+ }
42
+ /**
43
+ * Function gets a local info and an info from uplinks and tries to merge it
44
+ exported for unit tests only.
45
+ * @param {*} local
46
+ * @param {*} upstream
47
+ * @param {*} config sds
48
+ * @deprecated use @verdaccio/storage mergeVersions method
49
+ */
50
+ function mergeVersions(local, upstream) {
51
+ for (const i in upstream.versions) if (typeof local.versions[i] === "undefined") local.versions[i] = upstream.versions[i];
52
+ for (const i in upstream[DIST_TAGS]) if (local["dist-tags"][i] !== upstream["dist-tags"][i]) {
53
+ if (!local["dist-tags"][i] || semver.lte(local["dist-tags"][i], upstream["dist-tags"][i])) local[DIST_TAGS][i] = upstream[DIST_TAGS][i];
54
+ if (i === "latest" && local["dist-tags"][i] === upstream["dist-tags"][i]) local.readme = upstream.readme;
55
+ }
56
+ }
57
+ /**
58
+ * Get package informations from package.json
59
+ * @param packagePath - The path to the package.json file.
60
+ * @returns The package.json content
61
+ */
62
+ function getPackageJson(packagePath, relativePath) {
63
+ const packageJsonPath = path.join(packagePath, relativePath, "package.json");
64
+ return JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
65
+ }
66
+ //#endregion
67
+ export { pkg_utils_exports };
68
+
69
+ //# sourceMappingURL=pkg-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pkg-utils.mjs","names":[],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport semver from 'semver';\n\nimport type { 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 * Sanitize a version string to a valid semver version.\n * @param version - The version string to sanitize.\n * @returns The sanitized version string.\n */\nexport function semverSanitize(version: string): string {\n return (\n semver.valid(version) || semver.coerce(version, { includePrerelease: true })?.version || ''\n );\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\n/**\n * Get package informations from package.json\n * @param packagePath - The path to the package.json file.\n * @returns The package.json content\n */\nexport function getPackageJson(packagePath: string, relativePath: string): Record<string, unknown> {\n const packageJsonPath = path.join(packagePath, relativePath, 'package.json');\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAYA,SAAgB,WAAW,cAAkC;CAC3D,OAAO,aACJ,OAAO,SAAU,GAAY;EAC5B,IAAI,CAAC,OAAO,MAAM,GAAG,IAAI,GACvB,OAAO;EAET,OAAO;CACT,CAAC,EACA,KAAK,OAAO,YAAY,EACxB,IAAI,MAAM;AACf;;;;;;AAOA,SAAgB,eAAe,SAAyB;CACtD,OACE,OAAO,MAAM,OAAO,KAAK,OAAO,OAAO,SAAS,EAAE,mBAAmB,KAAK,CAAC,GAAG,WAAW;AAE7F;;;;;AAMA,SAAgB,UAAU,KAAuB;CAC/C,MAAM,eAAyB,OAAO,KAAK,IAAI,QAAQ;CACvD,IAAI,aAAa,SAAS,GACxB,MAAM,MAAM,oCAAoC;CAGlD,MAAM,WAAqB,WAAW,YAAY;CAGlD,OAFmC,IAAA,cAAgB,SAAS,IAAI,WAAW,SAAS,SAAS;AAG/F;;;;;;;;;AAWA,SAAgB,cAAc,OAAiB,UAAoB;CAGjE,KAAK,MAAM,KAAK,SAAS,UACvB,IAAI,OAAO,MAAM,SAAS,OAAO,aAC/B,MAAM,SAAS,KAAK,SAAS,SAAS;CAI1C,KAAK,MAAM,KAAK,SAAS,YACvB,IAAI,MAAA,aAAiB,OAAO,SAAA,aAAoB,IAAI;EAClD,IAAI,CAAC,MAAA,aAAiB,MAAM,OAAO,IAAI,MAAA,aAAiB,IAAI,SAAA,aAAoB,EAAE,GAChF,MAAM,WAAW,KAAK,SAAS,WAAW;EAE5C,IAAI,MAAM,YAAY,MAAA,aAAiB,OAAO,SAAA,aAAoB,IAEhE,MAAM,SAAS,SAAS;CAE5B;AAEJ;;;;;;AAOA,SAAgB,eAAe,aAAqB,cAA+C;CACjG,MAAM,kBAAkB,KAAK,KAAK,aAAa,cAAc,cAAc;CAC3E,OAAO,KAAK,MAAM,GAAG,aAAa,iBAAiB,MAAM,CAAC;AAC5D"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import type { Express, RequestHandler } from 'express';
3
2
  import type { Readable, Writable } from 'node:stream';
4
3
  import type { AllowAccess, Callback, Config, Logger, Manifest, PackageAccess, RemoteUser, Token, TokenFilter } from '@verdaccio/types';
@@ -1,81 +1,30 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Plugin = void 0;
7
- /**
8
- * Base Plugin Class
9
- *
10
- * Set of utilities for developing plugins.
11
- */
12
- class Plugin {
13
- static version = 1;
14
- constructor(config, options) {
15
- this.version = Plugin.version;
16
- this.config = config;
17
- this.options = options;
18
- }
19
- getVersion() {
20
- return this.version;
21
- }
22
- }
23
-
24
- // --- STORAGE PLUGIN ---
25
-
26
- /**
27
- * Storage Handler
28
- *
29
- * Used in storage plugin for managing packages and tarballs.
30
- */
31
-
32
- /**
33
- * Storage Plugin interface
34
- *
35
- * https://verdaccio.org/docs/plugin-storage
36
- */
37
-
38
- // --- MIDDLEWARE PLUGIN ---
39
-
40
- /**
41
- * Middleware Plugin Interface
42
- *
43
- * https://verdaccio.org/docs/plugin-middleware
44
- *
45
- * This function allow add middleware to the application.
46
- *
47
- * ```ts
48
- * import express, { Request, Response } from 'express';
49
- *
50
- * class Middleware extends Plugin {
51
- * // instances of auth and storage are injected
52
- * register_middlewares(app, auth, storage) {
53
- * const router = express.Router();
54
- * router.post('/my-endpoint', (req: Request, res: Response): void => {
55
- res.status(200).end();
56
- });
57
- * }
58
- * }
59
- *
60
- * const [plugin] = await asyncLoadPlugin(...);
61
- * plugin.register_middlewares(app, auth, storage);
62
- * ```
63
- */
64
-
65
- // --- AUTH PLUGIN ---
66
-
1
+ //#region src/plugin-utils.ts
2
+ var plugin_utils_exports = /* @__PURE__ */ require("./_virtual/_rolldown/runtime.js").__exportAll({ Plugin: () => Plugin });
67
3
  /**
68
- * Authentication Plugin Interface
69
- *
70
- * https://verdaccio.org/docs/plugin-auth
71
- */
72
-
73
- // --- FILTER PLUGIN ---
4
+ * Base Plugin Class
5
+ *
6
+ * Set of utilities for developing plugins.
7
+ */
8
+ var Plugin = class Plugin {
9
+ static version = 1;
10
+ version;
11
+ config;
12
+ options;
13
+ constructor(config, options) {
14
+ this.version = Plugin.version;
15
+ this.config = config;
16
+ this.options = options;
17
+ }
18
+ getVersion() {
19
+ return this.version;
20
+ }
21
+ };
22
+ //#endregion
23
+ Object.defineProperty(exports, "plugin_utils_exports", {
24
+ enumerable: true,
25
+ get: function() {
26
+ return plugin_utils_exports;
27
+ }
28
+ });
74
29
 
75
- /**
76
- * Filter Plugin Interface
77
- *
78
- * https://verdaccio.org/docs/plugin-filter
79
- */
80
- exports.Plugin = Plugin;
81
30
  //# sourceMappingURL=plugin-utils.js.map