Nutella Pancake Machine

    This package has been deprecated

    Author message:

    no longer supported


    0.0.9 • Public • Published


    Enhances JavaScript constructors to automatically provide unique keys for all generated instances and automatically provides JSON restore capability based on the key.

    Build Status Codacy Badge Test Coverage


    Compatible with Chrome, Firefox, and Node.js. Due to lack of built-in standards support IE, Edge, and Safari are not currently supported. Compatibility tests sponsored by


    npm install iKeyed


    .scope - A lookup object using constructor names as properties and constructors as values, i.e. {constructorName1: constructor1,...}.

    Enhancing Classes: iKeyed(constructor,keyProperty="@key")

    Constructors for classes enhanced with iKeyed will produce instances that have a unique key of the form:

    @<uuid 4>, e.g. TestClass@049093f0-7111-4a9e-af3c-ae58116ec25f

    Enhancing a class will add a constructor to iKeyed.scope. It will also add a virtual property, .instances, to the Proxy for the constructor. This is a lookup object using object unique keys as properties and instances of the iKey enhanced class as values, i.e. {: ,...}.


    constructor = iKeyed(constructor);
    var instance = new constructor();


    var myvar = iKeyed(constructor);
    var instance = new myvar();

    In the above examples, the instance will be added to constructor.instances or myvar.instances respectively.


    constructor - A named class constructor. Anonymous constructors are not supported.

    keyProperty - The property to add to all instances.

    Return Value

    Returns a Proxy.

    Restoring Instances .fromJSON(object,scope[,keyProperty])

    iKeyed enhanced classes can restore plain Objects to instances of the appropriate class. If there is no key in the object at the root level, then it is assumed an instance of the restoring class is needed and a key will be generated. For nested classes, objects lacking keys remain direct instances of Object. If there is a key in the root object or nested object, then the key will be analyzed and if the appropriate class constructor is in scope that constructor will be called. This allows nested objects to be restored with a single call. If no constructor is available, a direct instance of Object will be restored.

    Note: To be restorable an object MUST support a zero argument constructor or its own restore method. This is because the ECMA spec provides no means to intercept Object.create and iKeyed must use a constructor internally in case the class being restored has also been proxied. As far as we know, there is no way to intercept Object.create on an function rather than the function's prototype.

    scope is of the form: {<constructor name>:<constructor>,...}

    keyProperty is optional and defualts to the value provided when iKeyed(<constructor>,<keyProperty>) was called.

    Restoring a class will add it to .instances.


    Person = iKeyed(Person);
    Pet = iKeyed(Pet);
    var person = iKeyed(constructor).restore({name: "joe",pet:{"@key":"Pet@@049093f0-7111-4a9e-af3c-ae58116ec25f"}});


    object - An object to restore.

    scope - An optional scope object of the form {constructorName1: constructor1,...}

    Return Value

    Returns an object than is an instance of the restorer, unless the object to restore was keyed as a different class, in which case an instance of that class if the constructor was in scope, otherwise a plain Object.

    Release History

    2016-07-29 v0.0.7 - Reworked object creation for classes that do not have their own toJSON method. Existing code created two objects in some situations.

    2016-07-21 v0.0.6 - Renamed restore to fromJSON.

    2016-07-21 v0.0.5 - Made so keyProperty argument to constructor can be a function.

    2016-07-08 v0.0.4 - Updated dependencies.

    2016-07-08 v0.0.3 - More documentation.

    2016-07-07 v0.0.2 - Added documentation, build automation and quality controls.

    2016-06-23 v0.0.1 - Initial public release.

    License - MIT


    npm i iKeyed

    DownloadsWeekly Downloads






    Last publish


    • anywhichway