0.10.0 • Published 2 years ago

ts-data-class v0.10.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

TS Data-Class

codecov

This package aims to simplify and secure data parsing and manipulation in typescript by providing auto-generated constructors, helper methods, and parsing utilities with minimal boilerplate and full intellisense support.

Every instance of the data class will automatically have:

  • A typed constructor
  • copy & copyDeep
  • parse & tryParse
  • equals

Installation

npm: npm install ts-data-class

yarn: yarn add ts-data-class

Usage

Setup

  1. Define a class T that extends DTClass<T>
  2. Define class members, marking optional with ?: and required with !:
  3. Define the parsers getter with a parser for each of the fields (full intellisense support)
  4. Use the class as you would any other but with all the data class perks and full intellisense support!
Example:
class Owner extends DTClass<Owner> {
  name!: string;
  age?: number;

  protected get parsers(): DTParsers<Owner> {
    return {
      name: (v) => Parsers.string(v) ?? "unknown name",
      age: (v) => Parsers.number(v) ?? -1,
    };
  }
}

class Cat extends DTClass<Cat> {
  numLives!: number; // required
  breed!: string; // required
  name?: string; // optional
  owner!: Owner; // required

  protected get parsers(): DTParsers<Cat> {
    return {
      numLives: (v) => (typeof v === "number" ? v : 9),
      breed: (v) => (typeof v === "string" ? v : "stray"),
      name: (v) => (typeof v === "string" ? v : undefined),
      owner: (v) => Owner.tryParse(v) ?? Owner.empty(),
    };
  } // required
}

const cat1 = new Cat({
  numLives: 8,
  name: "Whiskers",
  breed: "Bald",
  owner: new Owner({ name: "jack", age: 2 }),
});
console.log(cat1);
/**
  Cat {
    numLives: 8,
    breed: 'Bald',
    name: 'Whiskers',
    owner: Owner { name: 'jack', age: 2 }
  }
 */

const cat2 = cat1.copy({
  name: "Kitteh",
  breed: undefined,
  owner: undefined,
});
console.log(cat2);
/**
  Cat {
    numLives: 8,
    breed: 'stray',
    name: 'Kitteh',
    owner: Owner { name: 'unknown name', age: -1 }
  }
*/

const cat3 = cat2.copy({
  breed: "tiger",
  owner: cat2.owner.copy({
    name: "bobby",
  }),
});
console.log(cat3);
/**
  Cat {
    numLives: 8,
    breed: 'tiger',
    name: 'Kitteh',
    owner: Owner { name: 'bobby', age: -1 }
  }
 */
0.10.0

2 years ago

0.9.1

3 years ago

0.8.9

3 years ago

0.9.0

3 years ago

0.8.8

3 years ago

0.8.5

3 years ago

0.8.4

3 years ago

0.8.7

3 years ago

0.8.6

3 years ago

0.8.1

3 years ago

0.8.0

3 years ago

0.8.3

3 years ago

0.7.13

4 years ago

0.7.12

4 years ago

0.7.11

4 years ago

0.6.71

4 years ago

0.7.1

4 years ago

0.6.7

4 years ago

0.6.6

4 years ago

0.6.8

4 years ago

0.7.0

4 years ago

0.6.5

4 years ago

0.6.4

4 years ago

0.6.3

4 years ago

0.6.21

4 years ago

0.6.2

4 years ago

0.6.11

4 years ago

0.6.1

4 years ago

0.6.0

4 years ago

0.5.6

4 years ago

0.5.5

4 years ago

0.5.4

4 years ago

0.5.3

4 years ago

0.5.2

4 years ago

0.5.1

4 years ago

0.5.0

4 years ago

0.4.5

4 years ago

0.4.4

4 years ago

0.4.3

4 years ago

0.4.2

4 years ago

0.4.1

4 years ago

0.4.0

4 years ago

0.3.0

4 years ago

0.2.72

4 years ago

0.2.71

4 years ago

0.2.70

4 years ago

0.2.69

4 years ago

0.2.68

4 years ago

0.2.67

4 years ago

0.2.66

4 years ago

0.2.65

4 years ago

0.2.64

4 years ago

0.2.63

4 years ago

0.2.62

4 years ago

0.2.61

4 years ago

0.2.6

4 years ago

0.2.5

4 years ago

0.2.4

4 years ago

0.2.3

4 years ago

0.2.2

4 years ago

0.2.1

4 years ago

0.2.0

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.6

4 years ago

0.0.5

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago