Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@corefunc/class-fillable-dto

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@corefunc/class-fillable-dto

Fillable DTO with validation

  • 1.2.7
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
31
decreased by-35.42%
Maintainers
1
Weekly downloads
 
Created
Source

Class Fillable DTO

Class Fillable DTO with validation functionality. 🟩 NodeJS only.

Example

Minimal implementation

class MyCoolDto extends FillableDto {
  public shouldDisplayMessage: boolean;
}

Strips unnecessary properties

const INCLUDE_KEYS: ReadonlyArray<keyof IMyCoolDto> = [
  'shouldDisplayMessage',
] as const;

class MyCoolDto extends FillableDto implements IMyCoolDto {
  public readonly shouldDisplayMessage: boolean;

  public constructor(attributes: Partial<IMyCoolDto>) {
    super(attributes, INCLUDE_KEYS);
  }
}

const myCoolDto = new MyCoolDto({
  shouldDisplayMessage: false,
  thisPropertyWillBeStripped: true,
});

Default values

const DEFAULT_VALUES: Readonly<IMyCoolDto> = {
  shouldDisplayMessage: false,
} as const;

class MyCoolDto extends FillableDto implements IMyCoolDto {
  public readonly shouldDisplayMessage: boolean;

  public constructor(attributes: Partial<IMyCoolDto>) {
    super(attributes, undefined, DEFAULT_VALUES);
  }
}

DO NOT SET DEFAULT VALUES IN CLASS PROPERTIES!!!

Attributes argument passed to the constructor will be overwritten with a class property default value.

const DEFAULT_VALUES: Readonly<IMyCoolDto> = {
  shouldDisplayMessage: false,
} as const;

class MyCoolDto extends FillableDto implements IMyCoolDto {
  public readonly isActive: boolean = false; // 🛑✋⚠️ No!!!
  public readonly shouldDisplayMessage: boolean;

  public constructor(attributes: Partial<IMyCoolDto>) {
    super(attributes, undefined, DEFAULT_VALUES);
  }
}

const myCoolDto = new MyCoolDto({
  isActive: true,
  shouldDisplayMessage: false,
});

// `false` as in class property default declaration
console.log(myCoolDto.isActive); // false

Fillable DTO Enterprise Edition

interface IMyCoolDto {
  shouldDisplayMessage: boolean;
}

const INCLUDE_KEYS: ReadonlyArray<keyof IMyCoolDto> = [
  'shouldDisplayMessage',
] as const;

const DEFAULT_VALUES: Readonly<IMyCoolDto> = {
  shouldDisplayMessage: false,
} as const;

class MyCoolDto extends FillableDto implements IMyCoolDto {
  public readonly shouldDisplayMessage: boolean;

  public constructor(attributes: Partial<IMyCoolDto>) {
    super(attributes, INCLUDE_KEYS, DEFAULT_VALUES);
  }
}

Methods

Declaration
import { IsBoolean } from 'class-validator';

class MyCoolDto extends FillableDto implements IMyCoolDto {
  @IsBoolean()
  public readonly shouldDisplayMessage: boolean;

  public constructor(attributes: Partial<IMyCoolDto>) {
    super(attributes, INCLUDE_KEYS, DEFAULT_VALUES);
  }
}
Initialization
const attributes = { shouldDisplayMessage: true };
const includeKeys = ["isActive", "shouldDisplayMessage"];
const defaults = { isActive: true };

const myCoolDto = new MyCoolDto(attributes, includeKeys, defaults);

// re-assing everithing
myCoolDto.assign(attributes, includeKeys, defaults);
Factory Methods
const myCoolDtoFromJSON = MyCoolDto
  .fromJSON(`{"shouldDisplayMessage":true}`);

const myCoolDtoFromObject = MyCoolDto
  .fromPlain({ shouldDisplayMessage: true });
Validation
const isValid = myCoolDto.isValid(true); // silent
myCoolDto.isValid(false); // throws error
const error: null | string = myCoolDto.getError();
const errors: string[] = myCoolDto.getErrors();
Serialization
myCoolDto.toJSON(); // creates plain object clone
myCoolDto.toObject(); // creates plain object clone
myCoolDto.toString(); // object packed in JSON string
Immutability
myCoolDto.lock(); // prevents further modifications

Utilities

validateInstance
import { validateInstance } from '@corefunc/class-fillable-dto';

// Empty array if there is no errors.
validateInstance(new ClassName());

// ['Provided value is not an object. Value is [null].']
validateInstance(null);

See also

💾 My other projects

Open Source

Keywords

FAQs

Package last updated on 22 Sep 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc