UNPKG

@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
"use strict"; 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