UNPKG

dts2as

Version:

A command line tool that converts TypeScript definitions (d.ts files) to ActionScript 3 classes and interfaces

879 lines (876 loc) 120 kB
"use strict"; /* Copyright 2015-2017 Bowler Hat LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var path = require("path"); var fs = require("fs"); var ts = require("typescript"); var as3 = require("./as3"); var StaticSideClassDefinition = (function (_super) { __extends(StaticSideClassDefinition, _super); function StaticSideClassDefinition(name, packageName, accessLevel, sourceFile, moduleName) { return _super.call(this, name, packageName, accessLevel, sourceFile, moduleName, true) || this; } return StaticSideClassDefinition; }(as3.ClassDefinition)); var ParserPropertyDefinition = (function (_super) { __extends(ParserPropertyDefinition, _super); function ParserPropertyDefinition() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.forceStatic = false; return _this; } return ParserPropertyDefinition; }(as3.PropertyDefinition)); var ParserMethodDefinition = (function (_super) { __extends(ParserMethodDefinition, _super); function ParserMethodDefinition() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.forceStatic = false; return _this; } return ParserMethodDefinition; }(as3.MethodDefinition)); var TypeScriptPrimitives; (function (TypeScriptPrimitives) { TypeScriptPrimitives[TypeScriptPrimitives["any"] = 0] = "any"; TypeScriptPrimitives[TypeScriptPrimitives["number"] = 1] = "number"; TypeScriptPrimitives[TypeScriptPrimitives["boolean"] = 2] = "boolean"; TypeScriptPrimitives[TypeScriptPrimitives["string"] = 3] = "string"; TypeScriptPrimitives[TypeScriptPrimitives["symbol"] = 4] = "symbol"; TypeScriptPrimitives[TypeScriptPrimitives["void"] = 5] = "void"; TypeScriptPrimitives[TypeScriptPrimitives["undefined"] = 6] = "undefined"; TypeScriptPrimitives[TypeScriptPrimitives["null"] = 7] = "null"; TypeScriptPrimitives[TypeScriptPrimitives["never"] = 8] = "never"; })(TypeScriptPrimitives || (TypeScriptPrimitives = {})); //the following top level classes are marked as dynamic in AS3 var DYNAMIC_CLASSES = [ "ArgumentError", "Array", "Date", "Error", "EvalError", "Object", "RangeError", "ReferenceError", "RegExp", "SyntaxError", "TypeError", "URIError" ]; var PRIMITIVE_TO_CLASS_TYPE_MAP = {}; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.number]] = as3.BuiltIns[as3.BuiltIns.Number]; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.boolean]] = as3.BuiltIns[as3.BuiltIns.Boolean]; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.string]] = as3.BuiltIns[as3.BuiltIns.String]; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.any]] = as3.BuiltIns[as3.BuiltIns.Object]; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.void]] = as3.BuiltIns[as3.BuiltIns.void]; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.symbol]] = "Symbol"; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.undefined]] = "*"; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.null]] = as3.BuiltIns[as3.BuiltIns.Object]; PRIMITIVE_TO_CLASS_TYPE_MAP[TypeScriptPrimitives[TypeScriptPrimitives.never]] = "*"; var invalidNameRegExp = /^public|private|protected|internal|extends$/; var identifierNameRegExp = /^(?:[\$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])(?:[\$0-9A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])*$/; var DebugLevel; (function (DebugLevel) { DebugLevel[DebugLevel["NONE"] = 0] = "NONE"; DebugLevel[DebugLevel["WARN"] = 1] = "WARN"; DebugLevel[DebugLevel["INFO"] = 2] = "INFO"; })(DebugLevel = exports.DebugLevel || (exports.DebugLevel = {})); var default_1 = (function () { function default_1(scriptTarget) { if (scriptTarget === void 0) { scriptTarget = ts.ScriptTarget.Latest; } this._currentModuleName = null; this._variableStatementHasDeclareKeyword = false; this._variableStatementHasExport = false; this.debugLevel = DebugLevel.NONE; this._scriptTarget = scriptTarget; } default_1.prototype.parse = function (fileNames) { var _this = this; this._functionAliases = []; this._mappedTypes = []; this._typeAliasMap = {}; this._typeParameterMap = {}; this._importModuleStack = []; this._sourceFiles = []; this._promoted = {}; fileNames.forEach(function (fileName) { _this.findSourceFiles(fileName, _this._sourceFiles); }); var referencedFileIsStandardLib = this._sourceFiles.some(function (sourceFile) { return sourceFile.hasNoDefaultLib; }); if (referencedFileIsStandardLib) { if (this.debugLevel >= DebugLevel.INFO) { console.info("Referenced files contain a standard library."); } this._definitions = []; } else { if (this.debugLevel >= DebugLevel.INFO) { console.info("Using default standard library for script target."); } this.readStandardLibrary(); } var hasIncludedCore = false; this._sourceFiles.forEach(function (sourceFile, index) { //the fileName property of ts.SourceFile may not account for //platform path differences, so use path.resolve to normalize var sourceFileName = path.resolve(sourceFile.fileName); _this._currentFileIsExternal = !fileNames.some(function (fileName) { fileName = path.resolve(fileName); return fileName === sourceFileName; }); _this.readSourceFile(sourceFile, !hasIncludedCore && referencedFileIsStandardLib); if (referencedFileIsStandardLib) { hasIncludedCore = true; } }); this._sourceFiles.forEach(function (sourceFile, index) { _this._currentFileIsExternal = index !== (_this._sourceFiles.length - 1); _this.populateInheritance(sourceFile); }); this._sourceFiles.forEach(function (sourceFile, index) { _this._currentFileIsExternal = index !== (_this._sourceFiles.length - 1); _this.populatePackageLevelDefinitions(sourceFile); }); this.promoteInterfaces(); this.cleanupStaticSideDefinitions(); this.cleanupMembersWithForceStaticFlag(); this.cleanupInterfaceOverrides(); this.cleanupClassOverrides(); this.cleanupMembersWithSameNameAsType(); this.cleanupMembersWithStaticSideTypes(); this.cleanupBuiltInTypes(); return { definitions: this._definitions, hasNoDefaultLib: referencedFileIsStandardLib }; }; default_1.prototype.findStandardLibraryDOM = function () { var standardLibDOMPath = require.resolve("typescript"); standardLibDOMPath = path.dirname(standardLibDOMPath); standardLibDOMPath = path.resolve(standardLibDOMPath, "lib.dom.d.ts"); return standardLibDOMPath; }; default_1.prototype.findStandardLibrary = function () { var standardLibFileName; switch (this._scriptTarget) { case ts.ScriptTarget.ES3: case ts.ScriptTarget.ES5: { standardLibFileName = "lib.es5.d.ts"; break; } case ts.ScriptTarget.ES2015: { standardLibFileName = "lib.es2015.d.ts"; break; } case ts.ScriptTarget.ES2016: { standardLibFileName = "lib.es2016.d.ts"; break; } case ts.ScriptTarget.ES2017: { standardLibFileName = "lib.es2017.d.ts"; break; } case ts.ScriptTarget.Latest: { standardLibFileName = "lib.esnext.d.ts"; break; } default: { throw new Error("Unknown ts.ScriptTarget: " + this._scriptTarget); } } var standardLibPath = require.resolve("typescript"); standardLibPath = path.dirname(standardLibPath); standardLibPath = path.resolve(standardLibPath, standardLibFileName); return standardLibPath; }; default_1.prototype.readStandardLibrary = function () { var _this = this; var standardLibPath = this.findStandardLibrary(); if (!fs.existsSync(standardLibPath)) { throw new Error("Cannot find standard library with path " + standardLibPath); } var standardLibFiles = []; this.findSourceFiles(standardLibPath, standardLibFiles); this.findSourceFiles(this.findStandardLibraryDOM(), standardLibFiles); this._definitions = []; this._currentFileIsExternal = true; standardLibFiles.forEach(function (sourceFile, index) { //the fileName property of ts.SourceFile may not account for //platform path differences, so use path.resolve to normalize var sourceFileName = path.resolve(sourceFile.fileName); _this.readSourceFile(sourceFile, index === 0); }); standardLibFiles.forEach(function (sourceFile, index) { _this.populateInheritance(sourceFile); }); standardLibFiles.forEach(function (sourceFile, index) { _this.populatePackageLevelDefinitions(sourceFile); }); this.promoteInterfaces(); }; default_1.prototype.sourceFileExists = function (fileName) { return this._sourceFiles.some(function (otherSourceFile) { //the fileName property of a ts.SourceFile object may not use the //path conventions of the current platform (Windows, in particular), //so we pass it to path.resolve() to normalize return path.resolve(otherSourceFile.fileName) === fileName; }); }; default_1.prototype.findSourceFiles = function (fileName, result) { var _this = this; fileName = path.resolve(fileName); if (!fs.existsSync(fileName)) { console.error("Error: could not find source file at the specified path. Expected: " + fileName); return; } var sourceText = fs.readFileSync(fileName, "utf8"); var sourceFile = ts.createSourceFile(fileName, sourceText, this._scriptTarget); if (this.sourceFileExists(fileName)) { return; } //add referenced files first, and everything will end up in the //correct order sourceFile.typeReferenceDirectives.forEach(function (fileReference) { var typeReferencePath = path.resolve(fileName, path.join("..", "..", fileReference.fileName, "index.d.ts")); if (_this.sourceFileExists(typeReferencePath)) { return; } _this.findSourceFiles(typeReferencePath, result); }); sourceFile.referencedFiles.forEach(function (fileReference) { var fileName = path.resolve(path.dirname(sourceFile.fileName), fileReference.fileName); if (_this.sourceFileExists(fileName)) { return; } _this.findSourceFiles(fileName, result); }); result.push(sourceFile); }; default_1.prototype.readSourceFile = function (sourceFile, includeCore) { this._moduleStack = []; if (includeCore) { var as3SourceFile = "playerglobal.swc"; //these are special types that are defined by the language, and //they don't appear in the standard library. we need to add them //manually. var as3NamespaceDefinition = new as3.NamespaceDefinition("AS3", "", as3.AccessModifiers[as3.AccessModifiers.public], "http://adobe.com/AS3/2006/builtin", as3SourceFile, null, this._currentFileIsExternal); this._definitions.push(as3NamespaceDefinition); var starDefinition = new as3.InterfaceDefinition("*", null, null, null, null, this._currentFileIsExternal); this._definitions.push(starDefinition); var voidDefinition = new as3.InterfaceDefinition("void", null, null, null, null, this._currentFileIsExternal); this._definitions.push(voidDefinition); var intDefinition = new as3.ClassDefinition("int", "", as3.AccessModifiers[as3.AccessModifiers.public], as3SourceFile, null, this._currentFileIsExternal); this._definitions.push(intDefinition); var uintDefinition = new as3.ClassDefinition("uint", "", as3.AccessModifiers[as3.AccessModifiers.public], as3SourceFile, null, this._currentFileIsExternal); this._definitions.push(uintDefinition); var undefinedDefinition = new as3.PackageVariableDefinition("undefined", "", as3.AccessModifiers[as3.AccessModifiers.public], as3SourceFile, null, this._currentFileIsExternal); undefinedDefinition.isConstant = true; this._definitions.push(undefinedDefinition); } this.readPackageLevelDefinitions(sourceFile); if (sourceFile.hasNoDefaultLib) { this.addDynamicFlagToStandardLibraryClasses(); } }; default_1.prototype.addDynamicFlagToStandardLibraryClasses = function () { for (var _i = 0, DYNAMIC_CLASSES_1 = DYNAMIC_CLASSES; _i < DYNAMIC_CLASSES_1.length; _i++) { var fullyQualifiedName = DYNAMIC_CLASSES_1[_i]; var classToMakeDynamic = as3.getDefinitionByName(fullyQualifiedName, this._definitions); if (classToMakeDynamic) { classToMakeDynamic.dynamic = true; } } }; default_1.prototype.isNameInPackage = function (name, packageName) { var fullyQualifiedName = name; if (packageName.length > 0) { fullyQualifiedName = packageName + "." + name; } if (this._functionAliases.indexOf(fullyQualifiedName) >= 0) { return true; } return as3.getDefinitionByName(fullyQualifiedName, this._definitions) !== null; }; default_1.prototype.isValidMemberName = function (memberName) { if (invalidNameRegExp.test(memberName)) { return false; } return identifierNameRegExp.test(memberName); }; default_1.prototype.mergeFunctionParameters = function (as3Function, parametersToMerge) { var parametersToKeep = as3Function.parameters; if (!parametersToKeep) { as3Function.parameters = parametersToMerge; return; } var methodToKeepParamsCount = parametersToKeep.length; var parametersToMergeCount = parametersToMerge.length; var paramCount = Math.max(methodToKeepParamsCount, parametersToMergeCount); var mustBeOptional = false; for (var j = 0; j < paramCount; j++) { var paramToMerge = null; if (parametersToMergeCount > j) { paramToMerge = parametersToMerge[j]; } else { mustBeOptional = true; } if (methodToKeepParamsCount <= j) { mustBeOptional = true; parametersToKeep[j] = paramToMerge; } var paramToKeep = parametersToKeep[j]; if (paramToKeep.isRest) { //we already have a ...rest argument, and that must be the last //one so, we can ignore the rest of the parameters to merge break; } if (paramToMerge) { if (paramToMerge.isRest) { //the parameters to merge have a ...rest argument earlier than //what we have already, so we need to remove any remaining //arguments so that the ...rest is the last argument //we don't know if the name is relevant, so let's go generic paramToMerge.name = "rest"; parametersToKeep.length = j; parametersToKeep[j] = paramToMerge; //no more parameters after a rest argument! break; } if (paramToKeep.value || paramToMerge.value) { mustBeOptional = true; } var mergeName = paramToMerge.name; if (paramToKeep.name !== mergeName) { paramToKeep.name += "Or" + mergeName.substr(0, 1).toUpperCase(); if (mergeName.length > 1) { paramToKeep.name += mergeName.substr(1); } } paramToKeep.type = this.mergeTypes(paramToKeep.type, paramToMerge.type); } if (mustBeOptional && !paramToKeep.value && !paramToKeep.isRest) { paramToKeep.value = "undefined"; } } }; default_1.prototype.mergeTypes = function (type1, type2) { if (type1 === type2) { return type1; } //the overload has a different type, so generalize to a common //super class, if possible var commonType; if (type1 instanceof as3.ClassDefinition && type2 instanceof as3.ClassDefinition) { commonType = as3.getCommonBaseClass(type1, type2); } if (!commonType) { //fall back to Object if there is no common base class commonType = as3.getDefinitionByName(as3.BuiltIns[as3.BuiltIns.Object], this._definitions); } return commonType; }; default_1.prototype.literalKindToTypeName = function (kind) { switch (kind) { case ts.SyntaxKind.StringLiteral: { //variable: "some value"; return as3.BuiltIns[as3.BuiltIns.String]; } case ts.SyntaxKind.NumericLiteral: { //variable: 1234; return as3.BuiltIns[as3.BuiltIns.Number]; } case ts.SyntaxKind.PrefixUnaryExpression: { //variable: -1234; return as3.BuiltIns[as3.BuiltIns.Number]; } case ts.SyntaxKind.TrueKeyword: { //variable: true; return as3.BuiltIns[as3.BuiltIns.Boolean]; } case ts.SyntaxKind.FalseKeyword: { //variable: false; return as3.BuiltIns[as3.BuiltIns.Boolean]; } default: { if (this.debugLevel >= DebugLevel.WARN && !this._currentFileIsExternal) { console.warn("Unknown literal type: " + kind); } } } return null; }; //checks the kind property of the TypeNode to see if a type can be //determined without parsing the raw text. default_1.prototype.getAS3TypeFromTypeNodeKind = function (type) { var fullyQualifiedName = null; if (type) { switch (type.kind) { case ts.SyntaxKind.FunctionType: { fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Function]; break; } case ts.SyntaxKind.ConstructorType: { fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Function]; break; } case ts.SyntaxKind.UnionType: case ts.SyntaxKind.IntersectionType: { var unionType = type; var commonBaseClass = this.getCommonBaseClassFromUnionOrIntersectionType(unionType); if (commonBaseClass !== null) { return commonBaseClass; } fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Object]; break; } case ts.SyntaxKind.LiteralType: { var literalType = type; var literalName = this.literalKindToTypeName(literalType.literal.kind); if (literalName !== null) { fullyQualifiedName = literalName; } break; } case ts.SyntaxKind.IndexedAccessType: { //variable: SomeType[K]; fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.String]; break; } case ts.SyntaxKind.TypeLiteral: { //variable: {}; fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Object]; break; } case ts.SyntaxKind.ObjectKeyword: { //variable: object; fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Object]; break; } case ts.SyntaxKind.ArrayType: { fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Array]; break; } case ts.SyntaxKind.TupleType: { fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Array]; break; } case ts.SyntaxKind.TypeQuery: { fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Function]; break; } case ts.SyntaxKind.TypePredicate: { fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.Boolean]; break; } case ts.SyntaxKind.TypeOperator: { var typeOperatorType = type; if (typeOperatorType.operator === ts.SyntaxKind.KeyOfKeyword) { //variable: keyof SomeType fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.String]; } break; } } } else { fullyQualifiedName = as3.BuiltIns[as3.BuiltIns.void]; } if (fullyQualifiedName !== null) { return as3.getDefinitionByName(fullyQualifiedName, this._definitions); } return null; }; default_1.prototype.simplifyTypeNode = function (type) { var typeInSource = this._currentSourceFile.text.substring(ts["skipTrivia"](this._currentSourceFile.text, type.pos), type.end); typeInSource = typeInSource.trim(); //strip <T> section of generics var startGenericIndex = typeInSource.indexOf("<"); if (startGenericIndex >= 0) { typeInSource = typeInSource.substr(0, startGenericIndex); } //strip [] section of array var endArrayIndex = typeInSource.lastIndexOf("]"); if (endArrayIndex === typeInSource.length - 1) { var startArrayIndex = typeInSource.indexOf("["); if (startArrayIndex === 0) { typeInSource = typeInSource.substr(1, endArrayIndex - 1); } else if (startArrayIndex === (endArrayIndex - 1)) { typeInSource = typeInSource.substr(0, startArrayIndex); } } return typeInSource; }; default_1.prototype.unmapType = function (type) { var typeInSource = this.simplifyTypeNode(type); while (this._mappedTypes.indexOf(typeInSource) !== -1) { var typeReference = type; type = typeReference.typeArguments[0]; typeInSource = this.simplifyTypeNode(type); } return type; }; default_1.prototype.getAS3FullyQualifiedNameFromTSTypeNode = function (type) { var result = this.getAS3TypeFromTypeNodeKind(type); if (result !== null) { return result.getFullyQualifiedName(); } type = this.unmapType(type); result = this.getAS3TypeFromTypeNodeKind(type); if (result !== null) { return result.getFullyQualifiedName(); } var typeInSource = this.simplifyTypeNode(type); if (typeInSource in this._typeParameterMap) { typeInSource = this._typeParameterMap[typeInSource]; } while (typeInSource in this._typeAliasMap) { typeInSource = this._typeAliasMap[typeInSource]; } var moduleStack = this._moduleStack.slice(); while (moduleStack.length > 0) { var packageName = this.getCamelCasePackage(moduleStack.join(".")); if (packageName) { var typeInSourceWithPackage = packageName + "." + typeInSource; while (typeInSourceWithPackage in this._typeAliasMap) { typeInSourceWithPackage = this._typeAliasMap[typeInSourceWithPackage]; typeInSource = typeInSourceWithPackage; } } moduleStack.pop(); } for (var moduleAlias in this._importModuleMap) { if (typeInSource.indexOf(moduleAlias) === 0) { var alias = this._importModuleMap[moduleAlias]; typeInSource = alias + typeInSource.substr(moduleAlias.length); } } this._importModuleStack.some(function (importModuleMap) { for (var moduleAlias in importModuleMap) { if (typeInSource.indexOf(moduleAlias) === 0) { var alias = importModuleMap[moduleAlias]; typeInSource = alias + typeInSource.substr(moduleAlias.length); return true; } } return false; }); moduleStack = this._moduleStack.slice(); while (moduleStack.length > 0) { var packageName = this.getCamelCasePackage(moduleStack.join(".")); if (this.isNameInPackage(typeInSource, packageName)) { typeInSource = packageName + "." + typeInSource; break; } moduleStack.pop(); } if (this._functionAliases.indexOf(typeInSource) >= 0) { return as3.BuiltIns[as3.BuiltIns.Function]; } if (PRIMITIVE_TO_CLASS_TYPE_MAP.hasOwnProperty(typeInSource)) { return PRIMITIVE_TO_CLASS_TYPE_MAP[typeInSource]; } return typeInSource; }; default_1.prototype.getAS3TypeFromTSTypeNode = function (type, as3Type, initializer) { var typeName = as3.BuiltIns[as3.BuiltIns.void]; if (type) { typeName = this.getAS3FullyQualifiedNameFromTSTypeNode(type); if (as3Type && typeName === "this") { return as3Type; } } else if (initializer) { var initializerTypeName = this.literalKindToTypeName(initializer.kind); if (initializerTypeName) { typeName = initializerTypeName; } } return as3.getDefinitionByName(typeName, this._definitions); }; default_1.prototype.getCommonBaseClassFromUnionOrIntersectionType = function (unionType) { var types = unionType.types; var baseClass = this.getAS3TypeFromTSTypeNode(types[0]); var unionTypeText = this._currentSourceFile.text.substring(ts["skipTrivia"](this._currentSourceFile.text, unionType.pos), unionType.end); if (!(baseClass instanceof as3.ClassDefinition)) { return as3.getDefinitionByName(as3.BuiltIns[as3.BuiltIns.Object], this._definitions); } for (var i = 1, count = types.length; i < count; i++) { var otherClass = this.getAS3TypeFromTSTypeNode(types[i]); if (!(otherClass instanceof as3.ClassDefinition)) { return as3.getDefinitionByName(as3.BuiltIns[as3.BuiltIns.Object], this._definitions); } baseClass = as3.getCommonBaseClass(baseClass, otherClass); if (!baseClass) { return as3.getDefinitionByName(as3.BuiltIns[as3.BuiltIns.Object], this._definitions); } } return baseClass; }; default_1.prototype.declarationNameToString = function (name) { var result = this._currentSourceFile.text.substring(ts["skipTrivia"](this._currentSourceFile.text, name.pos), name.end); if (result.indexOf("\"") === 0 || result.indexOf("'") === 0) { //modules may be named as a string that needs to be required result = result.substr(1, result.length - 2); } return result.trim(); }; default_1.prototype.addConstructorMethodToAS3Class = function (as3Class, constructorMethodToAdd) { if (as3Class.constructorMethod) { this.mergeFunctionParameters(as3Class.constructorMethod, constructorMethodToAdd.parameters); } else { as3Class.constructorMethod = constructorMethodToAdd; } }; default_1.prototype.addMethodToAS3Type = function (as3Type, methodToAdd) { //first, we need to check if this is an overload var existingMethod = as3Type.getMethod(methodToAdd.name, methodToAdd.isStatic); if (existingMethod !== null) { return; } //otherwise, add the new method as3Type.methods.push(methodToAdd); }; default_1.prototype.handleModuleBlock = function (node, handleImportAndExport, callback) { var _this = this; this._importModuleStack.push(this._importModuleMap); this._importModuleMap = {}; ts.forEachChild(node, function (node) { if (node.kind === ts.SyntaxKind.ImportDeclaration) { if (handleImportAndExport) { var importDeclaration = node; _this.populateImport(importDeclaration); } return; } if (node.kind === ts.SyntaxKind.ImportEqualsDeclaration) { if (handleImportAndExport) { var importEqualsDeclaration = node; _this.populateImportEquals(importEqualsDeclaration); } return; } if (node.kind === ts.SyntaxKind.ExportAssignment) { if (handleImportAndExport) { var exportAssignment = node; _this.assignExport(exportAssignment); } return; } if (node.kind === ts.SyntaxKind.TypeAliasDeclaration) { var typeAliasDeclaration = node; var aliasName = _this.declarationNameToString(typeAliasDeclaration.name); var packageName = _this.getCamelCasePackage(_this._moduleStack.join(".")); if (packageName) { aliasName = packageName + "." + aliasName; } var typeNode = typeAliasDeclaration.type; var aliasType = _this.getAS3TypeFromTSTypeNode(typeNode); if (aliasType) { //populate the alias, if possible. otherwise, wait for the //next pass. this isn't ideal, but it's actuall possible //for an alias to reference another alias that hasn't been //parsed yet! we try over multiple passes to get them all. _this._typeAliasMap[aliasName] = aliasType.getFullyQualifiedName(); } return; } callback.call(_this, node); }); //clear imported modules after we're done with this module this._importModuleMap = this._importModuleStack.pop(); }; default_1.prototype.handleModuleDeclaration = function (node, callback) { var _this = this; var moduleDeclaration = node; var moduleName = moduleDeclaration.name; this._moduleStack.push(this.declarationNameToString(moduleName)); var previousModuleName = this._currentModuleName; if (moduleName.kind === ts.SyntaxKind.StringLiteral) { this._currentModuleName = this.declarationNameToString(moduleName); } ts.forEachChild(node, function (node) { if (node.kind === ts.SyntaxKind.Identifier || node.kind === ts.SyntaxKind.StringLiteral) { //safe to skip name of module return; } if (node.kind === ts.SyntaxKind.DeclareKeyword) { //safe to skip declare keyword return; } if (node.kind === ts.SyntaxKind.ExportKeyword) { //safe to skip export keyword return; } callback.call(_this, node); }); this._moduleStack.pop(); this._currentModuleName = previousModuleName; }; default_1.prototype.readPackageLevelDefinitions = function (node) { var _this = this; switch (node.kind) { case ts.SyntaxKind.SourceFile: { this._currentSourceFile = node; ts.forEachChild(node, function (node) { if (node.kind === ts.SyntaxKind.EndOfFileToken) { //safe to ignore end of file return; } if (node.kind === ts.SyntaxKind.TypeAliasDeclaration) { var typeAliasDeclaration = node; if (typeAliasDeclaration.type.kind === ts.SyntaxKind.MappedType) { var mappedTypeName = _this.declarationNameToString(typeAliasDeclaration.name); _this._mappedTypes.push(mappedTypeName); } //safe to ignore other type aliases until later return; } if (node.kind === ts.SyntaxKind.ImportEqualsDeclaration) { //safe to ignore imports until later return; } _this.readPackageLevelDefinitions(node); }); break; } case ts.SyntaxKind.ModuleBlock: { this.handleModuleBlock(node, false, this.readPackageLevelDefinitions); break; } case ts.SyntaxKind.ModuleDeclaration: { this.handleModuleDeclaration(node, this.readPackageLevelDefinitions); break; } case ts.SyntaxKind.FunctionDeclaration: { var as3PackageFunction = this.readPackageFunction(node); //if the function already exists, readPackageFunction() will return null if (as3PackageFunction) { if (this.debugLevel >= DebugLevel.INFO && !as3PackageFunction.external) { console.info("Package Function: " + as3PackageFunction.getFullyQualifiedName()); } this._definitions.push(as3PackageFunction); } break; } case ts.SyntaxKind.VariableStatement: { ts.forEachChild(node, function (node) { if (node.kind === ts.SyntaxKind.DeclareKeyword) { _this._variableStatementHasDeclareKeyword = true; } else if (node.kind === ts.SyntaxKind.ExportKeyword) { _this._variableStatementHasExport = true; } else { _this.readPackageLevelDefinitions(node); } }); this._variableStatementHasDeclareKeyword = false; this._variableStatementHasExport = false; break; } case ts.SyntaxKind.VariableDeclarationList: { ts.forEachChild(node, this.readPackageLevelDefinitions.bind(this)); break; } case ts.SyntaxKind.VariableDeclaration: { var as3PackageVariable = this.readPackageVariable(node); //if it's a decomposed class, readPackageVariable() will return null if (as3PackageVariable) { if (this.debugLevel >= DebugLevel.INFO && !as3PackageVariable.external) { console.info("Package Variable: " + as3PackageVariable.getFullyQualifiedName()); } this._definitions.push(as3PackageVariable); } else { var nodeName = node.name; var className = this.declarationNameToString(nodeName); var packageName = this.getCamelCasePackage(this._moduleStack.join(".")); if (packageName) { className = packageName + "." + className; } var as3Class = as3.getDefinitionByName(className, this._definitions); if (this.debugLevel >= DebugLevel.INFO && !as3Class.external) { console.info("Replace Interface/Variable with Class: " + as3Class.getFullyQualifiedName()); } } break; } case ts.SyntaxKind.InterfaceDeclaration: { var as3Interface = this.readInterface(node); if (as3Interface instanceof StaticSideClassDefinition) { if (this.debugLevel >= DebugLevel.INFO && !as3Interface.external) { console.info("Replace Interface with Static-side Class: " + as3Interface.getFullyQualifiedName()); } this._definitions.push(as3Interface); } else if (as3Interface instanceof as3.InterfaceDefinition) { if (this.debugLevel >= DebugLevel.INFO && !as3Interface.external) { console.info("Interface: " + as3Interface.getFullyQualifiedName()); } this._definitions.push(as3Interface); } //if it's a function alias, readInterface() will return null break; } case ts.SyntaxKind.ClassDeclaration: { var as3Class = this.readClass(node); if (this.debugLevel >= DebugLevel.INFO && !as3Class.external) { console.info("Class: " + as3Class.g