next-dev
Version:
Tentu, berikut adalah markdown yang telah diperbaiki:
57 lines (56 loc) • 3.37 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const readdirp_1 = __importDefault(require("readdirp"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const lodash_1 = __importDefault(require("lodash"));
const prettier_1 = __importDefault(require("prettier"));
async function genExport(argv) {
const dir = argv.dir;
const listFilter = argv.listFilter || ['*.ts', '*.tsx'];
const log = argv.log || false;
log && console.log(`Generating index.ts in ${dir}`);
log && console.log(`listFilter:`, listFilter);
// Initialize an array to hold export statements
const exportStatements = [];
const exportDefaultStatement = [];
const exportFileName = [];
const fileNameSet = new Set();
// Read files in the directory excluding 'index.*'
for await (const entry of (0, readdirp_1.default)(path_1.default.join(process.cwd(), dir), { fileFilter: [...listFilter, '!index.*'] })) {
const relativePath = path_1.default.relative(path_1.default.join(process.cwd(), dir), entry.fullPath);
const importPath = `./${relativePath.replace(/\\/g, '/').replace(/\.[jt]sx?$/, '')}`;
let fileName = lodash_1.default.camelCase(path_1.default.basename(relativePath, path_1.default.extname(relativePath)));
// Check for duplicate file name
if (fileNameSet.has(fileName)) {
// Add parent directory name to the file name to make it unique
const parentDirName = lodash_1.default.camelCase(path_1.default.basename(path_1.default.dirname(relativePath)));
fileName = `${fileName}${lodash_1.default.upperFirst(parentDirName)}`;
}
fileNameSet.add(fileName);
// Generate export statement and add it to the array
exportStatements.push(`export { default as ${fileName} } from '${importPath}';`);
exportDefaultStatement.push(`import { default as ${fileName} } from '${importPath}';`);
exportFileName.push(fileName);
log && console.log(` - ${fileName}`);
}
if (argv.c) {
// Combine all export statements into a single string
const indexContent = exportDefaultStatement.join('\n');
// Write the export statements to 'index.ts' in the given directory
const fileName = lodash_1.default.camelCase(path_1.default.basename(dir));
const textString = `${indexContent}\nconst ${fileName} = {\n${exportFileName.join(',\n')}\n};\nexport { \n${exportFileName.join(',\n')}\n } ;\nexport default ${fileName};`;
await fs_1.default.promises.writeFile(path_1.default.join(process.cwd(), dir, 'index.ts'), await prettier_1.default.format(textString, { parser: "typescript" }), 'utf8');
console.log(`✨✨✨ index.ts generated in ${dir} ✨✨✨`);
return;
}
// Combine all export statements into a single string
const indexContent = exportStatements.join('\n');
// Write the export statements to 'index.ts' in the given directory
await fs_1.default.promises.writeFile(path_1.default.join(process.cwd(), dir, 'index.ts'), indexContent, 'utf8');
console.log(`✨✨✨ index.ts generated in ${dir} ✨✨✨`);
}
exports.default = genExport;