2.3.1 • Published 1 year ago

prop-proxy v2.3.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Prop-Proxy

Proxy for class properties

npm version unpkg install size

Prop-Proxy allows you to intercept getters and setters of class attributes through decorators

Installation

This package need to be used with Typescript

npm install prop-proxy --save
yarn add prop-proxy

Configuration

You need to enable in tsconfig.json:

{
  "compilerOptions": {
    {
        "experimentalDecorators": true, 
        "emitDecoratorMetadata": true
    }
}

Usage

Using proxy for interception

import { usePropertyProxy } from 'prop-proxy'

interface Struct {
    title: string;
    isActive: boolean;
}

const { Property, proxy } = usePropertyProxy<Struct>();

class Category implements Struct {
    @Property()
    title!: string;

    @Property()
    isActive!: boolean;

    constructor({title, isActive}: Struct){
        Object.assign(this, {title, isActive})
    }
}

//getter intercept
proxy.getTitle((value) => `other_${value}`)

//setter intercept
proxy.setIsActive(({setValue, value}) => setValue(true));

const category = new Category({title: 'title', isActive: false})

console.log(category.title) // output: other_title

console.log(category.isActive) // output: true

Using validator with class-validator

import { usePropertyProxy } from 'prop-proxy'
import { Length } from 'class-validator'

interface Struct {
    title: string;
    isActive: boolean;
}

const { Property, Validate } = usePropertyProxy<Struct>();

@Validate()
class Category implements Struct {
    @Property()
    @Length(0, 10)
    title!: string;

    @Property()
    isActive!: boolean;

    constructor({title, isActive}: Struct){
        Object.assign(this, {title, isActive})
    }
}

const category = new Category({title: 'title longer than 10 characters', isActive: true})

// output: an error is thrown, as the title length cannot be greater than 10 characters, according to schema.

The error is thrown both for values ​​sent by the constructor and for those modified by the Class instance.

Using validator with zod

import { usePropertyProxy } from 'prop-proxy'
import { z } from 'zod'

interface Struct {
    title: string;
    isActive: boolean;
}

const SchemaCategory: z.ZodType<Struct> = z.object({
    title: z.string().max(10),
    isActive: z.boolean(),
})

const { Property, Validate } = usePropertyProxy<Struct>();

@Validate(SchemaCategory)
class Category implements Struct {
    @Property()
    title!: string;

    @Property()
    isActive!: boolean;

    constructor({title, isActive}: Struct){
        Object.assign(this, {title, isActive})
    }
}

const category = new Category({title: 'title longer than 10 characters', isActive: true})

// output: an error is thrown, as the title length cannot be greater than 10 characters, according to schema.

The error is thrown both for values ​​sent by the constructor and for those modified by the Class instance.

Using validator with yup

import { usePropertyProxy } from 'prop-proxy'

import { object, string, boolean } from 'yup';

interface Struct {
    title: string;
    isActive: boolean;
}

const SchemaCategory = object({
  title: string().required().max(10),
  isActive: boolean().required(),
});

const { Property, Validate } = usePropertyProxy<Struct>();

@Validate(SchemaCategory)
class Category implements Struct {
    @Property()
    title!: string;

    @Property()
    isActive!: boolean;

    constructor({title, isActive}: Struct){
        Object.assign(this, {title, isActive})
    }
}

const category = new Category({title: 'title longer than 10 characters', isActive: true})

// output: an error is thrown, as the title length cannot be greater than 10 characters, according to schema.

The error is thrown both for values ​​sent by the constructor and for those modified by the Class instance.

License

MIT Free Software, Yeah!

2.3.0

1 year ago

2.3.1

1 year ago

2.2.9

1 year ago

2.2.8

1 year ago

2.2.1

1 year ago

2.1.2

1 year ago

2.2.0

1 year ago

2.0.2

1 year ago

2.2.3

1 year ago

2.1.4

1 year ago

2.2.2

1 year ago

2.1.3

1 year ago

2.2.5

1 year ago

2.2.4

1 year ago

2.2.7

1 year ago

2.2.6

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago