ern-api-gen
Version:
Electrode Native API generator
106 lines • 3.69 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const LoggerFactory_1 = __importDefault(require("./java/LoggerFactory"));
const File_1 = __importDefault(require("./java/File"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const File = File_1.default;
const ABSTRACT_SEARCH_PATHS = [path_1.default.join(__dirname, '..', 'resources')];
class AbstractGenerator {
writeToFile(filename, contents) {
Log.info('writing file ' + filename);
const f = new File(filename);
f.getParentFile().mkdirs();
return fs_1.default.writeFileSync(f.getPath(), contents, 'utf8');
}
readTemplate(name) {
const reader = this.getTemplateReader(name);
if (reader == null) {
throw new Error(`no file found for "${name}"`);
}
return reader;
}
getTemplateReader(name) {
const f = this._resolveFilePath(name);
if (f == null) {
throw new Error("can't load template " + name);
}
try {
return fs_1.default.readFileSync(f, 'utf-8');
}
catch (e) {
Log.trace(e);
}
}
/**
* Get the template file path with template dir prepended, and use the
* library template if exists.
*
* Resolve from embeddedTemplate/library, than embeddedTemplate, then templateDir
*
* @param config Codegen config
* @param templateFile Template file
* @return String Full template file path
*/
getFullTemplateFile(config, templateFile) {
const library = config.getLibrary();
if (library) {
const libTemplateFile = this._resolveFilePath(config.embeddedTemplateDir(), 'libraries', library, templateFile);
if (libTemplateFile != null) {
return libTemplateFile;
}
}
const embeddedTemplate = this._resolveFilePath(config.embeddedTemplateDir(), templateFile);
if (embeddedTemplate != null) {
return embeddedTemplate;
}
const template = this._resolveFilePath(config.templateDir(), templateFile);
if (template != null) {
return template;
}
}
readResourceContents(resourceFilePath) {
const file = this._resolveFilePath(resourceFilePath);
if (file == null) {
Log.warn(`Could not resolve ${resourceFilePath}`);
return;
}
return fs_1.default.readFileSync(file, 'utf8');
}
embeddedTemplateExists(name) {
const f = this._resolveFile(name);
return f != null;
}
getCPResourcePath(name) {
if (!('/' === File.separator)) {
return name.replace(new RegExp(File.separator, 'g'), '/');
}
return name;
}
_resolveFilePath(...paths) {
const f = this._resolveFile(...paths);
if (f == null) {
return;
}
return f.getAbsolutePath();
}
_resolveFile(...paths) {
for (const p of AbstractGenerator.SEARCH_PATHS) {
const file = new File(p, ...paths);
if (file.exists()) {
return file;
}
}
const last = new File(paths.shift(), ...paths);
if (last.exists()) {
return last;
}
}
}
AbstractGenerator.SEARCH_PATHS = ABSTRACT_SEARCH_PATHS;
exports.default = AbstractGenerator;
const Log = LoggerFactory_1.default.getLogger(AbstractGenerator);
//# sourceMappingURL=AbstractGenerator.js.map