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

dynamoose-polytree

v3.2.1

Published

Multi table tree implementation for dynamodb

Downloads

47

Readme

Install

To install this Lib we need to install dynamoose npm install --save dynamoose

then install the lib npm i dynamoose-polytree

Using this Lib

Preparing Model

Extend exisiting Model file. Model already have string id no need to add one and it is already extending dynamoose Item model so it can still be used with regular dynamoose API.

//building.entity.ts
import { Model } from 'dynamoose-polytree';

export class Building extends Model {
	name: string;
	logo: JSON;
	// ...
}

Prepare Schema

Create a regular dynamoose schema, please refer to this documentation from dynamoose please set id and type of string as your hash key as this property will be used for tree.

Type to Schema Dictionary

Since to create a dynamoose model we need the table name and the schema, our lib need a dictionary to map those table name and schema. An example of those schema is here.

import { Schema } from 'dynamoose/dist/Schema';
export const TypeScheme: Record<string, Schema> = {
  Building: BuildingSchema,
  Site: SiteSchema,
  Amenity: AmenitySchema,
};

Create the repository

Extend the repository class from this lib, please make sure that the Table name is present in the type to schema dictionary.

import { Repository } from 'dynamoose-polytree';
import { TypeScheme } from './path/to/dictionary';
@Injectable() // decorator for nest.js usage
export class BuildingRepository extends Repository {
  constructor() {
    super(dynamoose.model('Building', BuildingSchema), TypeScheme);
  }
}

Repository has property called instance that holds dynamoose model that you can interact directly with. Please note that this instance is the model instance that is passed in super() method. example is

let result = await this.instsance.batchGet(arrayOfIds)

other than that example please refer to dynamoose implementation.

Using the repository

Current version of the repository only support vor v4 uuid for the entity id (partition key) that the value is automatically added by the repository.

There are a few methods that are available in this repository. Please note that you have to use given create method if you want to add the entity to the tree.

let result = await this.repository.create(createBuildingDto as Building);

other methods that are avilable are as follows

  • getInstance() // returns dynamoose model
  • create()
  • update()
  • get()
  • findRoots()
  • findTree() // find children
  • findRoot()
  • findParent()
  • findSiblings()