setup.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #!/usr/bin/env node
  2. /* eslint-disable @typescript-eslint/no-require-imports */
  3. const fs = require("fs");
  4. const path = require("path");
  5. const targetDir = process.cwd();
  6. const sourceDir = path.resolve(__dirname, "..");
  7. const args = process.argv.slice(2);
  8. const initAll = args.includes("--init-all");
  9. const initVscode = args.includes("--init-vscode") || initAll;
  10. const initEslint = args.includes("--init-eslint") || initAll;
  11. const initTsconfig = args.includes("--init-tsconfig") || initAll;
  12. console.log("NCore UI Kit Environment Setup Tool");
  13. console.log("=====================================");
  14. console.log(`Hedef Proje Dizini: ${targetDir}`);
  15. console.log("");
  16. if (!initVscode && !initEslint && !initTsconfig) {
  17. console.log("Herhangi bir başlatma argümanı (--init-vscode, --init-eslint, --init-tsconfig, --init-all) bulunamadı.");
  18. console.log("Otomatik ayar kopyalama/birleştirme işlemleri atlanıyor...");
  19. console.log("Not: Ayarları projeye dahil etmek için kurulum komutuna ilgili bayrakları ekleyebilirsiniz.");
  20. console.log("");
  21. process.exit(0);
  22. }
  23. // JSON parse helper that ignores comments
  24. function parseJSON(content) {
  25. try {
  26. const jsonc = content.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*|\/\*[\s\S]*?\*\/)/g, (m, g) => g ? "" : m);
  27. return JSON.parse(jsonc);
  28. } catch (e) {
  29. console.error(e);
  30. return null;
  31. }
  32. }
  33. // 1. .vscode/settings.json
  34. if (initVscode) {
  35. const sourceVscodeDir = path.join(sourceDir, ".vscode");
  36. const targetVscodeDir = path.join(targetDir, ".vscode");
  37. if (fs.existsSync(sourceVscodeDir)) {
  38. if (!fs.existsSync(targetVscodeDir)) {
  39. fs.mkdirSync(targetVscodeDir, {
  40. recursive: true
  41. });
  42. }
  43. const sourceSettings = path.join(sourceVscodeDir, "settings.json");
  44. const targetSettings = path.join(targetVscodeDir, "settings.json");
  45. if (fs.existsSync(sourceSettings)) {
  46. if (fs.existsSync(targetSettings)) {
  47. const targetContent = parseJSON(fs.readFileSync(targetSettings, "utf-8")) || {};
  48. const sourceContent = parseJSON(fs.readFileSync(sourceSettings, "utf-8")) || {};
  49. const merged = {
  50. ...sourceContent,
  51. ...targetContent
  52. };
  53. fs.writeFileSync(targetSettings, JSON.stringify(merged, null, 4));
  54. console.log("✅ .vscode/settings.json birleştirildi (mevcut ayarlarınız korundu).");
  55. } else {
  56. fs.copyFileSync(sourceSettings, targetSettings);
  57. console.log("✅ .vscode/settings.json kopyalandı.");
  58. }
  59. }
  60. }
  61. }
  62. // 2 & 3. ESLint configs
  63. if (initEslint) {
  64. const sourceEslint = path.join(sourceDir, "eslint.config.mjs");
  65. const targetEslint = path.join(targetDir, "eslint.config.mjs");
  66. if (fs.existsSync(sourceEslint)) {
  67. if (!fs.existsSync(targetEslint)) {
  68. fs.copyFileSync(sourceEslint, targetEslint);
  69. console.log("✅ eslint.config.mjs kopyalandı.");
  70. } else {
  71. console.log("⚠️ eslint.config.mjs hedef projede zaten var, üzerine yazılmadı.");
  72. }
  73. }
  74. const sourceLocalRules = path.join(sourceDir, "eslint-local-rules");
  75. const targetLocalRules = path.join(targetDir, "eslint-local-rules");
  76. if (fs.existsSync(sourceLocalRules)) {
  77. if (!fs.existsSync(targetLocalRules)) {
  78. fs.mkdirSync(targetLocalRules, {
  79. recursive: true
  80. });
  81. }
  82. const files = fs.readdirSync(sourceLocalRules);
  83. files.forEach(file => {
  84. const sourceFile = path.join(sourceLocalRules, file);
  85. const targetFile = path.join(targetLocalRules, file);
  86. if (fs.lstatSync(sourceFile).isFile()) {
  87. fs.copyFileSync(sourceFile, targetFile);
  88. }
  89. });
  90. console.log("✅ eslint-local-rules/ güncellendi.");
  91. }
  92. }
  93. // 4. tsconfig.json
  94. if (initTsconfig) {
  95. const sourceTsconfigPath = path.join(sourceDir, "tsconfig.json");
  96. const targetTsconfigPath = path.join(targetDir, "tsconfig.json");
  97. if (fs.existsSync(sourceTsconfigPath)) {
  98. const sourceTsconfig = parseJSON(fs.readFileSync(sourceTsconfigPath, "utf-8")) || {};
  99. // ncore-ui-kit iç path tanımlarını projeye aktarmamak için temizliyoruz
  100. if (sourceTsconfig.compilerOptions && sourceTsconfig.compilerOptions.paths && sourceTsconfig.compilerOptions.paths["ncore-ui-kit"]) {
  101. delete sourceTsconfig.compilerOptions.paths["ncore-ui-kit"];
  102. }
  103. if (fs.existsSync(targetTsconfigPath)) {
  104. const targetTsconfig = parseJSON(fs.readFileSync(targetTsconfigPath, "utf-8")) || {};
  105. // Üzerine ekleme metodu (hedef projenin ayarları önceliklidir)
  106. const mergedTsconfig = {
  107. ...sourceTsconfig,
  108. ...targetTsconfig,
  109. compilerOptions: {
  110. ...(sourceTsconfig.compilerOptions || {}),
  111. ...(targetTsconfig.compilerOptions || {})
  112. }
  113. };
  114. // Paths birleştirme
  115. if (sourceTsconfig.compilerOptions?.paths || targetTsconfig.compilerOptions?.paths) {
  116. mergedTsconfig.compilerOptions.paths = {
  117. ...(sourceTsconfig.compilerOptions?.paths || {}),
  118. ...(targetTsconfig.compilerOptions?.paths || {})
  119. };
  120. }
  121. // Kullanıcının include ve exclude ayarlarını KESİNLİKLE koru
  122. if (targetTsconfig.include) mergedTsconfig.include = targetTsconfig.include;
  123. if (targetTsconfig.exclude) mergedTsconfig.exclude = targetTsconfig.exclude;
  124. fs.writeFileSync(targetTsconfigPath, JSON.stringify(mergedTsconfig, null, 4));
  125. console.log("✅ tsconfig.json mevcut dosyanız ile birleştirildi (include/exclude ve proje ayarları korundu).");
  126. } else {
  127. fs.writeFileSync(targetTsconfigPath, JSON.stringify(sourceTsconfig, null, 4));
  128. console.log("✅ tsconfig.json oluşturuldu.");
  129. }
  130. }
  131. }
  132. console.log("");
  133. console.log("NCore standartlarıyla iyi kodlamalar dileriz!");