UNPKG

@tsdi/pack

Version:

@tsdi/pack is simple build tasks, base on AOP, Ioc container, via @tsdi. dev build pack activities.

126 lines (124 loc) 5.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TsComplie = void 0; var tslib_1 = require("tslib"); var ioc_1 = require("@tsdi/ioc"); var annotations_1 = require("@tsdi/annotations"); var typescript_1 = require("typescript"); var path = require("path"); var exps_1 = require("./exps"); var TsComplie = /** @class */ (function () { function TsComplie() { } TsComplie.prototype.compile = function (options, fileName, sourceText, annotation) { var host = typescript_1.createCompilerHost(options); var outputs = new Map(); console.log(fileName); var tempSourceFile = typescript_1.createSourceFile(fileName, annotation ? annotations_1.iocAnnotations(sourceText) : sourceText, typescript_1.ScriptTarget.Latest, false, typescript_1.ScriptKind.TS); host.getSourceFile = function (name, languageVersion, error) { if (name === fileName) { return tempSourceFile; } }; host.writeFile = function (fileName, contents) { return outputs.set(fileName, contents); }; var old = this.program; var program = this.program = typescript_1.createProgram([fileName], options, host, old); var emitResult = program.emit(); var allDiagnostics = program.getSyntacticDiagnostics(tempSourceFile).concat(emitResult.diagnostics); if (!this.validateDiagnostics(allDiagnostics, true)) { return { code: null, map: null, emitSkipped: true, }; } var emitSkipped = emitResult.emitSkipped; var code, map = null, dts; outputs.forEach(function (source, f) { if (exps_1.tsdexp.test(f)) { dts = source; } else if (exps_1.jsFileExp.test(f)) { code = source; } else if (exps_1.mapexp.test(f)) { map = source; } }); outputs.clear(); return { code: code, map: map, dts: dts, emitSkipped: emitSkipped }; }; TsComplie.prototype.transpileModule = function (compilerOptions, fileName, code, annotation) { var transformed = typescript_1.transpileModule(annotation ? annotations_1.iocAnnotations(code) : code, { fileName: fileName, reportDiagnostics: true, compilerOptions: compilerOptions, transformers: { afterDeclarations: [] } }); // All errors except `Cannot compile modules into 'es6' when targeting 'ES5' or lower.` var diagnostics = transformed.diagnostics ? transformed.diagnostics.filter(function (diagnostic) { return diagnostic.code !== 1204; }) : []; if (!this.validateDiagnostics(diagnostics, true)) { throw new Error("There were TypeScript errors transpiling"); } return { code: transformed.outputText, // Rollup expects `map` to be an object so we must parse the string map: transformed.sourceMapText ? JSON.parse(transformed.sourceMapText) : null }; }; TsComplie.prototype.parseTsconfig = function (projectDirectory, tsconfig, settings) { var compilerOptions; // let projectReferences: ReadonlyArray<ProjectReference>; var settingsResult = typescript_1.convertCompilerOptionsFromJson(settings || {}, projectDirectory); // if (settingsResult.errors) { // throw settingsResult.errors; // } compilerOptions = settingsResult.options; var tsConfig = typescript_1.readConfigFile(tsconfig, typescript_1.sys.readFile); if (tsConfig.error) { console.log(tsConfig.error.messageText); } var parsed = typescript_1.parseJsonConfigFileContent(tsConfig.config || {}, this.getTsconfigSystem(typescript_1.sys), path.resolve(projectDirectory), compilerOptions, tsconfig); this.validateDiagnostics(parsed.errors); return parsed; }; TsComplie.prototype.getTsconfigSystem = function (sys) { return { useCaseSensitiveFileNames: sys.useCaseSensitiveFileNames, readDirectory: function () { return []; }, fileExists: sys.fileExists, readFile: sys.readFile }; }; TsComplie.prototype.validateDiagnostics = function (diagnostics, strict) { // Print error diagnostics. var hasError = diagnostics.some(function (diag) { return diag.category === typescript_1.DiagnosticCategory.Error; }); if (hasError) { // Throw only if we're in strict mode, otherwise return original content. if (strict) { var errorMessages = typescript_1.formatDiagnostics(diagnostics, { getCurrentDirectory: function () { return typescript_1.sys.getCurrentDirectory(); }, getNewLine: function () { return typescript_1.sys.newLine; }, getCanonicalFileName: function (f) { return f; }, }); throw new Error("\n TS failed with the following error messages:\n " + errorMessages + "\n "); } else { return false; } } return true; }; TsComplieAnn = function () { return { "name": "TsComplie", "params": { "compile": ["options", "fileName", "sourceText", "annotation"], "transpileModule": ["compilerOptions", "fileName", "code", "annotation"], "parseTsconfig": ["projectDirectory", "tsconfig", "settings"], "getTsconfigSystem": ["sys"], "validateDiagnostics": ["diagnostics", "strict"] } }; }; TsComplie = tslib_1.__decorate([ ioc_1.Injectable() ], TsComplie); return TsComplie; }()); exports.TsComplie = TsComplie; //# sourceMappingURL=sourcemaps/ts-complie.js.map