@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
44 lines • 1.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const quads_1 = require("../util/quads");
const log_1 = require("../util/log");
const files_1 = require("../util/files");
const script_1 = require("./common/script");
const shell_1 = require("../r-bridge/shell");
const retriever_1 = require("../r-bridge/retriever");
const config_1 = require("../config");
const options = (0, script_1.processCommandLineArgs)('export-quads', [], {
subtitle: 'Generate RDF N-Quads from the AST of a given R script',
examples: [
'{bold -i} {italic example.R} {bold --output} {italic "example.quads"}',
'{bold --help}'
]
});
const shell = new shell_1.RShell(config_1.FlowrConfig.getForEngine(config_1.FlowrConfig.fromFile(), 'r-shell'));
async function writeQuadForSingleFile(request, output) {
const normalized = await (0, retriever_1.retrieveNormalizedAstFromRCode)(request, shell);
const serialized = (0, quads_1.serialize2quads)(normalized.ast.files[0].root, { context: request.content });
log_1.log.info(`Appending quads to ${output}`);
fs_1.default.appendFileSync(output, serialized);
}
async function getQuads() {
const output = options.output ?? 'out.quads';
let skipped = 0;
for await (const request of (0, files_1.allRFilesFrom)(options.input, options.limit)) {
try {
await writeQuadForSingleFile(request, output);
}
catch (e) {
log_1.log.error(`[Skipped] Error while processing ${request.content}: ${e.message} (${e.stack ?? ''})`);
skipped++;
}
}
console.log(`Skipped ${skipped} files`);
shell.close();
}
void getQuads();
//# sourceMappingURL=export-quads-app.js.map