feat: migrate readme to fastify (#2613)
* feat: migrate readme to fastify * Update readme.ts
This commit is contained in:
parent
d390a66158
commit
41475949ba
|
@ -41,6 +41,7 @@
|
||||||
"@verdaccio/store": "workspace:6.0.0-6-next.15",
|
"@verdaccio/store": "workspace:6.0.0-6-next.15",
|
||||||
"@verdaccio/tarball": "workspace:11.0.0-6-next.9",
|
"@verdaccio/tarball": "workspace:11.0.0-6-next.9",
|
||||||
"@verdaccio/utils": "workspace:6.0.0-6-next.8",
|
"@verdaccio/utils": "workspace:6.0.0-6-next.8",
|
||||||
|
"@verdaccio/readme": "workspace:11.0.0-6-next.4",
|
||||||
"abortcontroller-polyfill": "1.7.3",
|
"abortcontroller-polyfill": "1.7.3",
|
||||||
"core-js": "3.17.2",
|
"core-js": "3.17.2",
|
||||||
"debug": "4.3.2",
|
"debug": "4.3.2",
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
import buildDebug from 'debug';
|
||||||
|
import { FastifyInstance } from 'fastify';
|
||||||
|
import _ from 'lodash';
|
||||||
|
|
||||||
|
import sanitizyReadme from '@verdaccio/readme';
|
||||||
|
|
||||||
|
const debug = buildDebug('verdaccio:api:whoami');
|
||||||
|
export const NOT_README_FOUND = 'ERROR: No README data found!';
|
||||||
|
|
||||||
|
function getReadme(fastify: FastifyInstance, request: any, packageName, callback) {
|
||||||
|
fastify.storage.getPackage({
|
||||||
|
name: packageName,
|
||||||
|
uplinksLook: true,
|
||||||
|
req: request.raw,
|
||||||
|
callback: function (err, readme): void {
|
||||||
|
debug('readme pkg %o', readme?.name);
|
||||||
|
if (err) {
|
||||||
|
callback(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const parsedReadme = parseReadme(readme.name, readme.readme);
|
||||||
|
callback(null, parsedReadme);
|
||||||
|
} catch {
|
||||||
|
callback(fastify.statusCode.NOT_FOUND).send(err);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function readmeRoute(fastify: FastifyInstance) {
|
||||||
|
fastify.get('/package/readme/:packageName', async (request, reply) => {
|
||||||
|
// @ts-ignore
|
||||||
|
const { version, packageName } = request.params;
|
||||||
|
debug('readme name %s version: %s', packageName, version);
|
||||||
|
getReadme(fastify, request, packageName, (err, readme) => {
|
||||||
|
if (err) {
|
||||||
|
reply.send(err);
|
||||||
|
} else {
|
||||||
|
reply.code(fastify.statusCode.OK).send(readme);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
fastify.get('/package/readme/:scope/:packageName', async (request, reply) => {
|
||||||
|
// @ts-ignore
|
||||||
|
const { scope, packageName } = request.params;
|
||||||
|
const packageNameScope = scope ? `${scope}/${packageName}` : packageName;
|
||||||
|
debug('readme name %s', packageName);
|
||||||
|
debug('readme endpoint scope:%s pkg: %s', scope, packageName);
|
||||||
|
getReadme(fastify, request, packageNameScope, (err, readme) => {
|
||||||
|
if (err) {
|
||||||
|
reply.send(err);
|
||||||
|
} else {
|
||||||
|
reply.code(fastify.statusCode.OK).send(readme);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export default readmeRoute;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parse package readme - markdown/ascii
|
||||||
|
* @param {String} packageName name of package
|
||||||
|
* @param {String} readme package readme
|
||||||
|
* @return {String} converted html template
|
||||||
|
*/
|
||||||
|
export function parseReadme(packageName: string, readme: string): string | void {
|
||||||
|
if (_.isEmpty(readme) === false) {
|
||||||
|
debug('sanizity readme');
|
||||||
|
return sanitizyReadme(readme);
|
||||||
|
}
|
||||||
|
throw new Error('ERROR: No README data found!');
|
||||||
|
}
|
|
@ -13,6 +13,7 @@ import authPlugin from './plugins/auth';
|
||||||
import configPlugin from './plugins/config';
|
import configPlugin from './plugins/config';
|
||||||
import coreUtils from './plugins/coreUtils';
|
import coreUtils from './plugins/coreUtils';
|
||||||
import storagePlugin from './plugins/storage';
|
import storagePlugin from './plugins/storage';
|
||||||
|
import readme from './routes/web/api/readme';
|
||||||
|
|
||||||
const debug = buildDebug('verdaccio:fastify');
|
const debug = buildDebug('verdaccio:fastify');
|
||||||
|
|
||||||
|
@ -34,6 +35,7 @@ async function startServer({ logger, config }) {
|
||||||
instance.register(search);
|
instance.register(search);
|
||||||
instance.register(whoami);
|
instance.register(whoami);
|
||||||
instance.register(tarball);
|
instance.register(tarball);
|
||||||
|
instance.register(readme, { prefix: '/-/verdaccio' });
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -356,6 +356,7 @@ importers:
|
||||||
'@verdaccio/config': workspace:6.0.0-6-next.10
|
'@verdaccio/config': workspace:6.0.0-6-next.10
|
||||||
'@verdaccio/core': workspace:6.0.0-6-next.3
|
'@verdaccio/core': workspace:6.0.0-6-next.3
|
||||||
'@verdaccio/logger': workspace:6.0.0-6-next.7
|
'@verdaccio/logger': workspace:6.0.0-6-next.7
|
||||||
|
'@verdaccio/readme': workspace:11.0.0-6-next.4
|
||||||
'@verdaccio/store': workspace:6.0.0-6-next.15
|
'@verdaccio/store': workspace:6.0.0-6-next.15
|
||||||
'@verdaccio/tarball': workspace:11.0.0-6-next.9
|
'@verdaccio/tarball': workspace:11.0.0-6-next.9
|
||||||
'@verdaccio/types': workspace:11.0.0-6-next.9
|
'@verdaccio/types': workspace:11.0.0-6-next.9
|
||||||
|
@ -373,6 +374,7 @@ importers:
|
||||||
'@verdaccio/config': link:../../config
|
'@verdaccio/config': link:../../config
|
||||||
'@verdaccio/core': link:../core
|
'@verdaccio/core': link:../core
|
||||||
'@verdaccio/logger': link:../../logger
|
'@verdaccio/logger': link:../../logger
|
||||||
|
'@verdaccio/readme': link:../readme
|
||||||
'@verdaccio/store': link:../../store
|
'@verdaccio/store': link:../../store
|
||||||
'@verdaccio/tarball': link:../tarball
|
'@verdaccio/tarball': link:../tarball
|
||||||
'@verdaccio/utils': link:../../utils
|
'@verdaccio/utils': link:../../utils
|
||||||
|
|
Loading…
Reference in New Issue