-
Notifications
You must be signed in to change notification settings - Fork 0
createPropertyDecorator
awekrx edited this page May 29, 2026
·
1 revision
import { createPropertyDecorator } from '@dev-suite/decorators/createPropertyDecorator'
core
Build reusable property decorators for get/set behavior.
- Repeated
Object.definePropertyboilerplate - Scattered hidden-state handling code
function normalized() {
return function (target: object, key: string | symbol) {
let value: unknown;
Object.defineProperty(target, key, {
get() { return value; },
set(next) { value = typeof next === 'string' ? next.trim() : next; },
enumerable: true,
configurable: true,
});
};
}import { createPropertyDecorator } from '@dev-suite/decorators/createPropertyDecorator';
const normalized = () =>
createPropertyDecorator({
set: ({ value, setValue }) => {
setValue(typeof value === 'string' ? value.trim() : value);
},
});- Centralizes cross-cutting behavior.
- Method/class/property code stays focused on domain logic.
function readonlyAfterFirstSet() {
return function (target: object, key: string | symbol) {
let initialized = false;
let value: unknown;
Object.defineProperty(target, key, {
get() { return value; },
set(next) {
if (initialized) throw new Error('readonly');
initialized = true;
value = next;
},
});
};
}import { createPropertyDecorator } from '@dev-suite/decorators/createPropertyDecorator';
const readonlyAfterFirstSet = () =>
createPropertyDecorator({
set: ({ entry, value, setValue }) => {
if (entry.hasValue) throw new Error('readonly');
setValue(value);
},
});- Second scenario reuses same policy without duplication.
- Behavior is more consistent and easier to audit.