nextdevkit
Version:
A Comprehensive CLI Toolkit for Next.js Development
47 lines (46 loc) • 2.13 kB
JavaScript
import chalk from 'chalk';
import fs from 'fs-extra';
import path from 'path';
import isNextJsRoot from '../utils/isNextJsRoot.js';
import isTypeScriptProject from '../utils/isTypescriptProject.js';
import resolveProjectPath from '../utils/resolveProjectPath.js';
const initConfig = async () => {
const projectPath = await resolveProjectPath();
await isNextJsRoot(projectPath);
await createConfigFile(projectPath);
};
const createConfigFile = async (projectPath) => {
const configFileName = isTypeScriptProject(projectPath) ? 'tsconfig.json' : 'jsconfig.json';
const projectConfigPath = path.join(projectPath, configFileName);
const srcFolderPath = path.join(projectPath, 'src');
const defaultPath = (await fs.pathExists(srcFolderPath)) ? ['./src/*'] : ['./*'];
const projectConfig = (await fs.pathExists(projectConfigPath)) ?
await fs.readJson(projectConfigPath)
: { compilerOptions: { paths: {} } };
projectConfig.compilerOptions = projectConfig.compilerOptions || {};
projectConfig.compilerOptions.paths =
projectConfig.compilerOptions.paths || {};
const alias = projectConfig.compilerOptions.paths['@/*'] ?
projectConfig.compilerOptions.paths['@/*'][0].replace('/*', '')
: '@';
if (!projectConfig.compilerOptions.paths['@/*']) {
projectConfig.compilerOptions.paths['@/*'] = defaultPath;
await fs.writeJson(projectConfigPath, projectConfig, { spaces: 2 });
console.log(`${configFileName} updated with path alias.`);
}
const configFilePath = path.join(projectPath, 'nextdevkit.json');
if (!(await fs.pathExists(configFilePath))) {
const configData = {
aliases: {
components: `${alias}/components`,
utils: `${alias}/utils`,
hooks: `${alias}/hooks`,
lib: `${alias}/lib`,
context: `${alias}/context`
}
};
await fs.writeJson(configFilePath, configData, { spaces: 2 });
console.log(chalk.green('Config file created successfully!'));
}
};
export default initConfig;