snippetjavascriptModeratepending
Proxy-based form validation -- JavaScript Proxy for reactive objects
Viewed 0 times
ProxyhandlertrapgetsetReflectvalidation
browsernodejs
Problem
Need to intercept property access and assignment on objects for validation, logging, caching, or reactivity without wrapping every property in getters/setters manually.
Solution
Use JavaScript Proxy to intercept get/set/delete operations transparently. The target object is unmodified.
Code Snippets
Proxy-based object validation
function validated(target, schema) {
return new Proxy(target, {
set(obj, prop, value) {
const rule = schema[prop];
if (rule && !rule(value)) {
throw new TypeError(`Invalid value for ${prop}: ${value}`);
}
return Reflect.set(obj, prop, value);
},
get(obj, prop) {
if (!(prop in obj)) {
throw new ReferenceError(`Unknown property: ${prop}`);
}
return Reflect.get(obj, prop);
},
});
}
const user = validated(
{ name: '', age: 0, email: '' },
{
age: v => Number.isInteger(v) && v >= 0 && v <= 150,
email: v => typeof v === 'string' && v.includes('@'),
}
);
user.age = 25; // OK
// user.age = -1; // TypeError: Invalid value for ageRevisions (0)
No revisions yet.