Titanium + Alloy + TypeScript1.0RC のコンパイル

#概要
2014年02月25日に TypeScript1.0RC(compilerVersion 0.9.7) が公開されました。
[Announcing TypeScript 1.0RC](http://blogs.msdn.com/b/typescript/archive/2014/02/25/announcing-typescript-1-0rc.aspx?Redirected=true)

Titanium + Alloy + TypeScript1.0RC のコンパイル方法を調べても情報を見つけられなかったので、自分でなんとかコンパイルできるようにしました。

#環境
MacOS X 10.9.2
Titanium SDK 3.3.0
Alloy 1.3.1
TypeScript1.0RC

#参考
以下の記事を参考にさせていただきました。
[Titanium + Alloy + TypeScript で、iOS & Android アプリを作る](http://qiita.com/JunSuzukiJapan@github/items/09d9feabaad68724e384#3-1)

#詳細
## ファイルのコピー
Typescript インストールフォルダの tsc.js と lib.d.ts を
Alloy インストールフォルダ内の bin フォルダにコピーする。

私の環境では以下のpathです。
/usr/local/lib/node_modules/alloy/bin/

## alloy.jmk の作成
alloy.jmk を編集して、tsc.js を読み込むようにする。

typescript.js ではなく、tsc.jsを使う。

wrench.readdirSyncRecursive のコードブロックの前にBatchCompilerのインスタンスの生成文を挿入。

```js:alloy.jmk
var batch = new TypeScript.BatchCompiler(TypeScript.IO);
```
    
wrench.readdirSyncRecursive のコードブロックの中で、各ファイルのパスをBatchCompilerのinputFiles配列に追加する。

```js:alloy.jmk
batch.inputFiles.push(filename);
```
    
wrench.readdirSyncRecursive のコードブロックの後にBatchCompilerのcompile実行文を追加。

```js:alloy.jmk
batch.batchCompile(); 
```
完成した alloy.jmk は以下の通り。

```js:alloy.jmk
task("pre:compile", function(event,logger) {
    var wrench = require("wrench"),
        fs = require("fs"),
        path = require("path");

    var code = [
        fs.readFileSync("/usr/local/lib/node_modules/alloy/bin/tsc.js"), // <- path to tsc.js in your environment
        "module.exports = TypeScript;"
    ].join("");
    fs.writeFileSync(process.env.TMPDIR + "tsc.js", code);
    var TypeScript = require(process.env.TMPDIR + "tsc.js");
    fs.unlinkSync(process.env.TMPDIR + "tsc.js");

    event.alloyConfig.tsc = [];
    
    var batch = new TypeScript.BatchCompiler(TypeScript.IO);
    wrench.readdirSyncRecursive(event.dir.home).forEach(function(target){
        if (target.match(/\.ts$/) && ! target.match(/\.d\.ts$/)) {
            var filename = path.join(event.dir.home + "/" + target);
            batch.inputFiles.push(filename);
            event.alloyConfig.tsc.push(target.replace(/.ts$/, ".js"));
        }
    });
    batch.batchCompile();
});

task("post:compile",function(event,logger){
  var fs = require("fs");

  event.alloyConfig.tsc.forEach(function(target){
    fs.unlinkSync(event.dir.home + "/" + target);
  });
});
```

##tsc.js の編集
Alloy インストールフォルダ内の bin フォルダにコピーした tsc.js を編集する。

ファイルの末尾付近のBatchCompiler実行文をコメントアウトする。

```js:tsc.js
//var batch = new TypeScript.BatchCompiler(TypeScript.IO);
//batch.batchCompile();
```

BatchCompilerクラスのparseOptionsメソッド定義文の後半 opts.parse(this.ioHost.arguments) の前に
1文追加して余分なoptionを除外する。

```js:tsc.js
this.ioHost.arguments = this.ioHost.arguments.filter(function(arg) { 
    return arg !== '--config';
});

```

BatchCompilerクラスのresolveメソッド定義文の前半 var resolutionResults = ... の前に
1文追加して余分なargumentsを除外する。

```js:tsc.js
this.inputFiles = this.inputFiles.filter(function(file) { 
    return file.match(/\.ts$/);
});
```

ログの出力をする場合は、CompilationSettingsクラスのコンストラクタ内 this.gatherDiagnostics = false; -> trueに変更する。
プロパティのget/setアクセサメソッドを使用する場合は
this.codeGenTarget = 0; -> 1に変更してECMAScript5をターゲットにする。

#追記
[Announcing TypeScript 1.0](http://blogs.msdn.com/b/typescript/archive/2014/04/02/announcing-typescript-1-0.aspx)
TypeScript1.0 でも同様にコンパイルできました。