/WesyerJS

Automate all your tasks

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

WesyerJS

WesyerJS is a NodeJS tool that permit you to automatize all of your tasks. It permits to perform operations on files and write the result in other files.

How to install

To install WesyerJS, you first need to install the NodeJS Package Manager (npm).

Then, type the following command in your terminal :

npm install wesyer-js -g

NOTE : The -g argument installs WesyerJS globally. This permits to use WesyerJS everywhere and access to the 'wy' command.

How to use

All of these commands needs to have installed WesyerJS globally with -g argument

Step 1 - Create a project

WesyerJS works only on projects. To create a project, use the following command :

wy init my-project
cd my-project

NOTE : Replace my-project by your project's name

You will be asked about informations :

Property Optionnal What is it ?
description true The description of your project
author true The author of the project
license true The license of the project
verbose false Choose if WesyerJS has to say you all about errors (development)
server port false If you choose to create a local server to test your pages, the port to use
root file false The file to deliver to the client when he asks for the root page (/)
encoding false The encoding of all files in your project
server encoding false The file encoding for the server's pages
server verbose false Make the server verbose

NOTE : Hold Return (or Entrée) key will set the default value to the asked property (this value is written in green)

If you perform a ls -a on this new directory, you can see that one folder and one file has been created.

First, the folder .wesyer contains files required by WesyerJS to works. Don't touch to this folder !!!

There is also a taskfile.js file, which contains the following content :

// Wesyer task file

var config = {
    "description": "",
    "author": "",
    "license": "Apache 2.0",
    "modules": {
        "repository": "https://wesyerjs.olympe.in/modules"
    },
    "verbose": "false",
    "server": {
        "port": 8080,
        "rootFile": [
            "index.html"
        ],
        "encoding": "utf-8",
        "templates": {},
        "verbose": "false",
        "mime-types": {}
    }
};

Step 2 - Create a task

To use WesyerJS, you need to create a task. For that, open the taskfile.js file in your favorite code editor, and add the following content at the end of the file :

Wesyer.task('default', function() {
  console.log('This task works great !');
});

And type in your terminal :

wy

If you see a message This task works great ! in your console, then all works great !

Explanations

We have created a task by using Wesyer.task() function. This function requires two parameters : the name of the task, and the callback. To run a task, you have to type wy <taskname> in your terminal. But if you don't type a task name, the default task will be runned.

Step 3 - Download a module

Now, we will use modules. But first, you need to download one :

wy install test-module

If it exists on the server, it will be downloaded.

NOTE : If you want to use an other server, change the URL in config['modules']['repository'] When you download a module, the final URL is <server-url>/<module-name>/archive.zip (example : https://wesyerjs.olympe.in/modules/test-module/archive.zip)

The module will be downloaded as a ZIP archive in .wesyer/archive.zip and will be extracted in folder .wesyer/<module-name>.

WARNING : Do NOT download two modules at the same time ! This can corrupt project directory or do dangerous things !

The test-module module is now downloaded on the .wesyer folder !

Step 4 - Use our new module

I've said at the beginning that WesyerJS works on files. Now, I say that modules permit to works on these files. And we'll test that.

In fact, the module we've downloaded permit to replace the __FILE__ text on all files by the file path.

First, create a folder src and a folder out in your project directory. Create into a file named test.txt in the src folder, with the following content :

The relative path of this file is : __FILE__

Save it.

Then, edit the default task (in taskfile.js) and replace it content with this :

Wesyer.task('default', function() {
  Wesyer
    .for('src/*')
    .pipe('test-module')
    .out('out/', {root: true})
});

Explanations

To work on files, you need to say it to WesyerJS. The for command permits to select files. The pipe command permits to pass the file to a module (here, the module we've downloaded before). And the out command permits to write the result of the work in a directory. This last function is a little bit complicated than others :

  • We've choosed to works on all files in the src folder
  • We've piped them with the test-module module
  • We want to write these files on the out folder

If you don't pass the {root: true} object to the command, WesyerJS will try to write our test.txt file on this path : out/src/test.txt The {root: true} argument say to WesyerJS "Write these files at the root of the output directory !" So our file will be to out/test.txt

Now, run the task by running wy in your terminal.

If you see a file named test.txt appear in the out folder, then all works great ;-) !

Open this new file. The content is now :

The relative path of this file is : src/test.txt

Enjoy !

Step 5 - Create a module

You perhaps want to do other things that replace __FILE__ by a path in all of your files !

So, let's see how to create a new module. Our module will replace the author by ME in all files (that's for the example)

First, use the following command :

cd ..
wy create-module my-module
cd my-module

NOTE : I don't describe it the asked properties of the module because they are very simples.

Open the package.json file. It contains the following content :

{
    "files": [
        "index.js"
    ],
    "name": "my-module",
    "description": "A simple test module for the WesyerJS tutorial",
    "author": "Clément Nerma",
    "main": "index.js",
    "license": "Apache 2.0",
    "version": "0.1.0"
}

The files field contains all files that your module will use. The main field indicates what is the main file of your module.

Now, open the index.js file. It is empty. But we will write it ;-) !

You can check out the WesyerJS API to learn what you can do on files (see the Wesyer.Files section)

So, let's code ! Write the following content in index.js :

return input.apply(function(content) {
	return content.replace(/the author/g, 'ME');	
});

Simple, isn't ?

input is an instance of Wesyer.File that represents the input file (such as src/my-test-file.txt). This is always a single file.

The apply function permits to get the content of the file and perform operations on. We've replaced all the author by me in this content, and we've returned it. The returned content will in fact overwrite the old file content.

Our module is now ready to be used in a project !

Now, let's see how to build it. Type in your terminal :

wy build-module

This will create a ZIP file that contains your module. All files contained in this ZIP are in the files field in package.json, and this last file has been added to the group !

Step 6 - Install a local module

Now, return to your project

cd ../my-project

And install our new module :

wy install my-module --local ../my-module/my-module.zip

A my-module folder will be created in the .wesyer directory. That's all ! You can now use the my-module module in your tasks !

License

This project is under the GNU GPL license terms.

Wiki

Let's see the wiki ! You can find it at https://github.com/ClementNerma/WesyerJS/wiki

Disclaimer

The software is provided "as is" and the author disclaims all warranties with regard to this software including all implied warranties of merchantability and fitness. In no event shall the author be liable for any special, direct, indirect, or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of this software.