js-class-namespace

0.4.0 • Public • Published

JS Class

This tool allows you to transpile namespace'd JavaScript files into native JS (ES6).

Installing

After making sure NodeJS is installed, run $ npm install -g js-class-namespace. Check the installation with $ js-class --version

Building Classes

With the CLI

Run $ js-class --source MyClass.class.js --output MyClass.js

In-code

const JSClass = require("js-class-namespace");
const fs = require("fs");

// load MyClass.class.js
let myClassFile = fs.readFileSync("MyClass.class.js").toString();
let transpiled = JSClass.transpile(myClassFile);

// save to MyClass.js
fs.writeFileSync("MyClass.js", transpiled);

Using Classes

Once built, classes are imported into a website using include.js:

<script src="https://cdn.rawgit.com/Zoweb/js-class/593755c7/browser/include.js"></script>
<script>
include("My.Library.Extensions");
include("My.Namespace.MyClass");

includes.onload = () => {
    // CLASS EXTENSION
    console.log([1,2,3,4,5].randomElement());

    // CLASS INSTANCE
    console.log(new My.Namespace.MyClass().foo);
};
</script>

Writing Classes

The class format is similar to C# and Java:

// Define the namespace
namespace My.Namespace {
    // Import other classes
    import Another.Namespace.Class;
    import Or.Library;

    // Define class
    class MyClass {
        // ... like JS classes
        constructor() {
            this.foo = "bar";
        }
    }
}

Classes can also become extensions for other classes:

namespace My.Library {
    class Extensions {
        static _EXTENSION() {
            // Here we can mark static members as extensions:
            Extensions.randomElement.markAsExtensionFor(Array);
            // would mean that we can do [].randomElement();
        }

        static randomElement() {
            // this is defined, as we are in an extension
            return this[Math.floor(Math.random() * this.length)];
        }
    }
}

Classes can also be both:

namespace My.Namespace {
    import Another.Namespace.Class;
    import Or.Library;

    class MyClass {
        static _EXTENSION() {
            MyClass.convertToMyClass.markAsExtensionFor(Object);
        }

        static convertToMyClass() {
            let class = new My.Namespace.MyClass();

            for (let key in this) {
                if (!this.hasOwnProperty(key)) continue;

                class[key] = this[key];
            }

            return class;
        }

        constructor() {
            this.foo = "bar";
        }
    }
}

Importing Classes - Important Information

Class namespaces MUST be their file structure from the file that is including the class, preceded by a src/.

For example, this would NOT WORK: A class with namespace My.Namespace in the directory ./lib/A/Namespace/. It MUST be in the directory ./src/My/Namespace/. The file including it MUST be in the directory ./.

See the below example folder structure, which is correct:

|- index.html
|- js/
 \- import.js
 |- code.js
 |- src/
  \- My/
   \- Library/
   |\- Extensions.js
   |- Namespace/
    \- MyClass.js

License

JS-Class is licensed under the MIT License. See LICENSE for more info.

Readme

Keywords

Package Sidebar

Install

npm i js-class-namespace

Weekly Downloads

1

Version

0.4.0

License

MIT

Last publish

Collaborators

  • zoweb