@reldens/storage 0.49.0 → 0.50.0

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.
@@ -100,7 +100,7 @@ class EntitiesGenerator
100
100
  Logger.critical('Failed to write entity file: '+filePath);
101
101
  return false;
102
102
  }
103
- Logger.info('Generated entity file: '+filePath);
103
+ Logger.info('Generated entity file: '+fileName);
104
104
  this.generatedEntities[tableName] = {
105
105
  entityClassName,
106
106
  entityFileName: fileName,
@@ -347,10 +347,10 @@ class EntitiesGenerator
347
347
  }
348
348
  let filePath = FileHandler.joinPaths(driverFolder, fileName);
349
349
  if(!FileHandler.writeFile(filePath, modelContent)){
350
- Logger.critical('Failed to write model file: '+filePath);
350
+ Logger.critical('Failed to write model file: '+fileName);
351
351
  return false;
352
352
  }
353
- Logger.info('Generated model file: '+filePath);
353
+ Logger.info('Generated model file: '+fileName);
354
354
  this.generatedEntities[tableName].modelClassName = modelClassName;
355
355
  this.generatedEntities[tableName].modelFileName = fileName;
356
356
  this.generatedEntities[tableName].driverKey = driverKey;
@@ -437,6 +437,14 @@ class EntitiesGenerator
437
437
  }
438
438
 
439
439
  generateEntitiesConfigFile()
440
+ {
441
+ if(this.isOverride){
442
+ return this.regenerateEntitiesConfigFile();
443
+ }
444
+ return this.appendToEntitiesConfigFile();
445
+ }
446
+
447
+ regenerateEntitiesConfigFile()
440
448
  {
441
449
  let configTemplateContent = FileHandler.fetchFileContents(this.templates['entities-config']);
442
450
  if(!configTemplateContent) {
@@ -455,7 +463,66 @@ class EntitiesGenerator
455
463
  Logger.critical('Failed to write entities config file: '+this.entitiesConfigPath);
456
464
  return false;
457
465
  }
458
- Logger.info('Generated entities config file: '+this.entitiesConfigPath);
466
+ Logger.info('Regenerated entities config file: '+this.entitiesConfigPath);
467
+ return true;
468
+ }
469
+
470
+ appendToEntitiesConfigFile()
471
+ {
472
+ if(0 === Object.keys(this.generatedEntities).length){
473
+ return true;
474
+ }
475
+ if(!FileHandler.exists(this.entitiesConfigPath)){
476
+ Logger.error('Entities config file does not exist, cannot append new entities.');
477
+ return false;
478
+ }
479
+ let existingContent = FileHandler.readFile(this.entitiesConfigPath);
480
+ if(!existingContent){
481
+ Logger.error('Could not read existing entities config file.');
482
+ return false;
483
+ }
484
+ let newRequires = [];
485
+ let newConfigs = [];
486
+ for(let tableName of Object.keys(this.generatedEntities)){
487
+ let entity = this.generatedEntities[tableName];
488
+ let entityClassName = sc.get(entity, 'entityClassName', sc.capitalizedCamelCase(tableName)+'Entity');
489
+ let entityFileName = sc.get(entity, 'entityFileName', sc.kebabCase(tableName)+'-entity').replace('.js', '');
490
+ let requireStatement = 'const { '+ entityClassName+' } = require(\'./entities/'+entityFileName+'\');';
491
+ let configEntry = sc.camelCase(tableName)+': '+entityClassName+'.propertiesConfig()';
492
+ if(!existingContent.includes(requireStatement)){
493
+ newRequires.push(requireStatement);
494
+ }
495
+ if(!existingContent.includes(sc.camelCase(tableName)+':')){
496
+ newConfigs.push(configEntry);
497
+ }
498
+ }
499
+ if(0 === newRequires.length && 0 === newConfigs.length){
500
+ return true;
501
+ }
502
+ let firstRequirePosition = existingContent.indexOf('const {');
503
+ let entitiesConfigEnd = existingContent.indexOf('};\n\nmodule.exports');
504
+ if(-1 === firstRequirePosition || -1 === entitiesConfigEnd){
505
+ Logger.error('Could not find insertion points in config file.');
506
+ return false;
507
+ }
508
+ let beforeFirstRequire = existingContent.substring(0, firstRequirePosition);
509
+ let afterFirstRequire = existingContent.substring(firstRequirePosition, entitiesConfigEnd);
510
+ let updatedContent = beforeFirstRequire;
511
+ if(0 < newRequires.length){
512
+ updatedContent += newRequires.join('\n') + '\n';
513
+ }
514
+ updatedContent += afterFirstRequire;
515
+ if(0 < newConfigs.length){
516
+ if(!afterFirstRequire.trim().endsWith(',')){
517
+ updatedContent = updatedContent.trimEnd() + ',';
518
+ }
519
+ updatedContent += '\n ' + newConfigs.join(',\n ') + '\n';
520
+ }
521
+ updatedContent += existingContent.substring(entitiesConfigEnd);
522
+ if(!FileHandler.writeFile(this.entitiesConfigPath, updatedContent)){
523
+ Logger.error('Failed to append to entities config file: '+this.entitiesConfigPath);
524
+ return false;
525
+ }
459
526
  return true;
460
527
  }
461
528
 
@@ -487,6 +554,14 @@ class EntitiesGenerator
487
554
  }
488
555
 
489
556
  generateEntitiesTranslationsFile()
557
+ {
558
+ if(this.isOverride){
559
+ return this.regenerateEntitiesTranslationsFile();
560
+ }
561
+ return this.appendToEntitiesTranslationsFile();
562
+ }
563
+
564
+ regenerateEntitiesTranslationsFile()
490
565
  {
491
566
  let translationsTemplatePath = this.templates['entities-translations'];
492
567
  if(!FileHandler.exists(translationsTemplatePath)){
@@ -506,7 +581,52 @@ class EntitiesGenerator
506
581
  Logger.critical('Failed to write entities translations file: '+this.entitiesTranslationsPath);
507
582
  return false;
508
583
  }
509
- Logger.info('Generated entities translations file: '+this.entitiesTranslationsPath);
584
+ Logger.info('Regenerated entities translations file: '+this.entitiesTranslationsPath);
585
+ return true;
586
+ }
587
+
588
+ appendToEntitiesTranslationsFile()
589
+ {
590
+ if(0 === Object.keys(this.generatedEntities).length){
591
+ return true;
592
+ }
593
+ if(!FileHandler.exists(this.entitiesTranslationsPath)){
594
+ Logger.error('Entities translations file does not exist, cannot append new entities.');
595
+ return false;
596
+ }
597
+ let existingContent = FileHandler.readFile(this.entitiesTranslationsPath);
598
+ if(!existingContent){
599
+ Logger.error('Could not read existing translations file.');
600
+ return false;
601
+ }
602
+ let newTranslations = [];
603
+ for(let tableName of Object.keys(this.generatedEntities)){
604
+ if(!existingContent.includes('\''+tableName+'\':')){
605
+ newTranslations.push(
606
+ '\''+tableName+'\': \''
607
+ +tableName.split('_').map(word => word.charAt(0).toUpperCase()+word.slice(1)).join(' ')+'\''
608
+ );
609
+ }
610
+ }
611
+ if(0 === newTranslations.length){
612
+ return true;
613
+ }
614
+ let labelsEnd = existingContent.indexOf('\n }\n');
615
+ if(-1 === existingContent.indexOf('labels: {') || -1 === labelsEnd){
616
+ Logger.error('Could not find labels object boundaries in existing translations file.');
617
+ return false;
618
+ }
619
+ let beforeLabelsEnd = existingContent.substring(0, labelsEnd);
620
+ if(!beforeLabelsEnd.trim().endsWith(',')){
621
+ beforeLabelsEnd = beforeLabelsEnd.trimEnd() + ',';
622
+ }
623
+ if(!FileHandler.writeFile(
624
+ this.entitiesTranslationsPath,
625
+ beforeLabelsEnd + '\n ' + newTranslations.join(',\n ') + existingContent.substring(labelsEnd)
626
+ )){
627
+ Logger.error('Failed to append to entities translations file: '+this.entitiesTranslationsPath);
628
+ return false;
629
+ }
510
630
  return true;
511
631
  }
512
632
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@reldens/storage",
3
3
  "scope": "@reldens",
4
- "version": "0.49.0",
4
+ "version": "0.50.0",
5
5
  "description": "Reldens - Storage",
6
6
  "author": "Damian A. Pastorini",
7
7
  "license": "MIT",
@@ -42,12 +42,12 @@
42
42
  "url": "https://github.com/damian-pastorini/reldens-storage/issues"
43
43
  },
44
44
  "dependencies": {
45
- "@mikro-orm/core": "^6.4.15",
46
- "@mikro-orm/mongodb": "^6.4.15",
47
- "@mikro-orm/mysql": "^6.4.15",
45
+ "@mikro-orm/core": "^6.4.16",
46
+ "@mikro-orm/mongodb": "^6.4.16",
47
+ "@mikro-orm/mysql": "^6.4.16",
48
48
  "@prisma/client": "^6.8.2",
49
49
  "@reldens/server-utils": "^0.18.0",
50
- "@reldens/utils": "^0.49.0",
50
+ "@reldens/utils": "^0.50.0",
51
51
  "knex": "^3.1.0",
52
52
  "mysql": "^2.18.1",
53
53
  "mysql2": "^3.14.1",