1.0.1 • Published 4 years ago

composer-core v1.0.1

Weekly downloads
5
License
ISC
Repository
github
Last release
4 years ago

Composer Core

Provide a manager capable of generate classes by composing different mixins.

Each composer can be defined as a normal class which provide public methods and getter and setter for their public properties.

Memory access

All the composers can store their data using the internal memory manager.

Composer.memory;

Please, have a look at the manager documentation to learn how to use it.

create and destroy

Each composer can expose a static create method that is executed when the object is initialised, and a static destroy method that is executed when the object is disposed. You can use it to clean up memory for each specific composer.

Quick example

import 'composer-core';

// Create a test composer
class TestComposer {
    static create(data) {
        data["test"] = "testString";
    }

    get test() {
        return Composer.memory.get(this, "test");
    }
}

// Create another composer... a little bit more useful...
class EventComposer {
    static create(data) {
        data.listeners = {};
    }
    addListener(name, callback) {
        const listeners = Composer.memory.get(this, "listeners");
        if (!listeners[name]) {
            listeners[name] = [];
        }
        listeners.name.push(callback);
    }
    removeListener(name, callback) {
        const listeners = Composer.memory.get(this, "listeners");
        if (listeners[name]) {
            const index = listeners[name].indexOf(callback);
            if (index >= 0) {
                listeners[name].splice(index, 1);
            }
        }
    }
    dispatch(event, data) {
        const listeners = Composer.memory.get(this, "listeners");
        if (listeners[event]) {
            for (let callback of listeners[event]) {
                callback(data);
            }
        }
    }
}

// Create a class composing the one just created
const BaseClass = Composer.compose([TestComposer, EventComposer]);

// You can then use it to create objects or extend it to create more complex classes.
const obj = new BaseClass();

console.log(obj.test); // "testString"

obj.addListener("test", () => console.log(obj.id));
obj.dispatch("test"); // "2C3EDAC0-5764-421B-9EDF-0B953FA9C311"