@verdaccio/middleware 7.0.0-next-7.17 → 7.0.0-next-7.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/build/index.js.map +1 -1
- package/build/middlewares/allow.js +2 -2
- package/build/middlewares/allow.js.map +1 -1
- package/build/middlewares/antiLoop.js +1 -1
- package/build/middlewares/antiLoop.js.map +1 -1
- package/build/middlewares/encode-pkg.js.map +1 -1
- package/build/middlewares/error.js +1 -1
- package/build/middlewares/error.js.map +1 -1
- package/build/middlewares/final.js +2 -2
- package/build/middlewares/final.js.map +1 -1
- package/build/middlewares/json.js.map +1 -1
- package/build/middlewares/log.js +1 -1
- package/build/middlewares/log.js.map +1 -1
- package/build/middlewares/match.js.map +1 -1
- package/build/middlewares/media.js.map +1 -1
- package/build/middlewares/rate-limit.js +1 -1
- package/build/middlewares/rate-limit.js.map +1 -1
- package/build/middlewares/security-headers.js.map +1 -1
- package/build/middlewares/user-agent.js.map +1 -1
- package/build/middlewares/validation.js.map +1 -1
- package/build/middlewares/web/index.js +1 -1
- package/build/middlewares/web/index.js.map +1 -1
- package/build/middlewares/web/render-web.js +46 -26
- package/build/middlewares/web/render-web.js.map +1 -1
- package/build/middlewares/web/security.js.map +1 -1
- package/build/middlewares/web/utils/manifest.js +1 -1
- package/build/middlewares/web/utils/manifest.js.map +1 -1
- package/build/middlewares/web/utils/renderHTML.d.ts +1 -1
- package/build/middlewares/web/utils/renderHTML.js +26 -21
- package/build/middlewares/web/utils/renderHTML.js.map +1 -1
- package/build/middlewares/web/utils/template.js +3 -3
- package/build/middlewares/web/utils/template.js.map +1 -1
- package/build/middlewares/web/utils/web-utils.js +2 -2
- package/build/middlewares/web/utils/web-utils.js.map +1 -1
- package/build/middlewares/web/web-api.js +1 -1
- package/build/middlewares/web/web-api.js.map +1 -1
- package/build/middlewares/web/web-middleware.js +1 -1
- package/build/middlewares/web/web-middleware.js.map +1 -1
- package/build/types.js.map +1 -1
- package/package.json +6 -6
- package/src/middlewares/web/render-web.ts +46 -26
- package/src/middlewares/web/utils/renderHTML.ts +19 -7
- package/src/middlewares/web/utils/template.ts +1 -1
- package/test/__snapshots__/template.test.ts.snap +6 -6
- package/test/config/favicon.ico +0 -0
- package/test/config/file-logo.yaml +2 -0
- package/test/config/http-logo.yaml +26 -0
- package/test/config/no-logo.yaml +1 -0
- package/test/render.spec.ts +23 -0
|
@@ -14,7 +14,7 @@ var _core = require("@verdaccio/core");
|
|
|
14
14
|
var _url2 = require("@verdaccio/url");
|
|
15
15
|
var _template = _interopRequireDefault(require("./template"));
|
|
16
16
|
var _webUtils = require("./web-utils");
|
|
17
|
-
function _interopRequireDefault(
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
18
|
const DEFAULT_LANGUAGE = 'es-US';
|
|
19
19
|
const cache = new _lruCache.default({
|
|
20
20
|
max: 500,
|
|
@@ -26,46 +26,45 @@ const defaultManifestFiles = {
|
|
|
26
26
|
ico: 'favicon.ico',
|
|
27
27
|
css: []
|
|
28
28
|
};
|
|
29
|
-
function resolveLogo(
|
|
30
|
-
|
|
31
|
-
if (typeof (config === null || config === void 0 ? void 0 : (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.logo) !== 'string') {
|
|
29
|
+
function resolveLogo(logo, url_prefix, requestOptions) {
|
|
30
|
+
if (typeof logo !== 'string') {
|
|
32
31
|
return '';
|
|
33
32
|
}
|
|
34
|
-
const isLocalFile =
|
|
33
|
+
const isLocalFile = logo && !(0, _url2.isURLhasValidProtocol)(logo);
|
|
35
34
|
if (isLocalFile) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
var _config$web6;
|
|
40
|
-
return config === null || config === void 0 ? void 0 : (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.logo;
|
|
35
|
+
return `${(0, _url2.getPublicUrl)(url_prefix, requestOptions)}-/static/${_path.default.basename(logo)}`;
|
|
36
|
+
} else if ((0, _url2.isURLhasValidProtocol)(logo)) {
|
|
37
|
+
return logo;
|
|
41
38
|
} else {
|
|
42
39
|
return '';
|
|
43
40
|
}
|
|
44
41
|
}
|
|
45
42
|
function renderHTML(config, manifest, manifestFiles, requestOptions, res) {
|
|
46
|
-
var _config$i18n$web, _config$i18n, _config$web$hideDepre, _config$
|
|
43
|
+
var _config$i18n$web, _config$i18n, _config$web$hideDepre, _config$web, _config$web2, _config$web3, _config$web$darkMode, _config$web4, _config$web$title, _config$web5, _config$web$scope, _config$web6, _config$web7, _config$web8, _config$web9, _config$web$pkgManage, _config$web10, _res$locals$app_versi, _validatePrimaryColor, _config$web$primary_c, _config$web11, _config$web12;
|
|
47
44
|
const {
|
|
48
45
|
url_prefix
|
|
49
46
|
} = config;
|
|
50
47
|
const base = (0, _url2.getPublicUrl)(config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
|
|
51
48
|
const basename = new _url.URL(base).pathname;
|
|
52
|
-
const language = (_config$i18n$web = config === null || config === void 0
|
|
53
|
-
const hideDeprecatedVersions = (_config$web$hideDepre = config === null || config === void 0
|
|
49
|
+
const language = (_config$i18n$web = config === null || config === void 0 || (_config$i18n = config.i18n) === null || _config$i18n === void 0 ? void 0 : _config$i18n.web) !== null && _config$i18n$web !== void 0 ? _config$i18n$web : DEFAULT_LANGUAGE;
|
|
50
|
+
const hideDeprecatedVersions = (_config$web$hideDepre = config === null || config === void 0 || (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.hideDeprecatedVersions) !== null && _config$web$hideDepre !== void 0 ? _config$web$hideDepre : false;
|
|
54
51
|
// @ts-ignore
|
|
55
|
-
const needHtmlCache = [undefined, null].includes(config === null || config === void 0
|
|
56
|
-
const darkMode = (_config$web$darkMode = config === null || config === void 0
|
|
57
|
-
const title = (_config$web$title = config === null || config === void 0
|
|
52
|
+
const needHtmlCache = [undefined, null].includes(config === null || config === void 0 || (_config$web2 = config.web) === null || _config$web2 === void 0 ? void 0 : _config$web2.html_cache) ? true : config === null || config === void 0 || (_config$web3 = config.web) === null || _config$web3 === void 0 ? void 0 : _config$web3.html_cache;
|
|
53
|
+
const darkMode = (_config$web$darkMode = config === null || config === void 0 || (_config$web4 = config.web) === null || _config$web4 === void 0 ? void 0 : _config$web4.darkMode) !== null && _config$web$darkMode !== void 0 ? _config$web$darkMode : false;
|
|
54
|
+
const title = (_config$web$title = config === null || config === void 0 || (_config$web5 = config.web) === null || _config$web5 === void 0 ? void 0 : _config$web5.title) !== null && _config$web$title !== void 0 ? _config$web$title : _config.WEB_TITLE;
|
|
58
55
|
const login = (0, _webUtils.hasLogin)(config);
|
|
59
|
-
const scope = (_config$web$scope = config === null || config === void 0
|
|
60
|
-
const
|
|
61
|
-
const
|
|
56
|
+
const scope = (_config$web$scope = config === null || config === void 0 || (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.scope) !== null && _config$web$scope !== void 0 ? _config$web$scope : '';
|
|
57
|
+
const favicon = resolveLogo(config === null || config === void 0 || (_config$web7 = config.web) === null || _config$web7 === void 0 ? void 0 : _config$web7.favicon, config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
|
|
58
|
+
const logo = resolveLogo(config === null || config === void 0 || (_config$web8 = config.web) === null || _config$web8 === void 0 ? void 0 : _config$web8.logo, config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
|
|
59
|
+
const logoDark = resolveLogo(config === null || config === void 0 || (_config$web9 = config.web) === null || _config$web9 === void 0 ? void 0 : _config$web9.logoDark, config === null || config === void 0 ? void 0 : config.url_prefix, requestOptions);
|
|
60
|
+
const pkgManagers = (_config$web$pkgManage = config === null || config === void 0 || (_config$web10 = config.web) === null || _config$web10 === void 0 ? void 0 : _config$web10.pkgManagers) !== null && _config$web$pkgManage !== void 0 ? _config$web$pkgManage : ['yarn', 'pnpm', 'npm'];
|
|
62
61
|
const version = (_res$locals$app_versi = res.locals.app_version) !== null && _res$locals$app_versi !== void 0 ? _res$locals$app_versi : '';
|
|
63
62
|
const flags = {
|
|
64
63
|
...config.flags,
|
|
65
64
|
// legacy from 5.x
|
|
66
65
|
...config.experiments
|
|
67
66
|
};
|
|
68
|
-
const primaryColor = (_validatePrimaryColor = (0, _webUtils.validatePrimaryColor)((_config$web$primary_c = config === null || config === void 0
|
|
67
|
+
const primaryColor = (_validatePrimaryColor = (0, _webUtils.validatePrimaryColor)((_config$web$primary_c = config === null || config === void 0 || (_config$web11 = config.web) === null || _config$web11 === void 0 ? void 0 : _config$web11.primary_color) !== null && _config$web$primary_c !== void 0 ? _config$web$primary_c : config === null || config === void 0 || (_config$web12 = config.web) === null || _config$web12 === void 0 ? void 0 : _config$web12.primaryColor)) !== null && _validatePrimaryColor !== void 0 ? _validatePrimaryColor : '#4b5e40';
|
|
69
68
|
const {
|
|
70
69
|
scriptsBodyAfter,
|
|
71
70
|
metaScripts,
|
|
@@ -75,7 +74,9 @@ function renderHTML(config, manifest, manifestFiles, requestOptions, res) {
|
|
|
75
74
|
showThemeSwitch,
|
|
76
75
|
showFooter,
|
|
77
76
|
showSearch,
|
|
78
|
-
showDownloadTarball
|
|
77
|
+
showDownloadTarball,
|
|
78
|
+
showRaw,
|
|
79
|
+
showUplinks
|
|
79
80
|
} = Object.assign({}, {
|
|
80
81
|
scriptsBodyAfter: [],
|
|
81
82
|
bodyBefore: [],
|
|
@@ -88,6 +89,8 @@ function renderHTML(config, manifest, manifestFiles, requestOptions, res) {
|
|
|
88
89
|
showFooter,
|
|
89
90
|
showSearch,
|
|
90
91
|
showDownloadTarball,
|
|
92
|
+
showRaw,
|
|
93
|
+
showUplinks,
|
|
91
94
|
darkMode,
|
|
92
95
|
url_prefix,
|
|
93
96
|
basename,
|
|
@@ -95,6 +98,8 @@ function renderHTML(config, manifest, manifestFiles, requestOptions, res) {
|
|
|
95
98
|
primaryColor,
|
|
96
99
|
version,
|
|
97
100
|
logo,
|
|
101
|
+
logoDark,
|
|
102
|
+
favicon,
|
|
98
103
|
flags,
|
|
99
104
|
login,
|
|
100
105
|
pkgManagers,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderHTML.js","names":["_debug","_interopRequireDefault","require","_lruCache","_path","_url","_config","_core","_url2","_template","_webUtils","obj","__esModule","default","DEFAULT_LANGUAGE","cache","LRU","max","ttl","debug","buildDebug","defaultManifestFiles","js","ico","css","resolveLogo","config","requestOptions","_config$web","_config$web2","_config$web3","_config$web5","web","logo","isLocalFile","isURLhasValidProtocol","_config$web4","getPublicUrl","url_prefix","path","basename","_config$web6","renderHTML","manifest","manifestFiles","res","_config$i18n$web","_config$i18n","_config$web$hideDepre","_config$web7","_config$web8","_config$web9","_config$web$darkMode","_config$web10","_config$web$title","_config$web11","_config$web$scope","_config$web12","_config$web$pkgManage","_config$web13","_res$locals$app_versi","_validatePrimaryColor","_config$web$primary_c","_config$web14","_config$web15","base","URL","pathname","language","i18n","hideDeprecatedVersions","needHtmlCache","undefined","includes","html_cache","darkMode","title","WEB_TITLE","login","hasLogin","scope","pkgManagers","version","locals","app_version","flags","experiments","primaryColor","validatePrimaryColor","primary_color","scriptsBodyAfter","metaScripts","scriptsbodyBefore","showInfo","showSettings","showThemeSwitch","showFooter","showSearch","showDownloadTarball","Object","assign","bodyBefore","options","webPage","get","renderTemplate","set","error","Error","stack","setHeader","HEADERS","TEXT_HTML","send"],"sources":["../../../../src/middlewares/web/utils/renderHTML.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Response } from 'express';\nimport LRU from 'lru-cache';\nimport path from 'path';\nimport { URL } from 'url';\n\nimport { WEB_TITLE } from '@verdaccio/config';\nimport { HEADERS } from '@verdaccio/core';\nimport { ConfigYaml, TemplateUIOptions } from '@verdaccio/types';\nimport type { RequestOptions } from '@verdaccio/url';\nimport { getPublicUrl, isURLhasValidProtocol } from '@verdaccio/url';\n\nimport type { Manifest } from './manifest';\nimport renderTemplate from './template';\nimport type { WebpackManifest } from './template';\nimport { hasLogin, validatePrimaryColor } from './web-utils';\n\nconst DEFAULT_LANGUAGE = 'es-US';\nconst cache = new LRU({ max: 500, ttl: 1000 * 60 * 60 });\n\nconst debug = buildDebug('verdaccio:web:render');\n\nconst defaultManifestFiles: Manifest = {\n js: ['runtime.js', 'vendors.js', 'main.js'],\n ico: 'favicon.ico',\n css: [],\n};\n\nexport function resolveLogo(config: ConfigYaml, requestOptions: RequestOptions) {\n if (typeof config?.web?.logo !== 'string') {\n return '';\n }\n const isLocalFile = config?.web?.logo && !isURLhasValidProtocol(config?.web?.logo);\n\n if (isLocalFile) {\n return `${getPublicUrl(config?.url_prefix, requestOptions)}-/static/${path.basename(config?.web?.logo)}`;\n } else if (isURLhasValidProtocol(config?.web?.logo)) {\n return config?.web?.logo;\n } else {\n return '';\n }\n}\n\nexport default function renderHTML(\n config: ConfigYaml,\n manifest: WebpackManifest,\n manifestFiles: Manifest | null | undefined,\n requestOptions: RequestOptions,\n res: Response\n) {\n const { url_prefix } = config;\n const base = getPublicUrl(config?.url_prefix, requestOptions);\n const basename = new URL(base).pathname;\n const language = config?.i18n?.web ?? DEFAULT_LANGUAGE;\n const hideDeprecatedVersions = config?.web?.hideDeprecatedVersions ?? false;\n // @ts-ignore\n const needHtmlCache = [undefined, null].includes(config?.web?.html_cache)\n ? true\n : config?.web?.html_cache;\n const darkMode = config?.web?.darkMode ?? false;\n const title = config?.web?.title ?? WEB_TITLE;\n const login = hasLogin(config);\n const scope = config?.web?.scope ?? '';\n const logo = resolveLogo(config, requestOptions);\n const pkgManagers = config?.web?.pkgManagers ?? ['yarn', 'pnpm', 'npm'];\n const version = res.locals.app_version ?? '';\n const flags = {\n ...config.flags,\n // legacy from 5.x\n ...config.experiments,\n };\n const primaryColor =\n validatePrimaryColor(config?.web?.primary_color ?? config?.web?.primaryColor) ?? '#4b5e40';\n const {\n scriptsBodyAfter,\n metaScripts,\n scriptsbodyBefore,\n showInfo,\n showSettings,\n showThemeSwitch,\n showFooter,\n showSearch,\n showDownloadTarball,\n } = Object.assign(\n {},\n {\n scriptsBodyAfter: [],\n bodyBefore: [],\n metaScripts: [],\n },\n config?.web\n );\n const options: TemplateUIOptions = {\n showInfo,\n showSettings,\n showThemeSwitch,\n showFooter,\n showSearch,\n showDownloadTarball,\n darkMode,\n url_prefix,\n basename,\n base,\n primaryColor,\n version,\n logo,\n flags,\n login,\n pkgManagers,\n title,\n scope,\n language,\n hideDeprecatedVersions,\n };\n\n let webPage;\n\n try {\n webPage = cache.get('template');\n if (!webPage) {\n webPage = renderTemplate(\n {\n manifest: manifestFiles ?? defaultManifestFiles,\n options,\n scriptsBodyAfter,\n metaScripts,\n scriptsbodyBefore,\n },\n manifest\n );\n\n if (needHtmlCache) {\n cache.set('template', webPage);\n debug('set template cache');\n }\n } else {\n debug('reuse template cache');\n }\n } catch (error: any) {\n throw new Error(`theme could not be load, stack ${error.stack}`);\n }\n res.setHeader('Content-Type', HEADERS.TEXT_HTML);\n res.send(webPage);\n debug('web rendered');\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderHTML.js","names":["_debug","_interopRequireDefault","require","_lruCache","_path","_url","_config","_core","_url2","_template","_webUtils","e","__esModule","default","DEFAULT_LANGUAGE","cache","LRU","max","ttl","debug","buildDebug","defaultManifestFiles","js","ico","css","resolveLogo","logo","url_prefix","requestOptions","isLocalFile","isURLhasValidProtocol","getPublicUrl","path","basename","renderHTML","config","manifest","manifestFiles","res","_config$i18n$web","_config$i18n","_config$web$hideDepre","_config$web","_config$web2","_config$web3","_config$web$darkMode","_config$web4","_config$web$title","_config$web5","_config$web$scope","_config$web6","_config$web7","_config$web8","_config$web9","_config$web$pkgManage","_config$web10","_res$locals$app_versi","_validatePrimaryColor","_config$web$primary_c","_config$web11","_config$web12","base","URL","pathname","language","i18n","web","hideDeprecatedVersions","needHtmlCache","undefined","includes","html_cache","darkMode","title","WEB_TITLE","login","hasLogin","scope","favicon","logoDark","pkgManagers","version","locals","app_version","flags","experiments","primaryColor","validatePrimaryColor","primary_color","scriptsBodyAfter","metaScripts","scriptsbodyBefore","showInfo","showSettings","showThemeSwitch","showFooter","showSearch","showDownloadTarball","showRaw","showUplinks","Object","assign","bodyBefore","options","webPage","get","renderTemplate","set","error","Error","stack","setHeader","HEADERS","TEXT_HTML","send"],"sources":["../../../../src/middlewares/web/utils/renderHTML.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { Response } from 'express';\nimport LRU from 'lru-cache';\nimport path from 'path';\nimport { URL } from 'url';\n\nimport { WEB_TITLE } from '@verdaccio/config';\nimport { HEADERS } from '@verdaccio/core';\nimport { ConfigYaml, TemplateUIOptions } from '@verdaccio/types';\nimport type { RequestOptions } from '@verdaccio/url';\nimport { getPublicUrl, isURLhasValidProtocol } from '@verdaccio/url';\n\nimport type { Manifest } from './manifest';\nimport renderTemplate from './template';\nimport type { WebpackManifest } from './template';\nimport { hasLogin, validatePrimaryColor } from './web-utils';\n\nconst DEFAULT_LANGUAGE = 'es-US';\nconst cache = new LRU({ max: 500, ttl: 1000 * 60 * 60 });\n\nconst debug = buildDebug('verdaccio:web:render');\n\nconst defaultManifestFiles: Manifest = {\n js: ['runtime.js', 'vendors.js', 'main.js'],\n ico: 'favicon.ico',\n css: [],\n};\n\nexport function resolveLogo(\n logo: string | undefined,\n url_prefix: string | undefined,\n requestOptions: RequestOptions\n) {\n if (typeof logo !== 'string') {\n return '';\n }\n const isLocalFile = logo && !isURLhasValidProtocol(logo);\n\n if (isLocalFile) {\n return `${getPublicUrl(url_prefix, requestOptions)}-/static/${path.basename(logo)}`;\n } else if (isURLhasValidProtocol(logo)) {\n return logo;\n } else {\n return '';\n }\n}\n\nexport default function renderHTML(\n config: ConfigYaml,\n manifest: WebpackManifest,\n manifestFiles: Manifest | null | undefined,\n requestOptions: RequestOptions,\n res: Response\n) {\n const { url_prefix } = config;\n const base = getPublicUrl(config?.url_prefix, requestOptions);\n const basename = new URL(base).pathname;\n const language = config?.i18n?.web ?? DEFAULT_LANGUAGE;\n const hideDeprecatedVersions = config?.web?.hideDeprecatedVersions ?? false;\n // @ts-ignore\n const needHtmlCache = [undefined, null].includes(config?.web?.html_cache)\n ? true\n : config?.web?.html_cache;\n const darkMode = config?.web?.darkMode ?? false;\n const title = config?.web?.title ?? WEB_TITLE;\n const login = hasLogin(config);\n const scope = config?.web?.scope ?? '';\n const favicon = resolveLogo(config?.web?.favicon, config?.url_prefix, requestOptions);\n const logo = resolveLogo(config?.web?.logo, config?.url_prefix, requestOptions);\n const logoDark = resolveLogo(config?.web?.logoDark, config?.url_prefix, requestOptions);\n const pkgManagers = config?.web?.pkgManagers ?? ['yarn', 'pnpm', 'npm'];\n const version = res.locals.app_version ?? '';\n const flags = {\n ...config.flags,\n // legacy from 5.x\n ...config.experiments,\n };\n const primaryColor =\n validatePrimaryColor(config?.web?.primary_color ?? config?.web?.primaryColor) ?? '#4b5e40';\n const {\n scriptsBodyAfter,\n metaScripts,\n scriptsbodyBefore,\n showInfo,\n showSettings,\n showThemeSwitch,\n showFooter,\n showSearch,\n showDownloadTarball,\n showRaw,\n showUplinks,\n } = Object.assign(\n {},\n {\n scriptsBodyAfter: [],\n bodyBefore: [],\n metaScripts: [],\n },\n config?.web\n );\n const options: TemplateUIOptions = {\n showInfo,\n showSettings,\n showThemeSwitch,\n showFooter,\n showSearch,\n showDownloadTarball,\n showRaw,\n showUplinks,\n darkMode,\n url_prefix,\n basename,\n base,\n primaryColor,\n version,\n logo,\n logoDark,\n favicon,\n flags,\n login,\n pkgManagers,\n title,\n scope,\n language,\n hideDeprecatedVersions,\n };\n\n let webPage;\n\n try {\n webPage = cache.get('template');\n if (!webPage) {\n webPage = renderTemplate(\n {\n manifest: manifestFiles ?? defaultManifestFiles,\n options,\n scriptsBodyAfter,\n metaScripts,\n scriptsbodyBefore,\n },\n manifest\n );\n\n if (needHtmlCache) {\n cache.set('template', webPage);\n debug('set template cache');\n }\n } else {\n debug('reuse template cache');\n }\n } catch (error: any) {\n throw new Error(`theme could not be load, stack ${error.stack}`);\n }\n res.setHeader('Content-Type', HEADERS.TEXT_HTML);\n res.send(webPage);\n debug('web rendered');\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,IAAA,GAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,KAAA,GAAAL,OAAA;AAGA,IAAAM,KAAA,GAAAN,OAAA;AAGA,IAAAO,SAAA,GAAAR,sBAAA,CAAAC,OAAA;AAEA,IAAAQ,SAAA,GAAAR,OAAA;AAA6D,SAAAD,uBAAAU,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7D,MAAMG,gBAAgB,GAAG,OAAO;AAChC,MAAMC,KAAK,GAAG,IAAIC,iBAAG,CAAC;EAAEC,GAAG,EAAE,GAAG;EAAEC,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG;AAAG,CAAC,CAAC;AAExD,MAAMC,KAAK,GAAG,IAAAC,cAAU,EAAC,sBAAsB,CAAC;AAEhD,MAAMC,oBAA8B,GAAG;EACrCC,EAAE,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC;EAC3CC,GAAG,EAAE,aAAa;EAClBC,GAAG,EAAE;AACP,CAAC;AAEM,SAASC,WAAWA,CACzBC,IAAwB,EACxBC,UAA8B,EAC9BC,cAA8B,EAC9B;EACA,IAAI,OAAOF,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAO,EAAE;EACX;EACA,MAAMG,WAAW,GAAGH,IAAI,IAAI,CAAC,IAAAI,2BAAqB,EAACJ,IAAI,CAAC;EAExD,IAAIG,WAAW,EAAE;IACf,OAAO,GAAG,IAAAE,kBAAY,EAACJ,UAAU,EAAEC,cAAc,CAAC,YAAYI,aAAI,CAACC,QAAQ,CAACP,IAAI,CAAC,EAAE;EACrF,CAAC,MAAM,IAAI,IAAAI,2BAAqB,EAACJ,IAAI,CAAC,EAAE;IACtC,OAAOA,IAAI;EACb,CAAC,MAAM;IACL,OAAO,EAAE;EACX;AACF;AAEe,SAASQ,UAAUA,CAChCC,MAAkB,EAClBC,QAAyB,EACzBC,aAA0C,EAC1CT,cAA8B,EAC9BU,GAAa,EACb;EAAA,IAAAC,gBAAA,EAAAC,YAAA,EAAAC,qBAAA,EAAAC,WAAA,EAAAC,YAAA,EAAAC,YAAA,EAAAC,oBAAA,EAAAC,YAAA,EAAAC,iBAAA,EAAAC,YAAA,EAAAC,iBAAA,EAAAC,YAAA,EAAAC,YAAA,EAAAC,YAAA,EAAAC,YAAA,EAAAC,qBAAA,EAAAC,aAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,aAAA,EAAAC,aAAA;EACA,MAAM;IAAEjC;EAAW,CAAC,GAAGQ,MAAM;EAC7B,MAAM0B,IAAI,GAAG,IAAA9B,kBAAY,EAACI,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAER,UAAU,EAAEC,cAAc,CAAC;EAC7D,MAAMK,QAAQ,GAAG,IAAI6B,QAAG,CAACD,IAAI,CAAC,CAACE,QAAQ;EACvC,MAAMC,QAAQ,IAAAzB,gBAAA,GAAGJ,MAAM,aAANA,MAAM,gBAAAK,YAAA,GAANL,MAAM,CAAE8B,IAAI,cAAAzB,YAAA,uBAAZA,YAAA,CAAc0B,GAAG,cAAA3B,gBAAA,cAAAA,gBAAA,GAAIzB,gBAAgB;EACtD,MAAMqD,sBAAsB,IAAA1B,qBAAA,GAAGN,MAAM,aAANA,MAAM,gBAAAO,WAAA,GAANP,MAAM,CAAE+B,GAAG,cAAAxB,WAAA,uBAAXA,WAAA,CAAayB,sBAAsB,cAAA1B,qBAAA,cAAAA,qBAAA,GAAI,KAAK;EAC3E;EACA,MAAM2B,aAAa,GAAG,CAACC,SAAS,EAAE,IAAI,CAAC,CAACC,QAAQ,CAACnC,MAAM,aAANA,MAAM,gBAAAQ,YAAA,GAANR,MAAM,CAAE+B,GAAG,cAAAvB,YAAA,uBAAXA,YAAA,CAAa4B,UAAU,CAAC,GACrE,IAAI,GACJpC,MAAM,aAANA,MAAM,gBAAAS,YAAA,GAANT,MAAM,CAAE+B,GAAG,cAAAtB,YAAA,uBAAXA,YAAA,CAAa2B,UAAU;EAC3B,MAAMC,QAAQ,IAAA3B,oBAAA,GAAGV,MAAM,aAANA,MAAM,gBAAAW,YAAA,GAANX,MAAM,CAAE+B,GAAG,cAAApB,YAAA,uBAAXA,YAAA,CAAa0B,QAAQ,cAAA3B,oBAAA,cAAAA,oBAAA,GAAI,KAAK;EAC/C,MAAM4B,KAAK,IAAA1B,iBAAA,GAAGZ,MAAM,aAANA,MAAM,gBAAAa,YAAA,GAANb,MAAM,CAAE+B,GAAG,cAAAlB,YAAA,uBAAXA,YAAA,CAAayB,KAAK,cAAA1B,iBAAA,cAAAA,iBAAA,GAAI2B,iBAAS;EAC7C,MAAMC,KAAK,GAAG,IAAAC,kBAAQ,EAACzC,MAAM,CAAC;EAC9B,MAAM0C,KAAK,IAAA5B,iBAAA,GAAGd,MAAM,aAANA,MAAM,gBAAAe,YAAA,GAANf,MAAM,CAAE+B,GAAG,cAAAhB,YAAA,uBAAXA,YAAA,CAAa2B,KAAK,cAAA5B,iBAAA,cAAAA,iBAAA,GAAI,EAAE;EACtC,MAAM6B,OAAO,GAAGrD,WAAW,CAACU,MAAM,aAANA,MAAM,gBAAAgB,YAAA,GAANhB,MAAM,CAAE+B,GAAG,cAAAf,YAAA,uBAAXA,YAAA,CAAa2B,OAAO,EAAE3C,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAER,UAAU,EAAEC,cAAc,CAAC;EACrF,MAAMF,IAAI,GAAGD,WAAW,CAACU,MAAM,aAANA,MAAM,gBAAAiB,YAAA,GAANjB,MAAM,CAAE+B,GAAG,cAAAd,YAAA,uBAAXA,YAAA,CAAa1B,IAAI,EAAES,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAER,UAAU,EAAEC,cAAc,CAAC;EAC/E,MAAMmD,QAAQ,GAAGtD,WAAW,CAACU,MAAM,aAANA,MAAM,gBAAAkB,YAAA,GAANlB,MAAM,CAAE+B,GAAG,cAAAb,YAAA,uBAAXA,YAAA,CAAa0B,QAAQ,EAAE5C,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAER,UAAU,EAAEC,cAAc,CAAC;EACvF,MAAMoD,WAAW,IAAA1B,qBAAA,GAAGnB,MAAM,aAANA,MAAM,gBAAAoB,aAAA,GAANpB,MAAM,CAAE+B,GAAG,cAAAX,aAAA,uBAAXA,aAAA,CAAayB,WAAW,cAAA1B,qBAAA,cAAAA,qBAAA,GAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;EACvE,MAAM2B,OAAO,IAAAzB,qBAAA,GAAGlB,GAAG,CAAC4C,MAAM,CAACC,WAAW,cAAA3B,qBAAA,cAAAA,qBAAA,GAAI,EAAE;EAC5C,MAAM4B,KAAK,GAAG;IACZ,GAAGjD,MAAM,CAACiD,KAAK;IACf;IACA,GAAGjD,MAAM,CAACkD;EACZ,CAAC;EACD,MAAMC,YAAY,IAAA7B,qBAAA,GAChB,IAAA8B,8BAAoB,GAAA7B,qBAAA,GAACvB,MAAM,aAANA,MAAM,gBAAAwB,aAAA,GAANxB,MAAM,CAAE+B,GAAG,cAAAP,aAAA,uBAAXA,aAAA,CAAa6B,aAAa,cAAA9B,qBAAA,cAAAA,qBAAA,GAAIvB,MAAM,aAANA,MAAM,gBAAAyB,aAAA,GAANzB,MAAM,CAAE+B,GAAG,cAAAN,aAAA,uBAAXA,aAAA,CAAa0B,YAAY,CAAC,cAAA7B,qBAAA,cAAAA,qBAAA,GAAI,SAAS;EAC5F,MAAM;IACJgC,gBAAgB;IAChBC,WAAW;IACXC,iBAAiB;IACjBC,QAAQ;IACRC,YAAY;IACZC,eAAe;IACfC,UAAU;IACVC,UAAU;IACVC,mBAAmB;IACnBC,OAAO;IACPC;EACF,CAAC,GAAGC,MAAM,CAACC,MAAM,CACf,CAAC,CAAC,EACF;IACEZ,gBAAgB,EAAE,EAAE;IACpBa,UAAU,EAAE,EAAE;IACdZ,WAAW,EAAE;EACf,CAAC,EACDvD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAE+B,GACV,CAAC;EACD,MAAMqC,OAA0B,GAAG;IACjCX,QAAQ;IACRC,YAAY;IACZC,eAAe;IACfC,UAAU;IACVC,UAAU;IACVC,mBAAmB;IACnBC,OAAO;IACPC,WAAW;IACX3B,QAAQ;IACR7C,UAAU;IACVM,QAAQ;IACR4B,IAAI;IACJyB,YAAY;IACZL,OAAO;IACPvD,IAAI;IACJqD,QAAQ;IACRD,OAAO;IACPM,KAAK;IACLT,KAAK;IACLK,WAAW;IACXP,KAAK;IACLI,KAAK;IACLb,QAAQ;IACRG;EACF,CAAC;EAED,IAAIqC,OAAO;EAEX,IAAI;IACFA,OAAO,GAAGzF,KAAK,CAAC0F,GAAG,CAAC,UAAU,CAAC;IAC/B,IAAI,CAACD,OAAO,EAAE;MACZA,OAAO,GAAG,IAAAE,iBAAc,EACtB;QACEtE,QAAQ,EAAEC,aAAa,aAAbA,aAAa,cAAbA,aAAa,GAAIhB,oBAAoB;QAC/CkF,OAAO;QACPd,gBAAgB;QAChBC,WAAW;QACXC;MACF,CAAC,EACDvD,QACF,CAAC;MAED,IAAIgC,aAAa,EAAE;QACjBrD,KAAK,CAAC4F,GAAG,CAAC,UAAU,EAAEH,OAAO,CAAC;QAC9BrF,KAAK,CAAC,oBAAoB,CAAC;MAC7B;IACF,CAAC,MAAM;MACLA,KAAK,CAAC,sBAAsB,CAAC;IAC/B;EACF,CAAC,CAAC,OAAOyF,KAAU,EAAE;IACnB,MAAM,IAAIC,KAAK,CAAC,kCAAkCD,KAAK,CAACE,KAAK,EAAE,CAAC;EAClE;EACAxE,GAAG,CAACyE,SAAS,CAAC,cAAc,EAAEC,aAAO,CAACC,SAAS,CAAC;EAChD3E,GAAG,CAAC4E,IAAI,CAACV,OAAO,CAAC;EACjBrF,KAAK,CAAC,cAAc,CAAC;AACvB","ignoreList":[]}
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = renderTemplate;
|
|
7
7
|
var _debug = _interopRequireDefault(require("debug"));
|
|
8
8
|
var _manifest = require("./manifest");
|
|
9
|
-
function _interopRequireDefault(
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
const debug = (0, _debug.default)('verdaccio:web:render:template');
|
|
11
11
|
|
|
12
12
|
// the outcome of the Webpack Manifest Plugin
|
|
@@ -21,8 +21,8 @@ function renderTemplate(template, manifest) {
|
|
|
21
21
|
<head>
|
|
22
22
|
<meta charset="utf-8">
|
|
23
23
|
<base href="${template === null || template === void 0 ? void 0 : template.options.base}">
|
|
24
|
-
<title>${(_template$options$tit = template === null || template === void 0
|
|
25
|
-
<link rel="icon" href="${template === null || template === void 0 ? void 0 : template.options.base}
|
|
24
|
+
<title>${(_template$options$tit = template === null || template === void 0 || (_template$options = template.options) === null || _template$options === void 0 ? void 0 : _template$options.title) !== null && _template$options$tit !== void 0 ? _template$options$tit : ''}</title>
|
|
25
|
+
<link rel="icon" href="${template === null || template === void 0 ? void 0 : template.options.base}/-/static/favicon.ico"/>
|
|
26
26
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
27
27
|
<script>
|
|
28
28
|
window.__VERDACCIO_BASENAME_UI_OPTIONS=${JSON.stringify(template.options)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","names":["_debug","_interopRequireDefault","require","_manifest","
|
|
1
|
+
{"version":3,"file":"template.js","names":["_debug","_interopRequireDefault","require","_manifest","e","__esModule","default","debug","buildDebug","renderTemplate","template","manifest","_template$options$tit","_template$options","options","base","title","JSON","stringify","metaScripts","join","scriptsbodyBefore","getManifestValue","js","map","item","scriptsBodyAfter"],"sources":["../../../../src/middlewares/web/utils/template.ts"],"sourcesContent":["import buildDebug from 'debug';\n\nimport { TemplateUIOptions } from '@verdaccio/types';\n\nimport { Manifest, getManifestValue } from './manifest';\n\nconst debug = buildDebug('verdaccio:web:render:template');\n\nexport type Template = {\n manifest: Manifest;\n options: TemplateUIOptions;\n metaScripts?: string[];\n scriptsBodyAfter?: string[];\n scriptsbodyBefore?: string[];\n};\n\n// the outcome of the Webpack Manifest Plugin\nexport interface WebpackManifest {\n [key: string]: string;\n}\n\nexport default function renderTemplate(template: Template, manifest: WebpackManifest) {\n debug('template %o', template);\n debug('manifest %o', manifest);\n\n return `\n <!DOCTYPE html>\n <html lang=\"en-us\"> \n <head>\n <meta charset=\"utf-8\">\n <base href=\"${template?.options.base}\">\n <title>${template?.options?.title ?? ''}</title> \n <link rel=\"icon\" href=\"${template?.options.base}/-/static/favicon.ico\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /> \n <script>\n window.__VERDACCIO_BASENAME_UI_OPTIONS=${JSON.stringify(template.options)}\n </script>\n ${template?.metaScripts ? template.metaScripts.join('') : ''}\n </head> \n <body class=\"body\">\n ${template?.scriptsbodyBefore ? template.scriptsbodyBefore.join('') : ''}\n <div id=\"root\"></div>\n ${getManifestValue(template.manifest.js, manifest, template?.options.base)\n .map((item) => `<script defer=\"defer\" src=\"${item}\"></script>`)\n .join('')}\n ${template?.scriptsBodyAfter ? template.scriptsBodyAfter.join('') : ''}\n </body>\n </html>\n `;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAIA,IAAAC,SAAA,GAAAD,OAAA;AAAwD,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExD,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,+BAA+B,CAAC;;AAUzD;;AAKe,SAASC,cAAcA,CAACC,QAAkB,EAAEC,QAAyB,EAAE;EAAA,IAAAC,qBAAA,EAAAC,iBAAA;EACpFN,KAAK,CAAC,aAAa,EAAEG,QAAQ,CAAC;EAC9BH,KAAK,CAAC,aAAa,EAAEI,QAAQ,CAAC;EAE9B,OAAO;AACT;AACA;AACA;AACA;AACA,sBAAsBD,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEI,OAAO,CAACC,IAAI;AAC5C,iBAD4C,CAAAH,qBAAA,GAC3BF,QAAQ,aAARA,QAAQ,gBAAAG,iBAAA,GAARH,QAAQ,CAAEI,OAAO,cAAAD,iBAAA,uBAAjBA,iBAAA,CAAmBG,KAAK,cAAAJ,qBAAA,cAAAA,qBAAA,GAAI,EAAE;AAC/C,iCAAiCF,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEI,OAAO,CAACC,IAAI;AACvD;AACA;AACA,qDAAqDE,IAAI,CAACC,SAAS,CAACR,QAAQ,CAACI,OAAO,CAAC;AACrF;AACA,UAAUJ,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAES,WAAW,GAAGT,QAAQ,CAACS,WAAW,CAACC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;AACpE;AACA;AACA,QAAQV,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEW,iBAAiB,GAAGX,QAAQ,CAACW,iBAAiB,CAACD,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;AAC9E;AACA,UAAU,IAAAE,0BAAgB,EAACZ,QAAQ,CAACC,QAAQ,CAACY,EAAE,EAAEZ,QAAQ,EAAED,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEI,OAAO,CAACC,IAAI,CAAC,CACvES,GAAG,CAAEC,IAAI,IAAK,8BAA8BA,IAAI,aAAa,CAAC,CAC9DL,IAAI,CAAC,EAAE,CAAC;AACnB,UAAUV,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAEgB,gBAAgB,GAAGhB,QAAQ,CAACgB,gBAAgB,CAACN,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE;AAC9E;AACA;AACA,GAAG;AACH","ignoreList":[]}
|
|
@@ -7,7 +7,7 @@ exports.hasLogin = hasLogin;
|
|
|
7
7
|
exports.validatePrimaryColor = validatePrimaryColor;
|
|
8
8
|
var _debug = _interopRequireDefault(require("debug"));
|
|
9
9
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
|
-
function _interopRequireDefault(
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
const debug = (0, _debug.default)('verdaccio:web:middlwares');
|
|
12
12
|
function validatePrimaryColor(primaryColor) {
|
|
13
13
|
const isHex = /^#([0-9A-F]{3}){1,2}$/i.test(primaryColor);
|
|
@@ -19,6 +19,6 @@ function validatePrimaryColor(primaryColor) {
|
|
|
19
19
|
}
|
|
20
20
|
function hasLogin(config) {
|
|
21
21
|
var _config$web, _config$web2;
|
|
22
|
-
return _lodash.default.isNil(config === null || config === void 0
|
|
22
|
+
return _lodash.default.isNil(config === null || config === void 0 || (_config$web = config.web) === null || _config$web === void 0 ? void 0 : _config$web.login) || (config === null || config === void 0 || (_config$web2 = config.web) === null || _config$web2 === void 0 ? void 0 : _config$web2.login) === true;
|
|
23
23
|
}
|
|
24
24
|
//# sourceMappingURL=web-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-utils.js","names":["_debug","_interopRequireDefault","require","_lodash","
|
|
1
|
+
{"version":3,"file":"web-utils.js","names":["_debug","_interopRequireDefault","require","_lodash","e","__esModule","default","debug","buildDebug","validatePrimaryColor","primaryColor","isHex","test","hasLogin","config","_config$web","_config$web2","_","isNil","web","login"],"sources":["../../../../src/middlewares/web/utils/web-utils.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport _ from 'lodash';\n\nconst debug = buildDebug('verdaccio:web:middlwares');\n\nexport function validatePrimaryColor(primaryColor) {\n const isHex = /^#([0-9A-F]{3}){1,2}$/i.test(primaryColor);\n if (!isHex) {\n debug('invalid primary color %o', primaryColor);\n return;\n }\n\n return primaryColor;\n}\n\nexport function hasLogin(config: any) {\n return _.isNil(config?.web?.login) || config?.web?.login === true;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAuB,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEvB,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,0BAA0B,CAAC;AAE7C,SAASC,oBAAoBA,CAACC,YAAY,EAAE;EACjD,MAAMC,KAAK,GAAG,wBAAwB,CAACC,IAAI,CAACF,YAAY,CAAC;EACzD,IAAI,CAACC,KAAK,EAAE;IACVJ,KAAK,CAAC,0BAA0B,EAAEG,YAAY,CAAC;IAC/C;EACF;EAEA,OAAOA,YAAY;AACrB;AAEO,SAASG,QAAQA,CAACC,MAAW,EAAE;EAAA,IAAAC,WAAA,EAAAC,YAAA;EACpC,OAAOC,eAAC,CAACC,KAAK,CAACJ,MAAM,aAANA,MAAM,gBAAAC,WAAA,GAAND,MAAM,CAAEK,GAAG,cAAAJ,WAAA,uBAAXA,WAAA,CAAaK,KAAK,CAAC,IAAI,CAAAN,MAAM,aAANA,MAAM,gBAAAE,YAAA,GAANF,MAAM,CAAEK,GAAG,cAAAH,YAAA,uBAAXA,YAAA,CAAaI,KAAK,MAAK,IAAI;AACnE","ignoreList":[]}
|
|
@@ -8,7 +8,7 @@ var _express = _interopRequireWildcard(require("express"));
|
|
|
8
8
|
var _validation = require("../validation");
|
|
9
9
|
var _security = require("./security");
|
|
10
10
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
11
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u &&
|
|
11
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
12
12
|
function webAPIMiddleware(tokenMiddleware, webEndpointsApi) {
|
|
13
13
|
// eslint-disable-next-line new-cap
|
|
14
14
|
const route = (0, _express.Router)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-api.js","names":["_express","_interopRequireWildcard","require","_validation","_security","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","
|
|
1
|
+
{"version":3,"file":"web-api.js","names":["_express","_interopRequireWildcard","require","_validation","_security","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","webAPIMiddleware","tokenMiddleware","webEndpointsApi","route","Router","param","validatePackage","validateName","use","express","urlencoded","extended","setSecurityWebHeaders"],"sources":["../../../src/middlewares/web/web-api.ts"],"sourcesContent":["import express from 'express';\nimport { RequestHandler, Router } from 'express';\n\nimport { validateName, validatePackage } from '../validation';\nimport { setSecurityWebHeaders } from './security';\n\nexport function webAPIMiddleware(\n tokenMiddleware: RequestHandler,\n webEndpointsApi: RequestHandler\n): Router {\n // eslint-disable-next-line new-cap\n const route = Router();\n // validate all of these params as a package name\n // this might be too harsh, so ask if it causes trouble=\n route.param('package', validatePackage);\n route.param('filename', validateName);\n route.param('version', validateName);\n route.use(express.urlencoded({ extended: false }));\n route.use(setSecurityWebHeaders);\n\n if (typeof tokenMiddleware === 'function') {\n route.use(tokenMiddleware);\n }\n\n if (typeof webEndpointsApi === 'function') {\n route.use(webEndpointsApi);\n }\n\n return route;\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,uBAAA,CAAAC,OAAA;AAGA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAAmD,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAE5C,SAASW,gBAAgBA,CAC9BC,eAA+B,EAC/BC,eAA+B,EACvB;EACR;EACA,MAAMC,KAAK,GAAG,IAAAC,eAAM,EAAC,CAAC;EACtB;EACA;EACAD,KAAK,CAACE,KAAK,CAAC,SAAS,EAAEC,2BAAe,CAAC;EACvCH,KAAK,CAACE,KAAK,CAAC,UAAU,EAAEE,wBAAY,CAAC;EACrCJ,KAAK,CAACE,KAAK,CAAC,SAAS,EAAEE,wBAAY,CAAC;EACpCJ,KAAK,CAACK,GAAG,CAACC,gBAAO,CAACC,UAAU,CAAC;IAAEC,QAAQ,EAAE;EAAM,CAAC,CAAC,CAAC;EAClDR,KAAK,CAACK,GAAG,CAACI,+BAAqB,CAAC;EAEhC,IAAI,OAAOX,eAAe,KAAK,UAAU,EAAE;IACzCE,KAAK,CAACK,GAAG,CAACP,eAAe,CAAC;EAC5B;EAEA,IAAI,OAAOC,eAAe,KAAK,UAAU,EAAE;IACzCC,KAAK,CAACK,GAAG,CAACN,eAAe,CAAC;EAC5B;EAEA,OAAOC,KAAK;AACd","ignoreList":[]}
|
|
@@ -7,7 +7,7 @@ exports.default = void 0;
|
|
|
7
7
|
var _express = _interopRequireDefault(require("express"));
|
|
8
8
|
var _renderWeb = require("./render-web");
|
|
9
9
|
var _webApi = require("./web-api");
|
|
10
|
-
function _interopRequireDefault(
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
var _default = (config, middlewares, pluginOptions) => {
|
|
12
12
|
// eslint-disable-next-line new-cap
|
|
13
13
|
const router = _express.default.Router();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-middleware.js","names":["_express","_interopRequireDefault","require","_renderWeb","_webApi","
|
|
1
|
+
{"version":3,"file":"web-middleware.js","names":["_express","_interopRequireDefault","require","_renderWeb","_webApi","e","__esModule","default","_default","config","middlewares","pluginOptions","router","express","Router","tokenMiddleware","webEndpointsApi","use","renderWebMiddleware","webAPIMiddleware","exports"],"sources":["../../../src/middlewares/web/web-middleware.ts"],"sourcesContent":["import express from 'express';\n\nimport { renderWebMiddleware } from './render-web';\nimport { webAPIMiddleware } from './web-api';\n\nexport default (config, middlewares, pluginOptions): any => {\n // eslint-disable-next-line new-cap\n const router = express.Router();\n const { tokenMiddleware, webEndpointsApi } = middlewares;\n // render web\n router.use('/', renderWebMiddleware(config, tokenMiddleware, pluginOptions));\n // web endpoints, search, packages, etc\n router.use('/-/verdaccio/', webAPIMiddleware(tokenMiddleware, webEndpointsApi));\n return router;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAA6C,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAE9BA,CAACC,MAAM,EAAEC,WAAW,EAAEC,aAAa,KAAU;EAC1D;EACA,MAAMC,MAAM,GAAGC,gBAAO,CAACC,MAAM,CAAC,CAAC;EAC/B,MAAM;IAAEC,eAAe;IAAEC;EAAgB,CAAC,GAAGN,WAAW;EACxD;EACAE,MAAM,CAACK,GAAG,CAAC,GAAG,EAAE,IAAAC,8BAAmB,EAACT,MAAM,EAAEM,eAAe,EAAEJ,aAAa,CAAC,CAAC;EAC5E;EACAC,MAAM,CAACK,GAAG,CAAC,eAAe,EAAE,IAAAE,wBAAgB,EAACJ,eAAe,EAAEC,eAAe,CAAC,CAAC;EAC/E,OAAOJ,MAAM;AACf,CAAC;AAAAQ,OAAA,CAAAb,OAAA,GAAAC,QAAA","ignoreList":[]}
|
package/build/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import { NextFunction, Request, Response } from 'express';\n\nimport { Logger, RemoteUser } from '@verdaccio/types';\n\nexport type $RequestExtend = Request & { remote_user?: RemoteUser; log: Logger };\nexport type $ResponseExtend = Response & { cookies?: any };\nexport type $NextFunctionVer = NextFunction & any;\n\nexport interface MiddlewareError {\n error: string;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import { NextFunction, Request, Response } from 'express';\n\nimport { Logger, RemoteUser } from '@verdaccio/types';\n\nexport type $RequestExtend = Request & { remote_user?: RemoteUser; log: Logger };\nexport type $ResponseExtend = Response & { cookies?: any };\nexport type $NextFunctionVer = NextFunction & any;\n\nexport interface MiddlewareError {\n error: string;\n}\n"],"mappings":"","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/middleware",
|
|
3
|
-
"version": "7.0.0-next-7.
|
|
3
|
+
"version": "7.0.0-next-7.19",
|
|
4
4
|
"description": "express middleware utils",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"node": ">=12"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@verdaccio/core": "7.0.0-next-7.
|
|
33
|
-
"@verdaccio/utils": "7.0.0-next-7.
|
|
34
|
-
"@verdaccio/config": "7.0.0-next-7.
|
|
35
|
-
"@verdaccio/url": "12.0.0-next-7.
|
|
32
|
+
"@verdaccio/core": "7.0.0-next-7.19",
|
|
33
|
+
"@verdaccio/utils": "7.0.0-next-7.19",
|
|
34
|
+
"@verdaccio/config": "7.0.0-next-7.19",
|
|
35
|
+
"@verdaccio/url": "12.0.0-next-7.19",
|
|
36
36
|
"debug": "4.3.4",
|
|
37
37
|
"lru-cache": "7.18.3",
|
|
38
38
|
"express": "4.19.2",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"url": "https://opencollective.com/verdaccio"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@verdaccio/logger": "7.0.0-next-7.
|
|
48
|
+
"@verdaccio/logger": "7.0.0-next-7.19",
|
|
49
49
|
"body-parser": "1.20.2",
|
|
50
50
|
"supertest": "6.3.4"
|
|
51
51
|
},
|
|
@@ -37,39 +37,59 @@ export function renderWebMiddleware(config, tokenMiddleware, pluginOptions) {
|
|
|
37
37
|
// any match within the static is routed to the file system
|
|
38
38
|
router.get('/-/static/*', function (req, res, next) {
|
|
39
39
|
const filename = req.params[0];
|
|
40
|
-
|
|
40
|
+
let file = `${staticPath}/${filename}`;
|
|
41
|
+
if (filename === 'favicon.ico' && config?.web?.favicon) {
|
|
42
|
+
file = config?.web?.favicon;
|
|
43
|
+
if (isURLhasValidProtocol(file)) {
|
|
44
|
+
debug('redirect to favicon %s', file);
|
|
45
|
+
req.url = file;
|
|
46
|
+
return next();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
41
49
|
debug('render static file %o', file);
|
|
42
50
|
res.sendFile(file, sendFileCallback(next));
|
|
43
51
|
});
|
|
44
52
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
53
|
+
function renderLogo(logo: string | undefined): string | undefined {
|
|
54
|
+
// check the origin of the logo
|
|
55
|
+
if (logo && !isURLhasValidProtocol(logo)) {
|
|
56
|
+
// URI related to a local file
|
|
57
|
+
const absoluteLocalFile = path.posix.resolve(logo);
|
|
58
|
+
debug('serve local logo %s', absoluteLocalFile);
|
|
59
|
+
try {
|
|
60
|
+
// TODO: replace existsSync by async alternative
|
|
61
|
+
if (
|
|
62
|
+
fs.existsSync(absoluteLocalFile) &&
|
|
63
|
+
typeof fs.accessSync(absoluteLocalFile, fs.constants.R_OK) === 'undefined'
|
|
64
|
+
) {
|
|
65
|
+
// Note: `path.join` will break on Windows, because it transforms `/` to `\`
|
|
66
|
+
// Use POSIX version `path.posix.join` instead.
|
|
67
|
+
logo = path.posix.join('/-/static/', path.basename(logo));
|
|
68
|
+
router.get(logo, function (_req, res, next) {
|
|
69
|
+
// @ts-ignore
|
|
70
|
+
debug('serve custom logo web:%s - local:%s', logo, absoluteLocalFile);
|
|
71
|
+
res.sendFile(absoluteLocalFile, sendFileCallback(next));
|
|
72
|
+
});
|
|
73
|
+
debug('enabled custom logo %s', logo);
|
|
74
|
+
} else {
|
|
75
|
+
logo = undefined;
|
|
76
|
+
debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);
|
|
77
|
+
}
|
|
78
|
+
} catch {
|
|
79
|
+
logo = undefined;
|
|
67
80
|
debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);
|
|
68
81
|
}
|
|
69
|
-
} catch {
|
|
70
|
-
config.web.logo = undefined;
|
|
71
|
-
debug(`web logo is wrong, path ${absoluteLocalFile} does not exist or is not readable`);
|
|
72
82
|
}
|
|
83
|
+
return logo;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const logo = renderLogo(config?.web?.logo);
|
|
87
|
+
if (config?.web?.logo) {
|
|
88
|
+
config.web.logo = logo;
|
|
89
|
+
}
|
|
90
|
+
const logoDark = renderLogo(config?.web?.logoDark);
|
|
91
|
+
if (config?.web?.logoDark) {
|
|
92
|
+
config.web.logoDark = logoDark;
|
|
73
93
|
}
|
|
74
94
|
|
|
75
95
|
router.get('/-/web/:section/*', function (req, res) {
|
|
@@ -26,16 +26,20 @@ const defaultManifestFiles: Manifest = {
|
|
|
26
26
|
css: [],
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
export function resolveLogo(
|
|
30
|
-
|
|
29
|
+
export function resolveLogo(
|
|
30
|
+
logo: string | undefined,
|
|
31
|
+
url_prefix: string | undefined,
|
|
32
|
+
requestOptions: RequestOptions
|
|
33
|
+
) {
|
|
34
|
+
if (typeof logo !== 'string') {
|
|
31
35
|
return '';
|
|
32
36
|
}
|
|
33
|
-
const isLocalFile =
|
|
37
|
+
const isLocalFile = logo && !isURLhasValidProtocol(logo);
|
|
34
38
|
|
|
35
39
|
if (isLocalFile) {
|
|
36
|
-
return `${getPublicUrl(
|
|
37
|
-
} else if (isURLhasValidProtocol(
|
|
38
|
-
return
|
|
40
|
+
return `${getPublicUrl(url_prefix, requestOptions)}-/static/${path.basename(logo)}`;
|
|
41
|
+
} else if (isURLhasValidProtocol(logo)) {
|
|
42
|
+
return logo;
|
|
39
43
|
} else {
|
|
40
44
|
return '';
|
|
41
45
|
}
|
|
@@ -61,7 +65,9 @@ export default function renderHTML(
|
|
|
61
65
|
const title = config?.web?.title ?? WEB_TITLE;
|
|
62
66
|
const login = hasLogin(config);
|
|
63
67
|
const scope = config?.web?.scope ?? '';
|
|
64
|
-
const
|
|
68
|
+
const favicon = resolveLogo(config?.web?.favicon, config?.url_prefix, requestOptions);
|
|
69
|
+
const logo = resolveLogo(config?.web?.logo, config?.url_prefix, requestOptions);
|
|
70
|
+
const logoDark = resolveLogo(config?.web?.logoDark, config?.url_prefix, requestOptions);
|
|
65
71
|
const pkgManagers = config?.web?.pkgManagers ?? ['yarn', 'pnpm', 'npm'];
|
|
66
72
|
const version = res.locals.app_version ?? '';
|
|
67
73
|
const flags = {
|
|
@@ -81,6 +87,8 @@ export default function renderHTML(
|
|
|
81
87
|
showFooter,
|
|
82
88
|
showSearch,
|
|
83
89
|
showDownloadTarball,
|
|
90
|
+
showRaw,
|
|
91
|
+
showUplinks,
|
|
84
92
|
} = Object.assign(
|
|
85
93
|
{},
|
|
86
94
|
{
|
|
@@ -97,6 +105,8 @@ export default function renderHTML(
|
|
|
97
105
|
showFooter,
|
|
98
106
|
showSearch,
|
|
99
107
|
showDownloadTarball,
|
|
108
|
+
showRaw,
|
|
109
|
+
showUplinks,
|
|
100
110
|
darkMode,
|
|
101
111
|
url_prefix,
|
|
102
112
|
basename,
|
|
@@ -104,6 +114,8 @@ export default function renderHTML(
|
|
|
104
114
|
primaryColor,
|
|
105
115
|
version,
|
|
106
116
|
logo,
|
|
117
|
+
logoDark,
|
|
118
|
+
favicon,
|
|
107
119
|
flags,
|
|
108
120
|
login,
|
|
109
121
|
pkgManagers,
|
|
@@ -30,7 +30,7 @@ export default function renderTemplate(template: Template, manifest: WebpackMani
|
|
|
30
30
|
<meta charset="utf-8">
|
|
31
31
|
<base href="${template?.options.base}">
|
|
32
32
|
<title>${template?.options?.title ?? ''}</title>
|
|
33
|
-
<link rel="icon" href="${template?.options.base}
|
|
33
|
+
<link rel="icon" href="${template?.options.base}/-/static/favicon.ico"/>
|
|
34
34
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
35
35
|
<script>
|
|
36
36
|
window.__VERDACCIO_BASENAME_UI_OPTIONS=${JSON.stringify(template.options)}
|
|
@@ -8,7 +8,7 @@ exports[`template custom body after 1`] = `
|
|
|
8
8
|
<meta charset="utf-8">
|
|
9
9
|
<base href="http://domain.com">
|
|
10
10
|
<title></title>
|
|
11
|
-
<link rel="icon" href="http://domain.com
|
|
11
|
+
<link rel="icon" href="http://domain.com/-/static/favicon.ico"/>
|
|
12
12
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
13
13
|
<script>
|
|
14
14
|
window.__VERDACCIO_BASENAME_UI_OPTIONS={"base":"http://domain.com"}
|
|
@@ -33,7 +33,7 @@ exports[`template custom body before 1`] = `
|
|
|
33
33
|
<meta charset="utf-8">
|
|
34
34
|
<base href="http://domain.com">
|
|
35
35
|
<title></title>
|
|
36
|
-
<link rel="icon" href="http://domain.com
|
|
36
|
+
<link rel="icon" href="http://domain.com/-/static/favicon.ico"/>
|
|
37
37
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
38
38
|
<script>
|
|
39
39
|
window.__VERDACCIO_BASENAME_UI_OPTIONS={"base":"http://domain.com"}
|
|
@@ -58,7 +58,7 @@ exports[`template custom render 1`] = `
|
|
|
58
58
|
<meta charset="utf-8">
|
|
59
59
|
<base href="http://domain.com">
|
|
60
60
|
<title></title>
|
|
61
|
-
<link rel="icon" href="http://domain.com
|
|
61
|
+
<link rel="icon" href="http://domain.com/-/static/favicon.ico"/>
|
|
62
62
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
63
63
|
<script>
|
|
64
64
|
window.__VERDACCIO_BASENAME_UI_OPTIONS={"base":"http://domain.com"}
|
|
@@ -83,7 +83,7 @@ exports[`template custom title 1`] = `
|
|
|
83
83
|
<meta charset="utf-8">
|
|
84
84
|
<base href="http://domain.com">
|
|
85
85
|
<title>foo title</title>
|
|
86
|
-
<link rel="icon" href="http://domain.com
|
|
86
|
+
<link rel="icon" href="http://domain.com/-/static/favicon.ico"/>
|
|
87
87
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
88
88
|
<script>
|
|
89
89
|
window.__VERDACCIO_BASENAME_UI_OPTIONS={"base":"http://domain.com","title":"foo title"}
|
|
@@ -108,7 +108,7 @@ exports[`template custom title 2`] = `
|
|
|
108
108
|
<meta charset="utf-8">
|
|
109
109
|
<base href="http://domain.com">
|
|
110
110
|
<title>foo title</title>
|
|
111
|
-
<link rel="icon" href="http://domain.com
|
|
111
|
+
<link rel="icon" href="http://domain.com/-/static/favicon.ico"/>
|
|
112
112
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
113
113
|
<script>
|
|
114
114
|
window.__VERDACCIO_BASENAME_UI_OPTIONS={"base":"http://domain.com","title":"foo title"}
|
|
@@ -133,7 +133,7 @@ exports[`template meta scripts 1`] = `
|
|
|
133
133
|
<meta charset="utf-8">
|
|
134
134
|
<base href="http://domain.com">
|
|
135
135
|
<title></title>
|
|
136
|
-
<link rel="icon" href="http://domain.com
|
|
136
|
+
<link rel="icon" href="http://domain.com/-/static/favicon.ico"/>
|
|
137
137
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
138
138
|
<script>
|
|
139
139
|
window.__VERDACCIO_BASENAME_UI_OPTIONS={"base":"http://domain.com"}
|
|
Binary file
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
web:
|
|
2
|
+
title: verdaccio web
|
|
3
|
+
login: true
|
|
4
|
+
scope: '@scope'
|
|
5
|
+
pkgManagers:
|
|
6
|
+
- pnpm
|
|
7
|
+
- yarn
|
|
8
|
+
showInfo: true
|
|
9
|
+
showSettings: true
|
|
10
|
+
showSearch: true
|
|
11
|
+
showFooter: true
|
|
12
|
+
showThemeSwitch: true
|
|
13
|
+
showDownloadTarball: true
|
|
14
|
+
showRaw: true
|
|
15
|
+
primary_color: '#ffffff'
|
|
16
|
+
logo: https://raw.githubusercontent.com/verdaccio/verdaccio/master/assets/svg/logo-small.svg
|
|
17
|
+
logoDark: https://raw.githubusercontent.com/verdaccio/verdaccio/master/assets/svg/logo-blackwhite.svg
|
|
18
|
+
favicon: https://raw.githubusercontent.com/verdaccio/verdaccio/master/website/static/img/favicon/favicon.ico
|
|
19
|
+
html_cache: false
|
|
20
|
+
|
|
21
|
+
url_prefix: /prefix
|
|
22
|
+
|
|
23
|
+
log: { type: stdout, format: pretty, level: trace }
|
|
24
|
+
|
|
25
|
+
flags:
|
|
26
|
+
changePassword: true
|