@selfage/generator_cli
Version:
Code generation for message, service, and database.
69 lines • 8.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatastoreIndexBuilder = void 0;
const fs = require("fs");
const YAML = require("yaml");
const io_helper_1 = require("./io_helper");
class DatastoreIndexBuilder {
constructor(indexFile) {
this.indexFile = indexFile;
this.jsonToIndexes = new Map();
}
static create(indexFile) {
return new DatastoreIndexBuilder(indexFile).init();
}
init() {
if (fs.existsSync(this.indexFile)) {
let indexList = YAML.parse(fs.readFileSync(this.indexFile).toString());
if (indexList && indexList.indexes) {
for (let index of indexList.indexes) {
this.jsonToIndexes.set(JSON.stringify(index), index);
}
}
}
return this;
}
addIndex(messageName, query) {
// Relies on ES6 Map to keep insertion order.
let fieldToDirections = new Map();
if (query.filters) {
for (let filter of query.filters) {
fieldToDirections.set(filter.fieldName, undefined);
}
}
if (query.orderings) {
for (let ordering of query.orderings) {
fieldToDirections.set(ordering.fieldName, ordering.descending);
}
}
if (fieldToDirections.size < 2) {
return;
}
let compositeIndexProperties = new Array();
for (let [name, descending] of fieldToDirections) {
let direction;
if (descending) {
direction = "desc";
}
else {
direction = "asc";
}
compositeIndexProperties.push({ name, direction });
}
let compsiteIndex = {
kind: messageName,
properties: compositeIndexProperties,
};
this.jsonToIndexes.set(JSON.stringify(compsiteIndex), compsiteIndex);
}
writeFileSync(dryRun) {
let sortedIndexes = new Array();
for (let key of Array.from(this.jsonToIndexes.keys()).sort()) {
sortedIndexes.push(this.jsonToIndexes.get(key));
}
let indexContent = YAML.stringify({ indexes: sortedIndexes });
(0, io_helper_1.writeFileSync)(this.indexFile, indexContent, dryRun);
}
}
exports.DatastoreIndexBuilder = DatastoreIndexBuilder;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXN0b3JlX2luZGV4X2J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkYXRhc3RvcmVfaW5kZXhfYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBMEI7QUFDMUIsNkJBQThCO0FBQzlCLDJDQUE0QztBQWtCNUMsTUFBYSxxQkFBcUI7SUFHaEMsWUFBMkIsU0FBaUI7UUFBakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUZwQyxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO0lBRVgsQ0FBQztJQUV6QyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQWlCO1FBQ3BDLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN4QixFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FDckIsQ0FBQztZQUN4QixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25DLEtBQUssSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxRQUFRLENBQUMsV0FBbUIsRUFBRSxLQUE2QjtRQUNoRSw2Q0FBNkM7UUFDN0MsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQUNuRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLHdCQUF3QixHQUFHLElBQUksS0FBSyxFQUEwQixDQUFDO1FBQ25FLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pELElBQUksU0FBaUIsQ0FBQztZQUN0QixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDcEIsQ0FBQztZQUNELHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFJLGFBQWEsR0FBRztZQUNsQixJQUFJLEVBQUUsV0FBVztZQUNqQixVQUFVLEVBQUUsd0JBQXdCO1NBQ3JDLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxhQUFhLENBQUMsTUFBZ0I7UUFDbkMsSUFBSSxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7UUFDaEQsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzdELGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUEseUJBQWEsRUFBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0Y7QUFqRUQsc0RBaUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuaW1wb3J0IFlBTUwgPSByZXF1aXJlKFwieWFtbFwiKTtcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiLi9pb19oZWxwZXJcIjtcbmltcG9ydCB7IERhdGFzdG9yZVF1ZXJ5VGVtcGxhdGUgfSBmcm9tIFwiLi9kZWZpbml0aW9uXCI7XG5cbi8vIE1pbWljIHRoZSBzdHJ1Y3R1cmUgb2YgZGF0YXN0b3JlIGNvbXBvc2l0ZSBpbmRleCB5YW1sLlxuaW50ZXJmYWNlIENvbXBvc2l0ZUluZGV4UHJvcGVydHkge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRpcmVjdGlvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbXBvc2l0ZUluZGV4IHtcbiAga2luZDogc3RyaW5nO1xuICBwcm9wZXJ0aWVzOiBBcnJheTxDb21wb3NpdGVJbmRleFByb3BlcnR5Pjtcbn1cblxuaW50ZXJmYWNlIENvbXBvc2l0ZUluZGV4TGlzdCB7XG4gIGluZGV4ZXM6IEFycmF5PENvbXBvc2l0ZUluZGV4Pjtcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFzdG9yZUluZGV4QnVpbGRlciB7XG4gIHByaXZhdGUganNvblRvSW5kZXhlcyA9IG5ldyBNYXA8c3RyaW5nLCBDb21wb3NpdGVJbmRleD4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBpbmRleEZpbGU6IHN0cmluZykge31cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShpbmRleEZpbGU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRGF0YXN0b3JlSW5kZXhCdWlsZGVyKGluZGV4RmlsZSkuaW5pdCgpO1xuICB9XG5cbiAgcHVibGljIGluaXQoKTogdGhpcyB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmModGhpcy5pbmRleEZpbGUpKSB7XG4gICAgICBsZXQgaW5kZXhMaXN0ID0gWUFNTC5wYXJzZShcbiAgICAgICAgZnMucmVhZEZpbGVTeW5jKHRoaXMuaW5kZXhGaWxlKS50b1N0cmluZygpXG4gICAgICApIGFzIENvbXBvc2l0ZUluZGV4TGlzdDtcbiAgICAgIGlmIChpbmRleExpc3QgJiYgaW5kZXhMaXN0LmluZGV4ZXMpIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggb2YgaW5kZXhMaXN0LmluZGV4ZXMpIHtcbiAgICAgICAgICB0aGlzLmpzb25Ub0luZGV4ZXMuc2V0KEpTT04uc3RyaW5naWZ5KGluZGV4KSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFkZEluZGV4KG1lc3NhZ2VOYW1lOiBzdHJpbmcsIHF1ZXJ5OiBEYXRhc3RvcmVRdWVyeVRlbXBsYXRlKTogdm9pZCB7XG4gICAgLy8gUmVsaWVzIG9uIEVTNiBNYXAgdG8ga2VlcCBpbnNlcnRpb24gb3JkZXIuXG4gICAgbGV0IGZpZWxkVG9EaXJlY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgaWYgKHF1ZXJ5LmZpbHRlcnMpIHtcbiAgICAgIGZvciAobGV0IGZpbHRlciBvZiBxdWVyeS5maWx0ZXJzKSB7XG4gICAgICAgIGZpZWxkVG9EaXJlY3Rpb25zLnNldChmaWx0ZXIuZmllbGROYW1lLCB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnkub3JkZXJpbmdzKSB7XG4gICAgICBmb3IgKGxldCBvcmRlcmluZyBvZiBxdWVyeS5vcmRlcmluZ3MpIHtcbiAgICAgICAgZmllbGRUb0RpcmVjdGlvbnMuc2V0KG9yZGVyaW5nLmZpZWxkTmFtZSwgb3JkZXJpbmcuZGVzY2VuZGluZyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWVsZFRvRGlyZWN0aW9ucy5zaXplIDwgMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb21wb3NpdGVJbmRleFByb3BlcnRpZXMgPSBuZXcgQXJyYXk8Q29tcG9zaXRlSW5kZXhQcm9wZXJ0eT4oKTtcbiAgICBmb3IgKGxldCBbbmFtZSwgZGVzY2VuZGluZ10gb2YgZmllbGRUb0RpcmVjdGlvbnMpIHtcbiAgICAgIGxldCBkaXJlY3Rpb246IHN0cmluZztcbiAgICAgIGlmIChkZXNjZW5kaW5nKSB7XG4gICAgICAgIGRpcmVjdGlvbiA9IFwiZGVzY1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uID0gXCJhc2NcIjtcbiAgICAgIH1cbiAgICAgIGNvbXBvc2l0ZUluZGV4UHJvcGVydGllcy5wdXNoKHsgbmFtZSwgZGlyZWN0aW9uIH0pO1xuICAgIH1cbiAgICBsZXQgY29tcHNpdGVJbmRleCA9IHtcbiAgICAgIGtpbmQ6IG1lc3NhZ2VOYW1lLFxuICAgICAgcHJvcGVydGllczogY29tcG9zaXRlSW5kZXhQcm9wZXJ0aWVzLFxuICAgIH07XG4gICAgdGhpcy5qc29uVG9JbmRleGVzLnNldChKU09OLnN0cmluZ2lmeShjb21wc2l0ZUluZGV4KSwgY29tcHNpdGVJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVGaWxlU3luYyhkcnlSdW4/OiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IHNvcnRlZEluZGV4ZXMgPSBuZXcgQXJyYXk8Q29tcG9zaXRlSW5kZXg+KCk7XG4gICAgZm9yIChsZXQga2V5IG9mIEFycmF5LmZyb20odGhpcy5qc29uVG9JbmRleGVzLmtleXMoKSkuc29ydCgpKSB7XG4gICAgICBzb3J0ZWRJbmRleGVzLnB1c2godGhpcy5qc29uVG9JbmRleGVzLmdldChrZXkpKTtcbiAgICB9XG4gICAgbGV0IGluZGV4Q29udGVudCA9IFlBTUwuc3RyaW5naWZ5KHsgaW5kZXhlczogc29ydGVkSW5kZXhlcyB9KTtcbiAgICB3cml0ZUZpbGVTeW5jKHRoaXMuaW5kZXhGaWxlLCBpbmRleENvbnRlbnQsIGRyeVJ1bik7XG4gIH1cbn1cbiJdfQ==