@reldens/storage 0.42.0 → 0.43.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.
@@ -44,58 +44,20 @@ class EntitiesGenerator
44
44
  };
45
45
  this.server = sc.get(props, 'server', false);
46
46
  this.connectionData = sc.get(props, 'connectionData', false);
47
- if(!this.server && !this.connectionData){
48
- ErrorManager.error('Either server or connectionData must be provided to EntitiesGenerator.');
49
- }
50
47
  this.generatedEntities = {};
51
48
  }
52
49
 
53
- ensureFoldersExist()
54
- {
55
- if(!FileHandler.exists(this.generationFolder)){
56
- try {
57
- FileHandler.createFolder(this.generationFolder, { recursive: true });
58
- } catch (error) {
59
- ErrorManager.error('Failed to create generation folder: '+error.message);
60
- }
61
- }
62
- if(!FileHandler.exists(this.entitiesFolder)){
63
- try {
64
- FileHandler.createFolder(this.entitiesFolder, { recursive: true });
65
- } catch (error) {
66
- ErrorManager.error('Failed to create entities folder: '+error.message);
67
- }
68
- }
69
- if(!FileHandler.exists(this.modelsFolder)){
70
- try {
71
- FileHandler.createFolder(this.modelsFolder, { recursive: true });
72
- } catch (error) {
73
- ErrorManager.error('Failed to create models folder: '+error.message);
74
- }
75
- }
76
- for(let driverKey of Object.keys(this.driverMap)){
77
- let driverFolder = FileHandler.joinPaths(this.modelsFolder, driverKey);
78
- if(!FileHandler.exists(driverFolder)){
79
- try {
80
- FileHandler.createFolder(driverFolder, { recursive: true });
81
- } catch (error) {
82
- ErrorManager.error('Failed to create driver folder: '+error.message);
83
- }
84
- }
85
- }
86
- }
87
-
88
50
  async generateEntityFile(tableName, tableData)
89
51
  {
90
52
  let entityTemplatePath = this.templates['entity'];
91
53
  if(!FileHandler.exists(entityTemplatePath)){
92
- ErrorManager.error('Entity template file not found: '+entityTemplatePath);
54
+ Logger.critical('Entity template file not found: '+entityTemplatePath);
55
+ return false;
93
56
  }
94
- let entityTemplateContent;
95
- try {
96
- entityTemplateContent = FileHandler.fetchFileContents(entityTemplatePath);
97
- } catch (error) {
98
- ErrorManager.error('Failed to read entity template file: '+error.message);
57
+ let entityTemplateContent = FileHandler.fetchFileContents(entityTemplatePath);
58
+ if(!entityTemplateContent) {
59
+ Logger.critical('Failed to read entity template file: '+entityTemplatePath);
60
+ return false;
99
61
  }
100
62
  let entityClassName = sc.capitalizedCamelCase(tableName)+'Entity';
101
63
  let titleProperty = this.determineTitleProperty(tableData.columns);
@@ -114,7 +76,8 @@ class EntitiesGenerator
114
76
  }
115
77
  let editPropertiesRemoval = this.getEditPropertiesRemoval(fieldsToRemoveFromEdit);
116
78
  let listPropertiesDeclaration = this.getListPropertiesDeclaration(tableData.columns);
117
- let needsSc = listPropertiesDeclaration.includes('sc.removeFromArray') || editPropertiesRemoval.includes('sc.removeFromArray');
79
+ let needsSc = listPropertiesDeclaration.includes('sc.removeFromArray')
80
+ || editPropertiesRemoval.includes('sc.removeFromArray');
118
81
  let scRequire = needsSc ? '\nconst { sc } = require(\'@reldens/utils\');' : '';
119
82
  let replacements = {
120
83
  entityClassName,
@@ -128,25 +91,26 @@ class EntitiesGenerator
128
91
  let entityContent = this.applyReplacements(entityTemplateContent, replacements);
129
92
  let fileName = sc.kebabCase(tableName)+'-entity.js';
130
93
  let filePath = FileHandler.joinPaths(this.entitiesFolder, fileName);
131
- try {
132
- FileHandler.writeFile(filePath, entityContent);
133
- Logger.info('Generated entity file: '+filePath);
134
- this.generatedEntities[tableName] = {
135
- entityClassName,
136
- entityFileName: fileName,
137
- tableName,
138
- titleProperty
139
- };
140
- return true;
141
- } catch (error) {
142
- ErrorManager.error('Failed to write entity file: '+error.message);
94
+ if(!FileHandler.writeFile(filePath, entityContent)){
95
+ Logger.critical('Failed to write entity file: '+filePath);
96
+ return false;
143
97
  }
98
+ Logger.info('Generated entity file: '+filePath);
99
+ this.generatedEntities[tableName] = {
100
+ entityClassName,
101
+ entityFileName: fileName,
102
+ tableName,
103
+ titleProperty
104
+ };
105
+ return true;
144
106
  }
145
107
 
146
108
  getEditPropertiesRemoval(fieldsToRemove)
147
109
  {
148
110
  if(1 === fieldsToRemove.length){
149
- return 'let editProperties = [...showProperties];\n editProperties.splice(editProperties.indexOf(\''+fieldsToRemove[0]+'\'), 1);';
111
+ return 'let editProperties = [...showProperties];\n editProperties.splice(editProperties.indexOf(\''+
112
+ fieldsToRemove[0]
113
+ +'\'), 1);';
150
114
  }
151
115
  return 'let editProperties = sc.removeFromArray([...showProperties], [\''+fieldsToRemove.join('\', \'')+'\']);';
152
116
  }
@@ -183,7 +147,9 @@ class EntitiesGenerator
183
147
  propertiesConfig.push(propertyKey+': {}');
184
148
  continue;
185
149
  }
186
- propertiesConfig.push(propertyKey+': {\n '+props.join(',\n ')+'\n }');
150
+ propertiesConfig.push(
151
+ propertyKey+': {\n '+props.join(',\n ')+ '\n }'
152
+ );
187
153
  }
188
154
  return propertiesConfig.join(',\n ');
189
155
  }
@@ -239,7 +205,11 @@ class EntitiesGenerator
239
205
  for(let i = 0; i < enumValues.length; i++){
240
206
  availableValues.push('{value: '+(i+1)+', label: \''+enumValues[i]+'\'}');
241
207
  }
242
- props.push('availableValues: [\n '+availableValues.join(',\n ')+'\n ]');
208
+ props.push(
209
+ 'availableValues: [\n '+
210
+ availableValues.join(',\n ')+
211
+ '\n ]'
212
+ );
243
213
  }
244
214
 
245
215
  parseEnumValues(columnType)
@@ -284,7 +254,9 @@ class EntitiesGenerator
284
254
  return 'let listProperties = showProperties;';
285
255
  }
286
256
  if(1 === fieldsToRemove.length){
287
- return 'let listProperties = [...showProperties];\n listProperties.splice(listProperties.indexOf(\''+fieldsToRemove[0]+'\'), 1);';
257
+ return 'let listProperties = [...showProperties];\n listProperties.splice(listProperties.indexOf(\''+
258
+ fieldsToRemove[0]+
259
+ '\'), 1);';
288
260
  }
289
261
  return 'let listProperties = sc.removeFromArray([...showProperties], [\''+fieldsToRemove.join('\', \'')+'\']);';
290
262
  }
@@ -306,13 +278,13 @@ class EntitiesGenerator
306
278
  {
307
279
  let modelTemplatePath = this.templates[driverKey];
308
280
  if(!FileHandler.exists(modelTemplatePath)){
309
- ErrorManager.error('Model template file "'+modelTemplatePath+'" not found for driver "'+driverKey+'".');
281
+ Logger.critical('Model template file "'+modelTemplatePath+'" not found for driver "'+driverKey+'".');
282
+ return false;
310
283
  }
311
- let modelTemplateContent;
312
- try {
313
- modelTemplateContent = FileHandler.fetchFileContents(modelTemplatePath);
314
- } catch (error) {
315
- ErrorManager.error('Failed to read model template file: '+error.message);
284
+ let modelTemplateContent = FileHandler.fetchFileContents(modelTemplatePath);
285
+ if(!modelTemplateContent){
286
+ Logger.critical('Failed to read model template file: '+modelTemplatePath);
287
+ return false;
316
288
  }
317
289
  let modelClassName = sc.capitalizedCamelCase(tableName)+'Model';
318
290
  let modelPropertiesList = Object.keys(tableData.columns).join(', ');
@@ -332,17 +304,20 @@ class EntitiesGenerator
332
304
  let modelContent = this.applyReplacements(modelTemplateContent, replacements);
333
305
  let fileName = sc.kebabCase(tableName)+'-model.js';
334
306
  let driverFolder = FileHandler.joinPaths(this.modelsFolder, driverKey);
307
+ if(!FileHandler.createFolder(driverFolder)){
308
+ Logger.critical('Failed to create driver folder.');
309
+ return false;
310
+ }
335
311
  let filePath = FileHandler.joinPaths(driverFolder, fileName);
336
- try {
337
- FileHandler.writeFile(filePath, modelContent);
338
- Logger.info('Generated model file: '+filePath);
339
- this.generatedEntities[tableName].modelClassName = modelClassName;
340
- this.generatedEntities[tableName].modelFileName = fileName;
341
- this.generatedEntities[tableName].driverKey = driverKey;
342
- return true;
343
- } catch (error) {
344
- ErrorManager.error('Failed to write model file: '+error.message);
312
+ if(!FileHandler.writeFile(filePath, modelContent)){
313
+ Logger.critical('Failed to write model file: '+filePath);
314
+ return false;
345
315
  }
316
+ Logger.info('Generated model file: '+filePath);
317
+ this.generatedEntities[tableName].modelClassName = modelClassName;
318
+ this.generatedEntities[tableName].modelFileName = fileName;
319
+ this.generatedEntities[tableName].driverKey = driverKey;
320
+ return true;
346
321
  }
347
322
 
348
323
  getEntityPropertiesDefinition(columns, driverKey)
@@ -390,16 +365,13 @@ class EntitiesGenerator
390
365
  {
391
366
  let configTemplatePath = this.templates['entities-config'];
392
367
  if(!FileHandler.exists(configTemplatePath)){
393
- ErrorManager.error('Entities config template file not found: '+configTemplatePath);
394
- }
395
- let configTemplateContent;
396
- try {
397
- configTemplateContent = FileHandler.fetchFileContents(configTemplatePath);
398
- } catch (error) {
399
- ErrorManager.error('Failed to read entities config template file: '+error.message);
368
+ Logger.critical('Entities config template file not found: '+configTemplatePath);
369
+ return false;
400
370
  }
401
- if(!configTemplateContent || 'string' !== typeof configTemplateContent){
402
- ErrorManager.error('Invalid entities config template content');
371
+ let configTemplateContent = FileHandler.fetchFileContents(configTemplatePath);
372
+ if(!configTemplateContent) {
373
+ Logger.critical('Failed to read entities config template file: '+configTemplatePath);
374
+ return false;
403
375
  }
404
376
  let requireStatements = this.getRequireStatements();
405
377
  let entitiesConfigExport = this.getEntitiesConfigExport();
@@ -408,13 +380,12 @@ class EntitiesGenerator
408
380
  entitiesConfigExport
409
381
  };
410
382
  let configContent = this.applyReplacements(configTemplateContent, replacements);
411
- try {
412
- FileHandler.writeFile(this.entitiesConfigPath, configContent);
413
- Logger.info('Generated entities config file: '+this.entitiesConfigPath);
414
- return true;
415
- } catch (error) {
416
- ErrorManager.error('Failed to write entities config file: '+error.message);
383
+ if (!FileHandler.writeFile(this.entitiesConfigPath, configContent)){
384
+ Logger.critical('Failed to write entities config file: '+this.entitiesConfigPath);
385
+ return false;
417
386
  }
387
+ Logger.info('Generated entities config file: '+this.entitiesConfigPath);
388
+ return true;
418
389
  }
419
390
 
420
391
  getRequireStatements()
@@ -422,7 +393,10 @@ class EntitiesGenerator
422
393
  let requireStatements = [];
423
394
  for(let tableName in this.generatedEntities){
424
395
  let entity = this.generatedEntities[tableName];
425
- requireStatements.push('const { '+entity.entityClassName+' } = require(\'./entities/'+entity.entityFileName.replace('.js', '')+'\');');
396
+ let nameWithoutExtension = entity.entityFileName.replace('.js', '');
397
+ requireStatements.push(
398
+ 'const { '+ entity.entityClassName+' } = require(\'./entities/'+nameWithoutExtension+'\');'
399
+ );
426
400
  }
427
401
  return requireStatements.join('\n');
428
402
  }
@@ -442,39 +416,29 @@ class EntitiesGenerator
442
416
  {
443
417
  let translationsTemplatePath = this.templates['entities-translations'];
444
418
  if(!FileHandler.exists(translationsTemplatePath)){
445
- ErrorManager.error('Entities translations template file not found: '+translationsTemplatePath);
446
- }
447
- let translationsTemplateContent;
448
- try {
449
- translationsTemplateContent = FileHandler.fetchFileContents(translationsTemplatePath);
450
- } catch (error) {
451
- ErrorManager.error('Failed to read entities translations template file: '+error.message);
419
+ Logger.critical('Entities translations template file not found: '+translationsTemplatePath);
420
+ return false;
452
421
  }
453
- if(!translationsTemplateContent || 'string' !== typeof translationsTemplateContent){
454
- ErrorManager.error('Invalid entities translations template content');
422
+ let translationsTemplateContent = FileHandler.fetchFileContents(translationsTemplatePath);
423
+ if(!translationsTemplateContent){
424
+ Logger.critical('Failed to read entities translations template file: '+translationsTemplatePath);
425
+ return false;
455
426
  }
456
427
  let labels = this.getTranslationLabels();
457
- let translationsContent = translationsTemplateContent.replace(
458
- /{{labels}}/g,
459
- labels
460
- );
461
- try {
462
- FileHandler.writeFile(this.entitiesTranslationsPath, translationsContent);
463
- Logger.info('Generated entities translations file: '+this.entitiesTranslationsPath);
464
- return true;
465
- } catch (error) {
466
- ErrorManager.error('Failed to write entities translations file: '+error.message);
428
+ let translationsContent = translationsTemplateContent.replace(/{{labels}}/g, labels);
429
+ if(!FileHandler.writeFile(this.entitiesTranslationsPath, translationsContent)){
430
+ Logger.critical('Failed to write entities translations file: '+this.entitiesTranslationsPath);
431
+ return false;
467
432
  }
433
+ Logger.info('Generated entities translations file: '+this.entitiesTranslationsPath);
434
+ return true;
468
435
  }
469
436
 
470
437
  getTranslationLabels()
471
438
  {
472
439
  let labels = [];
473
440
  for(let tableName in this.generatedEntities){
474
- let humanReadable = tableName
475
- .split('_')
476
- .map(word => word.charAt(0).toUpperCase() + word.slice(1))
477
- .join(' ');
441
+ let humanReadable = tableName.split('_').map(word => word.charAt(0).toUpperCase()+word.slice(1)).join(' ');
478
442
  labels.push('\''+tableName+'\': \''+humanReadable+'\'');
479
443
  }
480
444
  return labels.join(',\n ');
@@ -484,33 +448,27 @@ class EntitiesGenerator
484
448
  {
485
449
  let registeredTemplatePath = this.templates['registered-models'];
486
450
  if(!FileHandler.exists(registeredTemplatePath)){
487
- ErrorManager.error('Registered models template file not found: '+registeredTemplatePath);
488
- }
489
- let registeredTemplateContent;
490
- try {
491
- registeredTemplateContent = FileHandler.fetchFileContents(registeredTemplatePath);
492
- } catch (error) {
493
- ErrorManager.error('Failed to read registered models template file: '+error.message);
451
+ Logger.critical('Registered models template file not found: '+registeredTemplatePath);
452
+ return false;
494
453
  }
495
- if(!registeredTemplateContent || 'string' !== typeof registeredTemplateContent){
496
- ErrorManager.error('Invalid registered models template content');
454
+ let registeredTemplateContent = FileHandler.fetchFileContents(registeredTemplatePath);
455
+ if(!registeredTemplateContent){
456
+ Logger.critical('Failed to read registered models template file: '+registeredTemplatePath);
457
+ return false;
497
458
  }
498
- let registeredModels = this.getRegisteredModels(driverKey);
499
- let registeredEntitiesObject = this.getRegisteredEntitiesObject(driverKey);
500
459
  let replacements = {
501
- registeredModels,
502
- registeredEntitiesObject
460
+ registeredModels: this.getRegisteredModels(driverKey),
461
+ registeredEntitiesObject: this.getRegisteredEntitiesObject(driverKey)
503
462
  };
504
463
  let registeredContent = this.applyReplacements(registeredTemplateContent, replacements);
505
464
  let driverFolder = FileHandler.joinPaths(this.modelsFolder, driverKey);
506
465
  let filePath = FileHandler.joinPaths(driverFolder, 'registered-models-'+driverKey+'.js');
507
- try {
508
- FileHandler.writeFile(filePath, registeredContent);
509
- Logger.info('Generated registered models file: '+filePath);
510
- return true;
511
- } catch (error) {
512
- ErrorManager.error('Failed to write registered models file: '+error.message);
466
+ if(!FileHandler.writeFile(filePath, registeredContent)){
467
+ Logger.critical('Failed to write registered models file: '+filePath);
468
+ return false;
513
469
  }
470
+ Logger.info('Generated registered models file: '+filePath);
471
+ return true;
514
472
  }
515
473
 
516
474
  getRegisteredModels(driverKey)
@@ -518,9 +476,12 @@ class EntitiesGenerator
518
476
  let registeredModels = [];
519
477
  for(let tableName in this.generatedEntities){
520
478
  let entity = this.generatedEntities[tableName];
521
- if(entity.driverKey === driverKey){
522
- registeredModels.push('const { '+entity.modelClassName+' } = require(\'./'+entity.modelFileName.replace('.js', '')+'\');');
479
+ if(driverKey !== entity.driverKey){
480
+ continue;
523
481
  }
482
+ registeredModels.push(
483
+ 'const { '+entity.modelClassName+' } = require(\'./'+entity.modelFileName.replace('.js', '')+'\');'
484
+ );
524
485
  }
525
486
  return registeredModels.join('\n');
526
487
  }
@@ -530,10 +491,10 @@ class EntitiesGenerator
530
491
  let registeredEntitiesObject = [];
531
492
  for(let tableName in this.generatedEntities){
532
493
  let entity = this.generatedEntities[tableName];
533
- if(entity.driverKey === driverKey){
534
- let camelCaseKey = sc.camelCase(tableName);
535
- registeredEntitiesObject.push(camelCaseKey+': '+entity.modelClassName);
494
+ if(driverKey !== entity.driverKey){
495
+ continue;
536
496
  }
497
+ registeredEntitiesObject.push(sc.camelCase(tableName)+': '+entity.modelClassName);
537
498
  }
538
499
  return registeredEntitiesObject.join(',\n ');
539
500
  }
@@ -541,15 +502,13 @@ class EntitiesGenerator
541
502
  applyReplacements(content, replacements)
542
503
  {
543
504
  let result = content;
544
- for(let placeholder in replacements){
545
- result = result.replace(
546
- new RegExp('{{'+placeholder+'}}', 'g'),
547
- replacements[placeholder]
548
- );
505
+ for(let placeholder of Object.keys(replacements)){
506
+ result = result.replace(new RegExp('{{'+placeholder+'}}','g'), replacements[placeholder]);
549
507
  }
550
508
  return result;
551
509
  }
552
510
 
511
+
553
512
  async generate()
554
513
  {
555
514
  if(!this.server){
@@ -566,7 +525,9 @@ class EntitiesGenerator
566
525
  Logger.critical('EntitiesGenerator tables fetch failed.');
567
526
  return false;
568
527
  }
569
- this.ensureFoldersExist();
528
+ if(!this.ensureFoldersExist()){
529
+ return false;
530
+ }
570
531
  let driverKey = sc.get(
571
532
  this.connectionData,
572
533
  'driver',
@@ -595,7 +556,8 @@ class EntitiesGenerator
595
556
  let driverKey = sc.get(this.connectionData, 'driver', 'objection-js');
596
557
  let driverClassMapped = this.driverMap[driverKey];
597
558
  if(!driverClassMapped){
598
- ErrorManager.error('Unsupported driver: '+driverKey);
559
+ Logger.critical('Unsupported driver: '+driverKey);
560
+ return false;
599
561
  }
600
562
  this.server = new driverClassMapped({
601
563
  client: sc.get(this.connectionData, 'client', 'mysql2'),
@@ -610,6 +572,23 @@ class EntitiesGenerator
610
572
  return this.server;
611
573
  }
612
574
 
575
+ ensureFoldersExist()
576
+ {
577
+ if(!FileHandler.createFolder(this.generationFolder)){
578
+ Logger.critical('Failed to create generation folder.');
579
+ return false;
580
+ }
581
+ if(!FileHandler.createFolder(this.entitiesFolder)){
582
+ Logger.critical('Failed to create entities folder.');
583
+ return false;
584
+ }
585
+ if(!FileHandler.createFolder(this.modelsFolder)){
586
+ Logger.critical('Failed to create models folder.');
587
+ return false;
588
+ }
589
+ return true;
590
+ }
591
+
613
592
  }
614
593
 
615
594
  module.exports.EntitiesGenerator = EntitiesGenerator;
@@ -12,7 +12,6 @@ class MikroOrmDriver extends BaseDriver
12
12
 
13
13
  constructor(props)
14
14
  {
15
- // @TODO - BETA - Finish implementation.
16
15
  super(props);
17
16
  if(!props.orm){
18
17
  ErrorManager.error('Missing ORM on Mikro ORM driver.');
@@ -4,7 +4,7 @@
4
4
  *
5
5
  */
6
6
 
7
- const { ErrorManager, sc } = require('@reldens/utils');
7
+ const { Logger, sc } = require('@reldens/utils');
8
8
 
9
9
  class MySQLTablesProvider
10
10
  {
@@ -30,7 +30,8 @@ class MySQLTablesProvider
30
30
  try {
31
31
  let result = await server.rawQuery(tablesQuery);
32
32
  if(!sc.isArray(result) || 0 === result.length){
33
- ErrorManager.error('No tables found in the database.');
33
+ Logger.critical('No tables found in the database.');
34
+ return false;
34
35
  }
35
36
  let tables = {};
36
37
  for(let row of result){
@@ -63,18 +64,20 @@ class MySQLTablesProvider
63
64
  ' AND REFERENCED_TABLE_NAME IS NOT NULL;';
64
65
 
65
66
  let foreignKeysResult = await server.rawQuery(foreignKeysQuery);
66
- if(sc.isArray(foreignKeysResult) && 0 < foreignKeysResult.length){
67
- for(let row of foreignKeysResult){
68
- if(tables[row.TABLE_NAME] && tables[row.TABLE_NAME].columns[row.COLUMN_NAME]){
69
- tables[row.TABLE_NAME].columns[row.COLUMN_NAME].referencedTable = row.REFERENCED_TABLE_NAME;
70
- tables[row.TABLE_NAME].columns[row.COLUMN_NAME].referencedColumn = row.REFERENCED_COLUMN_NAME;
71
- }
67
+ if(!sc.isArray(foreignKeysResult) || 0 < foreignKeysResult.length){
68
+ return tables;
69
+ }
70
+ for(let row of foreignKeysResult){
71
+ if(tables[row.TABLE_NAME] && tables[row.TABLE_NAME].columns[row.COLUMN_NAME]){
72
+ tables[row.TABLE_NAME].columns[row.COLUMN_NAME].referencedTable = row.REFERENCED_TABLE_NAME;
73
+ tables[row.TABLE_NAME].columns[row.COLUMN_NAME].referencedColumn = row.REFERENCED_COLUMN_NAME;
72
74
  }
73
75
  }
74
76
  return tables;
75
77
  } catch(error) {
76
- ErrorManager.error('Failed to fetch tables from database: '+error.message);
78
+ Logger.critical('Failed to fetch tables from database: '+error.message);
77
79
  }
80
+ return false;
78
81
  }
79
82
 
80
83
  }
@@ -31,9 +31,9 @@ class PrismaSchemaGenerator
31
31
  execSync('npx prisma generate', { stdio: 'inherit' });
32
32
  return true;
33
33
  } catch(error) {
34
- ErrorManager.error('Failed to generate Prisma schema. '+error.message);
35
- return false;
34
+ Logger.critical('Failed to generate Prisma schema. '+error.message);
36
35
  }
36
+ return false;
37
37
  }
38
38
 
39
39
  generateSchemaFile()
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@reldens/storage",
3
3
  "scope": "@reldens",
4
- "version": "0.42.0",
4
+ "version": "0.43.0",
5
5
  "description": "Reldens - Storage",
6
6
  "author": "Damian A. Pastorini",
7
7
  "license": "MIT",