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

proxy-autoload

v0.1.1

Published

Classes and modules autoloading (without 'require') using EcmaScript 6 Proxy

Downloads

4

Readme

Proxy Autoload - Classes and modules autoloading (without 'require') using EcmaScript 6 Proxy

Proxy Autoload uses EcmaScript harmony proxy for supporting autoloading in your projects. Autoloading works like php class autoloading.

Usage

You should run node.js with --harmony flag!

For better understanding check our examples.

By default your files should be placed like this:

root
 └─ns
   ├─foo
   │ └─bar
   │   └─FooBar.js
   └─Baz.js

So you should name your classes like these:

ns.foo.bar.FooBar
ns.Baz

Just put similar code to your project:

require('proxy-autoload').register(['foo', 'bar'], __dirname);

So you can use all classes or modules from namespaces 'foo' and 'bar' like this:

var baz = new foo.bar.Baz();
baz.greeting();

API

register

/**
 * Adds one or several symbols to passed root symbol. These symbols will load classes or modules automatically when it's
 * necessary. It's true lazy autoloading. You should run node.js with --harmony flag, because ES6 Proxy used for that.
 * Handler provides the way to load your classes. If handler is just string then default handler with
 * passed string as root directory will be used. By default classes names begin with first letter in upper case, other
 * symbols are packages. A handler is object which contains 'isClass' and 'loadClass' methods, and can contain
 * 'onCreatePackage' (see the interface of DefaultHandler for details).
 * If rootSymbol parameter is not specified then namespaces will be added to global scope.
 * If an object passed as rootSymbol then child packages and classes will be added in this symbol
 * If string passed then symbols will be added to exports[rootSymbol] of this module, and if '.' passed then symbols
 * will be added to exports of this module.
 *
 * @param {String|Array.<String>} namespaces one or more namespaces which should support autoloading
 * @param {Object|String} handler object which provides the way to load classes
 * @param {Object|String} [rootSymbol=global] symbol which child symbols will be added to
 */
function register(namespaces, handler, rootSymbol)

DefaultHandler

/**
 * Handler implies the same files structure as following (root - is directory passed as 'path', ns - is namespace which
 * you registered the handler with):
 * root
 * └─ns
 *   ├─foo
 *   │ └─bar
 *   │   └─FooBar.js
 *   └─Baz.js
 *
 * So you should name your classes like these:
 * ns.foo.bar.FooBar
 * ns.Baz
 *
 * @param {String} path root directory for autoloading
 * @constructor
 */
function DefaultHandler(path)
{
    this.__path = path;
}

/**
 * Checks whether pckg[name] should be class (module) or package. You can validate symbol name and availability in this
 * method.
 * @param {Object} pckg parent symbol
 * @param {String} name current symbol name
 * @return {Boolean}
 */
DefaultHandler.prototype.isClass = function (pckg, name)

/**
 * Method runs after new package creating.
 * @param {Object} parent parent symbol
 * @param {String} name package name
 * @param {Object} pckg new package
 */
DefaultHandler.prototype.onCreatePackage = function (parent, name, pckg)

/**
 * Loads class for passed package and class name.
 * @param {Object} pckg parent package
 * @param {String} name class name
 */
DefaultHandler.prototype.loadClass = function (pckg, name)