i18ntk 1.10.1 โ†’ 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +141 -1185
  3. package/main/i18ntk-analyze.js +149 -133
  4. package/main/i18ntk-backup-class.js +420 -0
  5. package/main/i18ntk-backup.js +4 -4
  6. package/main/i18ntk-complete.js +90 -65
  7. package/main/i18ntk-doctor.js +123 -103
  8. package/main/i18ntk-fixer.js +61 -725
  9. package/main/i18ntk-go.js +14 -15
  10. package/main/i18ntk-init.js +76 -25
  11. package/main/i18ntk-java.js +27 -32
  12. package/main/i18ntk-js.js +70 -68
  13. package/main/i18ntk-manage.js +128 -29
  14. package/main/i18ntk-php.js +75 -75
  15. package/main/i18ntk-py.js +55 -56
  16. package/main/i18ntk-scanner.js +59 -57
  17. package/main/i18ntk-setup.js +10 -396
  18. package/main/i18ntk-sizing.js +46 -40
  19. package/main/i18ntk-summary.js +21 -18
  20. package/main/i18ntk-ui.js +11 -10
  21. package/main/i18ntk-usage.js +55 -19
  22. package/main/i18ntk-validate.js +13 -13
  23. package/main/manage/commands/AnalyzeCommand.js +1124 -0
  24. package/main/manage/commands/BackupCommand.js +62 -0
  25. package/main/manage/commands/CommandRouter.js +295 -0
  26. package/main/manage/commands/CompleteCommand.js +61 -0
  27. package/main/manage/commands/DoctorCommand.js +60 -0
  28. package/main/manage/commands/FixerCommand.js +624 -0
  29. package/main/manage/commands/InitCommand.js +62 -0
  30. package/main/manage/commands/ScannerCommand.js +654 -0
  31. package/main/manage/commands/SizingCommand.js +60 -0
  32. package/main/manage/commands/SummaryCommand.js +61 -0
  33. package/main/manage/commands/UsageCommand.js +60 -0
  34. package/main/manage/commands/ValidateCommand.js +978 -0
  35. package/main/manage/index-fixed.js +1447 -0
  36. package/main/manage/index.js +1462 -0
  37. package/main/manage/managers/DebugMenu.js +140 -0
  38. package/main/manage/managers/InteractiveMenu.js +177 -0
  39. package/main/manage/managers/LanguageMenu.js +62 -0
  40. package/main/manage/managers/SettingsMenu.js +53 -0
  41. package/main/manage/services/AuthenticationService.js +263 -0
  42. package/main/manage/services/ConfigurationService-fixed.js +449 -0
  43. package/main/manage/services/ConfigurationService.js +449 -0
  44. package/main/manage/services/FileManagementService.js +368 -0
  45. package/main/manage/services/FrameworkDetectionService.js +458 -0
  46. package/main/manage/services/InitService.js +1051 -0
  47. package/main/manage/services/SetupService.js +462 -0
  48. package/main/manage/services/SummaryService.js +450 -0
  49. package/main/manage/services/UsageService.js +1502 -0
  50. package/package.json +32 -30
  51. package/runtime/enhanced.d.ts +221 -221
  52. package/runtime/index.d.ts +29 -29
  53. package/runtime/index.full.d.ts +331 -331
  54. package/runtime/index.js +7 -6
  55. package/scripts/build-lite.js +17 -17
  56. package/scripts/deprecate-versions.js +23 -6
  57. package/scripts/export-translations.js +5 -5
  58. package/scripts/fix-all-i18n.js +3 -3
  59. package/scripts/fix-and-purify-i18n.js +3 -2
  60. package/scripts/fix-locale-control-chars.js +110 -0
  61. package/scripts/lint-locales.js +80 -0
  62. package/scripts/locale-optimizer.js +8 -8
  63. package/scripts/prepublish.js +21 -21
  64. package/scripts/security-check.js +13 -5
  65. package/scripts/sync-translations.js +4 -4
  66. package/scripts/sync-ui-locales.js +9 -8
  67. package/scripts/validate-all-translations.js +8 -7
  68. package/scripts/verify-deprecations.js +23 -15
  69. package/scripts/verify-translations.js +6 -5
  70. package/settings/i18ntk-config.json +282 -282
  71. package/settings/language-config.json +5 -5
  72. package/settings/settings-cli.js +9 -9
  73. package/settings/settings-manager.js +23 -20
  74. package/ui-locales/de.json +2417 -2348
  75. package/ui-locales/en.json +2415 -2352
  76. package/ui-locales/es.json +2425 -2353
  77. package/ui-locales/fr.json +2418 -2348
  78. package/ui-locales/ja.json +2463 -2361
  79. package/ui-locales/ru.json +2463 -2359
  80. package/ui-locales/zh.json +2418 -2351
  81. package/utils/admin-auth.js +2 -2
  82. package/utils/admin-cli.js +297 -297
  83. package/utils/admin-pin.js +9 -9
  84. package/utils/cli-helper.js +9 -9
  85. package/utils/config-helper.js +152 -103
  86. package/utils/config-manager.js +204 -164
  87. package/utils/config.js +5 -4
  88. package/utils/env-manager.js +256 -0
  89. package/utils/framework-detector.js +27 -24
  90. package/utils/i18n-helper.js +85 -41
  91. package/utils/init-helper.js +152 -94
  92. package/utils/json-output.js +98 -98
  93. package/utils/logger.js +6 -2
  94. package/utils/mini-commander.js +179 -0
  95. package/utils/missing-key-validator.js +5 -5
  96. package/utils/plugin-loader.js +29 -11
  97. package/utils/prompt.js +14 -44
  98. package/utils/safe-json.js +40 -0
  99. package/utils/secure-errors.js +3 -3
  100. package/utils/security-check-improved.js +390 -0
  101. package/utils/security-config.js +5 -5
  102. package/utils/security-fixed.js +607 -0
  103. package/utils/security.js +462 -248
  104. package/utils/setup-enforcer.js +136 -44
  105. package/utils/setup-validator.js +33 -32
  106. package/utils/terminal-icons.js +1 -1
  107. package/utils/ultra-performance-optimizer.js +11 -9
  108. package/utils/watch-locales.js +2 -1
  109. package/utils/prompt-fixed.js +0 -55
  110. package/utils/security-check.js +0 -450
@@ -6,10 +6,10 @@ const SecurityUtils = require('../utils/security');
6
6
 
7
7
  class SettingsManager {
8
8
  constructor() {
9
- // Use package settings directory (consistent with config-manager.js)
10
- this.configDir = path.resolve(__dirname, '..', 'settings');
11
- this.configFile = path.join(this.configDir, 'i18ntk-config.json');
12
- this.backupDir = path.join(path.resolve(__dirname, '..'), 'backups');
9
+ // Use centralized .i18ntk-settings file as single source of truth
10
+ this.configDir = path.resolve(__dirname, '..');
11
+ this.configFile = path.join(process.cwd(), '.i18ntk-settings');
12
+ this.backupDir = path.join(process.cwd(), 'backups');
13
13
  this.saveTimeout = null;
14
14
 
15
15
  this.defaultConfig = {
@@ -317,8 +317,8 @@ class SettingsManager {
317
317
  */
318
318
  loadSettings() {
319
319
  try {
320
- if (fs.existsSync(this.configFile)) {
321
- const content = fs.readFileSync(this.configFile, 'utf8');
320
+ if (SecurityUtils.safeExistsSync(this.configFile)) {
321
+ const content = SecurityUtils.safeReadFileSync(this.configFile, process.cwd(), 'utf8');
322
322
  const loadedSettings = JSON.parse(content);
323
323
  // Merge with defaults to ensure all properties exist
324
324
  this.settings = this.mergeWithDefaults(loadedSettings);
@@ -431,12 +431,12 @@ class SettingsManager {
431
431
  */
432
432
  _saveImmediately() {
433
433
  try {
434
- if (!fs.existsSync(this.configDir)) {
434
+ if (!SecurityUtils.safeExistsSync(this.configDir)) {
435
435
  fs.mkdirSync(this.configDir, { recursive: true });
436
436
  }
437
437
 
438
438
  const content = JSON.stringify(this.settings, null, 4);
439
- fs.writeFileSync(this.configFile, content, 'utf8');
439
+ SecurityUtils.safeWriteFileSync(this.configFile, content, path.dirname(this.configFile), 'utf8');
440
440
 
441
441
  // Create backup if enabled
442
442
  if (this.settings.backup?.enabled) {
@@ -456,7 +456,7 @@ class SettingsManager {
456
456
  */
457
457
  createBackup() {
458
458
  try {
459
- if (!fs.existsSync(this.backupDir)) {
459
+ if (!SecurityUtils.safeExistsSync(this.backupDir)) {
460
460
  fs.mkdirSync(this.backupDir, { recursive: true });
461
461
  }
462
462
 
@@ -509,6 +509,8 @@ class SettingsManager {
509
509
  "version": null,
510
510
  "setupId": null
511
511
  };
512
+ // Set projectRoot to "/" for fresh install state
513
+ this.settings.projectRoot = "/";
512
514
  this.saveSettings();
513
515
  console.log('Settings reset to defaults');
514
516
  }
@@ -523,8 +525,9 @@ class SettingsManager {
523
525
  try {
524
526
  console.log('๐Ÿงน Performing complete reset...');
525
527
 
526
- // 1. Reset to defaults
528
+ // 1. Reset to defaults with projectRoot set to "/" for fresh install
527
529
  this.settings = { ...this.defaultConfig };
530
+ this.settings.projectRoot = "/"; // Set to root for fresh install
528
531
 
529
532
  // 2. Remove actual configuration files used by the system
530
533
  const packageDir = path.resolve(__dirname, '..');
@@ -532,28 +535,28 @@ class SettingsManager {
532
535
 
533
536
  // Main configuration file
534
537
  const mainConfigPath = path.join(settingsDir, 'i18ntk-config.json');
535
- if (fs.existsSync(mainConfigPath)) {
538
+ if (SecurityUtils.safeExistsSync(mainConfigPath)) {
536
539
  fs.unlinkSync(mainConfigPath);
537
540
  console.log('โœ… Main configuration file removed');
538
541
  }
539
542
 
540
543
  // Project configuration file
541
544
  const projectConfigPath = path.join(settingsDir, 'project-config.json');
542
- if (fs.existsSync(projectConfigPath)) {
545
+ if (SecurityUtils.safeExistsSync(projectConfigPath)) {
543
546
  fs.unlinkSync(projectConfigPath);
544
547
  console.log('โœ… Project configuration removed');
545
548
  }
546
549
 
547
550
  // Setup tracking file
548
551
  const setupFile = path.join(settingsDir, 'setup.json');
549
- if (fs.existsSync(setupFile)) {
552
+ if (SecurityUtils.safeExistsSync(setupFile)) {
550
553
  fs.unlinkSync(setupFile);
551
554
  console.log('โœ… Setup tracking cleared');
552
555
  }
553
556
 
554
557
  // 3. Clear all backup files from backups directory
555
558
  const backupsDir = path.join(packageDir, 'backups');
556
- if (fs.existsSync(backupsDir)) {
559
+ if (SecurityUtils.safeExistsSync(backupsDir)) {
557
560
  const backupFiles = fs.readdirSync(backupsDir);
558
561
  for (const file of backupFiles) {
559
562
  if (file.endsWith('.json') || file.endsWith('.bak')) {
@@ -572,7 +575,7 @@ class SettingsManager {
572
575
  ];
573
576
 
574
577
  for (const adminConfigPath of adminConfigPaths) {
575
- if (fs.existsSync(adminConfigPath)) {
578
+ if (SecurityUtils.safeExistsSync(adminConfigPath)) {
576
579
  fs.unlinkSync(adminConfigPath);
577
580
  console.log('โœ… Admin PIN configuration cleared');
578
581
  }
@@ -585,7 +588,7 @@ class SettingsManager {
585
588
  ];
586
589
 
587
590
  for (const initFile of initFiles) {
588
- if (fs.existsSync(initFile)) {
591
+ if (SecurityUtils.safeExistsSync(initFile)) {
589
592
  fs.unlinkSync(initFile);
590
593
  console.log('โœ… Initialization tracking cleared');
591
594
  }
@@ -598,7 +601,7 @@ class SettingsManager {
598
601
  ];
599
602
 
600
603
  for (const cacheDir of cacheDirs) {
601
- if (fs.existsSync(cacheDir)) {
604
+ if (SecurityUtils.safeExistsSync(cacheDir)) {
602
605
  const cacheFiles = fs.readdirSync(cacheDir);
603
606
  for (const file of cacheFiles) {
604
607
  fs.unlinkSync(path.join(cacheDir, file));
@@ -621,7 +624,7 @@ class SettingsManager {
621
624
  ];
622
625
 
623
626
  for (const tempFile of tempFiles) {
624
- if (fs.existsSync(tempFile)) {
627
+ if (SecurityUtils.safeExistsSync(tempFile)) {
625
628
  fs.unlinkSync(tempFile);
626
629
  }
627
630
  }
@@ -638,7 +641,7 @@ class SettingsManager {
638
641
  ];
639
642
 
640
643
  for (const file of additionalFiles) {
641
- if (fs.existsSync(file)) {
644
+ if (SecurityUtils.safeExistsSync(file)) {
642
645
  fs.unlinkSync(file);
643
646
  console.log(`โœ… Removed ${path.basename(file)}`);
644
647
  }
@@ -647,7 +650,7 @@ class SettingsManager {
647
650
  // 9. Reset all script directory overrides to defaults
648
651
  this.settings.scriptDirectories = {
649
652
  "main": "./main",
650
- "utils": "./utils",
653
+ "utils": "./utils",
651
654
  "scripts": "./scripts",
652
655
  "settings": "./settings",
653
656
  "uiLocales": "./ui-locales"