UNPKG

typescript-to-json-schema-extra

Version:
53 lines 2.23 kB
"use strict"; 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