diff --git a/example/hoth-quickstart/src/lib/calculator/index.service.ts b/example/hoth-quickstart/src/lib/calculator/index.service.ts index 8c2c8d0..81e413a 100644 --- a/example/hoth-quickstart/src/lib/calculator/index.service.ts +++ b/example/hoth-quickstart/src/lib/calculator/index.service.ts @@ -1,8 +1,11 @@ -import {Service} from '@hoth/decorators'; +import {getFastifyInstanceByAppName, Service} from '@hoth/decorators'; @Service() export default class Calculator { + + private service = getFastifyInstanceByAppName('quickstart'); + add(a: number, b: number) { - return a + b; + return a + b + this.service.$appConfig.get('test'); } -} \ No newline at end of file +} diff --git a/packages/app-autoload/src/index.ts b/packages/app-autoload/src/index.ts index 43e0af8..34b82a3 100644 --- a/packages/app-autoload/src/index.ts +++ b/packages/app-autoload/src/index.ts @@ -88,6 +88,19 @@ async function load(appConfig: AppConfig, childInstance: FastifyInstance) { ...appConfig, }); + const configProxy = { + get(property: string | string[]) { + const props = Array.isArray(property) + ? [appConfig.name, ...property] + : `${appConfig.name}.${property}`; + if (Config.has(props)) { + return Config.get(props); + } + }, + }; + + childInstance.decorate('$appConfig', configProxy); + // register app plugins const appEntryModule: FastifyPluginAsync = await loadModule(pluginAppConfig.entryPath); await appEntryModule(childInstance, {...appConfig}); @@ -114,16 +127,7 @@ async function load(appConfig: AppConfig, childInstance: FastifyInstance) { appName: appConfig.name, }); - childInstance.addHook('onRequest', onRequestFactory({ - get(property: string | string[]) { - const props = Array.isArray(property) - ? [appConfig.name, ...property] - : `${appConfig.name}.${property}`; - if (Config.has(props)) { - return Config.get(props); - } - }, - }, childInstance)); + childInstance.addHook('onRequest', onRequestFactory(configProxy, childInstance)); childInstance.addHook('preHandler', preHandlerFactory(appConfig.name)); childInstance.addHook('preHandler', loggerMiddleware); diff --git a/packages/decorators/src/index.ts b/packages/decorators/src/index.ts index eea80cc..7b5ad77 100644 --- a/packages/decorators/src/index.ts +++ b/packages/decorators/src/index.ts @@ -5,7 +5,7 @@ import 'reflect-metadata'; import type {FastifyInstance} from 'fastify'; import type {AutoLoadConfig} from 'fastify-decorators/interfaces/bootstrap-config'; -import {bootstrap as bootstrapInner} from 'fastify-decorators'; +import {bootstrap as bootstrapInner, FastifyInstanceToken} from 'fastify-decorators'; export { Controller, @@ -60,5 +60,11 @@ declare module 'fastify' { addNotice: (key: string, value: string) => void; addPerformance: (name: string, value: number) => void; } + + interface FastifyInstance { + readonly $appConfig: { + get: (property: string | string[]) => any; + }; + } }