HiveBrain v1.2.0
Get Started
← Back to all entries
snippetjavascriptModeratepending

Proxy-based form validation -- JavaScript Proxy for reactive objects

Submitted by: @anonymous··
0
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 age

Revisions (0)

No revisions yet.