abapmerge
Version:
Merge ABAP INCLUDEs into single file
163 lines • 6.86 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logic = void 0;
var fs = __importStar(require("fs"));
var path = __importStar(require("path"));
var file_1 = __importDefault(require("./file"));
var file_list_1 = __importDefault(require("./file_list"));
var merge_1 = __importDefault(require("./merge"));
var commander_1 = require("commander");
var package_json_1 = __importDefault(require("../package.json"));
var Logic = /** @class */ (function () {
function Logic() {
}
Logic.isTextFile = function (filepath) {
return Logic.textFiles.has(path.extname(filepath).toLowerCase());
};
Logic.readFiles = function (dir, pre) {
var e_1, _a;
if (pre === void 0) { pre = ""; }
var files = fs.readdirSync(dir);
var list = new file_list_1.default();
try {
for (var files_1 = __values(files), files_1_1 = files_1.next(); !files_1_1.done; files_1_1 = files_1.next()) {
var file = files_1_1.value;
var filepath = path.join(dir, file);
if (fs.lstatSync(filepath).isFile()) {
if (Logic.isTextFile(filepath)) {
var contents = fs
.readFileSync(filepath, "utf8")
.replace(/\t/g, " ") // remove tabs
.replace(/\r/g, ""); // unify EOL
list.push(new file_1.default(file, contents));
}
else {
var buffer = fs.readFileSync(filepath);
list.push(new file_1.default(file, buffer));
}
}
else {
list.concat(this.readFiles(filepath, path.join(pre, file)));
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (files_1_1 && !files_1_1.done && (_a = files_1.return)) _a.call(files_1);
}
finally { if (e_1) throw e_1.error; }
}
return list;
};
Logic.parseArgs = function (args) {
var commander = new commander_1.Command();
commander
.storeOptionsAsProperties(false)
.description(package_json_1.default.description)
.version(package_json_1.default.version)
.option("-f, --skip-fugr", "ignore unused function groups", false)
.option("-o, --output <file>", "output to a file (instead of stdout)")
.option("--without-footer", "do not append footers", false)
.option("--allow-unused", "allow unused files", false)
.option("-c, --change-report-name <newreportname>", "changes report name in REPORT clause in source code")
.arguments("<entrypoint>");
commander.exitOverride(function (err) {
if (err.code === "commander.missingArgument") {
throw Error("Specify entrypoint file name");
}
process.exit(err.exitCode);
});
commander.parse(args);
if (!commander.args.length) {
throw Error("Specify entrypoint file name");
}
else if (commander.args.length > 1) {
throw Error("Specify just one entrypoint");
}
var entrypoint = commander.args[0];
var entryDir = path.dirname(entrypoint);
var entryFilename = path.basename(entrypoint);
var cmdOpts = commander.opts();
return {
entryDir: entryDir,
entryFilename: entryFilename,
skipFUGR: cmdOpts.skipFugr,
noFooter: cmdOpts.withoutFooter,
allowUnused: cmdOpts.allowUnused,
newReportName: cmdOpts.changeReportName,
outputFile: cmdOpts.output,
};
};
Logic.run = function (args) {
try {
var output = "";
var parsedArgs = Logic.parseArgs(args);
var entrypoint = path.join(parsedArgs.entryDir, parsedArgs.entryFilename);
if (!fs.existsSync(entrypoint)) {
throw new Error("File \"".concat(entrypoint, "\" does not exist"));
}
var entryObjectName = parsedArgs.entryFilename.split(".")[0];
output = merge_1.default.merge(Logic.readFiles(parsedArgs.entryDir), entryObjectName, {
skipFUGR: parsedArgs.skipFUGR,
newReportName: parsedArgs.newReportName,
allowUnused: parsedArgs.allowUnused,
appendAbapmergeMarker: parsedArgs.noFooter === false,
});
if (parsedArgs.outputFile) {
fs.writeFileSync(parsedArgs.outputFile, output, "utf-8");
}
else {
process.stdout.write(output);
}
if (output === undefined)
throw new Error("output undefined, hmm?");
return 0;
}
catch (e) {
process.stderr.write(e.message || e.toString());
return 1;
}
};
Logic.textFiles = new Set([".abap", ".xml", ".css", ".js"]);
return Logic;
}());
exports.Logic = Logic;
//# sourceMappingURL=cli.js.map