UNPKG

3.69 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const LoggerFactory_1 = __importDefault(require("./java/LoggerFactory"));
7const File_1 = __importDefault(require("./java/File"));
8const fs_1 = __importDefault(require("fs"));
9const path_1 = __importDefault(require("path"));
10const File = File_1.default;
11const ABSTRACT_SEARCH_PATHS = [path_1.default.join(__dirname, '..', 'resources')];
12class AbstractGenerator {
13 writeToFile(filename, contents) {
14 Log.info('writing file ' + filename);
15 const f = new File(filename);
16 f.getParentFile().mkdirs();
17 return fs_1.default.writeFileSync(f.getPath(), contents, 'utf8');
18 }
19 readTemplate(name) {
20 const reader = this.getTemplateReader(name);
21 if (reader == null) {
22 throw new Error(`no file found for "${name}"`);
23 }
24 return reader;
25 }
26 getTemplateReader(name) {
27 const f = this._resolveFilePath(name);
28 if (f == null) {
29 throw new Error("can't load template " + name);
30 }
31 try {
32 return fs_1.default.readFileSync(f, 'utf-8');
33 }
34 catch (e) {
35 Log.trace(e);
36 }
37 }
38 /**
39 * Get the template file path with template dir prepended, and use the
40 * library template if exists.
41 *
42 * Resolve from embeddedTemplate/library, than embeddedTemplate, then templateDir
43 *
44 * @param config Codegen config
45 * @param templateFile Template file
46 * @return String Full template file path
47 */
48 getFullTemplateFile(config, templateFile) {
49 const library = config.getLibrary();
50 if (library) {
51 const libTemplateFile = this._resolveFilePath(config.embeddedTemplateDir(), 'libraries', library, templateFile);
52 if (libTemplateFile != null) {
53 return libTemplateFile;
54 }
55 }
56 const embeddedTemplate = this._resolveFilePath(config.embeddedTemplateDir(), templateFile);
57 if (embeddedTemplate != null) {
58 return embeddedTemplate;
59 }
60 const template = this._resolveFilePath(config.templateDir(), templateFile);
61 if (template != null) {
62 return template;
63 }
64 }
65 readResourceContents(resourceFilePath) {
66 const file = this._resolveFilePath(resourceFilePath);
67 if (file == null) {
68 Log.warn(`Could not resolve ${resourceFilePath}`);
69 return;
70 }
71 return fs_1.default.readFileSync(file, 'utf8');
72 }
73 embeddedTemplateExists(name) {
74 const f = this._resolveFile(name);
75 return f != null;
76 }
77 getCPResourcePath(name) {
78 if (!('/' === File.separator)) {
79 return name.replace(new RegExp(File.separator, 'g'), '/');
80 }
81 return name;
82 }
83 _resolveFilePath(...paths) {
84 const f = this._resolveFile(...paths);
85 if (f == null) {
86 return;
87 }
88 return f.getAbsolutePath();
89 }
90 _resolveFile(...paths) {
91 for (const p of AbstractGenerator.SEARCH_PATHS) {
92 const file = new File(p, ...paths);
93 if (file.exists()) {
94 return file;
95 }
96 }
97 const last = new File(paths.shift(), ...paths);
98 if (last.exists()) {
99 return last;
100 }
101 }
102}
103exports.default = AbstractGenerator;
104AbstractGenerator.SEARCH_PATHS = ABSTRACT_SEARCH_PATHS;
105const Log = LoggerFactory_1.default.getLogger(AbstractGenerator);
106//# sourceMappingURL=AbstractGenerator.js.map
\No newline at end of file