Browse Source

Fixes #1034 . Upgrade dis-generator to the latest version with support for TS 2.0

Shaddock Heath 9 years ago
parent
commit
9a4d0dbfeb

+ 1 - 1
Build/node_modules/dts-generator/bin/dts-generator

@@ -2,7 +2,7 @@
 var dtsGenerator = require('./dts-generator.js');
 var dtsGenerator = require('./dts-generator.js');
 /* istanbul ignore if: we use the module interface in testing */
 /* istanbul ignore if: we use the module interface in testing */
 if (!module.parent) {
 if (!module.parent) {
-	dtsGenerator(process.argv.slice(2)).then(function (code) {
+	dtsGenerator.default(process.argv.slice(2)).then(function (code) {
 		return process.exit(code || 0);
 		return process.exit(code || 0);
 	}, function (err) {
 	}, function (err) {
 		throw err;
 		throw err;

+ 59 - 47
Build/node_modules/dts-generator/bin/dts-generator.js

@@ -1,57 +1,69 @@
-"use strict";
-var index_1 = require('../index');
-module.exports = function main(argv) {
-    var kwArgs = {
-        files: [],
-        sendMessage: console.log.bind(console)
-    };
-    for (var i = 0; i < argv.length; ++i) {
-        var arg = argv[i];
-        if (arg.charAt(0) === '-') {
-            var key = argv[i].replace(/^-+/, '');
-            var value = argv[i + 1];
-            ++i;
-            if (key === 'exclude') {
-                if (!kwArgs.exclude) {
-                    kwArgs.exclude = [];
+(function (factory) {
+    if (typeof module === 'object' && typeof module.exports === 'object') {
+        var v = factory(require, exports); if (v !== undefined) module.exports = v;
+    }
+    else if (typeof define === 'function' && define.amd) {
+        define(["require", "exports", '../index'], factory);
+    }
+})(function (require, exports) {
+    "use strict";
+    var index_1 = require('../index');
+    function main(argv) {
+        var kwArgs = {
+            files: [],
+            sendMessage: console.log.bind(console)
+        };
+        for (var i = 0; i < argv.length; ++i) {
+            var arg = argv[i];
+            if (arg.charAt(0) === '-') {
+                var key = argv[i].replace(/^-+/, '');
+                var value = argv[i + 1];
+                ++i;
+                if (key === 'exclude') {
+                    if (!kwArgs.exclude) {
+                        kwArgs.exclude = [];
+                    }
+                    kwArgs.exclude.push(value);
                 }
                 }
-                kwArgs.exclude.push(value);
-            }
-            else if (key === 'extern') {
-                if (!kwArgs.externs) {
-                    kwArgs.externs = [];
+                else if (key === 'extern') {
+                    if (!kwArgs.externs) {
+                        kwArgs.externs = [];
+                    }
+                    kwArgs.externs.push(value);
+                }
+                else if (key === 'verbose') {
+                    kwArgs.verbose = true;
+                    /* decrement counter, because vebose does not take a value */
+                    --i;
+                }
+                else {
+                    kwArgs[key] = value;
                 }
                 }
-                kwArgs.externs.push(value);
-            }
-            else if (key === 'verbose') {
-                kwArgs.verbose = true;
-                /* decrement counter, because vebose does not take a value */
-                --i;
             }
             }
             else {
             else {
-                kwArgs[key] = value;
+                kwArgs.files.push(argv[i]);
             }
             }
         }
         }
-        else {
-            kwArgs.files.push(argv[i]);
+        ['out'].forEach(function (key) {
+            if (!kwArgs[key]) {
+                console.error("Missing required argument \"" + key + "\"");
+                process.exit(1);
+            }
+        });
+        if (!kwArgs.baseDir && !kwArgs.project) {
+            console.error("Missing required argument of \"baseDir\" or \"project\"");
+            process.exit(1);
         }
         }
-    }
-    ['out'].forEach(function (key) {
-        if (!kwArgs[key]) {
-            console.error("Missing required argument \"" + key + "\"");
+        if (!kwArgs.project && kwArgs.files.length === 0) {
+            console.error('Missing files');
             process.exit(1);
             process.exit(1);
         }
         }
-    });
-    if (!kwArgs.baseDir && !kwArgs.project) {
-        console.error("Missing required argument of \"baseDir\" or \"project\"");
-        process.exit(1);
-    }
-    if (!kwArgs.project && kwArgs.files.length === 0) {
-        console.error('Missing files');
-        process.exit(1);
+        console.log('Starting');
+        return index_1.default(kwArgs).then(function () {
+            console.log('Done!');
+        });
     }
     }
-    console.log('Starting');
-    return index_1.default(kwArgs).then(function () {
-        console.log('Done!');
-    });
-};
+    Object.defineProperty(exports, "__esModule", { value: true });
+    exports.default = main;
+    ;
+});

+ 265 - 256
Build/node_modules/dts-generator/index.js

@@ -1,286 +1,295 @@
-"use strict";
-var fs = require('fs');
-var glob = require('glob');
-var mkdirp = require('mkdirp');
-var os = require('os');
-var pathUtil = require('path');
-var Promise = require('bluebird');
-var ts = require('typescript');
-var filenameToMid = (function () {
-    if (pathUtil.sep === '/') {
-        return function (filename) {
-            return filename;
-        };
-    }
-    else {
-        var separatorExpression_1 = new RegExp(pathUtil.sep.replace('\\', '\\\\'), 'g');
-        return function (filename) {
-            return filename.replace(separatorExpression_1, '/');
-        };
-    }
-})();
-/**
- * A helper function that takes TypeScript diagnostic errors and returns an error
- * object.
- * @param diagnostics The array of TypeScript Diagnostic objects
- */
-function getError(diagnostics) {
-    var message = 'Declaration generation failed';
-    diagnostics.forEach(function (diagnostic) {
-        var position = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
-        message +=
-            ("\n" + diagnostic.file.fileName + "(" + (position.line + 1) + "," + (position.character + 1) + "): ") +
-                ("error TS" + diagnostic.code + ": " + diagnostic.messageText);
-    });
-    var error = new Error(message);
-    error.name = 'EmitterError';
-    return error;
-}
-function getFilenames(baseDir, files) {
-    return files.map(function (filename) {
-        var resolvedFilename = pathUtil.resolve(filename);
-        if (resolvedFilename.indexOf(baseDir) === 0) {
-            return resolvedFilename;
-        }
-        return pathUtil.resolve(baseDir, filename);
-    });
-}
-function processTree(sourceFile, replacer) {
-    var code = '';
-    var cursorPosition = 0;
-    function skip(node) {
-        cursorPosition = node.end;
+(function (factory) {
+    if (typeof module === 'object' && typeof module.exports === 'object') {
+        var v = factory(require, exports); if (v !== undefined) module.exports = v;
     }
     }
-    function readThrough(node) {
-        code += sourceFile.text.slice(cursorPosition, node.pos);
-        cursorPosition = node.pos;
+    else if (typeof define === 'function' && define.amd) {
+        define(["require", "exports", 'fs', 'glob', 'mkdirp', 'os', 'path', 'bluebird', 'typescript'], factory);
     }
     }
-    function visit(node) {
-        readThrough(node);
-        var replacement = replacer(node);
-        if (replacement != null) {
-            code += replacement;
-            skip(node);
+})(function (require, exports) {
+    "use strict";
+    var fs = require('fs');
+    var glob = require('glob');
+    var mkdirp = require('mkdirp');
+    var os = require('os');
+    var pathUtil = require('path');
+    var Promise = require('bluebird');
+    var ts = require('typescript');
+    var filenameToMid = (function () {
+        if (pathUtil.sep === '/') {
+            return function (filename) {
+                return filename;
+            };
         }
         }
         else {
         else {
-            ts.forEachChild(node, visit);
+            var separatorExpression_1 = new RegExp(pathUtil.sep.replace('\\', '\\\\'), 'g');
+            return function (filename) {
+                return filename.replace(separatorExpression_1, '/');
+            };
         }
         }
+    })();
+    /**
+     * A helper function that takes TypeScript diagnostic errors and returns an error
+     * object.
+     * @param diagnostics The array of TypeScript Diagnostic objects
+     */
+    function getError(diagnostics) {
+        var message = 'Declaration generation failed';
+        diagnostics.forEach(function (diagnostic) {
+            var position = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
+            message +=
+                ("\n" + diagnostic.file.fileName + "(" + (position.line + 1) + "," + (position.character + 1) + "): ") +
+                    ("error TS" + diagnostic.code + ": " + diagnostic.messageText);
+        });
+        var error = new Error(message);
+        error.name = 'EmitterError';
+        return error;
     }
     }
-    visit(sourceFile);
-    code += sourceFile.text.slice(cursorPosition);
-    return code;
-}
-/**
- * Load and parse a TSConfig File
- * @param options The dts-generator options to load config into
- * @param fileName The path to the file
- */
-function getTSConfig(options, fileName) {
-    var configText = fs.readFileSync(fileName, { encoding: 'utf8' });
-    var result = ts.parseConfigFileTextToJson(fileName, configText);
-    if (result.error) {
-        throw getError([result.error]);
-    }
-    var configObject = result.config;
-    var configParseResult = ts.parseJsonConfigFileContent(configObject, ts.sys, pathUtil.dirname(fileName));
-    if (configParseResult.errors && configParseResult.errors.length) {
-        throw getError(configParseResult.errors);
-    }
-    options.target = configParseResult.options.target;
-    if (configParseResult.options.outDir) {
-        options.outDir = configParseResult.options.outDir;
-    }
-    if (configParseResult.options.moduleResolution) {
-        options.moduleResolution = configParseResult.options.moduleResolution;
+    function getFilenames(baseDir, files) {
+        return files.map(function (filename) {
+            var resolvedFilename = pathUtil.resolve(filename);
+            if (resolvedFilename.indexOf(baseDir) === 0) {
+                return resolvedFilename;
+            }
+            return pathUtil.resolve(baseDir, filename);
+        });
     }
     }
-    if (configParseResult.options.rootDir) {
-        options.rootDir = configParseResult.options.rootDir;
+    function processTree(sourceFile, replacer) {
+        var code = '';
+        var cursorPosition = 0;
+        function skip(node) {
+            cursorPosition = node.end;
+        }
+        function readThrough(node) {
+            code += sourceFile.text.slice(cursorPosition, node.pos);
+            cursorPosition = node.pos;
+        }
+        function visit(node) {
+            readThrough(node);
+            var replacement = replacer(node);
+            if (replacement != null) {
+                code += replacement;
+                skip(node);
+            }
+            else {
+                ts.forEachChild(node, visit);
+            }
+        }
+        visit(sourceFile);
+        code += sourceFile.text.slice(cursorPosition);
+        return code;
     }
     }
-    options.files = configParseResult.fileNames;
-    return options;
-}
-function isNodeKindImportDeclaration(value) {
-    return value && value.kind === ts.SyntaxKind.ImportDeclaration;
-}
-function isNodeKindExternalModuleReference(value) {
-    return value && value.kind === ts.SyntaxKind.ExternalModuleReference;
-}
-function isNodeKindStringLiteral(value) {
-    return value && value.kind === ts.SyntaxKind.StringLiteral;
-}
-function isNodeKindExportDeclaration(value) {
-    return value && value.kind === ts.SyntaxKind.ExportDeclaration;
-}
-function isNodeKindExportAssignment(value) {
-    return value && value.kind === ts.SyntaxKind.ExportAssignment;
-}
-function generate(options) {
-    var noop = function (message) {
-        var optionalParams = [];
-        for (var _i = 1; _i < arguments.length; _i++) {
-            optionalParams[_i - 1] = arguments[_i];
+    /**
+     * Load and parse a TSConfig File
+     * @param options The dts-generator options to load config into
+     * @param fileName The path to the file
+     */
+    function getTSConfig(options, fileName) {
+        var configText = fs.readFileSync(fileName, { encoding: 'utf8' });
+        var result = ts.parseConfigFileTextToJson(fileName, configText);
+        if (result.error) {
+            throw getError([result.error]);
         }
         }
-    };
-    var sendMessage = options.sendMessage || noop;
-    var verboseMessage = options.verbose ? sendMessage : noop;
-    /* following tsc behaviour, if a project is speicified, or if no files are specified then
-     * attempt to load tsconfig.json */
-    if (options.project || !options.files || options.files.length === 0) {
-        verboseMessage("project = \"" + (options.project || options.baseDir) + "\"");
-        var tsconfigFilename = pathUtil.join(options.project || options.baseDir, 'tsconfig.json');
-        if (fs.existsSync(tsconfigFilename)) {
-            verboseMessage("  parsing \"" + tsconfigFilename + "\"");
-            getTSConfig(options, tsconfigFilename);
+        var configObject = result.config;
+        var configParseResult = ts.parseJsonConfigFileContent(configObject, ts.sys, pathUtil.dirname(fileName));
+        if (configParseResult.errors && configParseResult.errors.length) {
+            throw getError(configParseResult.errors);
         }
         }
-        else {
-            sendMessage("No \"tsconfig.json\" found at \"" + tsconfigFilename + "\"!");
-            return new Promise(function (resolve, reject) {
-                reject(new SyntaxError('Unable to resolve configuration.'));
-            });
+        options.target = configParseResult.options.target;
+        if (configParseResult.options.outDir) {
+            options.outDir = configParseResult.options.outDir;
+        }
+        if (configParseResult.options.moduleResolution) {
+            options.moduleResolution = configParseResult.options.moduleResolution;
         }
         }
+        if (configParseResult.options.rootDir) {
+            options.rootDir = configParseResult.options.rootDir;
+        }
+        options.files = configParseResult.fileNames;
+        return options;
     }
     }
-    var baseDir = pathUtil.resolve(options.rootDir || options.project || options.baseDir);
-    verboseMessage("baseDir = \"" + baseDir + "\"");
-    var eol = options.eol || os.EOL;
-    var nonEmptyLineStart = new RegExp(eol + '(?!' + eol + '|$)', 'g');
-    var indent = options.indent === undefined ? '\t' : options.indent;
-    var target = typeof options.target !== 'undefined' ? options.target : ts.ScriptTarget.Latest;
-    verboseMessage("taget = " + target);
-    var compilerOptions = {
-        declaration: true,
-        module: ts.ModuleKind.CommonJS,
-        target: target
-    };
-    if (options.outDir) {
-        verboseMessage("outDir = " + options.outDir);
-        compilerOptions.outDir = options.outDir;
+    function isNodeKindImportDeclaration(value) {
+        return value && value.kind === ts.SyntaxKind.ImportDeclaration;
     }
     }
-    if (options.moduleResolution) {
-        verboseMessage("moduleResolution = " + options.moduleResolution);
-        compilerOptions.moduleResolution = options.moduleResolution;
+    function isNodeKindExternalModuleReference(value) {
+        return value && value.kind === ts.SyntaxKind.ExternalModuleReference;
     }
     }
-    var filenames = getFilenames(baseDir, options.files);
-    verboseMessage('filenames:');
-    filenames.forEach(function (name) { verboseMessage('  ' + name); });
-    var excludesMap = {};
-    options.exclude = options.exclude || ['node_modules/**/*.d.ts'];
-    options.exclude && options.exclude.forEach(function (filename) {
-        glob.sync(filename).forEach(function (globFileName) {
-            excludesMap[filenameToMid(pathUtil.resolve(baseDir, globFileName))] = true;
-        });
-    });
-    if (options.exclude) {
-        verboseMessage('exclude:');
-        options.exclude.forEach(function (name) { verboseMessage('  ' + name); });
+    function isNodeKindStringLiteral(value) {
+        return value && value.kind === ts.SyntaxKind.StringLiteral;
     }
     }
-    mkdirp.sync(pathUtil.dirname(options.out));
-    /* node.js typings are missing the optional mode in createWriteStream options and therefore
-     * in TS 1.6 the strict object literal checking is throwing, therefore a hammer to the nut */
-    var output = fs.createWriteStream(options.out, { mode: parseInt('644', 8) });
-    var host = ts.createCompilerHost(compilerOptions);
-    var program = ts.createProgram(filenames, compilerOptions, host);
-    function writeFile(filename, data, writeByteOrderMark) {
-        // Compiler is emitting the non-declaration file, which we do not care about
-        if (filename.slice(-5) !== '.d.ts') {
-            return;
-        }
-        writeDeclaration(ts.createSourceFile(filename, data, target, true));
+    function isNodeKindExportDeclaration(value) {
+        return value && value.kind === ts.SyntaxKind.ExportDeclaration;
     }
     }
-    return new Promise(function (resolve, reject) {
-        output.on('close', function () { resolve(undefined); });
-        output.on('error', reject);
-        if (options.externs) {
-            options.externs.forEach(function (path) {
-                sendMessage("Writing external dependency " + path);
-                output.write(("/// <reference path=\"" + path + "\" />") + eol);
-            });
-        }
-        sendMessage('processing:');
-        var mainExportDeclaration = false;
-        var mainExportAssignment = false;
-        program.getSourceFiles().some(function (sourceFile) {
-            // Source file is a default library, or other dependency from another project, that should not be included in
-            // our bundled output
-            if (pathUtil.normalize(sourceFile.fileName).indexOf(baseDir) !== 0) {
-                return;
+    function isNodeKindExportAssignment(value) {
+        return value && value.kind === ts.SyntaxKind.ExportAssignment;
+    }
+    function generate(options) {
+        var noop = function (message) {
+            var optionalParams = [];
+            for (var _i = 1; _i < arguments.length; _i++) {
+                optionalParams[_i - 1] = arguments[_i];
             }
             }
-            if (excludesMap[filenameToMid(pathUtil.normalize(sourceFile.fileName))]) {
-                return;
+        };
+        var sendMessage = options.sendMessage || noop;
+        var verboseMessage = options.verbose ? sendMessage : noop;
+        /* following tsc behaviour, if a project is speicified, or if no files are specified then
+         * attempt to load tsconfig.json */
+        if (options.project || !options.files || options.files.length === 0) {
+            verboseMessage("project = \"" + (options.project || options.baseDir) + "\"");
+            var tsconfigFilename = pathUtil.join(options.project || options.baseDir, 'tsconfig.json');
+            if (fs.existsSync(tsconfigFilename)) {
+                verboseMessage("  parsing \"" + tsconfigFilename + "\"");
+                getTSConfig(options, tsconfigFilename);
+            }
+            else {
+                sendMessage("No \"tsconfig.json\" found at \"" + tsconfigFilename + "\"!");
+                return new Promise(function (resolve, reject) {
+                    reject(new SyntaxError('Unable to resolve configuration.'));
+                });
             }
             }
-            sendMessage("  " + sourceFile.fileName);
-            // Source file is already a declaration file so should does not need to be pre-processed by the emitter
-            if (sourceFile.fileName.slice(-5) === '.d.ts') {
-                writeDeclaration(sourceFile);
+        }
+        var baseDir = pathUtil.resolve(options.rootDir || options.project || options.baseDir);
+        verboseMessage("baseDir = \"" + baseDir + "\"");
+        var eol = options.eol || os.EOL;
+        var nonEmptyLineStart = new RegExp(eol + '(?!' + eol + '|$)', 'g');
+        var indent = options.indent === undefined ? '\t' : options.indent;
+        var target = typeof options.target !== 'undefined' ? options.target : ts.ScriptTarget.Latest;
+        verboseMessage("taget = " + target);
+        var compilerOptions = {
+            declaration: true,
+            module: ts.ModuleKind.CommonJS,
+            target: target
+        };
+        if (options.outDir) {
+            verboseMessage("outDir = " + options.outDir);
+            compilerOptions.outDir = options.outDir;
+        }
+        if (options.moduleResolution) {
+            verboseMessage("moduleResolution = " + options.moduleResolution);
+            compilerOptions.moduleResolution = options.moduleResolution;
+        }
+        var filenames = getFilenames(baseDir, options.files);
+        verboseMessage('filenames:');
+        filenames.forEach(function (name) { verboseMessage('  ' + name); });
+        var excludesMap = {};
+        options.exclude = options.exclude || ['node_modules/**/*.d.ts'];
+        options.exclude && options.exclude.forEach(function (filename) {
+            glob.sync(filename).forEach(function (globFileName) {
+                excludesMap[filenameToMid(pathUtil.resolve(baseDir, globFileName))] = true;
+            });
+        });
+        if (options.exclude) {
+            verboseMessage('exclude:');
+            options.exclude.forEach(function (name) { verboseMessage('  ' + name); });
+        }
+        mkdirp.sync(pathUtil.dirname(options.out));
+        /* node.js typings are missing the optional mode in createWriteStream options and therefore
+         * in TS 1.6 the strict object literal checking is throwing, therefore a hammer to the nut */
+        var output = fs.createWriteStream(options.out, { mode: parseInt('644', 8) });
+        var host = ts.createCompilerHost(compilerOptions);
+        var program = ts.createProgram(filenames, compilerOptions, host);
+        function writeFile(filename, data, writeByteOrderMark) {
+            // Compiler is emitting the non-declaration file, which we do not care about
+            if (filename.slice(-5) !== '.d.ts') {
                 return;
                 return;
             }
             }
-            // We can optionally output the main module if there's something to export.
-            if (options.main && options.main === (options.name + filenameToMid(sourceFile.fileName.slice(baseDir.length, -3)))) {
-                ts.forEachChild(sourceFile, function (node) {
-                    mainExportDeclaration = mainExportDeclaration || isNodeKindExportDeclaration(node);
-                    mainExportAssignment = mainExportAssignment || isNodeKindExportAssignment(node);
+            writeDeclaration(ts.createSourceFile(filename, data, target, true));
+        }
+        return new Promise(function (resolve, reject) {
+            output.on('close', function () { resolve(undefined); });
+            output.on('error', reject);
+            if (options.externs) {
+                options.externs.forEach(function (path) {
+                    sendMessage("Writing external dependency " + path);
+                    output.write(("/// <reference path=\"" + path + "\" />") + eol);
                 });
                 });
             }
             }
-            var emitOutput = program.emit(sourceFile, writeFile);
-            if (emitOutput.emitSkipped || emitOutput.diagnostics.length > 0) {
-                reject(getError(emitOutput.diagnostics
-                    .concat(program.getSemanticDiagnostics(sourceFile))
-                    .concat(program.getSyntacticDiagnostics(sourceFile))
-                    .concat(program.getDeclarationDiagnostics(sourceFile))));
-                return true;
-            }
-        });
-        if (options.main && options.name) {
-            output.write(("declare module '" + options.name + "' {") + eol + indent);
-            if (compilerOptions.target >= ts.ScriptTarget.ES6) {
-                if (mainExportAssignment) {
-                    output.write(("export {default} from '" + options.main + "';") + eol + indent);
+            sendMessage('processing:');
+            var mainExportDeclaration = false;
+            var mainExportAssignment = false;
+            program.getSourceFiles().some(function (sourceFile) {
+                // Source file is a default library, or other dependency from another project, that should not be included in
+                // our bundled output
+                if (pathUtil.normalize(sourceFile.fileName).indexOf(baseDir) !== 0) {
+                    return;
                 }
                 }
-                if (mainExportDeclaration) {
-                    output.write(("export * from '" + options.main + "';") + eol);
+                if (excludesMap[filenameToMid(pathUtil.normalize(sourceFile.fileName))]) {
+                    return;
                 }
                 }
-            }
-            else {
-                output.write(("import main = require('" + options.main + "');") + eol + indent);
-                output.write('export = main;' + eol);
-            }
-            output.write('}' + eol);
-            sendMessage("Aliased main module " + options.name + " to " + options.main);
-        }
-        sendMessage("output to \"" + options.out + "\"");
-        output.end();
-    });
-    function writeDeclaration(declarationFile) {
-        var filename = declarationFile.fileName;
-        var sourceModuleId = options.name ? options.name + filenameToMid(filename.slice(baseDir.length, -5)) : filenameToMid(filename.slice(baseDir.length + 1, -5));
-        /* For some reason, SourceFile.externalModuleIndicator is missing from 1.6+, so having
-         * to use a sledgehammer on the nut */
-        if (declarationFile.externalModuleIndicator) {
-            output.write('declare module \'' + sourceModuleId + '\' {' + eol + indent);
-            var content = processTree(declarationFile, function (node) {
-                if (isNodeKindExternalModuleReference(node)) {
-                    var expression = node.expression;
-                    if (expression.text.charAt(0) === '.') {
-                        return ' require(\'' + filenameToMid(pathUtil.join(pathUtil.dirname(sourceModuleId), expression.text)) + '\')';
-                    }
+                sendMessage("  " + sourceFile.fileName);
+                // Source file is already a declaration file so should does not need to be pre-processed by the emitter
+                if (sourceFile.fileName.slice(-5) === '.d.ts') {
+                    writeDeclaration(sourceFile);
+                    return;
                 }
                 }
-                else if (node.kind === ts.SyntaxKind.DeclareKeyword) {
-                    return '';
+                // We can optionally output the main module if there's something to export.
+                if (options.main && options.main === (options.name + filenameToMid(sourceFile.fileName.slice(baseDir.length, -3)))) {
+                    ts.forEachChild(sourceFile, function (node) {
+                        mainExportDeclaration = mainExportDeclaration || isNodeKindExportDeclaration(node);
+                        mainExportAssignment = mainExportAssignment || isNodeKindExportAssignment(node);
+                    });
                 }
                 }
-                else if (isNodeKindStringLiteral(node) && node.parent &&
-                    (isNodeKindExportDeclaration(node.parent) || isNodeKindImportDeclaration(node.parent))) {
-                    var text = node.text;
-                    if (text.charAt(0) === '.') {
-                        return " '" + filenameToMid(pathUtil.join(pathUtil.dirname(sourceModuleId), text)) + "'";
-                    }
+                var emitOutput = program.emit(sourceFile, writeFile);
+                if (emitOutput.emitSkipped || emitOutput.diagnostics.length > 0) {
+                    reject(getError(emitOutput.diagnostics
+                        .concat(program.getSemanticDiagnostics(sourceFile))
+                        .concat(program.getSyntacticDiagnostics(sourceFile))
+                        .concat(program.getDeclarationDiagnostics(sourceFile))));
+                    return true;
                 }
                 }
             });
             });
-            output.write(content.replace(nonEmptyLineStart, '$&' + indent));
-            output.write(eol + '}' + eol);
-        }
-        else {
-            output.write(declarationFile.text);
+            if (options.main && options.name) {
+                output.write(("declare module '" + options.name + "' {") + eol + indent);
+                if (compilerOptions.target >= ts.ScriptTarget.ES6) {
+                    if (mainExportAssignment) {
+                        output.write(("export {default} from '" + options.main + "';") + eol + indent);
+                    }
+                    if (mainExportDeclaration) {
+                        output.write(("export * from '" + options.main + "';") + eol);
+                    }
+                }
+                else {
+                    output.write(("import main = require('" + options.main + "');") + eol + indent);
+                    output.write('export = main;' + eol);
+                }
+                output.write('}' + eol);
+                sendMessage("Aliased main module " + options.name + " to " + options.main);
+            }
+            sendMessage("output to \"" + options.out + "\"");
+            output.end();
+        });
+        function writeDeclaration(declarationFile) {
+            var filename = declarationFile.fileName;
+            var sourceModuleId = options.name ? options.name + filenameToMid(filename.slice(baseDir.length, -5)) : filenameToMid(filename.slice(baseDir.length + 1, -5));
+            /* For some reason, SourceFile.externalModuleIndicator is missing from 1.6+, so having
+             * to use a sledgehammer on the nut */
+            if (declarationFile.externalModuleIndicator) {
+                output.write('declare module \'' + sourceModuleId + '\' {' + eol + indent);
+                var content = processTree(declarationFile, function (node) {
+                    if (isNodeKindExternalModuleReference(node)) {
+                        var expression = node.expression;
+                        if (expression.text.charAt(0) === '.') {
+                            return ' require(\'' + filenameToMid(pathUtil.join(pathUtil.dirname(sourceModuleId), expression.text)) + '\')';
+                        }
+                    }
+                    else if (node.kind === ts.SyntaxKind.DeclareKeyword) {
+                        return '';
+                    }
+                    else if (isNodeKindStringLiteral(node) && node.parent &&
+                        (isNodeKindExportDeclaration(node.parent) || isNodeKindImportDeclaration(node.parent))) {
+                        var text = node.text;
+                        if (text.charAt(0) === '.') {
+                            return " '" + filenameToMid(pathUtil.join(pathUtil.dirname(sourceModuleId), text)) + "'";
+                        }
+                    }
+                });
+                output.write(content.replace(nonEmptyLineStart, '$&' + indent));
+                output.write(eol + '}' + eol);
+            }
+            else {
+                output.write(declarationFile.text);
+            }
         }
         }
     }
     }
-}
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.default = generate;
+    Object.defineProperty(exports, "__esModule", { value: true });
+    exports.default = generate;
+});

+ 31 - 24
Build/node_modules/dts-generator/package.json

@@ -1,25 +1,32 @@
 {
 {
   "_args": [
   "_args": [
     [
     [
-      "dts-generator",
-      "/Users/shaddockh/Development/Atomic/AtomicFork/AtomicGameEngine/Build"
+      {
+        "raw": "dts-generator",
+        "scope": null,
+        "escapedName": "dts-generator",
+        "name": "dts-generator",
+        "rawSpec": "",
+        "spec": "latest",
+        "type": "tag"
+      },
+      "/Users/shaddockh/Development/Atomic/AtomicMaster/AtomicGameEngine/Build"
     ]
     ]
   ],
   ],
   "_from": "dts-generator@latest",
   "_from": "dts-generator@latest",
-  "_id": "[email protected]",
+  "_id": "dts-generator@2.0.0",
   "_inCache": true,
   "_inCache": true,
-  "_installable": true,
   "_location": "/dts-generator",
   "_location": "/dts-generator",
-  "_nodeVersion": "5.1.0",
+  "_nodeVersion": "6.5.0",
   "_npmOperationalInternal": {
   "_npmOperationalInternal": {
-    "host": "packages-5-east.internal.npmjs.com",
-    "tmp": "tmp/dts-generator-1.7.0.tgz_1456844587198_0.24912249320186675"
+    "host": "packages-12-west.internal.npmjs.com",
+    "tmp": "tmp/dts-generator-2.0.0.tgz_1476212832250_0.3914473906625062"
   },
   },
   "_npmUser": {
   "_npmUser": {
-    "email": "[email protected]",
-    "name": "sitepen"
+    "name": "sitepen",
+    "email": "labs@sitepen.com"
   },
   },
-  "_npmVersion": "3.3.12",
+  "_npmVersion": "3.10.3",
   "_phantomChildren": {
   "_phantomChildren": {
     "inflight": "1.0.4",
     "inflight": "1.0.4",
     "inherits": "2.0.1",
     "inherits": "2.0.1",
@@ -28,10 +35,11 @@
     "path-is-absolute": "1.0.0"
     "path-is-absolute": "1.0.0"
   },
   },
   "_requested": {
   "_requested": {
-    "name": "dts-generator",
     "raw": "dts-generator",
     "raw": "dts-generator",
-    "rawSpec": "",
     "scope": null,
     "scope": null,
+    "escapedName": "dts-generator",
+    "name": "dts-generator",
+    "rawSpec": "",
     "spec": "latest",
     "spec": "latest",
     "type": "tag"
     "type": "tag"
   },
   },
@@ -39,11 +47,11 @@
     "#USER",
     "#USER",
     "/"
     "/"
   ],
   ],
-  "_resolved": "https://registry.npmjs.org/dts-generator/-/dts-generator-1.7.0.tgz",
-  "_shasum": "cb6ef15bec0b43da71f1044ad50a2eba8f5ec2ed",
+  "_resolved": "https://registry.npmjs.org/dts-generator/-/dts-generator-2.0.0.tgz",
+  "_shasum": "d27a4116eaff7009cbbed9de2b933b5c5f7c6b60",
   "_shrinkwrap": null,
   "_shrinkwrap": null,
   "_spec": "dts-generator",
   "_spec": "dts-generator",
-  "_where": "/Users/shaddockh/Development/Atomic/AtomicFork/AtomicGameEngine/Build",
+  "_where": "/Users/shaddockh/Development/Atomic/AtomicMaster/AtomicGameEngine/Build",
   "bin": {
   "bin": {
     "dts-generator": "bin/dts-generator"
     "dts-generator": "bin/dts-generator"
   },
   },
@@ -57,16 +65,18 @@
   },
   },
   "description": ".d.ts generator. Generates a single d.ts bundle containing external modules from TypeScript files.",
   "description": ".d.ts generator. Generates a single d.ts bundle containing external modules from TypeScript files.",
   "devDependencies": {
   "devDependencies": {
+    "dojo-loader": ">=2.0.0-beta.5",
     "intern": "~3.0.0",
     "intern": "~3.0.0",
     "tsd": "0.6.5",
     "tsd": "0.6.5",
-    "tslint": "3.5.0"
+    "tslint": "3.11.0",
+    "typescript": "~2.0.3"
   },
   },
   "directories": {},
   "directories": {},
   "dist": {
   "dist": {
-    "shasum": "cb6ef15bec0b43da71f1044ad50a2eba8f5ec2ed",
-    "tarball": "https://registry.npmjs.org/dts-generator/-/dts-generator-1.7.0.tgz"
+    "shasum": "d27a4116eaff7009cbbed9de2b933b5c5f7c6b60",
+    "tarball": "https://registry.npmjs.org/dts-generator/-/dts-generator-2.0.0.tgz"
   },
   },
-  "gitHead": "747b0cf9c9cd45310e0357e2a5342eb721fd6e2e",
+  "gitHead": "39f06bc9bcb9d11cf93c0642042a4771c8bfce36",
   "homepage": "https://github.com/SitePen/dts-generator#readme",
   "homepage": "https://github.com/SitePen/dts-generator#readme",
   "license": "BSD-3-Clause",
   "license": "BSD-3-Clause",
   "maintainers": [
   "maintainers": [
@@ -77,17 +87,14 @@
   ],
   ],
   "name": "dts-generator",
   "name": "dts-generator",
   "optionalDependencies": {},
   "optionalDependencies": {},
-  "peerDependencies": {
-    "typescript": "^1.6.0"
-  },
   "readme": "ERROR: No README data found!",
   "readme": "ERROR: No README data found!",
   "repository": {
   "repository": {
     "type": "git",
     "type": "git",
     "url": "git+https://github.com/SitePen/dts-generator.git"
     "url": "git+https://github.com/SitePen/dts-generator.git"
   },
   },
   "scripts": {
   "scripts": {
-    "prepublish": "tsc --module commonjs --target es5 typings/tsd.d.ts index.ts bin/dts-generator.ts",
+    "prepublish": "tsc --module umd --target es5 --moduleResolution node typings/tsd.d.ts index.ts bin/dts-generator.ts",
     "test": "tests/run.sh"
     "test": "tests/run.sh"
   },
   },
-  "version": "1.7.0"
+  "version": "2.0.0"
 }
 }

+ 3 - 3
Build/node_modules/dts-generator/tests/run.sh

@@ -4,9 +4,9 @@ cd "$(dirname $0)/.."
 echo "Linting files..."
 echo "Linting files..."
 node_modules/.bin/tslint --config tslint.json index.ts bin/dts-generator.ts tests/intern.ts tests/unit/all.ts
 node_modules/.bin/tslint --config tslint.json index.ts bin/dts-generator.ts tests/intern.ts tests/unit/all.ts
 echo "Building modules..."
 echo "Building modules..."
-node_modules/.bin/tsc --module umd --target es5 --moduleResolution node node_modules/intern/typings/intern/intern.d.ts typings/tsd.d.ts tests/typings/dts-generator/dts-generator.d.ts tests/intern.ts tests/unit/all.ts
-node_modules/.bin/tsc --module commonjs --target es5 --sourcemap --moduleResolution node typings/tsd.d.ts index.ts bin/dts-generator.ts
+node_modules/.bin/tsc --module umd --target es5 --moduleResolution node node_modules/intern/typings/intern/intern.d.ts typings/tsd.d.ts tests/intern.ts tests/unit/all.ts
+node_modules/.bin/tsc --module umd --target es5 --sourcemap --moduleResolution node typings/tsd.d.ts index.ts bin/dts-generator.ts
 echo "Running intern..."
 echo "Running intern..."
-node_modules/.bin/intern-client config=tests/intern reporters=Console
+node_modules/.bin/intern-runner config=tests/intern reporters=Console
 echo "Cleanup..."
 echo "Cleanup..."
 rm -rf tmp
 rm -rf tmp

+ 5 - 5
Build/npm-shrinkwrap.json

@@ -37,9 +37,9 @@
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
     },
     },
     "dts-generator": {
     "dts-generator": {
-      "version": "1.7.0",
+      "version": "2.0.0",
       "from": "dts-generator@latest",
       "from": "dts-generator@latest",
-      "resolved": "https://registry.npmjs.org/dts-generator/-/dts-generator-1.7.0.tgz",
+      "resolved": "https://registry.npmjs.org/dts-generator/-/dts-generator-2.0.0.tgz",
       "dependencies": {
       "dependencies": {
         "glob": {
         "glob": {
           "version": "7.0.0",
           "version": "7.0.0",
@@ -192,9 +192,9 @@
       "resolved": "https://registry.npmjs.org/tslint/-/tslint-3.2.1.tgz"
       "resolved": "https://registry.npmjs.org/tslint/-/tslint-3.2.1.tgz"
     },
     },
     "typescript": {
     "typescript": {
-      "version": "1.8.10",
-      "from": "typescript@>=1.8.2 <2.0.0",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.10.tgz"
+      "version": "2.0.3",
+      "from": "typescript@>=2.0.0 <2.1.0",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.0.3.tgz"
     },
     },
     "underscore.string": {
     "underscore.string": {
       "version": "3.1.1",
       "version": "3.1.1",

+ 1 - 1
Build/package.json

@@ -1,7 +1,7 @@
 {
 {
   "name": "atomic-editor",
   "name": "atomic-editor",
   "dependencies": {
   "dependencies": {
-    "dts-generator": "^1.7.0",
+    "dts-generator": "^2.0.0",
     "fs-extra": "^0.24.0",
     "fs-extra": "^0.24.0",
     "glob": "^6.0.3",
     "glob": "^6.0.3",
     "jake": "^8.0.12",
     "jake": "^8.0.12",