i18ntk 1.10.2 → 2.0.3

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 (108) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +141 -1191
  3. package/main/i18ntk-analyze.js +65 -84
  4. package/main/i18ntk-backup-class.js +420 -0
  5. package/main/i18ntk-backup.js +3 -3
  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 +77 -26
  11. package/main/i18ntk-java.js +27 -32
  12. package/main/i18ntk-js.js +70 -68
  13. package/main/i18ntk-manage.js +129 -30
  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 +9 -404
  18. package/main/i18ntk-sizing.js +6 -6
  19. package/main/i18ntk-summary.js +21 -18
  20. package/main/i18ntk-ui.js +11 -10
  21. package/main/i18ntk-usage.js +54 -18
  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 -29
  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 +117 -117
  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 +157 -161
  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 +18 -18
  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 +73 -104
  86. package/utils/config-manager.js +204 -171
  87. package/utils/config.js +5 -4
  88. package/utils/env-manager.js +249 -263
  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/mini-commander.js +179 -0
  94. package/utils/missing-key-validator.js +5 -5
  95. package/utils/plugin-loader.js +40 -29
  96. package/utils/prompt.js +14 -44
  97. package/utils/safe-json.js +40 -0
  98. package/utils/secure-errors.js +3 -3
  99. package/utils/security-check-improved.js +390 -0
  100. package/utils/security-config.js +5 -5
  101. package/utils/security-fixed.js +607 -0
  102. package/utils/security.js +652 -602
  103. package/utils/setup-enforcer.js +136 -44
  104. package/utils/setup-validator.js +33 -32
  105. package/utils/ultra-performance-optimizer.js +11 -9
  106. package/utils/watch-locales.js +2 -1
  107. package/utils/prompt-fixed.js +0 -55
  108. package/utils/security-check.js +0 -454
@@ -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
 
@@ -535,28 +535,28 @@ class SettingsManager {
535
535
 
536
536
  // Main configuration file
537
537
  const mainConfigPath = path.join(settingsDir, 'i18ntk-config.json');
538
- if (fs.existsSync(mainConfigPath)) {
538
+ if (SecurityUtils.safeExistsSync(mainConfigPath)) {
539
539
  fs.unlinkSync(mainConfigPath);
540
540
  console.log('✅ Main configuration file removed');
541
541
  }
542
542
 
543
543
  // Project configuration file
544
544
  const projectConfigPath = path.join(settingsDir, 'project-config.json');
545
- if (fs.existsSync(projectConfigPath)) {
545
+ if (SecurityUtils.safeExistsSync(projectConfigPath)) {
546
546
  fs.unlinkSync(projectConfigPath);
547
547
  console.log('✅ Project configuration removed');
548
548
  }
549
549
 
550
550
  // Setup tracking file
551
551
  const setupFile = path.join(settingsDir, 'setup.json');
552
- if (fs.existsSync(setupFile)) {
552
+ if (SecurityUtils.safeExistsSync(setupFile)) {
553
553
  fs.unlinkSync(setupFile);
554
554
  console.log('✅ Setup tracking cleared');
555
555
  }
556
556
 
557
557
  // 3. Clear all backup files from backups directory
558
558
  const backupsDir = path.join(packageDir, 'backups');
559
- if (fs.existsSync(backupsDir)) {
559
+ if (SecurityUtils.safeExistsSync(backupsDir)) {
560
560
  const backupFiles = fs.readdirSync(backupsDir);
561
561
  for (const file of backupFiles) {
562
562
  if (file.endsWith('.json') || file.endsWith('.bak')) {
@@ -575,7 +575,7 @@ class SettingsManager {
575
575
  ];
576
576
 
577
577
  for (const adminConfigPath of adminConfigPaths) {
578
- if (fs.existsSync(adminConfigPath)) {
578
+ if (SecurityUtils.safeExistsSync(adminConfigPath)) {
579
579
  fs.unlinkSync(adminConfigPath);
580
580
  console.log('✅ Admin PIN configuration cleared');
581
581
  }
@@ -588,7 +588,7 @@ class SettingsManager {
588
588
  ];
589
589
 
590
590
  for (const initFile of initFiles) {
591
- if (fs.existsSync(initFile)) {
591
+ if (SecurityUtils.safeExistsSync(initFile)) {
592
592
  fs.unlinkSync(initFile);
593
593
  console.log('✅ Initialization tracking cleared');
594
594
  }
@@ -601,7 +601,7 @@ class SettingsManager {
601
601
  ];
602
602
 
603
603
  for (const cacheDir of cacheDirs) {
604
- if (fs.existsSync(cacheDir)) {
604
+ if (SecurityUtils.safeExistsSync(cacheDir)) {
605
605
  const cacheFiles = fs.readdirSync(cacheDir);
606
606
  for (const file of cacheFiles) {
607
607
  fs.unlinkSync(path.join(cacheDir, file));
@@ -624,7 +624,7 @@ class SettingsManager {
624
624
  ];
625
625
 
626
626
  for (const tempFile of tempFiles) {
627
- if (fs.existsSync(tempFile)) {
627
+ if (SecurityUtils.safeExistsSync(tempFile)) {
628
628
  fs.unlinkSync(tempFile);
629
629
  }
630
630
  }
@@ -641,7 +641,7 @@ class SettingsManager {
641
641
  ];
642
642
 
643
643
  for (const file of additionalFiles) {
644
- if (fs.existsSync(file)) {
644
+ if (SecurityUtils.safeExistsSync(file)) {
645
645
  fs.unlinkSync(file);
646
646
  console.log(`✅ Removed ${path.basename(file)}`);
647
647
  }