Skip to content

class-transformer-extra contains methods that's aren't included in the class-transform package.

License

Notifications You must be signed in to change notification settings

buka-lnc/npm.class-transformer-extra

Repository files navigation

@buka/class-transformer-extra

version downloads dependencies license Codecov

@buka/class-transformer-extra contains methods that's aren't included in the class-transformer package.

Install

npm install @buka/class-transformer-extra class-transformer
# OR
yarn install @buka/class-transformer-extra class-transformer
# OR
pnpm install @buka/class-transformer-extra class-transformer

Usage

String

method before transformer after transformer
@Split(",") "a,b,c" ["a", "b", "c"]
@Trim() " abc " "abc"
@ToString({ optional: true }) 123 "123"
@ToLowerCase() "ABC" "abc"
@ToUpperCase() "abc" "ABC"
@Replace("-", "_") "a-b-c" "a_b_c"

@Split, @Trim, @ToLowerCase, @ToUpperCase and @Replace will do nothing if the value isn't string. When set optional: true, undefined will not be transformed.

Date

method before transformer after transformer
@ToDate({ optional: true }) "2024-01-01" new Date("2024-01-01")
@FormatDate("YYYY/MM/DD", { optional: true }) "2024-01-01" "2024/01/01"

Number

method before transformer after transformer
@ToNumber({ optional: true }) "123" 123
@ToBigInt({ optional: true }) "123" 123n

ToNumber() and @ToBigInt() will return NaN if the value isn't number

Boolean

method before transformer after transformer
@ToBoolean() 1 true

ToBoolean() has multiple parameters to adapt to different needs, examples:

ToBoolean(v => Boolean(v)), { optional: true }): If the value is undefined, do nothing. Otherwise, v => Boolean(v) will be used to transform value.

ToBoolean(['0', 'false', false], { optional: true }):

If the value is '0' or 'false' or false, transform to false, and if the value is undefined, do nothing, otherwise value will be transform to true.

Array

method before transformer after transformer
@Filter((num: number) => num > 3) [1,2,3.4,5] [4,5]
@Flatten() [1, [2, [3, 4, [5]]]] [1,2,3,4,5]
@Uniq() [1,1,2,3,4,4,5] [1,2,3,4,5]
@UniqBy(Math.abs) [-1, 1, 2, 3, -3] [-1, 2, 3]

@Filter, @Flatten, @Uniq and @UniqBy will do nothing if the value isn't array.

Contribute

If you want to report bug or add new decorators, please submit an Issue or Pull Request.

Q&A

  1. Why can't it be used with the @IsOptional decorator?

    The latest version of class-validator@^0.14.1 is not set metadata that can identify @IsOptional. If the identifiers are added in later versions, I will also follow up. And the identifier had be add in develop branch of class-validator.