diff --git a/packages/core/src/decorators/expose_all.ts b/packages/core/src/decorators/expose_all.ts index 2ad8e7d..8418101 100644 --- a/packages/core/src/decorators/expose_all.ts +++ b/packages/core/src/decorators/expose_all.ts @@ -11,29 +11,32 @@ interface ExposeAllOptions { nameCasing?: ExposeAllCasing; } +function getExposeMetadataOptions(propertyName: string, options: ExposeAllOptions = {}): ExposeOptions { + const exposeOptions: ExposeOptions = {}; + switch (options.nameCasing) { + case "camelCase": + exposeOptions.name = camelCase(propertyName); + break; + case "snakeCase": + exposeOptions.name = snakeCase(propertyName); + break; + } + return exposeOptions; +} + export function ExposeAll(options?: ExposeAllOptions) { - const { nameCasing } = options || {}; // eslint-disable-next-line @typescript-eslint/no-explicit-any return function (target: any) { const object = new target(); - Object.entries(object).forEach(([key]) => { - const exists = defaultMetadataStorage.findExposeMetadata(target, key); - if (exists) return; - - const options: ExposeOptions = {}; - switch (nameCasing) { - case "camelCase": - options.name = camelCase(key); - break; - case "snakeCase": - options.name = snakeCase(key); - break; - } - + Object.keys(object).forEach((propertyName) => { + const exposeMetadata = defaultMetadataStorage.findExposeMetadata(target, propertyName); defaultMetadataStorage.addExposeMetadata({ - target: target, - propertyName: key, - options + target, + propertyName, + options: { + ...getExposeMetadataOptions(propertyName, options), + ...exposeMetadata?.options + } }); }); };