UNPKG

@nestjsplus/lib-starter

Version:

Boilerplate for building installable NestJS libraries

73 lines (72 loc) 3.56 kB
"use strict"; 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; }