@nestjsplus/lib-starter
Version:
Boilerplate for building installable NestJS libraries
73 lines (72 loc) • 3.56 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const nodePath = require("path");
const core_1 = require("@angular-devkit/core");
const schematics_1 = require("@angular-devkit/schematics");
const dependencies_1 = require("@schematics/angular/utility/dependencies");
const utils_1 = require("../../schematics-utils/utils");
const dependencies = [
{
type: dependencies_1.NodeDependencyType.Default,
name: '@nestjsplus/config',
version: '^1.0.0',
},
];
const scripts = {
name: 'start:configtrace',
action: 'DEBUG=trace nest start',
};
let welcomeText = `\n\tThe @nestjsplus/config module has been installed.
\tNow generating setup files. See README.md in each generated folder.
\tSee https://github.com/nestjsplus/config for complete documentation.`;
const demoText = `\n\tTry:
\t\t $ npm run start:configtrace # <-- launches Nest with Config Tracing
\t\t $ curl localhost:3000/config/test # <-- retrieves test env var\n\n`;
function main(options) {
return (tree, context) => {
const sourceRoot = options.sourceRoot;
if (!sourceRoot) {
throw new Error('Schematic must be called with required --sourceRoot option.');
}
const configModuleOptions = Object.assign({}, options);
configModuleOptions.name = core_1.strings.dasherize(options.name.toLowerCase());
configModuleOptions.sourceRoot = sourceRoot;
configModuleOptions.path = core_1.join(sourceRoot, configModuleOptions.name);
if (!utils_1.inProjectRoot(tree)) {
context.logger.fatal(`Please run this command from the project root directory. The package has been installed.
It is safe to simply 'cd' to the project root directory and re-run this command.`);
return tree;
}
if (options.genDemo) {
welcomeText += demoText;
}
const registerOpts = buildRegisterOpts(configModuleOptions);
if (options.dbg) {
context.logger.info(`[install-factory] configModuleOptions: ${JSON.stringify(configModuleOptions, undefined, 2)}\n`);
}
if (options.dbg) {
context.logger.info(`[install-factory] inProjectRoot: ${utils_1.inProjectRoot(tree)}`);
context.logger.info(`[install-factory] workspace: ${JSON.stringify(utils_1.readWorkspace(tree), undefined, 2)}`);
context.logger.info(`[install-factory] package.json: ${JSON.stringify(utils_1.readPackageJson(tree), undefined, 2)}`);
}
const rules = schematics_1.branchAndMerge(schematics_1.chain([
utils_1.addNpmScripts(scripts),
schematics_1.mergeWith(utils_1.generateFilesFromTemplates(Object.assign({}, configModuleOptions, { registerOpts }), './files/module', configModuleOptions.path)),
utils_1.addRootModuleImportAndMetadata(configModuleOptions),
options.genEnv ? schematics_1.schematic('gen-env', options) : schematics_1.noop,
options.genDemo ? schematics_1.schematic('gen-demo', configModuleOptions) : schematics_1.noop,
]))(tree, context);
console.info(welcomeText);
return rules;
};
}
exports.main = main;
function buildRegisterOpts(options) {
const path = nodePath.join(utils_1.buildPathRelativeToWorkspaceRoot(options.sourceRoot), options.envDir.toLowerCase());
const registerOpts = options.envStrategy === 'static'
? `useFile: ${path}/development.env,`
: `useEnv: {
folder: '${path}',
},`;
return registerOpts;
}
;