A Laravel(ish) Resource/Transformer in javascript.
My basic attempt at javascript data transformation, resources.js
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 Fractal and now Laravels own Eloquent Resources. 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.
Update:
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 npmjs page for its readme.
Conclusion
I love writing javascript. It’s fun. I hope sharing will help provide some feed back so please let me know your opinions.