capnpc-ts
Version:
Cap'n Proto schema compiler for TypeScript.
52 lines • 2.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.writeTsFiles = exports.printSourceFiles = exports.loadRequest = exports.compile = void 0;
const tslib_1 = require("tslib");
const debug_1 = tslib_1.__importDefault(require("debug"));
const fs_1 = tslib_1.__importDefault(require("fs"));
const mkdirp_1 = tslib_1.__importDefault(require("mkdirp"));
const path_1 = tslib_1.__importDefault(require("path"));
const typescript_1 = tslib_1.__importDefault(require("typescript"));
const code_generator_context_1 = require("./code-generator-context");
const constants_1 = require("./constants");
const file_1 = require("./file");
const generators_1 = require("./generators");
const trace = debug_1.default("capnpc:compile");
trace("load");
function compile(ctx) {
generators_1.generateCapnpImport(ctx);
generators_1.generateNestedImports(ctx);
generators_1.generateFileId(ctx);
file_1.lookupNode(ctx, ctx.file)
.getNestedNodes()
.map((n) => file_1.lookupNode(ctx, n))
.forEach((n) => generators_1.generateNode(ctx, n));
ctx.concreteLists.forEach(([fullClassName, field]) => generators_1.generateConcreteListInitializer(ctx, fullClassName, field));
const sourceFile = typescript_1.default.createSourceFile(ctx.tsPath, "", typescript_1.default.ScriptTarget.Latest, false, typescript_1.default.ScriptKind.TS);
const printer = typescript_1.default.createPrinter();
const source = ctx.statements.map((s) => printer.printNode(typescript_1.default.EmitHint.Unspecified, s, sourceFile)).join("\n") + "\n";
return constants_1.SOURCE_COMMENT + source;
}
exports.compile = compile;
function loadRequest(req) {
trace("loadRequest(%s)", req);
const ctx = new code_generator_context_1.CodeGeneratorContext();
ctx.files = req.getRequestedFiles().map((file) => file_1.loadRequestedFile(req, file));
return ctx;
}
exports.loadRequest = loadRequest;
function printSourceFiles(ctx) {
trace("printSourceFiles()");
return ctx.files.map(compile);
}
exports.printSourceFiles = printSourceFiles;
function writeTsFiles(ctx) {
trace("writeTsFiles()");
ctx.files.forEach((f) => {
trace("writing %s", f.tsPath);
mkdirp_1.default.sync(path_1.default.dirname(f.tsPath));
fs_1.default.writeFileSync(f.tsPath, compile(f), { encoding: "utf-8" });
});
}
exports.writeTsFiles = writeTsFiles;
//# sourceMappingURL=compiler.js.map