64 lines
2.0 KiB
TypeScript
64 lines
2.0 KiB
TypeScript
import { Tree, getProjects, joinPathFragments } from '@nx/devkit';
|
|
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
|
|
import { ViteBuildExecutorOptions } from '../../executors/build/schema';
|
|
import { tsquery } from '@phenomnomnominal/tsquery';
|
|
|
|
export default function update(tree: Tree) {
|
|
const projects = getProjects(tree);
|
|
forEachExecutorOptions<ViteBuildExecutorOptions>(
|
|
tree,
|
|
'@nx/vite:build',
|
|
(options, projectName) => {
|
|
const projectConfig = projects.get(projectName);
|
|
const config =
|
|
options.configFile || findViteConfig(tree, projectConfig.root);
|
|
if (!config || !tree.exists(config)) {
|
|
return;
|
|
}
|
|
|
|
const configContents = tree.read(config, 'utf-8');
|
|
|
|
const oldTsConfigPathPlugin =
|
|
tsquery.query(
|
|
configContents,
|
|
'ImportDeclaration:has(StringLiteral[value="vite-tsconfig-paths"])'
|
|
) ?? [];
|
|
|
|
if (oldTsConfigPathPlugin.length === 0) {
|
|
return;
|
|
}
|
|
|
|
const importName =
|
|
oldTsConfigPathPlugin[0]?.['importClause']?.name?.text ??
|
|
'viteTsConfigPaths';
|
|
const updatedContent = tsquery.replace(
|
|
configContents,
|
|
`PropertyAssignment:has(Identifier[name="plugins"]) CallExpression:has(Identifier[name="${importName}"])`,
|
|
() => {
|
|
return `nxViteTsPaths()`;
|
|
}
|
|
);
|
|
|
|
const withImportChange = tsquery.replace(
|
|
updatedContent,
|
|
'ImportDeclaration:has(StringLiteral[value="vite-tsconfig-paths"])',
|
|
() => {
|
|
return "import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';";
|
|
}
|
|
);
|
|
|
|
tree.write(config, withImportChange);
|
|
}
|
|
);
|
|
}
|
|
|
|
function findViteConfig(tree: Tree, searchRoot: string) {
|
|
const allowsExt = ['js', 'mjs', 'ts', 'cjs', 'mts', 'cts'];
|
|
|
|
for (const ext of allowsExt) {
|
|
if (tree.exists(joinPathFragments(searchRoot, `vite.config.${ext}`))) {
|
|
return joinPathFragments(searchRoot, `vite.config.${ext}`);
|
|
}
|
|
}
|
|
}
|