@verdaccio/middleware 9.0.0-next-9.3 → 9.0.0-next-9.5
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/_virtual/_rolldown/runtime.js +23 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +62 -221
- package/build/index.mjs +23 -0
- package/build/middlewares/allow.js +42 -50
- package/build/middlewares/allow.js.map +1 -1
- package/build/middlewares/allow.mjs +44 -0
- package/build/middlewares/allow.mjs.map +1 -0
- package/build/middlewares/antiLoop.d.ts +2 -2
- package/build/middlewares/antiLoop.js +22 -40
- package/build/middlewares/antiLoop.js.map +1 -1
- package/build/middlewares/antiLoop.mjs +25 -0
- package/build/middlewares/antiLoop.mjs.map +1 -0
- package/build/middlewares/api_urls.js +66 -59
- package/build/middlewares/api_urls.js.map +1 -1
- package/build/middlewares/api_urls.mjs +59 -0
- package/build/middlewares/api_urls.mjs.map +1 -0
- package/build/middlewares/body-parser.d.ts +8 -0
- package/build/middlewares/body-parser.js +31 -0
- package/build/middlewares/body-parser.js.map +1 -0
- package/build/middlewares/body-parser.mjs +28 -0
- package/build/middlewares/body-parser.mjs.map +1 -0
- package/build/middlewares/dotfiles.d.ts +1 -1
- package/build/middlewares/dotfiles.js +25 -28
- package/build/middlewares/dotfiles.js.map +1 -1
- package/build/middlewares/dotfiles.mjs +27 -0
- package/build/middlewares/dotfiles.mjs.map +1 -0
- package/build/middlewares/encode-pkg.d.ts +1 -1
- package/build/middlewares/encode-pkg.js +20 -36
- package/build/middlewares/encode-pkg.js.map +1 -1
- package/build/middlewares/encode-pkg.mjs +22 -0
- package/build/middlewares/encode-pkg.mjs.map +1 -0
- package/build/middlewares/error.d.ts +3 -3
- package/build/middlewares/error.js +53 -71
- package/build/middlewares/error.js.map +1 -1
- package/build/middlewares/error.mjs +53 -0
- package/build/middlewares/error.mjs.map +1 -0
- package/build/middlewares/final.d.ts +2 -2
- package/build/middlewares/final.js +46 -57
- package/build/middlewares/final.js.map +1 -1
- package/build/middlewares/final.mjs +46 -0
- package/build/middlewares/final.mjs.map +1 -0
- package/build/middlewares/json.d.ts +1 -1
- package/build/middlewares/json.js +8 -11
- package/build/middlewares/json.js.map +1 -1
- package/build/middlewares/json.mjs +10 -0
- package/build/middlewares/json.mjs.map +1 -0
- package/build/middlewares/log.d.ts +1 -1
- package/build/middlewares/log.js +97 -125
- package/build/middlewares/log.js.map +1 -1
- package/build/middlewares/log.mjs +96 -0
- package/build/middlewares/log.mjs.map +1 -0
- package/build/middlewares/make-url-relative.d.ts +1 -1
- package/build/middlewares/make-url-relative.js +26 -41
- package/build/middlewares/make-url-relative.js.map +1 -1
- package/build/middlewares/make-url-relative.mjs +28 -0
- package/build/middlewares/make-url-relative.mjs.map +1 -0
- package/build/middlewares/match.js +8 -13
- package/build/middlewares/match.js.map +1 -1
- package/build/middlewares/match.mjs +11 -0
- package/build/middlewares/match.mjs.map +1 -0
- package/build/middlewares/media.js +15 -19
- package/build/middlewares/media.js.map +1 -1
- package/build/middlewares/media.mjs +17 -0
- package/build/middlewares/media.mjs.map +1 -0
- package/build/middlewares/rate-limit.d.ts +2 -2
- package/build/middlewares/rate-limit.js +8 -10
- package/build/middlewares/rate-limit.js.map +1 -1
- package/build/middlewares/rate-limit.mjs +9 -0
- package/build/middlewares/rate-limit.mjs.map +1 -0
- package/build/middlewares/request-options.d.ts +2 -2
- package/build/middlewares/request-options.js +18 -27
- package/build/middlewares/request-options.js.map +1 -1
- package/build/middlewares/request-options.mjs +19 -0
- package/build/middlewares/request-options.mjs.map +1 -0
- package/build/middlewares/user-agent.d.ts +1 -1
- package/build/middlewares/user-agent.js +11 -12
- package/build/middlewares/user-agent.js.map +1 -1
- package/build/middlewares/user-agent.mjs +13 -0
- package/build/middlewares/user-agent.mjs.map +1 -0
- package/build/middlewares/validation.d.ts +1 -1
- package/build/middlewares/validation.js +11 -18
- package/build/middlewares/validation.js.map +1 -1
- package/build/middlewares/validation.mjs +14 -0
- package/build/middlewares/validation.mjs.map +1 -0
- package/build/middlewares/web/index.js +4 -35
- package/build/middlewares/web/index.mjs +4 -0
- package/build/middlewares/web/render-web.d.ts +1 -1
- package/build/middlewares/web/render-web.js +80 -109
- package/build/middlewares/web/render-web.js.map +1 -1
- package/build/middlewares/web/render-web.mjs +79 -0
- package/build/middlewares/web/render-web.mjs.map +1 -0
- package/build/middlewares/web/security.js +29 -41
- package/build/middlewares/web/security.js.map +1 -1
- package/build/middlewares/web/security.mjs +30 -0
- package/build/middlewares/web/security.mjs.map +1 -0
- package/build/middlewares/web/utils/manifest.js +17 -18
- package/build/middlewares/web/utils/manifest.js.map +1 -1
- package/build/middlewares/web/utils/manifest.mjs +21 -0
- package/build/middlewares/web/utils/manifest.mjs.map +1 -0
- package/build/middlewares/web/utils/renderHTML.d.ts +5 -5
- package/build/middlewares/web/utils/renderHTML.js +109 -136
- package/build/middlewares/web/utils/renderHTML.js.map +1 -1
- package/build/middlewares/web/utils/renderHTML.mjs +113 -0
- package/build/middlewares/web/utils/renderHTML.mjs.map +1 -0
- package/build/middlewares/web/utils/template.d.ts +2 -2
- package/build/middlewares/web/utils/template.js +19 -20
- package/build/middlewares/web/utils/template.js.map +1 -1
- package/build/middlewares/web/utils/template.mjs +35 -0
- package/build/middlewares/web/utils/template.mjs.map +1 -0
- package/build/middlewares/web/utils/web-utils.js +17 -18
- package/build/middlewares/web/utils/web-utils.js.map +1 -1
- package/build/middlewares/web/utils/web-utils.mjs +18 -0
- package/build/middlewares/web/utils/web-utils.mjs.map +1 -0
- package/build/middlewares/web/web-api.d.ts +1 -2
- package/build/middlewares/web/web-api.js +18 -27
- package/build/middlewares/web/web-api.js.map +1 -1
- package/build/middlewares/web/web-api.mjs +19 -0
- package/build/middlewares/web/web-api.mjs.map +1 -0
- package/build/middlewares/web/web-middleware.js +16 -23
- package/build/middlewares/web/web-middleware.js.map +1 -1
- package/build/middlewares/web/web-middleware.mjs +16 -0
- package/build/middlewares/web/web-middleware.mjs.map +1 -0
- package/build/middlewares/web/web-urls.js +28 -29
- package/build/middlewares/web/web-urls.js.map +1 -1
- package/build/middlewares/web/web-urls.mjs +32 -0
- package/build/middlewares/web/web-urls.mjs.map +1 -0
- package/build/types.d.ts +2 -2
- package/package.json +24 -13
- package/build/index.js.map +0 -1
- package/build/middlewares/web/index.js.map +0 -1
- package/build/types.js +0 -6
- package/build/types.js.map +0 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { HEADER_TYPE, HTTP_STATUS, errorUtils } from "@verdaccio/core";
|
|
2
|
+
//#region src/middlewares/media.ts
|
|
3
|
+
function media(expect) {
|
|
4
|
+
return function(req, res, next) {
|
|
5
|
+
const header = req.headers[HEADER_TYPE.CONTENT_TYPE];
|
|
6
|
+
if (!header) {
|
|
7
|
+
next(errorUtils.getCode(HTTP_STATUS.UNSUPPORTED_MEDIA, "content-type is missing, expect: " + expect));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (typeof header !== "string" || header.split(";")[0].trim() !== expect) next(errorUtils.getCode(HTTP_STATUS.UNSUPPORTED_MEDIA, "wrong content-type, expect: " + expect + ", got: " + req.get(HEADER_TYPE.CONTENT_TYPE)));
|
|
11
|
+
else next();
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { media };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=media.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.mjs","names":[],"sources":["../../src/middlewares/media.ts"],"sourcesContent":["import { HEADER_TYPE, HTTP_STATUS, errorUtils } from '@verdaccio/core';\n\nimport type { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function media(expect: string | null): any {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const header = req.headers[HEADER_TYPE.CONTENT_TYPE];\n if (!header) {\n next(\n errorUtils.getCode(\n HTTP_STATUS.UNSUPPORTED_MEDIA,\n 'content-type is missing, expect: ' + expect\n )\n );\n return;\n }\n\n if (typeof header !== 'string' || header.split(';')[0].trim() !== expect) {\n next(\n errorUtils.getCode(\n HTTP_STATUS.UNSUPPORTED_MEDIA,\n 'wrong content-type, expect: ' + expect + ', got: ' + req.get(HEADER_TYPE.CONTENT_TYPE)\n )\n );\n } else {\n next();\n }\n };\n}\n"],"mappings":";;AAIA,SAAgB,MAAM,QAA4B;AAChD,QAAO,SAAU,KAAqB,KAAsB,MAA8B;EACxF,MAAM,SAAS,IAAI,QAAQ,YAAY;AACvC,MAAI,CAAC,QAAQ;AACX,QACE,WAAW,QACT,YAAY,mBACZ,sCAAsC,OACvC,CACF;AACD;;AAGF,MAAI,OAAO,WAAW,YAAY,OAAO,MAAM,IAAI,CAAC,GAAG,MAAM,KAAK,OAChE,MACE,WAAW,QACT,YAAY,mBACZ,iCAAiC,SAAS,YAAY,IAAI,IAAI,YAAY,aAAa,CACxF,CACF;MAED,OAAM"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
export declare function rateLimit(rateLimitOptions?: RateLimitType): import(
|
|
1
|
+
import { RateLimit as RateLimitType } from '@verdaccio/types';
|
|
2
|
+
export declare function rateLimit(rateLimitOptions?: RateLimitType): import('express-rate-limit').RateLimitRequestHandler;
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.rateLimit = rateLimit;
|
|
7
|
-
var _expressRateLimit = _interopRequireDefault(require("express-rate-limit"));
|
|
8
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.js");
|
|
2
|
+
let express_rate_limit = require("express-rate-limit");
|
|
3
|
+
express_rate_limit = require_runtime.__toESM(express_rate_limit);
|
|
4
|
+
//#region src/middlewares/rate-limit.ts
|
|
9
5
|
function rateLimit(rateLimitOptions) {
|
|
10
|
-
|
|
11
|
-
return limiter;
|
|
6
|
+
return (0, express_rate_limit.default)(rateLimitOptions);
|
|
12
7
|
}
|
|
8
|
+
//#endregion
|
|
9
|
+
exports.rateLimit = rateLimit;
|
|
10
|
+
|
|
13
11
|
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.js","names":[
|
|
1
|
+
{"version":3,"file":"rate-limit.js","names":[],"sources":["../../src/middlewares/rate-limit.ts"],"sourcesContent":["import RateLimit from 'express-rate-limit';\n\nimport type { RateLimit as RateLimitType } from '@verdaccio/types';\n\nexport function rateLimit(rateLimitOptions?: RateLimitType) {\n const limiter = RateLimit(rateLimitOptions);\n return limiter;\n}\n"],"mappings":";;;;AAIA,SAAgB,UAAU,kBAAkC;AAE1D,SAAA,GAAA,mBAAA,SAD0B,iBAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.mjs","names":[],"sources":["../../src/middlewares/rate-limit.ts"],"sourcesContent":["import RateLimit from 'express-rate-limit';\n\nimport type { RateLimit as RateLimitType } from '@verdaccio/types';\n\nexport function rateLimit(rateLimitOptions?: RateLimitType) {\n const limiter = RateLimit(rateLimitOptions);\n return limiter;\n}\n"],"mappings":";;AAIA,SAAgB,UAAU,kBAAkC;AAE1D,QADgB,UAAU,iBAAiB"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { RequestOptions } from '@verdaccio/url';
|
|
2
|
+
import { $RequestExtend } from '../types';
|
|
3
3
|
export declare function getRequestOptions(req: $RequestExtend): RequestOptions;
|
|
@@ -1,30 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
exports.getRequestOptions = getRequestOptions;
|
|
7
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
8
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
-
const debug = (0, _debug.default)('verdaccio:middleware:request-options');
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.js");
|
|
2
|
+
let debug = require("debug");
|
|
3
|
+
debug = require_runtime.__toESM(debug);
|
|
4
|
+
//#region src/middlewares/request-options.ts
|
|
5
|
+
var debug$1 = (0, debug.default)("verdaccio:middleware:request-options");
|
|
10
6
|
function getRequestOptions(req) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
protocol: req.protocol,
|
|
22
|
-
headers: req.headers,
|
|
23
|
-
remoteAddress: req.socket.remoteAddress,
|
|
24
|
-
byPassCache: req.query.write === 'true',
|
|
25
|
-
username: req.remote_user?.name ?? undefined
|
|
26
|
-
};
|
|
27
|
-
debug('request options: %o', requestOptions);
|
|
28
|
-
return requestOptions;
|
|
7
|
+
const requestOptions = {
|
|
8
|
+
host: req.host,
|
|
9
|
+
protocol: req.protocol,
|
|
10
|
+
headers: req.headers,
|
|
11
|
+
remoteAddress: req.socket.remoteAddress,
|
|
12
|
+
byPassCache: req.query.write === "true",
|
|
13
|
+
username: req.remote_user?.name ?? void 0
|
|
14
|
+
};
|
|
15
|
+
debug$1("request options: %o", requestOptions);
|
|
16
|
+
return requestOptions;
|
|
29
17
|
}
|
|
18
|
+
//#endregion
|
|
19
|
+
exports.getRequestOptions = getRequestOptions;
|
|
20
|
+
|
|
30
21
|
//# sourceMappingURL=request-options.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-options.js","names":[
|
|
1
|
+
{"version":3,"file":"request-options.js","names":[],"sources":["../../src/middlewares/request-options.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { IncomingHttpHeaders } from 'node:http';\n\nimport type { RequestOptions } from '@verdaccio/url';\n\nimport type { $RequestExtend } from '../types';\n\nconst debug = buildDebug('verdaccio:middleware:request-options');\n\nexport function getRequestOptions(req: $RequestExtend): RequestOptions {\n const requestOptions = {\n // FIXME: decide if host should contain port or not\n //\n // Express 4:\n // - req.host is marked as deprecated since it does not include the port\n // - use req.headers['host'] instead, which includes the port\n // Express 5:\n // - req.host is fully supported and includes the port\n // - https://expressjs.com/en/api.html#req.host\n host: req.host,\n protocol: req.protocol,\n headers: req.headers as IncomingHttpHeaders,\n remoteAddress: req.socket.remoteAddress,\n byPassCache: req.query.write === 'true',\n username: req.remote_user?.name ?? undefined,\n };\n\n debug('request options: %o', requestOptions);\n\n return requestOptions;\n}\n"],"mappings":";;;;AAOA,IAAM,WAAA,GAAA,MAAA,SAAmB,uCAAuC;AAEhE,SAAgB,kBAAkB,KAAqC;CACrE,MAAM,iBAAiB;EASrB,MAAM,IAAI;EACV,UAAU,IAAI;EACd,SAAS,IAAI;EACb,eAAe,IAAI,OAAO;EAC1B,aAAa,IAAI,MAAM,UAAU;EACjC,UAAU,IAAI,aAAa,QAAQ,KAAA;EACpC;AAED,SAAM,uBAAuB,eAAe;AAE5C,QAAO"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import buildDebug from "debug";
|
|
2
|
+
//#region src/middlewares/request-options.ts
|
|
3
|
+
var debug = buildDebug("verdaccio:middleware:request-options");
|
|
4
|
+
function getRequestOptions(req) {
|
|
5
|
+
const requestOptions = {
|
|
6
|
+
host: req.host,
|
|
7
|
+
protocol: req.protocol,
|
|
8
|
+
headers: req.headers,
|
|
9
|
+
remoteAddress: req.socket.remoteAddress,
|
|
10
|
+
byPassCache: req.query.write === "true",
|
|
11
|
+
username: req.remote_user?.name ?? void 0
|
|
12
|
+
};
|
|
13
|
+
debug("request options: %o", requestOptions);
|
|
14
|
+
return requestOptions;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { getRequestOptions };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=request-options.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-options.mjs","names":[],"sources":["../../src/middlewares/request-options.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { IncomingHttpHeaders } from 'node:http';\n\nimport type { RequestOptions } from '@verdaccio/url';\n\nimport type { $RequestExtend } from '../types';\n\nconst debug = buildDebug('verdaccio:middleware:request-options');\n\nexport function getRequestOptions(req: $RequestExtend): RequestOptions {\n const requestOptions = {\n // FIXME: decide if host should contain port or not\n //\n // Express 4:\n // - req.host is marked as deprecated since it does not include the port\n // - use req.headers['host'] instead, which includes the port\n // Express 5:\n // - req.host is fully supported and includes the port\n // - https://expressjs.com/en/api.html#req.host\n host: req.host,\n protocol: req.protocol,\n headers: req.headers as IncomingHttpHeaders,\n remoteAddress: req.socket.remoteAddress,\n byPassCache: req.query.write === 'true',\n username: req.remote_user?.name ?? undefined,\n };\n\n debug('request options: %o', requestOptions);\n\n return requestOptions;\n}\n"],"mappings":";;AAOA,IAAM,QAAQ,WAAW,uCAAuC;AAEhE,SAAgB,kBAAkB,KAAqC;CACrE,MAAM,iBAAiB;EASrB,MAAM,IAAI;EACV,UAAU,IAAI;EACd,SAAS,IAAI;EACb,eAAe,IAAI,OAAO;EAC1B,aAAa,IAAI,MAAM,UAAU;EACjC,UAAU,IAAI,aAAa,QAAQ,KAAA;EACpC;AAED,OAAM,uBAAuB,eAAe;AAE5C,QAAO"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';
|
|
2
2
|
export declare function userAgent(config: any): (_req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) => void;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.userAgent = userAgent;
|
|
7
|
-
var _config = require("@verdaccio/config");
|
|
8
|
-
var _core = require("@verdaccio/core");
|
|
1
|
+
require("../_virtual/_rolldown/runtime.js");
|
|
2
|
+
let _verdaccio_core = require("@verdaccio/core");
|
|
3
|
+
let _verdaccio_config = require("@verdaccio/config");
|
|
4
|
+
//#region src/middlewares/user-agent.ts
|
|
9
5
|
function userAgent(config) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
return function(_req, res, next) {
|
|
7
|
+
res.setHeader(_verdaccio_core.HEADERS.POWERED_BY, (0, _verdaccio_config.getUserAgent)(config?.user_agent));
|
|
8
|
+
next();
|
|
9
|
+
};
|
|
14
10
|
}
|
|
11
|
+
//#endregion
|
|
12
|
+
exports.userAgent = userAgent;
|
|
13
|
+
|
|
15
14
|
//# sourceMappingURL=user-agent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-agent.js","names":[
|
|
1
|
+
{"version":3,"file":"user-agent.js","names":[],"sources":["../../src/middlewares/user-agent.ts"],"sourcesContent":["import { getUserAgent } from '@verdaccio/config';\nimport { HEADERS } from '@verdaccio/core';\n\nimport type { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function userAgent(config) {\n return function (_req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n res.setHeader(HEADERS.POWERED_BY, getUserAgent(config?.user_agent));\n next();\n };\n}\n"],"mappings":";;;;AAKA,SAAgB,UAAU,QAAQ;AAChC,QAAO,SAAU,MAAsB,KAAsB,MAA8B;AACzF,MAAI,UAAU,gBAAA,QAAQ,aAAA,GAAA,kBAAA,cAAyB,QAAQ,WAAW,CAAC;AACnE,QAAM"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { HEADERS } from "@verdaccio/core";
|
|
2
|
+
import { getUserAgent } from "@verdaccio/config";
|
|
3
|
+
//#region src/middlewares/user-agent.ts
|
|
4
|
+
function userAgent(config) {
|
|
5
|
+
return function(_req, res, next) {
|
|
6
|
+
res.setHeader(HEADERS.POWERED_BY, getUserAgent(config?.user_agent));
|
|
7
|
+
next();
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { userAgent };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=user-agent.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-agent.mjs","names":[],"sources":["../../src/middlewares/user-agent.ts"],"sourcesContent":["import { getUserAgent } from '@verdaccio/config';\nimport { HEADERS } from '@verdaccio/core';\n\nimport type { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\n\nexport function userAgent(config) {\n return function (_req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n res.setHeader(HEADERS.POWERED_BY, getUserAgent(config?.user_agent));\n next();\n };\n}\n"],"mappings":";;;AAKA,SAAgB,UAAU,QAAQ;AAChC,QAAO,SAAU,MAAsB,KAAsB,MAA8B;AACzF,MAAI,UAAU,QAAQ,YAAY,aAAa,QAAQ,WAAW,CAAC;AACnE,QAAM"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { NextFunction, Request, Response } from 'express';
|
|
2
2
|
export declare function validateName(_req: Request, _res: Response, next: NextFunction, value: string, name: string): void;
|
|
3
3
|
export declare function validatePackage(_req: Request, _res: any, next: NextFunction, value: string, name: string): void;
|
|
@@ -1,23 +1,16 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.validateName = validateName;
|
|
7
|
-
exports.validatePackage = validatePackage;
|
|
8
|
-
var _core = require("@verdaccio/core");
|
|
1
|
+
require("../_virtual/_rolldown/runtime.js");
|
|
2
|
+
let _verdaccio_core = require("@verdaccio/core");
|
|
3
|
+
//#region src/middlewares/validation.ts
|
|
9
4
|
function validateName(_req, _res, next, value, name) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} else {
|
|
13
|
-
next(_core.errorUtils.getBadRequest('invalid ' + name));
|
|
14
|
-
}
|
|
5
|
+
if (_verdaccio_core.validationUtils.validateName(value)) next();
|
|
6
|
+
else next(_verdaccio_core.errorUtils.getBadRequest("invalid " + name));
|
|
15
7
|
}
|
|
16
8
|
function validatePackage(_req, _res, next, value, name) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
} else {
|
|
20
|
-
next(_core.errorUtils.getBadRequest('invalid ' + name));
|
|
21
|
-
}
|
|
9
|
+
if (_verdaccio_core.validationUtils.validatePackage(value)) next();
|
|
10
|
+
else next(_verdaccio_core.errorUtils.getBadRequest("invalid " + name));
|
|
22
11
|
}
|
|
12
|
+
//#endregion
|
|
13
|
+
exports.validateName = validateName;
|
|
14
|
+
exports.validatePackage = validatePackage;
|
|
15
|
+
|
|
23
16
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","names":[
|
|
1
|
+
{"version":3,"file":"validation.js","names":[],"sources":["../../src/middlewares/validation.ts"],"sourcesContent":["import type { NextFunction, Request, Response } from 'express';\n\nimport { errorUtils, validationUtils } from '@verdaccio/core';\n\nexport function validateName(\n _req: Request,\n _res: Response,\n next: NextFunction,\n value: string,\n name: string\n) {\n if (validationUtils.validateName(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n\nexport function validatePackage(\n _req: Request,\n _res,\n next: NextFunction,\n value: string,\n name: string\n) {\n if (validationUtils.validatePackage(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n"],"mappings":";;;AAIA,SAAgB,aACd,MACA,MACA,MACA,OACA,MACA;AACA,KAAI,gBAAA,gBAAgB,aAAa,MAAM,CACrC,OAAM;KAEN,MAAK,gBAAA,WAAW,cAAc,aAAa,KAAK,CAAC;;AAIrD,SAAgB,gBACd,MACA,MACA,MACA,OACA,MACA;AACA,KAAI,gBAAA,gBAAgB,gBAAgB,MAAM,CACxC,OAAM;KAEN,MAAK,gBAAA,WAAW,cAAc,aAAa,KAAK,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { errorUtils, validationUtils } from "@verdaccio/core";
|
|
2
|
+
//#region src/middlewares/validation.ts
|
|
3
|
+
function validateName(_req, _res, next, value, name) {
|
|
4
|
+
if (validationUtils.validateName(value)) next();
|
|
5
|
+
else next(errorUtils.getBadRequest("invalid " + name));
|
|
6
|
+
}
|
|
7
|
+
function validatePackage(_req, _res, next, value, name) {
|
|
8
|
+
if (validationUtils.validatePackage(value)) next();
|
|
9
|
+
else next(errorUtils.getBadRequest("invalid " + name));
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { validateName, validatePackage };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=validation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.mjs","names":[],"sources":["../../src/middlewares/validation.ts"],"sourcesContent":["import type { NextFunction, Request, Response } from 'express';\n\nimport { errorUtils, validationUtils } from '@verdaccio/core';\n\nexport function validateName(\n _req: Request,\n _res: Response,\n next: NextFunction,\n value: string,\n name: string\n) {\n if (validationUtils.validateName(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n\nexport function validatePackage(\n _req: Request,\n _res,\n next: NextFunction,\n value: string,\n name: string\n) {\n if (validationUtils.validatePackage(value)) {\n next();\n } else {\n next(errorUtils.getBadRequest('invalid ' + name));\n }\n}\n"],"mappings":";;AAIA,SAAgB,aACd,MACA,MACA,MACA,OACA,MACA;AACA,KAAI,gBAAgB,aAAa,MAAM,CACrC,OAAM;KAEN,MAAK,WAAW,cAAc,aAAa,KAAK,CAAC;;AAIrD,SAAgB,gBACd,MACA,MACA,MACA,OACA,MACA;AACA,KAAI,gBAAgB,gBAAgB,MAAM,CACxC,OAAM;KAEN,MAAK,WAAW,cAAc,aAAa,KAAK,CAAC"}
|
|
@@ -1,35 +1,4 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "renderWebMiddleware", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _renderWeb.renderWebMiddleware;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(exports, "setSecurityWebHeaders", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _security.setSecurityWebHeaders;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
Object.defineProperty(exports, "webAPIMiddleware", {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () {
|
|
21
|
-
return _webApi.webAPIMiddleware;
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
Object.defineProperty(exports, "webMiddleware", {
|
|
25
|
-
enumerable: true,
|
|
26
|
-
get: function () {
|
|
27
|
-
return _webMiddleware.default;
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
var _webMiddleware = _interopRequireDefault(require("./web-middleware"));
|
|
31
|
-
var _webApi = require("./web-api");
|
|
32
|
-
var _security = require("./security");
|
|
33
|
-
var _renderWeb = require("./render-web");
|
|
34
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
35
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
require("./security.js");
|
|
2
|
+
require("./render-web.js");
|
|
3
|
+
require("./web-api.js");
|
|
4
|
+
require("./web-middleware.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function renderWebMiddleware(config: any, tokenMiddleware: any, pluginOptions: any): import(
|
|
1
|
+
export declare function renderWebMiddleware(config: any, tokenMiddleware: any, pluginOptions: any): import('express-serve-static-core').Router;
|
|
@@ -1,113 +1,84 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
if (err.status === _core.HTTP_STATUS.NOT_FOUND) {
|
|
23
|
-
next();
|
|
24
|
-
} else {
|
|
25
|
-
next(err);
|
|
26
|
-
}
|
|
1
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.js");
|
|
2
|
+
const require_security = require("./security.js");
|
|
3
|
+
const require_renderHTML = require("./utils/renderHTML.js");
|
|
4
|
+
const require_web_urls = require("./web-urls.js");
|
|
5
|
+
let _verdaccio_core = require("@verdaccio/core");
|
|
6
|
+
let debug = require("debug");
|
|
7
|
+
debug = require_runtime.__toESM(debug);
|
|
8
|
+
let express = require("express");
|
|
9
|
+
express = require_runtime.__toESM(express);
|
|
10
|
+
let node_fs = require("node:fs");
|
|
11
|
+
node_fs = require_runtime.__toESM(node_fs);
|
|
12
|
+
let node_path = require("node:path");
|
|
13
|
+
node_path = require_runtime.__toESM(node_path);
|
|
14
|
+
let _verdaccio_url = require("@verdaccio/url");
|
|
15
|
+
//#region src/middlewares/web/render-web.ts
|
|
16
|
+
var debug$1 = (0, debug.default)("verdaccio:web:render");
|
|
17
|
+
var sendFileCallback = (next) => (err) => {
|
|
18
|
+
if (!err) return;
|
|
19
|
+
if (err.status === _verdaccio_core.HTTP_STATUS.NOT_FOUND) next();
|
|
20
|
+
else next(err);
|
|
27
21
|
};
|
|
28
22
|
function renderWebMiddleware(config, tokenMiddleware, pluginOptions) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
} catch {
|
|
87
|
-
logo = undefined;
|
|
88
|
-
debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return logo;
|
|
92
|
-
}
|
|
93
|
-
const logo = renderLogo(config?.web?.logo);
|
|
94
|
-
if (config?.web?.logo) {
|
|
95
|
-
config.web.logo = logo;
|
|
96
|
-
}
|
|
97
|
-
const logoDark = renderLogo(config?.web?.logoDark);
|
|
98
|
-
if (config?.web?.logoDark) {
|
|
99
|
-
config.web.logoDark = logoDark;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Handle all web routes including security routes
|
|
103
|
-
router.get(_webUrls.WebUrlsNamespace.web, function (req, res) {
|
|
104
|
-
(0, _renderHTML.default)(config, manifest, manifestFiles, req, res);
|
|
105
|
-
debug('render html section');
|
|
106
|
-
});
|
|
107
|
-
router.get(_webUrls.WebUrlsNamespace.root, function (req, res) {
|
|
108
|
-
(0, _renderHTML.default)(config, manifest, manifestFiles, req, res);
|
|
109
|
-
debug('render root');
|
|
110
|
-
});
|
|
111
|
-
return router;
|
|
23
|
+
const { staticPath, manifest, manifestFiles } = pluginOptions;
|
|
24
|
+
debug$1("static path %o", staticPath);
|
|
25
|
+
const router = express.default.Router();
|
|
26
|
+
if (typeof tokenMiddleware === "function") router.use(tokenMiddleware);
|
|
27
|
+
router.use(require_security.setSecurityWebHeaders);
|
|
28
|
+
router.get(require_web_urls.WebUrlsNamespace.static, function(req, res, next) {
|
|
29
|
+
const filename = Array.isArray(req.params.all) ? req.params.all.join("/") : req.params.all;
|
|
30
|
+
if (filename === "favicon.ico" && config?.web?.favicon) {
|
|
31
|
+
const file = config?.web?.favicon;
|
|
32
|
+
if ((0, _verdaccio_url.isURLhasValidProtocol)(file)) {
|
|
33
|
+
debug$1("redirect to favicon %s", file);
|
|
34
|
+
req.url = file;
|
|
35
|
+
return next();
|
|
36
|
+
}
|
|
37
|
+
debug$1("render custom favicon %o", file);
|
|
38
|
+
res.sendFile(file, sendFileCallback(next));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
debug$1("render static file %o", filename);
|
|
42
|
+
res.sendFile(filename, { root: staticPath }, sendFileCallback(next));
|
|
43
|
+
});
|
|
44
|
+
function renderLogo(logo) {
|
|
45
|
+
if (logo && !(0, _verdaccio_url.isURLhasValidProtocol)(logo)) {
|
|
46
|
+
const absoluteLocalFile = node_path.default.posix.resolve(logo);
|
|
47
|
+
debug$1("serve local logo %s", absoluteLocalFile);
|
|
48
|
+
try {
|
|
49
|
+
if (node_fs.default.existsSync(absoluteLocalFile) && typeof node_fs.default.accessSync(absoluteLocalFile, node_fs.default.constants.R_OK) === "undefined") {
|
|
50
|
+
logo = `/-/static/${node_path.default.basename(logo)}`;
|
|
51
|
+
router.get(logo, function(_req, res, next) {
|
|
52
|
+
debug$1("serve custom logo web:%s - local:%s", logo, absoluteLocalFile);
|
|
53
|
+
res.sendFile(node_path.default.basename(absoluteLocalFile), { root: node_path.default.dirname(absoluteLocalFile) }, sendFileCallback(next));
|
|
54
|
+
});
|
|
55
|
+
debug$1("enabled custom logo %s", logo);
|
|
56
|
+
} else {
|
|
57
|
+
logo = void 0;
|
|
58
|
+
debug$1(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);
|
|
59
|
+
}
|
|
60
|
+
} catch {
|
|
61
|
+
logo = void 0;
|
|
62
|
+
debug$1(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return logo;
|
|
66
|
+
}
|
|
67
|
+
const logo = renderLogo(config?.web?.logo);
|
|
68
|
+
if (config?.web?.logo) config.web.logo = logo;
|
|
69
|
+
const logoDark = renderLogo(config?.web?.logoDark);
|
|
70
|
+
if (config?.web?.logoDark) config.web.logoDark = logoDark;
|
|
71
|
+
router.get(require_web_urls.WebUrlsNamespace.web, function(req, res) {
|
|
72
|
+
require_renderHTML.default(config, manifest, manifestFiles, req, res);
|
|
73
|
+
debug$1("render html section");
|
|
74
|
+
});
|
|
75
|
+
router.get(require_web_urls.WebUrlsNamespace.root, function(req, res) {
|
|
76
|
+
require_renderHTML.default(config, manifest, manifestFiles, req, res);
|
|
77
|
+
debug$1("render root");
|
|
78
|
+
});
|
|
79
|
+
return router;
|
|
112
80
|
}
|
|
81
|
+
//#endregion
|
|
82
|
+
exports.renderWebMiddleware = renderWebMiddleware;
|
|
83
|
+
|
|
113
84
|
//# sourceMappingURL=render-web.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-web.js","names":[
|
|
1
|
+
{"version":3,"file":"render-web.js","names":[],"sources":["../../../src/middlewares/web/render-web.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport express from 'express';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { HTTP_STATUS } from '@verdaccio/core';\nimport { isURLhasValidProtocol } from '@verdaccio/url';\n\nimport { setSecurityWebHeaders } from './security';\nimport renderHTML from './utils/renderHTML';\nimport { WebUrlsNamespace } from './web-urls';\n\nconst debug = buildDebug('verdaccio:web:render');\n\nconst sendFileCallback = (next) => (err) => {\n if (!err) {\n return;\n }\n if (err.status === HTTP_STATUS.NOT_FOUND) {\n next();\n } else {\n next(err);\n }\n};\n\nexport function renderWebMiddleware(config, tokenMiddleware, pluginOptions) {\n const { staticPath, manifest, manifestFiles } = pluginOptions;\n debug('static path %o', staticPath);\n\n /* eslint new-cap:off */\n const router = express.Router();\n if (typeof tokenMiddleware === 'function') {\n router.use(tokenMiddleware);\n }\n\n router.use(setSecurityWebHeaders);\n\n // any match within the static is routed to the file system\n router.get(\n WebUrlsNamespace.static,\n function (req: express.Request<{ all: string | string[] }>, res, next) {\n const filename = Array.isArray(req.params.all) ? req.params.all.join('/') : req.params.all;\n if (filename === 'favicon.ico' && config?.web?.favicon) {\n const file = config?.web?.favicon;\n if (isURLhasValidProtocol(file)) {\n debug('redirect to favicon %s', file);\n req.url = file;\n return next();\n }\n debug('render custom favicon %o', file);\n res.sendFile(file, sendFileCallback(next));\n return;\n }\n debug('render static file %o', filename);\n res.sendFile(filename, { root: staticPath }, sendFileCallback(next));\n }\n );\n\n function renderLogo(logo: string | undefined): string | undefined {\n // check the origin of the logo\n if (logo && !isURLhasValidProtocol(logo)) {\n // URI related to a local file\n const absoluteLocalFile = path.posix.resolve(logo);\n debug('serve local logo %s', absoluteLocalFile);\n try {\n // TODO: replace existsSync by async alternative\n if (\n fs.existsSync(absoluteLocalFile) &&\n typeof fs.accessSync(absoluteLocalFile, fs.constants.R_OK) === 'undefined'\n ) {\n // Note: `path.join` will break on Windows, because it transforms `/` to `\\`\n // Use POSIX version `path.posix.join` instead.\n logo = `/-/static/${path.basename(logo)}`;\n router.get(logo, function (_req, res, next) {\n // @ts-ignore\n debug('serve custom logo web:%s - local:%s', logo, absoluteLocalFile);\n res.sendFile(\n path.basename(absoluteLocalFile),\n { root: path.dirname(absoluteLocalFile) },\n sendFileCallback(next)\n );\n });\n debug('enabled custom logo %s', logo);\n } else {\n logo = undefined;\n debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);\n }\n } catch {\n logo = undefined;\n debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);\n }\n }\n return logo;\n }\n\n const logo = renderLogo(config?.web?.logo);\n if (config?.web?.logo) {\n config.web.logo = logo;\n }\n const logoDark = renderLogo(config?.web?.logoDark);\n if (config?.web?.logoDark) {\n config.web.logoDark = logoDark;\n }\n\n // Handle all web routes including security routes\n router.get(WebUrlsNamespace.web, function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render html section');\n });\n\n router.get(WebUrlsNamespace.root, function (req, res) {\n renderHTML(config, manifest, manifestFiles, req, res);\n debug('render root');\n });\n\n return router;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAYA,IAAM,WAAA,GAAA,MAAA,SAAmB,uBAAuB;AAEhD,IAAM,oBAAoB,UAAU,QAAQ;AAC1C,KAAI,CAAC,IACH;AAEF,KAAI,IAAI,WAAW,gBAAA,YAAY,UAC7B,OAAM;KAEN,MAAK,IAAI;;AAIb,SAAgB,oBAAoB,QAAQ,iBAAiB,eAAe;CAC1E,MAAM,EAAE,YAAY,UAAU,kBAAkB;AAChD,SAAM,kBAAkB,WAAW;CAGnC,MAAM,SAAS,QAAA,QAAQ,QAAQ;AAC/B,KAAI,OAAO,oBAAoB,WAC7B,QAAO,IAAI,gBAAgB;AAG7B,QAAO,IAAI,iBAAA,sBAAsB;AAGjC,QAAO,IACL,iBAAA,iBAAiB,QACjB,SAAU,KAAkD,KAAK,MAAM;EACrE,MAAM,WAAW,MAAM,QAAQ,IAAI,OAAO,IAAI,GAAG,IAAI,OAAO,IAAI,KAAK,IAAI,GAAG,IAAI,OAAO;AACvF,MAAI,aAAa,iBAAiB,QAAQ,KAAK,SAAS;GACtD,MAAM,OAAO,QAAQ,KAAK;AAC1B,QAAA,GAAA,eAAA,uBAA0B,KAAK,EAAE;AAC/B,YAAM,0BAA0B,KAAK;AACrC,QAAI,MAAM;AACV,WAAO,MAAM;;AAEf,WAAM,4BAA4B,KAAK;AACvC,OAAI,SAAS,MAAM,iBAAiB,KAAK,CAAC;AAC1C;;AAEF,UAAM,yBAAyB,SAAS;AACxC,MAAI,SAAS,UAAU,EAAE,MAAM,YAAY,EAAE,iBAAiB,KAAK,CAAC;GAEvE;CAED,SAAS,WAAW,MAA8C;AAEhE,MAAI,QAAQ,EAAA,GAAA,eAAA,uBAAuB,KAAK,EAAE;GAExC,MAAM,oBAAoB,UAAA,QAAK,MAAM,QAAQ,KAAK;AAClD,WAAM,uBAAuB,kBAAkB;AAC/C,OAAI;AAEF,QACE,QAAA,QAAG,WAAW,kBAAkB,IAChC,OAAO,QAAA,QAAG,WAAW,mBAAmB,QAAA,QAAG,UAAU,KAAK,KAAK,aAC/D;AAGA,YAAO,aAAa,UAAA,QAAK,SAAS,KAAK;AACvC,YAAO,IAAI,MAAM,SAAU,MAAM,KAAK,MAAM;AAE1C,cAAM,wCAAwC,MAAM,kBAAkB;AACtE,UAAI,SACF,UAAA,QAAK,SAAS,kBAAkB,EAChC,EAAE,MAAM,UAAA,QAAK,QAAQ,kBAAkB,EAAE,EACzC,iBAAiB,KAAK,CACvB;OACD;AACF,aAAM,0BAA0B,KAAK;WAChC;AACL,YAAO,KAAA;AACP,aAAM,2BAA2B,kBAAkB,oCAAoC;;WAEnF;AACN,WAAO,KAAA;AACP,YAAM,2BAA2B,kBAAkB,oCAAoC;;;AAG3F,SAAO;;CAGT,MAAM,OAAO,WAAW,QAAQ,KAAK,KAAK;AAC1C,KAAI,QAAQ,KAAK,KACf,QAAO,IAAI,OAAO;CAEpB,MAAM,WAAW,WAAW,QAAQ,KAAK,SAAS;AAClD,KAAI,QAAQ,KAAK,SACf,QAAO,IAAI,WAAW;AAIxB,QAAO,IAAI,iBAAA,iBAAiB,KAAK,SAAU,KAAK,KAAK;AACnD,qBAAA,QAAW,QAAQ,UAAU,eAAe,KAAK,IAAI;AACrD,UAAM,sBAAsB;GAC5B;AAEF,QAAO,IAAI,iBAAA,iBAAiB,MAAM,SAAU,KAAK,KAAK;AACpD,qBAAA,QAAW,QAAQ,UAAU,eAAe,KAAK,IAAI;AACrD,UAAM,cAAc;GACpB;AAEF,QAAO"}
|