@selfage/generator_cli
Version:
Code generation for message, service, and database.
47 lines • 5.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefinitionResolver = void 0;
const fs = require("fs");
const resolve = require("resolve");
const yaml_1 = require("yaml");
class DefinitionResolver {
constructor(baseModulePath) {
this.baseModulePath = baseModulePath;
this.cachedPathToNameToDefinitions = new Map();
}
resolve(loggingPrefix, name, importPath) {
if (!importPath) {
importPath = this.baseModulePath;
}
let filePath = resolve.sync(importPath, {
basedir: ".",
extensions: [".yaml"],
});
let nameToDefinitions = this.cachedPathToNameToDefinitions.get(filePath);
if (!nameToDefinitions) {
nameToDefinitions = new Map();
this.cachedPathToNameToDefinitions.set(filePath, nameToDefinitions);
let yamlStr = fs.readFileSync(filePath).toString();
let definitions;
try {
definitions = (0, yaml_1.parse)(yamlStr);
}
catch (e) {
e.message =
`${loggingPrefix} failed to parse YAML read from "${filePath}".\n` +
e.message;
throw e;
}
for (let definition of definitions) {
nameToDefinitions.set(definition.name, definition);
}
}
let definition = nameToDefinitions.get(name);
if (!definition) {
throw new Error(`${loggingPrefix} message/enum definition ${name} is not found in "${filePath}".`);
}
return definition;
}
}
exports.DefinitionResolver = DefinitionResolver;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbl9yZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImRlZmluaXRpb25fcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQTBCO0FBQzFCLG1DQUFvQztBQUVwQywrQkFBNkI7QUFFN0IsTUFBYSxrQkFBa0I7SUFNN0IsWUFBMkIsY0FBc0I7UUFBdEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFMekMsa0NBQTZCLEdBQUcsSUFBSSxHQUFHLEVBRzVDLENBQUM7SUFFZ0QsQ0FBQztJQUU5QyxPQUFPLENBQ1osYUFBcUIsRUFDckIsSUFBWSxFQUNaLFVBQW1CO1FBRW5CLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdEMsT0FBTyxFQUFFLEdBQUc7WUFDWixVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1lBQ2xELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFFcEUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuRCxJQUFJLFdBQThCLENBQUM7WUFDbkMsSUFBSSxDQUFDO2dCQUNILFdBQVcsR0FBRyxJQUFBLFlBQUssRUFBQyxPQUFPLENBQXNCLENBQUM7WUFDcEQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLE9BQU87b0JBQ1AsR0FBRyxhQUFhLG9DQUFvQyxRQUFRLE1BQU07d0JBQ2xFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ1osTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1lBQ0QsS0FBSyxJQUFJLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDbkMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxhQUFhLDRCQUE0QixJQUFJLHFCQUFxQixRQUFRLElBQUksQ0FDbEYsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUEvQ0QsZ0RBK0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuaW1wb3J0IHJlc29sdmUgPSByZXF1aXJlKFwicmVzb2x2ZVwiKTtcbmltcG9ydCB7IERlZmluaXRpb24gfSBmcm9tIFwiLi9kZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gXCJ5YW1sXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWZpbml0aW9uUmVzb2x2ZXIge1xuICBwcml2YXRlIGNhY2hlZFBhdGhUb05hbWVUb0RlZmluaXRpb25zID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgTWFwPHN0cmluZywgRGVmaW5pdGlvbj5cbiAgPigpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhc2VNb2R1bGVQYXRoOiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIHJlc29sdmUoXG4gICAgbG9nZ2luZ1ByZWZpeDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpbXBvcnRQYXRoPzogc3RyaW5nLFxuICApOiBEZWZpbml0aW9uIHtcbiAgICBpZiAoIWltcG9ydFBhdGgpIHtcbiAgICAgIGltcG9ydFBhdGggPSB0aGlzLmJhc2VNb2R1bGVQYXRoO1xuICAgIH1cbiAgICBsZXQgZmlsZVBhdGggPSByZXNvbHZlLnN5bmMoaW1wb3J0UGF0aCwge1xuICAgICAgYmFzZWRpcjogXCIuXCIsXG4gICAgICBleHRlbnNpb25zOiBbXCIueWFtbFwiXSxcbiAgICB9KTtcbiAgICBsZXQgbmFtZVRvRGVmaW5pdGlvbnMgPSB0aGlzLmNhY2hlZFBhdGhUb05hbWVUb0RlZmluaXRpb25zLmdldChmaWxlUGF0aCk7XG4gICAgaWYgKCFuYW1lVG9EZWZpbml0aW9ucykge1xuICAgICAgbmFtZVRvRGVmaW5pdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGVmaW5pdGlvbj4oKTtcbiAgICAgIHRoaXMuY2FjaGVkUGF0aFRvTmFtZVRvRGVmaW5pdGlvbnMuc2V0KGZpbGVQYXRoLCBuYW1lVG9EZWZpbml0aW9ucyk7XG5cbiAgICAgIGxldCB5YW1sU3RyID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoKS50b1N0cmluZygpO1xuICAgICAgbGV0IGRlZmluaXRpb25zOiBBcnJheTxEZWZpbml0aW9uPjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRlZmluaXRpb25zID0gcGFyc2UoeWFtbFN0cikgYXMgQXJyYXk8RGVmaW5pdGlvbj47XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGUubWVzc2FnZSA9XG4gICAgICAgICAgYCR7bG9nZ2luZ1ByZWZpeH0gZmFpbGVkIHRvIHBhcnNlIFlBTUwgcmVhZCBmcm9tIFwiJHtmaWxlUGF0aH1cIi5cXG5gICtcbiAgICAgICAgICBlLm1lc3NhZ2U7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBkZWZpbml0aW9uIG9mIGRlZmluaXRpb25zKSB7XG4gICAgICAgIG5hbWVUb0RlZmluaXRpb25zLnNldChkZWZpbml0aW9uLm5hbWUsIGRlZmluaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgZGVmaW5pdGlvbiA9IG5hbWVUb0RlZmluaXRpb25zLmdldChuYW1lKTtcbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7bG9nZ2luZ1ByZWZpeH0gbWVzc2FnZS9lbnVtIGRlZmluaXRpb24gJHtuYW1lfSBpcyBub3QgZm91bmQgaW4gXCIke2ZpbGVQYXRofVwiLmAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxufVxuIl19