relation-matcher
v1.0.13
Published
A utility to convert table data (such as out of a SQL query) into structured JSON.
Readme
Relation Matcher
This is a utility to convert unstructured data from a database into structured relational json data.
Contents
Installation
| | Installation Command |
| ---- | --------------------------- |
| npm | npm i relation-matcher |
| yarn | yarn add relation-matcher |
| pnpm | pnpm add relation-matcher |
Usage
To use the relation matcher you feed in your data from your database and a schema. For example with drizzle:
import relationMatcher from "relation-matcher";
import db from "~/db/client";
/* Get your data from the database */
const dbData = await db.select().fro...
const data /* Output */ = relationMatcher(
dbData /* Data */,
{...} /* Schema */
);
return data;data
The data's shape should extend:
Array<Record<string, Record<string, unknown> | null>>;Example
The data could have the following type:
{
user: {
id: string;
email: string;
password: string;
...otherColumns
};
post: {
id: string;
title: string;
content: string;
author_id: string; // < Same as user.id
}
}[]schema
The schema's shape should be:
{
base: "name of table",
id: "distinct column in above table",
_yourJoinedTableName: {
base: "name of table to join",
id: "distinct column of above table",
joinsFrom: "column of parent table",
joinsTo: "column of current table",
joinType: "single" | "array"
}
}[!NOTE] Keys for joins start with an underscore; the final property key will have the leading underscore removed.
Example
With the above data, the schema's shape could be:
{
base: "user",
id: "id",
_posts: {
base: "post",
id: "id",
joinsFrom: "id",
joinsTo: "author_id",
joinType: "array",
}
}output
The outputted data will take the shape of your schema.
Example
For the data and schema provided above, the output will have the following type:
Record<
string, // The id specified in the root of your schema.
{
id: string;
email: string;
password: string;
...otherColumns;
posts: Array<
{
id: string;
title: string;
content: string;
author_id: string;
}
>;
}
>;Changelog
1.0.13
- Added readme.
1.0.12
- Fixed type issue where return type would be repeated union of expected
output.
