JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 39996
  • Score
    100M100P100Q148591F
  • License MIT

A function that transpiles TypeScript to Google Apps Script.

Package Exports

  • ts2gas

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 (ts2gas) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

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: {
    target: ts.ScriptTarget.ES3,
    noLib: true,
    noResolve: true,
    module: ts.ModuleKind.None,
    noImplicitUseStrict: true,
    experimentalDecorators: true,
  },
  // 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: target, noLib, noResolve, module

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'