@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
JavaScript
;
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;
};
TsComplie.ρAnn = 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