import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics'; import { dasherize } from '@angular-devkit/core/src/utils/strings'; import { Model } from '@vmfvmf/ywtc-lib'; import { getPrjSrd } from '../../router.gen'; export function gen(model: Model): Rule { return (tree: Tree, _context: SchematicContext) => { const antMatchersPath = `ywtc-output/${getPrjSrd().prjNDashd}-backend/src/main/java/com/vmfvmf/${getPrjSrd().artifactId}/auth/config/AntMatchersFactory.java`; const updatedAntMatchers = updateAntMatchers(getFileContent(tree, antMatchersPath)!, model.name!); tree.overwrite(antMatchersPath, updatedAntMatchers); const urlEnumPath = `ywtc-output/${getPrjSrd().prjNDashd}-backend/src/main/java/com/vmfvmf/${getPrjSrd().artifactId}/auth/config/UrlList.java`; const updatedUrlEnumPath = updateUrlEnum(getFileContent(tree, urlEnumPath)!, model.name!); tree.overwrite(urlEnumPath, updatedUrlEnumPath); return tree; }; } function getFileContent(tree: Tree, fileName: string) { if (!tree.exists(fileName)) { throw new Error(`File: ${fileName} NOT FOUND.`) } return tree.read(fileName)?.toString(); } function updateAntMatchers(content: string, newUrl: string) { const authUrl = getNewUrlForAntMatcher(newUrl); if (content.includes(')/*authenticatedUrls*/')) { content = content.replace(')/*authenticatedUrls*/', '),\n\t\t\t' + authUrl); } else { content = content.replace('/*authenticatedUrls*/', authUrl); } return content; } function getNewUrlForAntMatcher(newUrl: string) { return `AntPathRequestMatcher.antMatcher(UrlList.${newUrl.toUpperCase()} + UrlList.W_CHLDRN)/*authenticatedUrls*/`; } function updateUrlEnum(content: string, newOption: string) { content = content.replace('/*jtc*/', `\tpublic static final String ${newOption.toUpperCase()} = "/${dasherize(newOption)}";\n/*jtc*/`); return content; }