@pomofficial/knex-objection
Version:
Objection ORM for Knex in Pomegranate
151 lines (145 loc) • 6.02 kB
JavaScript
;
/**
* @file index
* @author Jim Bulkowski <jim.b@paperelectron.com>
* @project knex-objection
* @license MIT {@link http://opensource.org/licenses/MIT}
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (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.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Plugin = exports.objection = void 0;
const plugin_tools_1 = require("@pomegranate/plugin-tools");
const fp_1 = require("lodash/fp");
const objection_1 = require("objection");
const objection = __importStar(require("objection"));
exports.objection = objection;
const tsGenerator = `// Generated by the Pomegranate cli on {{creationDate}}
// name: {{name}}
import {objection} from '@pomofficial/knex-objection'
export class {{name}} extends objection.Model {
}
export const ClassModel = (PluginLogger) => {
return {{name}}
}
`;
exports.Plugin = plugin_tools_1.CreatePlugin('anything')
.configuration({
name: 'KnexObjection',
injectableParam: 'Objection',
injectableScope: 'global',
applicationMember: ['Knex'],
depends: ['@pomofficial/KnexClient'],
provides: [],
optional: []
})
.variables({
globalIdColumnName: null
})
.hooks({
load: (Injector, PluginVariables, PluginFiles, PluginLogger, Knex) => __awaiter(void 0, void 0, void 0, function* () {
let files = yield PluginFiles('main').fileList({ ext: '.js' });
if (fp_1.isString(PluginVariables.globalIdColumnName)) {
objection_1.Model.idColumn = PluginVariables.globalIdColumnName;
PluginLogger.warn(`Objection using ${PluginVariables.globalIdColumnName} globally as id column name.`);
}
objection_1.Model.knex(Knex);
return fp_1.fromPairs(fp_1.map((file) => {
let required = require(file.path);
let fileName = file.getBaseName();
PluginLogger.log(`Found Model: ${fileName}.`, 2);
let M = fp_1.get('ClassModel', required);
if (!M) {
throw new Error(`Model file ${fileName} does not contain an export on the ClassModel property.`);
}
if (!fp_1.isFunction(M)) {
throw new Error(`Model file ${fileName} does not export an injectable function on the ClassModel property.`);
}
return [fileName, Injector.inject(M)];
}, files));
}),
start: () => {
},
stop: () => {
}
})
.directories([{ prop: 'main', path: '.' }])
.commands(function (PomConfig, PluginFiles, Handlebars) {
return (yargs) => {
return yargs
.usage('usage: $0')
.command({
command: 'generate <name>',
aliases: 'g',
describe: `Generates Objection model file <name>`,
builder: (yargs) => {
return yargs
.positional('name', {
describe: 'The the filename to be created.',
default: 'index',
type: 'string'
})
.option('l', {
alias: 'language',
describe: 'Generate TypeScript or Javascript',
default: 'ts',
choices: ['ts'],
type: 'string'
})
.option('force', {
alias: 'f',
default: false,
describe: 'overwrites the specified file if it exists.',
type: 'boolean'
});
},
handler: (argv) => __awaiter(this, void 0, void 0, function* () {
let Pf = PluginFiles('main');
let file = `${argv.name}.${argv.language}`;
let exists = yield Pf.projectFileExists(file);
let compile = Handlebars.compile(tsGenerator);
let upperName = argv.name;
let lowerName = fp_1.toLower(argv.name);
let compiled = compile({
creationDate: new Date().toDateString(),
name: argv.name,
upperName,
lowerName
});
if (exists && !argv.force) {
throw new Error(`${file} \n exists \n Rerun with --force to overwrite.`);
}
yield Pf.outputProjectFile(file, compiled);
console.log(`Created @pomofficial/KnexObjection file ${file}`);
})
})
.help();
};
});
//# sourceMappingURL=index.js.map