A Laravel(ish) Resource/Transformer in javascript.

My basic attempt at javascript data transformation, resources.js

Will Bowman
Apr 1, 2018 · 2 min read
check out the npm package,

We‘ve gone serverless at work and we’re using my favorite, nodejs! That means a lot of javascript.

I’ve been using callbacks to transform my results but I’ve become accustomed to and now Laravels own . I like having a “view layer” for my responses, it makes things a lot easier to modify months later.

I don’t need all the features, just basic transformation, so the script is pretty slim.

Resources are defined nearly the same as Laravel.

class UserResource extends Resource {
toArray() {
return {
id: Number(this.id),
name: this.name,
email: this.email,
posts: PostResource.collection(this.posts),
created_at: this.created_at,
updated_at: this.updated_at,

You even execute it nearly the same.

// Collections are static
const collection = UserResource.collection(data);
// Single items are not
const single = new UserResource(data[0]).exec();

Is it the same? Not at all, Laravel and Fractal actually do a bit more. I’m in the market for something similar but simpler, if you are too maybe this will be of use.

It would be nice to have more features, use a process method and the filter for even more options. We’ll see where it goes.


By default your results will be wrapped in a data key. You can disable this by passing the second parameter as false.

new UserResource({...}, false).exec()
UserResource.collection(data, false)

You can now pass a paginated object to collection, the data field is required for parsing. The rest of your fields will be merged with the results.

A full example

I’ve made this a package instead, check out the .


I love writing javascript. It’s fun. I hope sharing will help provide some feed back so please let me know your opinions.


A day-to-day log of the questions we’ve asked & the answers we’ve found.

Will Bowman

Written by

Web Developer Since 1998



A day-to-day log of the questions we’ve asked & the answers we’ve found.