1.4.0 • Published 5 years ago

serializeclass v1.4.0

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

serializeclass

serializeclass

Mini library for serialize.

Install

npm install serializeclass

Example

// Code generator example.

const { fromData, toData, Import, Export } = require("serializeclass");


class ConsoleLog {
    constructor(args = []) {
        this.args = args;
    }
    compile() {
        return `console.log(${this.args.map(arg => arg.compile()).join(", ")})`;
    }

    static [Import](data, fromData) {
        return new ConsoleLog(data.map(fromData));
    }
    static [Export](consoleLog, toData) {
        return consoleLog.args.map(toData);
    }
}

class Sin {
    constructor(input) {
        this.input = input;
    }
    compile() {
        return `Math.sin(${this.input.compile()})`;
    }

    static [Import](data, fromData) {
        return new Sin(fromData(data));
    }
    static [Export](sin, toData) {
        return toData(sin.input);
    }
}

class Number {
    constructor(value) {
        this.value = value;
    }
    compile() {
        return `${this.value}`;
    }

    static [Import](data) {
        return new Number(data);
    }
    static [Export](number) {
        return number.value;
    }
}

const classes = {
    ConsoleLog,
    Sin,
    Number
}

const classLoader = (classId) => classes[classId];

const data = [
    "ConsoleLog",
    [
        [
            "Sin",
            [
                "Number",
                5
            ]
        ],
        [
            "Number",
            10
        ]
    ]
];

const consoleLog = fromData(data, classLoader);
console.log(consoleLog.compile());
consoleLog.args[0].input.value = 7;
console.log(consoleLog.compile());

with controller :

const { fromData, toData, Import, Export, controllerFromData } = require("serializeclass");


class ConsoleLog {
    constructor(args = []) {
        this.args = args;
    }

    static [Import](data, fromData) {
        return new ConsoleLog(data.map(fromData));
    }
    static [Export](consoleLog, toData) {
        return consoleLog.args.map(toData);
    }
}
class Sin {
    constructor(input) {
        this.input = input;
    }

    static [Import](data, fromData) {
        return new Sin(fromData(data));
    }
    static [Export](sin, toData) {
        return toData(sin.input);
    }
}
class Number {
    constructor(value) {
        this.value = value;
    }
    compile() {
        return `${this.value}`;
    }

    static [Import](data) {
        return new Number(data);
    }
    static [Export](number) {
        return number.value;
    }
}

class ConsoleLogCompiler {
    constructor(args = [], hasSpace = false) {
        this.args = args;
        this.hasSpace = hasSpace;
    }
    compile() {
        return `console.log(${this.args.map(arg => arg.compile()).join(`,${this.hasSpace ? " " : ""}`)})`;
    }

    static [Import](consoleLog, data = {args : []}, fromData) {
        return new ConsoleLogCompiler(data.args.map((compilerData, index) => fromData(consoleLog.args[index], compilerData)), data.hasSpace);
    }
    static [Export](consoleLogCompiler, toData) {
        return {
            args : consoleLogCompiler.args.map(toData),
            hasSpace : consoleLogCompiler.hasSpace
        };
    }
}
class SinCompiler {
    constructor(input) {
        this.input = input;
    }
    compile() {
        return `Math.sin(${this.input.compile()})`;
    }

    static [Import](sin, data, fromData) {
        return new SinCompiler(fromData(sin.input, data));
    }
    static [Export](sinCompiler, toData) {
        return toData(sinCompiler.input);
    }
}
class NumberCompiler {
    constructor(number) {
        this.number = number;
    }
    compile() {
        return this.number.value;
    }

    static [Import](number, data, fromData) {
        return new NumberCompiler(number);
    }
    static [Export](numberCompiler, toData) {
        return null;
    }
}

const codeClasses = {
    ConsoleLog,
    Sin,
    Number
};

const compilerClasses = {
    ConsoleLog: ConsoleLogCompiler,
    Sin: SinCompiler,
    Number: NumberCompiler  
};

const codeClassLoader = (classId) => codeClasses[classId];
const compilerClassLoader = (classId) => compilerClasses[classId];

const data = [
    "ConsoleLog",
    [
        [
            "Sin",
            [
                "Number",
                5
            ]
        ],
        [
            "Number",
            10
        ]
    ]
];
const compilerData = [
    "ConsoleLog",
    {
        args: [
            [
                "Sin",
                [
                    "Number",
                    null
                ]
            ],
            [
                "Number",
                null
            ]
        ]
    }
];

const consoleLog = fromData(data, codeClassLoader);
const consoleLogCompiler = controllerFromData(consoleLog, compilerData, compilerClassLoader);
console.log(consoleLogCompiler.compile());
consoleLog.args[0].input.value = 7;
console.log(consoleLogCompiler.compile());
consoleLogCompiler.hasSpace = true;
console.log(consoleLogCompiler.compile());
console.log(JSON.stringify(toData(consoleLog, codeClassLoader)));
console.log(JSON.stringify(toData(consoleLogCompiler, compilerClassLoader)));
1.4.0

5 years ago

1.3.1

5 years ago

1.3.0

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.0

5 years ago