JSPM

js-code-generator

1.0.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 438
  • Score
    100M100P100Q85000F
  • License ISC

Programmatically generate javascript

Package Exports

  • js-code-generator

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (js-code-generator) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

CodeGenerator

Programmatically generate javascript.

Usage

npm install js-code-generator

Features

  • Handles code indentation for you while allowing you to set the number of spaces and tabs.
  • Provides helper method to generate unique names for iterator variables to make generating nested loops easier
  • consistent function arguments and return values

Example

var Generate = require("./CodeGenerator.js");

var itrVar = Generate.variable({
  name: Generate.uniqueIteratorName(),
  value: "0"
});

var code =
  Generate.forLoop({
    startCondition: `${itrVar.data.name} = 0`,
    stopCondition: `${itrVar.data.name} < 10`,
    incrementAction: `${itrVar.data.name} += 1`,
    body: function() {
      return Generate.ifStatement({
        condition: `${itrVar.data.name} % 2 == 0`,
        body: function() {
          return Generate.consoleLog(["'even'"]).code;
        }
      }).code
    }
  }).code
  
console.log(code);

/* Output:
for (var i = 0; i < 10; i += 1) {
  if (i % 2 == 0) {
    console.log("even");
  }
}
*/

Config

numSpacesPerTab (defaults to 4)

The number of spaces that make up 1 tab. Used for code indentation.

CodeGenerator.numSpacesPerTab = 2;

numTabs (defaults to 1)

The number of spaces that make up 1 tab. Used for code indentation.

CodeGenerator.numTabs = 2;

Methods

variable

/*
  @param Object data {
    {string} name,
    {string} value (optional)
  }
  
  @returns {
    data: data,
    code: code
  } 
*/

var example1 = Generate.variable({name: "test", value: "0"});
console.log(example1.code)
// var test = 0;

var example2 = Generate.variable({name: "test"});
console.log(example2.code)
// var test;

reassignVariable

/*
  @param Object data {
    {string} name,
    {string} value
  }
  
  @returns {
    data: data,
    code: code
  } 
*/


var code = [];

var testVar = Generate.variable({name: "test"});
code.push(testVar.code);

var example = Generate.reassignVariable({name: testVar.data.name, value: "0"})
code.push(example.code);

console.log(code.join("\n"));

/* Output:
var test;
test = 0;
*/

incrementVariable

/*
@param Object data {
  {string} name,
  {function} value (Optional)
}
*/


var code = [
  Generate.variable(name: "num", value: "0").code, 
  Generate.incrementVariable({name: numVar.data.name, value: "4"}).code,
  Generate.incrementVariable({name: numVar.data.name}).code,
]

console.log(code.join("\n"));

/* Output:
var num = 0;
num += 4;
num++
*/

decrementVariable

/*
@param Object data {
  {string} name,
  {function} value (Optional)
}
*/


var code = [
  Generate.variable(name: "num", value: "0").code, 
  Generate.decrementVariable({name: numVar.data.name, value: "4"}).code,
  Generate.decrementVariable({name: numVar.data.name}).code,
]

console.log(code.join("\n"));

/* Output:
var num = 0;
num -= 4;
num--
*/

firstClassFunction

/*
  @param Object data {
    {string} name,
    {array} args (Optional),
    {function} body
  }
  @returns {
    data: data,
    code: code
  } 
*/

var example = Generate.firstClassFunction({
  name: "func",
  args: ["a", "b", "c"],
  body: function() {
    return Generate.consoleLog("hi").code;
  }
})

console.log(example.code)

/* Output:
var func = function(a, b, c) {
  console.log("hi");
};
*/

newInstance

  /*
    @param Object data {
      {string} type
      {array} args
    }

    @returns Object {
      {string} code
    }
  */

  var instance = Generate.newInstance({type: "Person", args: ["'Bob'", 30]});
  var personVar = Generate.variable({name: "person", value: instance.code});
  console.log(personVar.code);

  /* Output:
    var person = new Person('Bob', 30);
  */

objectPropertyAssignment

/*
  @param Object data {
    {string} objName (Optional. Defaults to "this")
    {string} propName,
    {string} value,
    {boolean} dotNotation (Optional. Defaults to true)
  }
*/


var objVar = Generate.variable({
  name: "obj",
  value: {}
});

var example1 = Generate.objectPropertyAssignment({
  objName: objVar.data.name, 
  propName: "prop",
  value: "hello"
});

var example2 = Generate.objectPropertyAssignment({
  objName: objVar.data.name, 
  propName: "prop",
  value: "hello",
  dotNotation: false
});

var code = [
  objVar.code,
  example1.code,
  example2.code
].join("\n")

console.log(code);

/* Output:
var obj = {};
obj.prop = "hello";
obj["prop"] = "hello";
*/

objectFunctionCall

/*
  @param Object data {
    {string} objName (Optional. Defaults to "this")
    {string} funcName,
    {array} args (Optional)
  }
*/

var example = Generate.objectFunctionCall({
  objName: "Math",
  funcName: "floor",
  args: [3.5]
})

console.log(example.code);

/* Output:
Math.floor(3.5);
*/

objectFunction

/*
  @param Object data {
    {string} objName (Optional. Defaults to "this")
    {string} funcName,
    {array} args (Optional),
    {function} body
  }
*/

var example = Generate.objectFunction({
  objName: "obj",
  funcName: "sumNums",
  args: ["nums"],
  body: function() {
    return Generate.comment({text: "code to sum elements of nums array"}).code
  }
})

console.log(example.code);

/* Output:
obj.sumNums = function(nums) {
  // code to sum elemens of nums array 
}
*/

ifStatement

/*
@param Object data {
  {string} condition,
  {function} body
}
*/

var numVar = Generate.variable(name: "num", value: "0");

var example = Generate.ifStatement({
  condition: `${numVar.data.name} > 2`,
  body: function() {
    let body = [
      Generate.incrementVariable({name: numVar.data.name, value: "4"}).code,
      Generate.incrementVariable({name: numVar.data.name}).code,
    ];

    return body.join("\n");
  }
});

var code = [
  numVar.code,
  example.code
].join("\n");

console.log(code)

/* Output:
var num = 0;
if (num > 2) {
  numVar += 4;
  numVar++
}
*/

elseIfStatement

elseStatement

tryBlock

catchBlock

forLoop

/*
  @param Object data {
    {string} startCondition,
    {string} stopCondition,
    {string} incrementAction,
    {function} body
  }
*/

var nestedForLoop = 
  Generate.forLoop({
    startCondition: `${itrVar.data.name} = 0`,
    stopCondition: `${itrVar.data.name} < 10`,
    incrementAction: `${itrVar.data.name} += 1`,
    body: function() {
      let itrVar = Generate.variable({
        name: Generate.uniqueIteratorName(),
        value: "0"
      });

      return (
        Generate.forLoop({
          startCondition: `${itrVar.data.name} = 0`,
          stopCondition: `${itrVar.data.name} < 10`,
          incrementAction: `${itrVar.data.name} += 1`,
          body: function() {
            let itrVar = Generate.variable({
              name: Generate.uniqueIteratorName(),
              value: "0"
            });

            return (
              Generate.forLoop({
                startCondition: `${itrVar.data.name} = 0`,
                stopCondition: `${itrVar.data.name} < 10`,
                incrementAction: `${itrVar.data.name} += 1`,
                body: function() {
                  return "";
                }
              }).code
            )
          }
        }).code
      )
    }
  }).code

console.log(nestedForLoop);

/* Output:
for (var i = 0; i < 10; i += 1) {
  for (var j = 0; j < 10; j += 1) {
    for (var k = 0; k < 10; k += 1) {

    }
  }
}
*/