UNPKG

verdaccio

Version:

A lightweight private npm proxy registry

1 lines 5.13 kB
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/api/web/index.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport type { RequestHandler } from 'express';\nimport express, { Router } from 'express';\nimport _ from 'lodash';\n\nimport { PLUGIN_CATEGORY } from '@verdaccio/core';\nimport { asyncLoadPlugin } from '@verdaccio/loaders';\nimport {\n WebUrlsNamespace,\n renderWebMiddleware,\n setSecurityWebHeaders,\n validateName,\n validatePackage,\n} from '@verdaccio/middleware';\nimport defaultTheme from '@verdaccio/ui-theme';\n\n// the local wrapper keeps a live binding; importing `logger` straight from the\n// CJS @verdaccio/logger package snapshots `undefined` in the ESM build\nimport { logger } from '../../lib/logger';\nimport webEndpointsApi from './api';\n\nconst debug = buildDebug('verdaccio:web');\nexport const PLUGIN_UI_PREFIX = 'verdaccio-theme';\nexport const DEFAULT_PLUGIN_UI_THEME = '@verdaccio/ui-theme';\n\nexport async function loadTheme(config: any) {\n if (_.isNil(config.theme) === false) {\n const plugin = await asyncLoadPlugin(\n config.theme,\n { config, logger },\n // TODO: add types { staticPath: string; manifest: unknown; manifestFiles: unknown }\n function (plugin: any) {\n /**\n *\n - `staticPath`: is the same data returned in Verdaccio 5.\n - `manifest`: A webpack manifest object.\n - `manifestFiles`: A object with one property `js` and the array (order matters) of the manifest id to be loaded in the template dynamically.\n */\n return plugin.staticPath && plugin.manifest && plugin.manifestFiles;\n },\n true,\n config?.serverSettings?.pluginPrefix ?? PLUGIN_UI_PREFIX,\n PLUGIN_CATEGORY.THEME\n );\n if (plugin.length > 1) {\n logger.warn('multiple ui themes are not supported; only the first plugin is used');\n }\n\n return _.head(plugin);\n }\n}\n\nexport function webAPIMiddleware(\n tokenMiddleware: RequestHandler,\n webEndpointsApi: RequestHandler\n): Router {\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\nexport function webMiddleware(config, middlewares, pluginOptions): any {\n const router = express.Router();\n const { tokenMiddleware, webEndpointsApi } = middlewares;\n // render web\n router.use(WebUrlsNamespace.root, renderWebMiddleware(config, tokenMiddleware, pluginOptions));\n // web endpoints: search, packages, readme, sidebar, etc\n router.use(WebUrlsNamespace.endpoints, webAPIMiddleware(tokenMiddleware, webEndpointsApi));\n return router;\n}\n\nexport default async (config, auth, storage, logger) => {\n let pluginOptions = await loadTheme(config);\n if (!pluginOptions) {\n debug('no theme plugin found, using default theme');\n pluginOptions = defaultTheme(config.web);\n logger.info(\n { name: DEFAULT_PLUGIN_UI_THEME, pluginCategory: PLUGIN_CATEGORY.THEME },\n 'plugin @{name} successfully loaded (@{pluginCategory})'\n );\n }\n\n const router = Router();\n // web endpoints, search, packages, etc\n router.use(\n webMiddleware(\n config,\n {\n tokenMiddleware: auth.webUIJWTmiddleware(),\n webEndpointsApi: webEndpointsApi(auth, storage, config),\n },\n pluginOptions\n )\n );\n return router;\n};\n"],"mappings":";;;;;;;;;;AAqBA,IAAM,QAAQ,YAAW,eAAe;AACxC,IAAa,mBAAmB;AAChC,IAAa,0BAA0B;AAEvC,eAAsB,UAAU,QAAa;CAC3C,IAAI,EAAE,MAAM,OAAO,KAAK,MAAM,OAAO;EACnC,MAAM,SAAS,MAAM,gBACnB,OAAO,OACP;GAAE;GAAQ;EAAO,GAEjB,SAAU,QAAa;;;;;;;GAOrB,OAAO,OAAO,cAAc,OAAO,YAAY,OAAO;EACxD,GACA,MACA,QAAQ,gBAAgB,gBAAA,mBACxB,gBAAgB,KAClB;EACA,IAAI,OAAO,SAAS,GAClB,OAAO,KAAK,qEAAqE;EAGnF,OAAO,EAAE,KAAK,MAAM;CACtB;AACF;AAEA,SAAgB,iBACd,iBACA,iBACQ;CACR,MAAM,QAAQ,OAAO;CAGrB,MAAM,MAAM,WAAW,eAAe;CACtC,MAAM,MAAM,YAAY,YAAY;CACpC,MAAM,MAAM,WAAW,YAAY;CACnC,MAAM,IAAI,QAAQ,WAAW,EAAE,UAAU,MAAM,CAAC,CAAC;CACjD,MAAM,IAAI,qBAAqB;CAE/B,IAAI,OAAO,oBAAoB,YAC7B,MAAM,IAAI,eAAe;CAG3B,IAAI,OAAO,oBAAoB,YAC7B,MAAM,IAAI,eAAe;CAG3B,OAAO;AACT;AAEA,SAAgB,cAAc,QAAQ,aAAa,eAAoB;CACrE,MAAM,SAAS,QAAQ,OAAO;CAC9B,MAAM,EAAE,iBAAiB,oBAAoB;CAE7C,OAAO,IAAI,iBAAiB,MAAM,oBAAoB,QAAQ,iBAAiB,aAAa,CAAC;CAE7F,OAAO,IAAI,iBAAiB,WAAW,iBAAiB,iBAAiB,eAAe,CAAC;CACzF,OAAO;AACT;AAEA,IAAA,cAAe,OAAO,QAAQ,MAAM,SAAS,WAAW;CACtD,IAAI,gBAAgB,MAAM,UAAU,MAAM;CAC1C,IAAI,CAAC,eAAe;EAClB,MAAM,4CAA4C;EAClD,gBAAgB,aAAa,OAAO,GAAG;EACvC,OAAO,KACL;GAAE,MAAM;GAAyB,gBAAgB,gBAAgB;EAAM,GACvE,wDACF;CACF;CAEA,MAAM,SAAS,OAAO;CAEtB,OAAO,IACL,cACE,QACA;EACE,iBAAiB,KAAK,mBAAmB;EACzC,iBAAiB,YAAgB,MAAM,SAAS,MAAM;CACxD,GACA,aACF,CACF;CACA,OAAO;AACT"}