-
Notifications
You must be signed in to change notification settings - Fork 0
createParameterDecorator
awekrx edited this page May 29, 2026
·
1 revision
import { createParameterDecorator } from '@dev-suite/decorators/createParameterDecorator'
core
Build reusable parameter decorators that transform/validate one argument.
- Manual parameter-index descriptor surgery
- Repeated per-parameter plumbing
function trimParam() {
return function (target: object, key: string | symbol, index: number) {
const descriptor = Object.getOwnPropertyDescriptor(target, key)!;
const original = descriptor.value as (...args: unknown[]) => unknown;
descriptor.value = function (...args: unknown[]) {
if (typeof args[index] === 'string') args[index] = (args[index] as string).trim();
return original.apply(this, args);
};
Object.defineProperty(target, key, descriptor);
};
}import { createParameterDecorator } from '@dev-suite/decorators/createParameterDecorator';
const trimParam = () =>
createParameterDecorator({
wrap: ({ value, invoke }) => {
const next = typeof value === 'string' ? value.trim() : value;
return invoke(next);
},
});- Centralizes cross-cutting behavior.
- Method/class/property code stays focused on domain logic.
function requiredParam() {
return function (target: object, key: string | symbol, index: number) {
const descriptor = Object.getOwnPropertyDescriptor(target, key)!;
const original = descriptor.value as (...args: unknown[]) => unknown;
descriptor.value = function (...args: unknown[]) {
if (args[index] == null) throw new Error('required');
return original.apply(this, args);
};
Object.defineProperty(target, key, descriptor);
};
}import { createParameterDecorator } from '@dev-suite/decorators/createParameterDecorator';
const requiredParam = () =>
createParameterDecorator({
before: ({ value }) => {
if (value == null) throw new Error('required');
},
});- Second scenario reuses same policy without duplication.
- Behavior is more consistent and easier to audit.