viewmodeljs

0.5.2-alpha1.0.1 • Public • Published

viewmodeljs

npm NPM npm bundle size

Transform your api results to typed model objects

Intall

npm i viewmodeljs

Usage

import { Model, Record } from 'viewmodeljs'

export const Transaction = Model(
  class Transaction {
    // scalar values
    id = String
    transaction_id = String
    account_id = String
    user_id = String
    category = String
    subcategory = String
    name = String
    label = String
    keywords = String
    merchant_name = String
    amount = Number
    goal_id = String
    pending = Boolean
    hidden = Number
    istransfer = Number
    isrecurring = Number

    // complex types use Record
    account = Record({
      account_id: String,
      mask: String,
      name: String,
      official_name: String,
      type: String,
      subtype: String,
    })

    // custom parsers too
    date = (s) => new Date(s.replace('Z', ''))

    // other business logic
    isIncome() {
      return this.amount < 0
    }

    isExpense() {
      return this.amount > 0
    }

    toString() {
      return this.label || this.merchant_name
    }
  }
)

In the example, the Transaction class is wrapped with Model, which will add mixin methods for loading and transforming.

Later on, when you want to apply this model to some data:

let data = [...items]
// Convert the data to a Lazy.Sequence
let transactions = Transaction._lazy(data)
  .pluck('merchant_name')
  .filter((name) => name.startsWith('Amazon'))
  .take(5)
// Get a regular JS array
let arr = transactions.toArray()

Under the hood, when you load some data using the _lazy method, a new Lazy.js Sequence is created which chains together transform operations and only evaluates them when iterating, without creating intermediate representations. To learn more about Lazy.js, check out the docs.

When the data is iterated over (or converted to JS array) every object is converted to an instance of the model class with the corresponding field types.

TypeScript support

Sorry, no typescript support just native js types but if you are working on a typescript project you may create a *.d.ts file to export your typedefs for the model classes.

Readme

Keywords

Package Sidebar

Install

npm i viewmodeljs

Weekly Downloads

0

Version

0.5.2-alpha1.0.1

License

MIT

Unpacked Size

4.85 kB

Total Files

4

Last publish

Collaborators

  • adrian2x