typescript-to-json-schema-extra
Version:
Some extra features for typescript-to-json-schema
53 lines • 2.23 kB
JavaScript
;
var ts = require("typescript");
var glob = require("glob");
var path = require("path");
var dist_1 = require("typescript-to-json-schema/dist");
var readFile = ts.sys.readFile;
function createProgramFromConfig(configFile) {
var config = ts.parseConfigFileTextToJson(configFile, ts.sys.readFile(configFile));
if (config.error) {
throw new dist_1.DiagnosticError([config.error]);
}
else if (!config.config) {
throw new dist_1.LogicError("Invalid parsed config file \"" + configFile + "\"");
}
var parseResult = ts.parseJsonConfigFileContent(config.config, ts.sys, path.dirname(configFile), {}, configFile);
parseResult.options.noEmit = true;
delete parseResult.options.out;
delete parseResult.options.outDir;
delete parseResult.options.outFile;
delete parseResult.options.declaration;
return ts.createProgram(parseResult.fileNames, parseResult.options);
}
function createProgramFromGlob(fileGlob, options) {
var opts = Object.assign({
noEmit: true,
emitDecoratorMetadata: true,
experimentalDecorators: true,
target: ts.ScriptTarget.ES5,
module: ts.ModuleKind.CommonJS,
strictNullChecks: false,
}, options);
var names = Array.isArray(fileGlob) ? fileGlob : glob.sync(path.resolve(fileGlob));
return ts.createProgram(names, opts);
}
function createProgram(config, options) {
ts.sys.readFile = function (name, encoding) {
var content = readFile(name, encoding);
if (config.lineComment && /\.ts$/.test(name) && !/\.d\.ts$/.test(name)) {
return content.replace(/^([ \t]*\w[^\/\n]+)\/\/([^\n]+)$/gm, function (match, p1, p2) { return "/**\n* " + p2.replace(/@/g, "\n* @") + "\n*/\n" + p1; });
}
return content;
};
var program = !config.paths && path.extname(config.path) === ".json" ?
createProgramFromConfig(config.path) :
createProgramFromGlob(config.paths || config.path, options);
var diagnostics = ts.getPreEmitDiagnostics(program);
if (diagnostics.length) {
throw new dist_1.DiagnosticError(diagnostics);
}
return program;
}
exports.createProgram = createProgram;
//# sourceMappingURL=program.js.map