| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #!/usr/bin/env node
- /* eslint-disable @typescript-eslint/no-require-imports */
- const fs = require("fs");
- const path = require("path");
- const targetDir = process.cwd();
- const sourceDir = path.resolve(__dirname, "..");
- const args = process.argv.slice(2);
- const initAll = args.includes("--init-all");
- const initVscode = args.includes("--init-vscode") || initAll;
- const initEslint = args.includes("--init-eslint") || initAll;
- const initTsconfig = args.includes("--init-tsconfig") || initAll;
- console.log("NCore UI Kit Environment Setup Tool");
- console.log("=====================================");
- console.log(`Hedef Proje Dizini: ${targetDir}`);
- console.log("");
- if (!initVscode && !initEslint && !initTsconfig) {
- console.log("Herhangi bir başlatma argümanı (--init-vscode, --init-eslint, --init-tsconfig, --init-all) bulunamadı.");
- console.log("Otomatik ayar kopyalama/birleştirme işlemleri atlanıyor...");
- console.log("Not: Ayarları projeye dahil etmek için kurulum komutuna ilgili bayrakları ekleyebilirsiniz.");
- console.log("");
- process.exit(0);
- }
- // JSON parse helper that ignores comments
- function parseJSON(content) {
- try {
- const jsonc = content.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => g ? "" : m);
- return JSON.parse(jsonc);
- } catch (e) {
- console.error(e);
- return null;
- }
- }
- // 1. .vscode/settings.json
- if (initVscode) {
- const sourceVscodeDir = path.join(sourceDir, ".vscode");
- const targetVscodeDir = path.join(targetDir, ".vscode");
- if (fs.existsSync(sourceVscodeDir)) {
- if (!fs.existsSync(targetVscodeDir)) {
- fs.mkdirSync(targetVscodeDir, {
- recursive: true
- });
- }
- const sourceSettings = path.join(sourceVscodeDir, "settings.json");
- const targetSettings = path.join(targetVscodeDir, "settings.json");
- if (fs.existsSync(sourceSettings)) {
- if (fs.existsSync(targetSettings)) {
- const targetContent = parseJSON(fs.readFileSync(targetSettings, "utf-8")) || {};
- const sourceContent = parseJSON(fs.readFileSync(sourceSettings, "utf-8")) || {};
- const merged = {
- ...sourceContent,
- ...targetContent
- };
- fs.writeFileSync(targetSettings, JSON.stringify(merged, null, 4));
- console.log("✅ .vscode/settings.json birleştirildi (mevcut ayarlarınız korundu).");
- } else {
- fs.copyFileSync(sourceSettings, targetSettings);
- console.log("✅ .vscode/settings.json kopyalandı.");
- }
- }
- }
- }
- // 2 & 3. ESLint configs
- if (initEslint) {
- const sourceEslint = path.join(sourceDir, "eslint.config.mjs");
- const targetEslint = path.join(targetDir, "eslint.config.mjs");
- if (fs.existsSync(sourceEslint)) {
- if (!fs.existsSync(targetEslint)) {
- fs.copyFileSync(sourceEslint, targetEslint);
- console.log("✅ eslint.config.mjs kopyalandı.");
- } else {
- console.log("⚠️ eslint.config.mjs hedef projede zaten var, üzerine yazılmadı.");
- }
- }
- const sourceLocalRules = path.join(sourceDir, "eslint-local-rules");
- const targetLocalRules = path.join(targetDir, "eslint-local-rules");
- if (fs.existsSync(sourceLocalRules)) {
- if (!fs.existsSync(targetLocalRules)) {
- fs.mkdirSync(targetLocalRules, {
- recursive: true
- });
- }
- const files = fs.readdirSync(sourceLocalRules);
- files.forEach(file => {
- const sourceFile = path.join(sourceLocalRules, file);
- const targetFile = path.join(targetLocalRules, file);
- if (fs.lstatSync(sourceFile).isFile()) {
- fs.copyFileSync(sourceFile, targetFile);
- }
- });
- console.log("✅ eslint-local-rules/ güncellendi.");
- }
- }
- // 4. tsconfig.json
- if (initTsconfig) {
- const sourceTsconfigPath = path.join(sourceDir, "tsconfig.json");
- const targetTsconfigPath = path.join(targetDir, "tsconfig.json");
- if (fs.existsSync(sourceTsconfigPath)) {
- const sourceTsconfig = parseJSON(fs.readFileSync(sourceTsconfigPath, "utf-8")) || {};
- // ncore-ui-kit iç path tanımlarını projeye aktarmamak için temizliyoruz
- if (sourceTsconfig.compilerOptions && sourceTsconfig.compilerOptions.paths && sourceTsconfig.compilerOptions.paths["ncore-ui-kit"]) {
- delete sourceTsconfig.compilerOptions.paths["ncore-ui-kit"];
- }
- if (fs.existsSync(targetTsconfigPath)) {
- const targetTsconfig = parseJSON(fs.readFileSync(targetTsconfigPath, "utf-8")) || {};
- // Üzerine ekleme metodu (hedef projenin ayarları önceliklidir)
- const mergedTsconfig = {
- ...sourceTsconfig,
- ...targetTsconfig,
- compilerOptions: {
- ...(sourceTsconfig.compilerOptions || {}),
- ...(targetTsconfig.compilerOptions || {})
- }
- };
- // Paths birleştirme
- if (sourceTsconfig.compilerOptions?.paths || targetTsconfig.compilerOptions?.paths) {
- mergedTsconfig.compilerOptions.paths = {
- ...(sourceTsconfig.compilerOptions?.paths || {}),
- ...(targetTsconfig.compilerOptions?.paths || {})
- };
- }
- // Kullanıcının include ve exclude ayarlarını KESİNLİKLE koru
- if (targetTsconfig.include) mergedTsconfig.include = targetTsconfig.include;
- if (targetTsconfig.exclude) mergedTsconfig.exclude = targetTsconfig.exclude;
- fs.writeFileSync(targetTsconfigPath, JSON.stringify(mergedTsconfig, null, 4));
- console.log("✅ tsconfig.json mevcut dosyanız ile birleştirildi (include/exclude ve proje ayarları korundu).");
- } else {
- fs.writeFileSync(targetTsconfigPath, JSON.stringify(sourceTsconfig, null, 4));
- console.log("✅ tsconfig.json oluşturuldu.");
- }
- }
- }
- console.log("");
- console.log("NCore standartlarıyla iyi kodlamalar dileriz!");
|