UNPKG

@oasisdigital/ng-doc-portal-plugin

Version:

Nx plugin for adding the ng-doc-portal system to your nx workspace

162 lines 7.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = default_1; const tslib_1 = require("tslib"); const generators_1 = require("@nx/angular/generators"); const devkit_1 = require("@nx/devkit"); const path = require("path"); function normalizeOptions(tree, options) { const name = (0, devkit_1.names)(options.name).fileName; const projectDirectory = options.directory ? `${(0, devkit_1.names)(options.directory).fileName}/${name}` : name; const projectName = projectDirectory.replace(new RegExp('/', 'g'), '-'); const projectRoot = `${(0, devkit_1.getWorkspaceLayout)(tree).appsDir}/${projectDirectory}`; const parsedTags = options.tags ? options.tags.split(',').map((s) => s.trim()) : []; return Object.assign(Object.assign({}, options), { projectName, projectRoot, projectDirectory, parsedTags }); } function addFiles(tree, options) { const templateOptions = Object.assign(Object.assign(Object.assign({}, options), (0, devkit_1.names)(options.name)), { offsetFromRoot: (0, devkit_1.offsetFromRoot)(options.projectRoot), tmpl: '' }); (0, devkit_1.generateFiles)(tree, path.join(__dirname, 'files'), `${options.projectRoot}`, templateOptions); } function updateProjectStyles(tree, options) { const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.projectName); if (projectConfig.targets) { const styles = projectConfig.targets.build.options.styles; const updatedStyles = [ 'node_modules/@oasisdigital/ng-doc-portal/src/lib/styles/milligram.scss', 'node_modules/@oasisdigital/ng-doc-portal/src/lib/styles/ng-doc-portal.scss', ...styles, ]; projectConfig.targets.build.options.styles = updatedStyles; (0, devkit_1.updateProjectConfiguration)(tree, options.projectName, projectConfig); } } function updateProjectExecutors(tree, options) { const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.projectName); const appName = options.name || 'component-doc-portal'; const projectDirectory = options.directory ? `${(0, devkit_1.names)(options.directory).fileName}/${appName}` : appName; if (projectConfig.targets) { const targetOptions = { configFile: `apps/${projectDirectory}/ng-doc-portal-config.json`, }; projectConfig.targets = Object.assign(Object.assign({}, projectConfig.targets), { ['ng-build']: Object.assign({}, projectConfig.targets['build']), ['ng-serve']: Object.assign({}, projectConfig.targets['serve']), ['compile']: { executor: '@oasisdigital/ng-doc-portal-plugin:compile', options: targetOptions, }, ['build']: { executor: '@oasisdigital/ng-doc-portal-plugin:build', options: targetOptions, configurations: { production: { ngConfigTarget: 'production', }, configuration: { ngConfigTarget: 'development', }, }, }, ['serve']: { executor: '@oasisdigital/ng-doc-portal-plugin:serve', options: targetOptions, configurations: { production: { ngConfigTarget: 'production', }, configuration: { ngConfigTarget: 'development', }, }, } }); // Need to replace the default build targets that point to `build` to `ng-build` in `ng-serve` if (projectConfig.targets['ng-serve'].configurations) { Object.keys(projectConfig.targets['ng-serve'].configurations).forEach((configKey) => { var _a; const ngServeTarget = (_a = projectConfig.targets) === null || _a === void 0 ? void 0 : _a['ng-serve']; projectConfig.targets['ng-serve'].configurations[configKey].buildTarget = ngServeTarget.configurations[configKey].buildTarget.replace(':build:', ':ng-build:'); }); } // If there is an 'extract-i18n' we need to re-work it if (projectConfig.targets['extract-i18n']) { projectConfig.targets['ng-extract-i18n'] = Object.assign(Object.assign({}, projectConfig.targets['extract-i18n']), { options: Object.assign(Object.assign({}, projectConfig.targets['extract-i18n'].options), { buildTarget: projectConfig.targets['extract-i18n'].options.buildTarget.replace(':build', ':ng-build') }) }); projectConfig.targets['extract-i18n'] = { executor: 'nx:run-commands', options: { commands: [ { command: `npx nx compile ${appName}`, forwardAllArgs: false, }, { command: `npx nx ng-extract-i18n ${appName}`, }, ], parallel: false, }, }; } (0, devkit_1.updateProjectConfiguration)(tree, options.projectName, projectConfig); } } function removeProjectBuildBudgets(tree, options) { var _a; const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.projectName); if (projectConfig.targets) { (_a = projectConfig.targets.build.configurations) === null || _a === void 0 ? true : delete _a.production.budgets; (0, devkit_1.updateProjectConfiguration)(tree, options.projectName, projectConfig); } } function removeExtractI18N(tree, options) { var _a; const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.projectName); if (projectConfig.targets && ((_a = projectConfig.targets) === null || _a === void 0 ? void 0 : _a['extract-i18n'])) { delete projectConfig.targets['extract-i18n']; (0, devkit_1.updateProjectConfiguration)(tree, options.projectName, projectConfig); } } function updateGitIgnore(tree) { return tslib_1.__awaiter(this, void 0, void 0, function* () { var _a; if (tree.exists('.gitignore')) { const entry = '**/doc-page-loaders.ts'; let content = (_a = tree.read('.gitignore', 'utf-8')) !== null && _a !== void 0 ? _a : ''; if (/\*\*\/doc-page-loaders\.ts/gm.test(content)) { return; } content = `${content}\n${entry}\n`; tree.write('.gitignore', content); } else { devkit_1.logger.warn(`Couldn't find .gitignore file to update`); } }); } function default_1(tree, options) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const normalizedOptions = normalizeOptions(tree, options); yield (0, generators_1.applicationGenerator)(tree, { name: options.name || 'component-doc-portal', tags: normalizedOptions.parsedTags.join(','), directory: options.directory, e2eTestRunner: 'none', skipTests: true, prefix: 'app', style: 'scss', standalone: true, }); addFiles(tree, normalizedOptions); tree.delete(`${normalizedOptions.projectRoot}/src/app/nx-welcome.component.ts`); updateProjectStyles(tree, normalizedOptions); updateProjectExecutors(tree, normalizedOptions); removeProjectBuildBudgets(tree, normalizedOptions); removeExtractI18N(tree, normalizedOptions); updateGitIgnore(tree); yield (0, devkit_1.formatFiles)(tree); }); } //# sourceMappingURL=generator.js.map