@oasisdigital/ng-doc-portal-plugin
Version:
Nx plugin for adding the ng-doc-portal system to your nx workspace
162 lines • 7.83 kB
JavaScript
;
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