npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@sapientpro/typeorm-eager-load

v0.0.11-beta.3

Published

TypeORM Eager Loader is a package that provides a simple way to optimize database queries by eagerly loading data based on defined relations

Downloads

120

Readme

TypeORM Eager Loader NPM Package

The eagerLoad function allows you to load entity relations in a separate query with eager selects for all related entities over an IN operator. It provides an alternative to the default lazy loading behavior of TypeORM, which loads relations with multiple queries.

Installation

Install the package using npm:

npm install @sapientpro/typeorm-eager-load --save

Install the package using yarn:

yarn add @sapientpro/typeorm-eager-load

And configure datasource once in your application:

import { setEagerDataSource } from '@sapientpro/typeorm-eager-load';

setEagerDataSource(dataSource)

Usage

Import the eagerLoad function from the typeorm-eager-loader package:

import { eagerLoad } from '@sapientpro/typeorm-eager-load';

Then, use it to load entity relations:

const posts = await connection.getRepository(Post).findMany();
await eagerLoad(posts, ['comments.user']);

The first parameter to the eagerLoad function is an array of instances of one entity. The second parameter is an array of strings, where each string is a relation name to load.

Relation Definition

You can also use a relation definition to configure relations:

await eagerLoad(posts, {
  comments: (builder, { loadWith }) => {
    loadWith('user.roles');
  }
});

The relation definition is an object where the key is the relation name and the value is a closure that defines how to load the relation.

The closure takes two parameters:

  • builder: The query builder for the relation.
  • context: An object that provides additional options for loading the relation.

EagerContext

The context parameter of the relation definition closure is an instance of the EagerContext class. It provides additional methods for loading relations.

filter

The filter method allows you to filter the main entities (e.g., posts) by some condition:

await eagerLoad(posts, [
  {
    comments: (builder, { filter }) => {
      filter((post) => post.id % 2 === 0);
    }
  }
]);

In this example, only for posts with an even ID will comments be loaded.

loadWith

The loadWith method allows you to load nested relations:

await eagerLoad(posts, [
  {
    'comments': (builder, { loadWith }) => {
      loadWith('user.roles');
    }
  }
]);

In this example, the user and roles relations will be loaded for each comment.

lateral

You can also use the lateral method to apply a lateral join to the relation. Here's an example that uses context.lateral() to order the comments by id and limit the number of comments loaded for each post to 3:

await eagerLoad(posts, [
  {
    'comments': (builder, { lateral }) => {
      lateral((builder) => {
        builder.orderBy('comment.id', 'DESC').limit(3)
      }, 'commentCount');
    }
  }
]);

Contributing

Contributions are welcome! If you have any bug reports, feature requests, or patches, please open an issue or create a pull request.

License

This package is licensed under the MIT License.