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

adonis-lodge

v1.0.1

Published

Lodge is a namespacing library for node/io js. It let you register modules inside your directories under a given namespace.

Downloads

8

Readme

Lodge

Lodge is a namespacing library for node/io js. It let you register modules inside your directories under a given namespace.

Why namespacing ?

As Es6 is taking place into our repositories and javascript on the server needs to be more organized , we should namespace our es6 classes to maintain isolated references to each module inside the application.

How it works

Simply autoload es6 classes inside your directories, give them a unique namespace and while consuming do not require them as node modules instead resolve them from Ioc container

Example ( project structure )

├── app/
│ ├── controllers/
│ │ ├──  UserController.js
│── server.js

Namespacing controllers

const Lodge = require("adonis-lodge");
// register controllers under App/Controllers namespace
Lodge.namespace("App/Controllers").register(__dirname + '/app/controllers');

// get UserController instace
let UserController = yield Lodge.resolve("App/Controllers/UserController")

In above example we autoloaded all files inside app/controllers method and registered them with a unique namespace to avoid name collisions.

Next we can get the instance of the class as a es6 generator and can call any methods registered inside class.

DI ( Dependency Injection )

DI auto resolves your classes dependencies and inject them into your constructors.

class UsersService{
    *getUsers(){
        return yield some_db_method()
    }
}

class UsersController{
    static get inject(){
        return ["UsersService"];
    }
    constructor(UsersService){
        this.usersService = UsersService
    }
    *list(){
        return yield this.usersService.getUsers()
    }
}

DI is combination of constructor method and inject property. First we inject our dependencies using a static method and next we consume them inside our constructor in same order.

Not only it makes things more readable and object oriented , it makes testing easier by mocking constructor arguments.

Using identifiers

Namespacing identifiers gives identifiers to a directory, making resolve process a little easier. Let's take our first example of registering controllers under a namespace but this time with the help of identifiers

const Lodge = require("adonis-lodge");
// register controllers under App/Controllers namespace
Lodge.identifier("controllers").namespace("App/Controllers").register(__dirname + '/app/controllers');

// get UserController instace
let UserController = yield Lodge.under("controllers").resolve("UserController")

I hope you can notice the change , now while resolving module/class we do not have to enter the full namespace, as we can easily resolve the class name directly using identifiers.

Api methods

const Lodge = require("adonis-lodge");
Lodge
    .identifier()  // give identifier to directory going to be registered
    .namespace()   // use a unique namespace
    .register()    // directory to register

Lodge
    .under()      // identifier namespace to use
    .resolve()    // resolve binding from Ioc container
    
Lodge
    .list()       // dump list of all bindings
    
Lodge
    .clear()      // clear all old bindings