@restmatic/server
Version:
The core Pomegranate plugins for RestMatic
103 lines (101 loc) • 4.32 kB
JavaScript
;
/**
* @file ProjectMiddleware
* @author Jim Bulkowski <jim.b@paperelectron.com>
* @project server
* @license MIT {@link http://opensource.org/licenses/MIT}
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const fp_1 = require("lodash/fp");
const plugin_tools_1 = require("@pomegranate/plugin-tools");
const tsGenerator = `// Generated by the Pomegranate cli on {{creationDate}}
// name: {{name}}
export const Middleware = (PluginLogger) => {
return (req, res, next) => {
PluginLogger.log('Saying hello from a middleware file')
next()
}
}
`;
exports.Middleware = plugin_tools_1.CreatePlugin('merge')
.directories([{ path: '.', prop: 'main' }])
.configuration({
name: 'Middleware',
injectableParam: 'Middleware',
injectableScope: 'namespace',
depends: ['@restmatic/BundledMiddleware']
})
.hooks({
load: (Injector, PluginLogger, PluginVariables, PluginFiles, Middleware) => __awaiter(this, void 0, void 0, function* () {
PluginLogger.log('Creating Project Middleware.', 1);
let files = yield PluginFiles('main').fileList({ ext: '.js' });
let build = fp_1.map((file) => {
let required = require(file.path);
let fileName = file.getBaseName();
PluginLogger.log(fileName);
let mw = fp_1.get('Middleware', required);
if (!mw) {
throw new Error(`Middleware file ${fileName} does not contain an export on the Middleware property.`);
}
if (!fp_1.isFunction(mw)) {
throw new Error(`Middleware file ${fileName} does not export an injectable function on the Middleware property.`);
}
return [file.getBaseName(), Injector.inject(mw)];
}, files);
return fp_1.fromPairs(build);
})
})
.commands(function (PomConfig, PluginFiles, Handlebars) {
return (yargs) => {
return yargs
.usage('usage: $0')
.command({
command: 'generate <name>',
aliases: 'g',
describe: `Generates Middleware 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 compiled = compile({ creationDate: new Date().toDateString(), name: argv.name });
if (exists && !argv.force) {
throw new Error(`${file} \n exists \n Rerun with --force to overwrite.`);
}
yield Pf.outputProjectFile(file, compiled);
console.log(`Created @restmatic/ProjectMiddleware Middleware file ${file}`);
})
})
.help();
};
});
//# sourceMappingURL=Middleware.js.map