-
Notifications
You must be signed in to change notification settings - Fork 0
createClassDecorator
awekrx edited this page May 29, 2026
·
1 revision
import { createClassDecorator } from '@dev-suite/decorators/createClassDecorator'
core
Build reusable class decorators from lifecycle hooks.
- Custom proxy/construct boilerplate per decorator
- Inconsistent class decorator contracts
function loggedClass() {
return function <T extends new (...args: unknown[]) => unknown>(Ctor: T): T {
return new Proxy(Ctor, {
construct(target, args, newTarget) {
console.log('create', target.name, args);
return Reflect.construct(target, args, newTarget);
},
});
};
}import { createClassDecorator } from '@dev-suite/decorators/createClassDecorator';
const loggedClass = () =>
createClassDecorator({
before: ({ target, args }) => {
console.log('create', target.name, args);
},
});- Centralizes cross-cutting behavior.
- Method/class/property code stays focused on domain logic.
function measuredClass() {
return function <T extends new (...args: unknown[]) => unknown>(Ctor: T): T {
return new Proxy(Ctor, {
construct(target, args, newTarget) {
const start = Date.now();
const instance = Reflect.construct(target, args, newTarget);
console.log('ctor ms', Date.now() - start);
return instance;
},
});
};
}import { createClassDecorator } from '@dev-suite/decorators/createClassDecorator';
const measuredClass = () =>
createClassDecorator({
wrap: ({ invoke }) => {
const start = Date.now();
const instance = invoke();
console.log('ctor ms', Date.now() - start);
return instance;
},
});- Second scenario reuses same policy without duplication.
- Behavior is more consistent and easier to audit.