@reldens/cms 0.64.0 → 0.66.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.
@@ -1,108 +1,104 @@
1
- /**
2
- *
3
- * Reldens - CMS - MySQLInstaller
4
- *
5
- */
6
-
7
- const { execSync } = require('child_process');
8
- const { FileHandler } = require('@reldens/server-utils');
9
- const { Logger, sc } = require('@reldens/utils');
10
-
11
- class MySQLInstaller
12
- {
13
-
14
- static migrationFiles()
15
- {
16
- return {
17
- 'install-cms-tables': 'install.sql',
18
- 'install-user-auth': 'users-authentication.sql',
19
- 'install-default-user': 'default-user.sql',
20
- 'install-default-homepage': 'default-homepage.sql',
21
- 'install-default-blocks': 'default-blocks.sql',
22
- 'install-entity-access': 'default-entity-access.sql',
23
- 'install-dynamic-forms': 'default-forms.sql',
24
- 'install-seo-files': 'default-sitemaps-and-robots.sql'
25
- };
26
- }
27
-
28
- static async executeQueryFile(isMarked, fileName, dbDriver, migrationsPath)
29
- {
30
- if('on' !== isMarked){
31
- return '';
32
- }
33
- let sqlFileContent = FileHandler.readFile(FileHandler.joinPaths(migrationsPath, fileName));
34
- if(!sqlFileContent){
35
- Logger.error('SQL file "'+fileName+'" not found.');
36
- return '/?error=sql-file-not-found&file-name='+fileName;
37
- }
38
- let queryExecutionResult = await dbDriver.rawQuery(sqlFileContent);
39
- if(!queryExecutionResult){
40
- Logger.error('SQL file "'+fileName+'" raw execution failed.');
41
- return '/?error=sql-file-execution-error&file-name='+fileName;
42
- }
43
- Logger.info('SQL file "'+fileName+'" raw execution successfully.');
44
- return '';
45
- }
46
-
47
- static normalizePrismaProvider(client)
48
- {
49
- if(-1 !== client.indexOf('mysql')){
50
- return 'mysql';
51
- }
52
- if('postgresql' === client || 'postgres' === client){
53
- return 'postgresql';
54
- }
55
- if('mongodb' === client){
56
- return 'mongodb';
57
- }
58
- return client;
59
- }
60
-
61
- static async generateMinimalPrismaClient(dbConfig, projectRoot)
62
- {
63
- let prismaPath = FileHandler.joinPaths(projectRoot, 'prisma');
64
- let schemaPath = FileHandler.joinPaths(prismaPath, 'schema.prisma');
65
- FileHandler.createFolder(prismaPath);
66
- let provider = MySQLInstaller.normalizePrismaProvider(sc.get(dbConfig, 'client', 'mysql'));
67
- let schemaContent = 'generator client {\n'
68
- + ' provider = "prisma-client-js"\n'
69
- + ' output = "./client"\n'
70
- + '}\n'
71
- + '\n'
72
- + 'datasource db {\n'
73
- + ' provider = "'+provider+'"\n'
74
- + ' url = env("RELDENS_DB_URL")\n'
75
- + '}';
76
- FileHandler.writeFile(schemaPath, schemaContent);
77
- Logger.info('Running prisma generate...');
78
- try {
79
- execSync('npx prisma generate', { stdio: 'inherit', cwd: projectRoot });
80
- let clientPath = FileHandler.joinPaths(projectRoot, 'prisma', 'client');
81
- let { PrismaClient } = require(clientPath);
82
- return new PrismaClient();
83
- } catch(error) {
84
- Logger.error('Prisma generate failed: '+error.message);
85
- return false;
86
- }
87
- }
88
-
89
- static async createPrismaClient(projectRoot)
90
- {
91
- try {
92
- let clientPath = FileHandler.joinPaths(projectRoot, 'prisma', 'client');
93
- if(!FileHandler.exists(clientPath)){
94
- return false;
95
- }
96
- const { PrismaClient } = require(clientPath);
97
- let client = new PrismaClient();
98
- await client.$connect();
99
- return client;
100
- } catch(error){
101
- Logger.error('Prisma client creation failed: '+error.message);
102
- return false;
103
- }
104
- }
105
-
106
- }
107
-
108
- module.exports.MySQLInstaller = MySQLInstaller;
1
+ /**
2
+ *
3
+ * Reldens - CMS - MySQLInstaller
4
+ *
5
+ */
6
+
7
+ const { execSync } = require('child_process');
8
+ const { FileHandler } = require('@reldens/server-utils');
9
+ const { Logger, sc } = require('@reldens/utils');
10
+ const { PrismaSchemaGenerator, PrismaClientLoader } = require('@reldens/storage');
11
+
12
+ class MySQLInstaller
13
+ {
14
+
15
+ static migrationFiles()
16
+ {
17
+ return {
18
+ 'install-cms-tables': 'install.sql',
19
+ 'install-user-auth': 'users-authentication.sql',
20
+ 'install-default-user': 'default-user.sql',
21
+ 'install-default-homepage': 'default-homepage.sql',
22
+ 'install-default-blocks': 'default-blocks.sql',
23
+ 'install-entity-access': 'default-entity-access.sql',
24
+ 'install-dynamic-forms': 'default-forms.sql',
25
+ 'install-seo-files': 'default-sitemaps-and-robots.sql'
26
+ };
27
+ }
28
+
29
+ static async executeQueryFile(isMarked, fileName, dbDriver, migrationsPath)
30
+ {
31
+ if('on' !== isMarked){
32
+ return '';
33
+ }
34
+ let sqlFileContent = FileHandler.readFile(FileHandler.joinPaths(migrationsPath, fileName));
35
+ if(!sqlFileContent){
36
+ Logger.error('SQL file "'+fileName+'" not found.');
37
+ return '/?error=sql-file-not-found&file-name='+fileName;
38
+ }
39
+ let queryExecutionResult = await dbDriver.rawQuery(sqlFileContent);
40
+ if(!queryExecutionResult){
41
+ Logger.error('SQL file "'+fileName+'" raw execution failed.');
42
+ return '/?error=sql-file-execution-error&file-name='+fileName;
43
+ }
44
+ Logger.info('SQL file "'+fileName+'" raw execution successfully.');
45
+ return '';
46
+ }
47
+
48
+ static normalizePrismaProvider(client)
49
+ {
50
+ if(-1 !== client.indexOf('mysql')){
51
+ return 'mysql';
52
+ }
53
+ if('postgresql' === client || 'postgres' === client){
54
+ return 'postgresql';
55
+ }
56
+ if('mongodb' === client){
57
+ return 'mongodb';
58
+ }
59
+ return client;
60
+ }
61
+
62
+ static buildMinimalSchemaContent(provider)
63
+ {
64
+ return 'generator client {\n provider = "prisma-client-js"\n output = "./client"\n}\n\n'
65
+ +'datasource db {\n provider = "'+provider+'"\n}';
66
+ }
67
+
68
+ static async generateMinimalPrismaClient(dbConfig, projectRoot)
69
+ {
70
+ PrismaSchemaGenerator.ensureStubFiles(projectRoot);
71
+ let generator = new PrismaSchemaGenerator({
72
+ ...dbConfig,
73
+ config: sc.get(dbConfig, 'config', dbConfig),
74
+ clientOutputPath: FileHandler.joinPaths(projectRoot, 'prisma', 'client'),
75
+ prismaSchemaPath: FileHandler.joinPaths(projectRoot, 'prisma')
76
+ });
77
+ FileHandler.createFolder(FileHandler.joinPaths(projectRoot, 'prisma'));
78
+ FileHandler.writeFile(
79
+ FileHandler.joinPaths(projectRoot, 'prisma', 'schema.prisma'),
80
+ MySQLInstaller.buildMinimalSchemaContent(
81
+ MySQLInstaller.normalizePrismaProvider(sc.get(dbConfig, 'client', 'mysql'))
82
+ )
83
+ );
84
+ generator.setDatabaseEnvironmentVariables();
85
+ generator.generateConfigFile();
86
+ Logger.info('Running prisma generate...');
87
+ try {
88
+ execSync('npx prisma generate', { stdio: 'inherit', cwd: projectRoot });
89
+ } catch(error) {
90
+ Logger.error('Prisma generate failed: '+error.message);
91
+ return false;
92
+ }
93
+ let { PrismaClient } = require(FileHandler.joinPaths(projectRoot, 'prisma', 'client'));
94
+ return PrismaClientLoader.createWithAdapter(PrismaClient, process.env.DATABASE_URL) || false;
95
+ }
96
+
97
+ static createPrismaClient(projectRoot)
98
+ {
99
+ return PrismaClientLoader.load(projectRoot, null, null);
100
+ }
101
+
102
+ }
103
+
104
+ module.exports.MySQLInstaller = MySQLInstaller;
@@ -4,10 +4,8 @@
4
4
  *
5
5
  */
6
6
 
7
- const { DriversMap } = require('@reldens/storage');
8
- const { MySQLInstaller } = require('./mysql-installer');
9
- const { Logger } = require('@reldens/utils');
10
- const { sc } = require('@reldens/utils');
7
+ const { PrismaSchemaGenerator } = require('@reldens/storage/lib/prisma/prisma-schema-generator');
8
+ const { Logger, sc } = require('@reldens/utils');
11
9
 
12
10
  class PrismaSubprocessWorker
13
11
  {
@@ -25,18 +23,18 @@ class PrismaSubprocessWorker
25
23
  } catch(error) {
26
24
  Logger.error('PrismaSubprocessWorker error: '+error.message);
27
25
  this.sendErrorResponse(error.message);
28
- setTimeout(() => process.exit(1), 100);
26
+ process.exit(1);
29
27
  }
30
28
  });
31
29
  process.on('uncaughtException', (error) => {
32
30
  Logger.error('PrismaSubprocessWorker uncaught exception: '+error.message);
33
31
  this.sendErrorResponse(error.message);
34
- setTimeout(() => process.exit(1), 100);
32
+ process.exit(1);
35
33
  });
36
34
  process.on('unhandledRejection', (error) => {
37
35
  Logger.error('PrismaSubprocessWorker unhandled rejection: '+error.message);
38
36
  this.sendErrorResponse(error.message);
39
- setTimeout(() => process.exit(1), 100);
37
+ process.exit(1);
40
38
  });
41
39
  }
42
40
 
@@ -46,12 +44,15 @@ class PrismaSubprocessWorker
46
44
  let templateVariables = sc.get(message, 'templateVariables', {});
47
45
  let migrationsPath = sc.get(message, 'migrationsPath', './migrations');
48
46
  let projectRoot = sc.get(message, 'projectRoot', './');
47
+ PrismaSchemaGenerator.ensureStubFiles(projectRoot);
48
+ let { MySQLInstaller } = require('./mysql-installer');
49
49
  let generatedClient = await MySQLInstaller.generateMinimalPrismaClient(dbConfig, projectRoot);
50
50
  if(!generatedClient){
51
51
  this.sendErrorResponse('Failed to generate Prisma client.');
52
52
  return;
53
53
  }
54
54
  dbConfig.prismaClient = generatedClient;
55
+ let { DriversMap } = require('@reldens/storage');
55
56
  let driverClass = DriversMap['prisma'];
56
57
  if(!driverClass){
57
58
  this.sendErrorResponse('Prisma driver class not found.');
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@reldens/cms",
3
3
  "scope": "@reldens",
4
- "version": "0.64.0",
4
+ "version": "0.66.0",
5
5
  "description": "Reldens - CMS",
6
6
  "author": "Damian A. Pastorini",
7
7
  "license": "MIT",
@@ -35,7 +35,7 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@reldens/server-utils": "^0.50.0",
38
- "@reldens/storage": "^0.96.0",
38
+ "@reldens/storage": "^0.97.0",
39
39
  "@reldens/utils": "^0.56.0",
40
40
  "dotenv": "17.4.2",
41
41
  "mustache": "4.2.0"
@@ -1 +0,0 @@
1
- {}