0
Fork 0
mirror of https://github.com/verdaccio/verdaccio.git synced 2025-01-27 22:59:51 -05:00

connect storage with fastify server as decorator (#2299)

* connect storage with fastify server as decorator

* remove dep
This commit is contained in:
Juan Picado 2021-06-13 22:03:09 +02:00 committed by GitHub
parent 8ca5fe6d26
commit 09a7cf3456
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 67 additions and 12 deletions

View file

@ -42,7 +42,7 @@ export class NewServer extends Command {
process.title = web?.title || DEFAULT_PROCESS_NAME; process.title = web?.title || DEFAULT_PROCESS_NAME;
// const { version, name } = require('../../package.json'); // const { version, name } = require('../../package.json');
const ser = await server({ logger }); const ser = await server({ logger, config: configParsed });
await ser.listen(4873); await ser.listen(4873);
} catch (err) { } catch (err) {
console.error(err); console.error(err);

View file

@ -19,7 +19,7 @@ const debug = buildDebug('verdaccio:fastify:debug');
logger.info(`config location ${configFile}`); logger.info(`config location ${configFile}`);
debug('configParsed %s', configParsed); debug('configParsed %s', configParsed);
process.title = 'fastify-verdaccio'; process.title = 'fastify-verdaccio';
const ser = await server({ logger }); const ser = await server({ logger, config: configParsed });
await ser.listen(4873); await ser.listen(4873);
logger.info('fastify running on port 4873'); logger.info('fastify running on port 4873');
} catch (err) { } catch (err) {

View file

@ -34,14 +34,16 @@
"access": "public" "access": "public"
}, },
"dependencies": { "dependencies": {
"@verdaccio/config": "workspace:6.0.0-6-next.7",
"@verdaccio/auth": "workspace:6.0.0-6-next.9",
"@verdaccio/logger": "workspace:6.0.0-6-next.4", "@verdaccio/logger": "workspace:6.0.0-6-next.4",
"@verdaccio/store": "workspace:6.0.0-6-next.10",
"debug": "4.3.1",
"fastify": "3.15.1", "fastify": "3.15.1",
"fastify-plugin": "3.0.0", "fastify-plugin": "3.0.0"
"debug": "4.3.1"
}, },
"devDependencies": { "devDependencies": {
"@verdaccio/types": "workspace:11.0.0-6-next.7", "@verdaccio/types": "workspace:11.0.0-6-next.7",
"@verdaccio/config": "workspace:6.0.0-6-next.7",
"ts-node": "9.1.1" "ts-node": "9.1.1"
}, },
"scripts": { "scripts": {

View file

@ -1,8 +1,13 @@
/* eslint-disable no-console */
/* eslint-disable no-invalid-this */
import { logger } from '@verdaccio/logger'; import { logger } from '@verdaccio/logger';
async function pingRoute(fastify) { async function pingRoute(fastify) {
fastify.get('/-/ping', async () => { fastify.get('/-/ping', async () => {
logger.http('ping endpoint'); logger.http('ping endpoint');
// @ts-ignore
console.log('-storage->', fastify.storage);
console.log('-config->', fastify.config);
return {}; return {};
}); });
} }

View file

@ -0,0 +1,9 @@
import { Storage, IStorageHandler } from '@verdaccio/store';
export async function storageService(fastify, opts, done) {
const { config, filters } = opts;
const storage: IStorageHandler = new Storage(config);
await storage.init(config, filters ?? {});
fastify.decorate('storage', storage);
done();
}

View file

@ -1,14 +1,36 @@
import { Config as IConfig } from '@verdaccio/types';
import { Config as AppConfig } from '@verdaccio/config';
import fastify from 'fastify'; import fastify from 'fastify';
import buildDebug from 'debug'; import buildDebug from 'debug';
import fp from 'fastify-plugin';
import ping from './endpoints/ping'; import ping from './endpoints/ping';
import { storageService } from './plugins/storage';
const debug = buildDebug('verdaccio:fastify'); const debug = buildDebug('verdaccio:fastify');
async function startServer({ logger }) { async function startServer({ logger, config }) {
const configInstance: IConfig = new AppConfig(Object.assign({}, config));
debug('start server'); debug('start server');
const app = fastify({ logger }); const app = fastify({ logger });
app.register(ping);
app.decorate('config', configInstance);
app.register(fp(storageService), { config: configInstance });
// api
app.register((instance, opts, done) => {
instance.decorate('utility', new Map());
instance.register(ping);
done();
});
// web
app.register((instance, opts, done) => {
instance.register(ping, { prefix: '/web' });
done();
});
return app; return app;
} }

View file

@ -5,5 +5,19 @@
"outDir": "./build" "outDir": "./build"
}, },
"include": ["src/**/*"], "include": ["src/**/*"],
"exclude": ["src/**/*.test.ts"] "exclude": ["src/**/*.test.ts"],
"references": [
{
"path": "../store"
},
{
"path": "../config"
},
{
"path": "../auth"
},
{
"path": "../logger"
}
]
} }

View file

@ -5,7 +5,6 @@ import cors from 'cors';
import RateLimit from 'express-rate-limit'; import RateLimit from 'express-rate-limit';
import { HttpError } from 'http-errors'; import { HttpError } from 'http-errors';
import { Storage } from '@verdaccio/store';
import { loadPlugin } from '@verdaccio/loaders'; import { loadPlugin } from '@verdaccio/loaders';
import { Auth } from '@verdaccio/auth'; import { Auth } from '@verdaccio/auth';
import apiEndpoint from '@verdaccio/api'; import apiEndpoint from '@verdaccio/api';
@ -17,7 +16,7 @@ import webMiddleware from '@verdaccio/web';
import { ConfigRuntime } from '@verdaccio/types'; import { ConfigRuntime } from '@verdaccio/types';
import { IAuth, IBasicAuth } from '@verdaccio/auth'; import { IAuth, IBasicAuth } from '@verdaccio/auth';
import { IStorageHandler } from '@verdaccio/store'; import { Storage, IStorageHandler } from '@verdaccio/store';
import { logger } from '@verdaccio/logger'; import { logger } from '@verdaccio/logger';
import { log, final, errorReportingMiddleware } from '@verdaccio/middleware'; import { log, final, errorReportingMiddleware } from '@verdaccio/middleware';
import AuditMiddleware from 'verdaccio-audit'; import AuditMiddleware from 'verdaccio-audit';
@ -156,8 +155,8 @@ export default (async function (configHash: ConfigRuntime): Promise<any> {
(plugin: IPluginStorageFilter<IConfig>) => plugin.filter_metadata (plugin: IPluginStorageFilter<IConfig>) => plugin.filter_metadata
); );
const storage: IStorageHandler = new Storage(config); const storage: IStorageHandler = new Storage(config);
// waits until init calls have been initialized
try { try {
// waits until init calls have been initialized
await storage.init(config, filters); await storage.init(config, filters);
} catch (err) { } catch (err) {
logger.error({ error: err.msg }, 'storage has failed: @{error}'); logger.error({ error: err.msg }, 'storage has failed: @{error}');

6
pnpm-lock.yaml generated
View file

@ -428,20 +428,24 @@ importers:
packages/core/server: packages/core/server:
specifiers: specifiers:
'@verdaccio/auth': workspace:6.0.0-6-next.9
'@verdaccio/config': workspace:6.0.0-6-next.7 '@verdaccio/config': workspace:6.0.0-6-next.7
'@verdaccio/logger': workspace:6.0.0-6-next.4 '@verdaccio/logger': workspace:6.0.0-6-next.4
'@verdaccio/store': workspace:6.0.0-6-next.10
'@verdaccio/types': workspace:11.0.0-6-next.7 '@verdaccio/types': workspace:11.0.0-6-next.7
debug: 4.3.1 debug: 4.3.1
fastify: 3.15.1 fastify: 3.15.1
fastify-plugin: 3.0.0 fastify-plugin: 3.0.0
ts-node: 9.1.1 ts-node: 9.1.1
dependencies: dependencies:
'@verdaccio/auth': link:../../auth
'@verdaccio/config': link:../../config
'@verdaccio/logger': link:../../logger '@verdaccio/logger': link:../../logger
'@verdaccio/store': link:../../store
debug: 4.3.1 debug: 4.3.1
fastify: 3.15.1 fastify: 3.15.1
fastify-plugin: 3.0.0 fastify-plugin: 3.0.0
devDependencies: devDependencies:
'@verdaccio/config': link:../../config
'@verdaccio/types': link:../types '@verdaccio/types': link:../types
ts-node: 9.1.1 ts-node: 9.1.1