@tsmetadata/json-api-orm
v1.0.2
Published
Object-relational mapping for JSON:API resource objects decorated with `@tsmetadata/json-api`.
Downloads
201
Maintainers
Readme
JSON:API ORM
@tsmetadata/json-api-orm
provides a NoSQL object-relational mapping for JSON:API resource objects decorated with @tsmetadata/json-api.
🌱 Install
npm install @tsmetadata/json-api-orm@latest
🤖 Supported Drivers
- DynamoDB (via. AWS SDK for JavaScript v3)
- To authenticate, please configure the global AWS SDK object or use environment variables.
- Table names match, by default, the resource type.
📋 Feature Set
⚙️ Usage
Actions
Get
The get(cls: new (..._: any[]) => any), id: string)
action will get the resource with the given class and id from the underlying database.
import { Resource, Id, Attribute } from '@tsmetadata/json-api';
import { get } from '@tsmetadata/json-api-orm';
@Resource('users')
class User {
@Id()
customerId: string;
@Attribute()
active: boolean;
}
const user1 = await get(User, 1);
if(user1 !== undefined) {
console.log(user1.active)
}
Put
The put(classInstance: object)
action will put (create or update) the resource from the given class instance.
import { Resource, Id, Attribute } from '@tsmetadata/json-api';
import { put } from '@tsmetadata/json-api-orm';
@Resource('users')
class User {
@Id()
customerId: string;
@Attribute()
active: boolean;
}
const user = new User();
user.id = '1';
user.active = false;
await put(user);
Include
The include(classInstance: object, relationshipKey: string, cls: new (..._: any[]) => any)
will get the full resource(s) for the given relationship.
import { Resource, Id, Attribute, Relationship, type JSONAPIResourceLinkage } from '@tsmetadata/json-api';
import { include } from '@tsmetadata/json-api-orm';
@Resource('users')
class User {
@Id()
customerId: string;
@Attribute()
active: boolean;
@Relationship('author')
posts: Post[] | JSONAPIResourceLinkage;
}
@Resource('posts')
class Post {
@Id()
postId: string;
@Attribute()
description: string;
@Relationship('posts')
author: User | JSONAPIResourceLinkage;
}
const user = await get(User, '1');
/*
user.posts is an array of `JSONAPIResourceIdentifierObject`. To turn this into an array of
`Post`, we can do the following:
*/
await include(User, 'posts', Post);
❓ FAQ
Q: Where can I learn more about JSON:API metadata decorators?
A: We have a standard library complete with serializers, deserializers, and all object types here.