pera-trta

pera-trta is a simple package that provides basic functionalities for your models and collections

Usage no npm install needed!

<script type="module">
  import peraTrta from 'https://cdn.skypack.dev/pera-trta';
</script>

README

PERA-TRTA

Simple model/collection package

Version Downloads/week License dragol

PERA-TRTA is a simple package that provides basic functionalities for your models and collections.

All you gonna need to do is to extend your custom models and collections with Model and Collection, and you ready to go.

Some of the functionalities that package provide are:

  • both Model and Collection classes are heavily based on Typescript generics so IntelliSense support is given for using any of the methods implemented, see the images: img1 img2 img3
  • CLI support
  • get model property by key
  • update some properties of the model
  • update only one model property
  • store models in the collection
  • sort collection items
  • find particular item/items
  • map collection items ...

Here is the link for documentation pages.

CLI support:

Instead of manually creating all necessary files, you can use CLI command pt.

pt -a Person 
// pt --all Person will work 
// pt --all=Person will work as well

Creates person model, interface and collection files (by appropriate template), each file has suffix -model, -interface, -collection respectively.

pt -i IPerson -m Person -c PersonCollection
// pt --interface IPerson --model Person --collection PersonCollection will work
// pt --interface=IPerson --model=Person --collection=PersonCollection will work as well

Creates IPerson, Person and PersonCollection files.

Usage example:

category-props.ts

export interface ICategoryProps {
    id: number;
    name: string;
}

category-model.ts

import { ICategoryProps } from './category-props';
import { Model } from 'pera-trta';

export class CategoryModel extends Model<ICategoryProps> {}

category-collection.ts

import { CategoryModel } from './category-model';
import { ICategoryProps } from './category-props';
import { Collection } from 'pera-trta';

export class CategoryCollection extends Collection<CategoryModel, ICategoryProps> {}

index.ts

import { CategoryModel } from './category-model';
import { CategoryCollection } from './category-collection';

const cc = new CategoryCollection();
const c1 = new CategoryModel({ id: 1, name: 'pera' });
const c2 = new CategoryModel({ id: 2, name: 'trta' });
const c3 = new CategoryModel({ id: 3, name: 'pera' });

// add to collection
cc.add(c1);
cc.add([ c2, c3 ]);

// get all items from collection
console.log(cc.getAll());

// get items count
console.log(cc.getCount);

// map all collection items
cc.map((el: CategoryModel) => {
    return el.setByKey('name', el.get('name').toUpperCase());
});
console.log(cc.getAll());

// sort
cc.sortBy('id', 'desc');
console.log(cc.getAll());

// find
console.log(cc.findByKeyValue('name', 'PERA'));

// Remove - removes only first occurrence
cc.remove(c2, 'id');
console.log(cc.getAll());

cc.removeAllByKeyValue('name', 'PERA');
console.log(cc.getAll());