@resin/pinejs
Version:
Pine.js is a sophisticated rules-driven API engine that enables you to define rules in a structured subset of English. Those rules are used in order for Pine.js to generate a database schema and the associated [OData](http://www.odata.org/) API. This make
90 lines (88 loc) • 2.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
process.env.PINEJS_CACHE_FILE =
process.env.PINEJS_CACHE_FILE || __dirname + '/.pinejs-cache.json';
const program = require("commander");
const fs = require("fs");
require("../server-glue/sbvr-loader");
const { version } = JSON.parse(fs.readFileSync(require.resolve('../../package.json'), 'utf8'));
const getSE = (inputFile) => fs.readFileSync(inputFile, 'utf8');
const parse = (inputFile, outputFile) => {
const { generateLfModel, } = require('../sbvr-api/sbvr-utils');
const seModel = getSE(inputFile);
const result = generateLfModel(seModel);
const json = JSON.stringify(result, null, 2);
if (outputFile) {
fs.writeFileSync(outputFile, json);
}
else {
console.log(json);
}
};
const transform = (inputFile, outputFile) => {
const { generateLfModel, generateAbstractSqlModel, } = require('../sbvr-api/sbvr-utils');
const seModel = getSE(inputFile);
const lfModel = generateLfModel(seModel);
const result = generateAbstractSqlModel(lfModel);
const json = JSON.stringify(result, null, 2);
if (outputFile) {
fs.writeFileSync(outputFile, json);
}
else {
console.log(json);
}
};
const runCompile = (inputFile, outputFile) => {
const { generateModels, } = require('../sbvr-api/sbvr-utils');
const seModel = getSE(inputFile);
const models = generateModels({ apiRoot: 'sbvr-compiler', modelText: seModel }, program.engine);
let writeLn = console.log;
if (outputFile) {
fs.writeFileSync(outputFile, '');
writeLn = (...args) => fs.writeFileSync(outputFile, args.join(' ') + '\n', { flag: 'a' });
}
writeLn(`
--
-- Create table statements
--
`);
for (const createSql of models.sql.createSchema) {
writeLn(createSql);
writeLn();
}
writeLn(`
--
-- Rule validation queries
--
`);
for (const rule of models.sql.rules) {
writeLn(`-- ${rule.structuredEnglish}`);
writeLn(rule.sql);
writeLn();
}
};
program
.version(version)
.option('-e, --engine <engine>', 'The target database engine (postgres|websql|mysql), default: postgres', /postgres|websql|mysql/, 'postgres');
program
.command('parse <input-file> [output-file]')
.description('parse the input SBVR file into LF')
.action(parse);
program
.command('transform <input-file> [output-file]')
.description('transform the input SBVR file into abstract SQL')
.action(transform);
program
.command('compile <input-file> [output-file]')
.description('compile the input SBVR file into SQL')
.action(runCompile);
program
.command('help')
.description('print the help')
.action(() => program.help());
program.arguments('<input-file> [output-file]').action(runCompile);
if (process.argv.length === 2) {
program.help();
}
program.parse(process.argv);
//# sourceMappingURL=sbvr-compiler.js.map