ts2gas
    TypeScript icon, indicating that this package has built-in type declarations

    4.2.0 • Public • Published

    ts2gas

    npm VersionBuild Status

    A function that transpiles TypeScript to Google Apps Script.

    ts2gas(code: string, transpileOptions?: ts.TranspileOptions): string

    For example the code below

    const writeToLog = (message: string) => console.info(message);
    
    let words = ['hello', 'world'];
    writeToLog(`${words.join(' ')}`);

    gets transpiled into

    // Compiled using ts2gas 1.3.0 (TypeScript 3.2.2)
    var exports = exports || {};
    var module = module || { exports: exports };
    var writeToLog = function (message) { return console.info(message); };
    var words = ['hello', 'world'];
    writeToLog("" + words.join(' '));

    Install

    yarn add ts2gas

    Usage

    Write Apps Script as TypeScript without including any imports.

    const ts2gas = require('ts2gas');
    
    let transpiled = ts2gas(`
    function buildName(first:string, last:string) {
      return \`\${firstName} \${lastName}\`;
    }
    `);
    
    // Transpiles to:
    // function buildName(first, last) {
    //   return firstName + " " + lastName;
    // }

    Advanced

    Transpiler is called with this default ts.TranspileOptions object

    {
      compilerOptions: {
        experimentalDecorators: true,
        isolatedModules: true,
        module: "None",
        noImplicitUseStrict: true,
        noLib: true,
        noResolve: true,
        target: "ES3",
      },
      // the following property is to document this little known feature
      // renamedDependencies: { SomeName: 'SomeOtherName' },
    }

    ts2gas can accepts a custom ts.TranspileOptions object as second parameter.

    ts2gas(source: string, transpileOptions: ts.TranspileOptions = {}): string

    Note that the following compilerOptions cannot be changed:

    {
      isolatedModules: true,
      module: "None",
      noLib: true,
      noResolve: true,
    }

    TypeScript Tests

    Some samples of TypeScript derived from https://angular-2-training-book.rangle.io/handout/features/

    class Hamburger {
      constructor() {
        // This is the constructor.
      }
      listToppings() {
        // This is a method.
      }
    }
    
    // Template strings
    var name = 'Grant';
    var age = 42;
    console.log(`Hello! My name is ${name}, and I am not ${age} years old.`);
    
    // Rest args
    const add = (a, b) => a + b;
    let args = [3, 5];
    add(...args); // same as \`add(args[0], args[1])\`, or \`add.apply(null, args)\`
    
    // Spread array
    let cde = ['c', 'd', 'e'];
    let scale = ['a', 'b', ...cde, 'f', 'g'];  // ['a', 'b', 'c', 'd', 'e', 'f', 'g']
    
    // Spread map
    let mapABC  = { a: 5, b: 6, c: 3};
    let mapABCD = { ...mapABC, d: 7};  // { a: 5, b: 6, c: 3, d: 7 }
    
    // Destructure
    let jane = { firstName: 'Jane', lastName: 'Doe'};
    let john = { firstName: 'John', lastName: 'Doe', middleName: 'Smith' }
    function sayName({firstName, lastName, middleName = 'N/A'}) {
      console.log(`Hello ${firstName} ${middleName} ${lastName}`)
    }
    sayName(jane) // -> Hello Jane N/A Doe
    sayName(john) // -> Helo John Smith Doe
    
    // Export
    export const pi = 3.141592;
    function add(x: number, y: number): number {
        return x + y;
    }
    console.log(add(2, 2)); // 4
    
    // Decorators
    function Override(label: string) {
      return function (target: any, key: string) {
        Object.defineProperty(target, key, {
          configurable: false,
          get: () => label
        });
      }
    }
    class Test {
      @Override('test')      // invokes Override, which returns the decorator
      name: string = 'pat';
    }
    let t = new Test();
    console.log(t.name);  // 'test'

    Keywords

    none

    Install

    npm i ts2gas

    DownloadsWeekly Downloads

    5,224

    Version

    4.2.0

    License

    MIT

    Unpacked Size

    38 kB

    Total Files

    7

    Last publish

    Collaborators

    • grant
    • shinout
    • popgoesthewza