@reldens/cms 0.85.0 → 0.86.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.
- package/.claude/api-reference.md +172 -171
- package/.claude/architecture-guide.md +1 -1
- package/.claude/configuration-guide.md +128 -126
- package/.claude/installation-guide.md +225 -225
- package/.claude/password-management-guide.md +2 -2
- package/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/bin/reldens-cms-generate-entities.js +19 -8
- package/bin/reldens-cms-update-password.js +16 -8
- package/bin/reldens-cms.js +145 -138
- package/install/index.html +132 -132
- package/lib/admin-manager/router-contents.js +854 -854
- package/lib/installer.js +673 -636
- package/lib/manager-config-loader.js +35 -33
- package/lib/manager-services-initializer.js +346 -323
- package/lib/manager.js +310 -306
- package/lib/mysql-installer.js +104 -104
- package/lib/prisma-subprocess-worker.js +9 -4
- package/package.json +4 -4
- package/templates/.env.dist +2 -0
- package/templates/index.js.dist +30 -30
package/lib/mysql-installer.js
CHANGED
|
@@ -1,104 +1,104 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* Reldens - CMS - MySQLInstaller
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const { execSync } = require('child_process');
|
|
8
|
-
const {
|
|
9
|
-
const {
|
|
10
|
-
const {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
'install-
|
|
20
|
-
'install-
|
|
21
|
-
'install-default-
|
|
22
|
-
'install-default-
|
|
23
|
-
'install-
|
|
24
|
-
'install-
|
|
25
|
-
'install-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
FileHandler.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
generator.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
static createPrismaClient(projectRoot)
|
|
98
|
-
{
|
|
99
|
-
return
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
module.exports.MySQLInstaller = MySQLInstaller;
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - CMS - MySQLInstaller
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { execSync } = require('child_process');
|
|
8
|
+
const { ManagerServicesInitializer } = require('./manager-services-initializer');
|
|
9
|
+
const { FileHandler } = require('@reldens/server-utils');
|
|
10
|
+
const { Logger, sc } = require('@reldens/utils');
|
|
11
|
+
const { PrismaSchemaGenerator } = require('@reldens/storage');
|
|
12
|
+
|
|
13
|
+
class MySQLInstaller
|
|
14
|
+
{
|
|
15
|
+
|
|
16
|
+
static migrationFiles()
|
|
17
|
+
{
|
|
18
|
+
return {
|
|
19
|
+
'install-cms-tables': 'install.sql',
|
|
20
|
+
'install-user-auth': 'users-authentication.sql',
|
|
21
|
+
'install-default-user': 'default-user.sql',
|
|
22
|
+
'install-default-homepage': 'default-homepage.sql',
|
|
23
|
+
'install-default-blocks': 'default-blocks.sql',
|
|
24
|
+
'install-entity-access': 'default-entity-access.sql',
|
|
25
|
+
'install-dynamic-forms': 'default-forms.sql',
|
|
26
|
+
'install-seo-files': 'default-sitemaps-and-robots.sql'
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static async executeQueryFile(isMarked, fileName, dbDriver, migrationsPath)
|
|
31
|
+
{
|
|
32
|
+
if('on' !== isMarked){
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
let sqlFileContent = FileHandler.readFile(FileHandler.joinPaths(migrationsPath, fileName));
|
|
36
|
+
if(!sqlFileContent){
|
|
37
|
+
Logger.error('SQL file "'+fileName+'" not found.');
|
|
38
|
+
return '/?error=sql-file-not-found&file-name='+fileName;
|
|
39
|
+
}
|
|
40
|
+
let queryExecutionResult = await dbDriver.rawQuery(sqlFileContent);
|
|
41
|
+
if(!queryExecutionResult){
|
|
42
|
+
Logger.error('SQL file "'+fileName+'" raw execution failed.');
|
|
43
|
+
return '/?error=sql-file-execution-error&file-name='+fileName;
|
|
44
|
+
}
|
|
45
|
+
Logger.info('SQL file "'+fileName+'" raw execution successfully.');
|
|
46
|
+
return '';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static normalizePrismaProvider(client)
|
|
50
|
+
{
|
|
51
|
+
if(-1 !== client.indexOf('mysql')){
|
|
52
|
+
return 'mysql';
|
|
53
|
+
}
|
|
54
|
+
if('postgresql' === client || 'postgres' === client){
|
|
55
|
+
return 'postgresql';
|
|
56
|
+
}
|
|
57
|
+
if('mongodb' === client){
|
|
58
|
+
return 'mongodb';
|
|
59
|
+
}
|
|
60
|
+
return client;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
static buildMinimalSchemaContent(provider)
|
|
64
|
+
{
|
|
65
|
+
return 'generator client {\n provider = "prisma-client-js"\n output = "./client"\n}\n\n'
|
|
66
|
+
+'datasource db {\n provider = "'+provider+'"\n}';
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
static async generateMinimalPrismaClient(dbConfig, projectRoot, prismaAdapter, prismaAdapterClass)
|
|
70
|
+
{
|
|
71
|
+
PrismaSchemaGenerator.ensureStubFiles(projectRoot);
|
|
72
|
+
let generator = new PrismaSchemaGenerator({
|
|
73
|
+
...dbConfig,
|
|
74
|
+
config: sc.get(dbConfig, 'config', dbConfig),
|
|
75
|
+
clientOutputPath: FileHandler.joinPaths(projectRoot, 'prisma', 'client'),
|
|
76
|
+
prismaSchemaPath: FileHandler.joinPaths(projectRoot, 'prisma')
|
|
77
|
+
});
|
|
78
|
+
FileHandler.createFolder(FileHandler.joinPaths(projectRoot, 'prisma'));
|
|
79
|
+
FileHandler.writeFile(
|
|
80
|
+
FileHandler.joinPaths(projectRoot, 'prisma', 'schema.prisma'),
|
|
81
|
+
MySQLInstaller.buildMinimalSchemaContent(
|
|
82
|
+
MySQLInstaller.normalizePrismaProvider(sc.get(dbConfig, 'client', 'mysql'))
|
|
83
|
+
)
|
|
84
|
+
);
|
|
85
|
+
generator.setDatabaseEnvironmentVariables();
|
|
86
|
+
generator.generateConfigFile();
|
|
87
|
+
Logger.info('Running prisma generate...');
|
|
88
|
+
try {
|
|
89
|
+
execSync('npx prisma generate', { stdio: 'inherit', cwd: projectRoot });
|
|
90
|
+
} catch(error) {
|
|
91
|
+
Logger.error('Prisma generate failed: '+error.message);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
return MySQLInstaller.createPrismaClient(projectRoot, prismaAdapter, prismaAdapterClass);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
static createPrismaClient(projectRoot, prismaAdapter, prismaAdapterClass)
|
|
98
|
+
{
|
|
99
|
+
return ManagerServicesInitializer.loadPrismaModules(projectRoot, null, null, prismaAdapter, prismaAdapterClass);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
module.exports.MySQLInstaller = MySQLInstaller;
|
|
@@ -46,12 +46,17 @@ class PrismaSubprocessWorker
|
|
|
46
46
|
let projectRoot = sc.get(message, 'projectRoot', './');
|
|
47
47
|
PrismaSchemaGenerator.ensureStubFiles(projectRoot);
|
|
48
48
|
let { MySQLInstaller } = require('./mysql-installer');
|
|
49
|
-
let
|
|
50
|
-
|
|
49
|
+
let generatedModules = await MySQLInstaller.generateMinimalPrismaClient(
|
|
50
|
+
dbConfig,
|
|
51
|
+
projectRoot,
|
|
52
|
+
sc.get(message, 'prismaAdapter', '@prisma/adapter-mariadb'),
|
|
53
|
+
sc.get(message, 'prismaAdapterClass', 'PrismaMariaDb')
|
|
54
|
+
);
|
|
55
|
+
if(!generatedModules){
|
|
51
56
|
this.sendErrorResponse('Failed to generate Prisma client.');
|
|
52
57
|
return;
|
|
53
58
|
}
|
|
54
|
-
dbConfig.
|
|
59
|
+
dbConfig.prismaModules = generatedModules;
|
|
55
60
|
let { DriversMap } = require('@reldens/storage');
|
|
56
61
|
let driverClass = DriversMap['prisma'];
|
|
57
62
|
if(!driverClass){
|
|
@@ -77,7 +82,7 @@ class PrismaSubprocessWorker
|
|
|
77
82
|
return;
|
|
78
83
|
}
|
|
79
84
|
}
|
|
80
|
-
await
|
|
85
|
+
await generatedModules.client.$disconnect();
|
|
81
86
|
this.sendSuccessResponse('Subprocess installation completed.');
|
|
82
87
|
}
|
|
83
88
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reldens/cms",
|
|
3
3
|
"scope": "@reldens",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.86.0",
|
|
5
5
|
"description": "Reldens - CMS",
|
|
6
6
|
"author": "Damian A. Pastorini",
|
|
7
7
|
"license": "MIT",
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
"url": "https://github.com/damian-pastorini/reldens-cms/issues"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@reldens/server-utils": "^0.
|
|
38
|
-
"@reldens/storage": "^0.
|
|
39
|
-
"@reldens/utils": "^0.
|
|
37
|
+
"@reldens/server-utils": "^0.57.0",
|
|
38
|
+
"@reldens/storage": "^0.116.0",
|
|
39
|
+
"@reldens/utils": "^0.58.0",
|
|
40
40
|
"dotenv": "17.4.2",
|
|
41
41
|
"mustache": "4.2.0"
|
|
42
42
|
}
|
package/templates/.env.dist
CHANGED
|
@@ -7,6 +7,8 @@ RELDENS_DB_NAME={{&dbName}}
|
|
|
7
7
|
RELDENS_DB_USER={{&dbUser}}
|
|
8
8
|
RELDENS_DB_PASSWORD={{&dbPassword}}
|
|
9
9
|
RELDENS_DB_URL={{&dbClient}}://{{&dbUser}}:{{&dbPassword}}@{{&dbHost}}:{{&dbPort}}/{{&dbName}}
|
|
10
|
+
RELDENS_PRISMA_ADAPTER={{&prismaAdapter}}
|
|
11
|
+
RELDENS_PRISMA_ADAPTER_CLASS={{&prismaAdapterClass}}
|
|
10
12
|
|
|
11
13
|
# Admin Panel Configuration
|
|
12
14
|
RELDENS_ADMIN_ROUTE_PATH={{&adminPath}}
|
package/templates/index.js.dist
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* Reldens - CMS
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const { Manager } = require('@reldens/cms');
|
|
8
|
-
const { Logger } = require('@reldens/utils');
|
|
9
|
-
const { rawRegisteredEntities, entitiesConfig, entitiesTranslations } = require('./generated-entities/models/{{driverKey}}/registered-models-{{driverKey}}');
|
|
10
|
-
{{&prismaClientImports}}
|
|
11
|
-
|
|
12
|
-
let manager = new Manager({
|
|
13
|
-
projectRoot: __dirname,
|
|
14
|
-
rawRegisteredEntities,
|
|
15
|
-
entitiesConfig,
|
|
16
|
-
entitiesTranslations{{&prismaClientParam}}
|
|
17
|
-
});
|
|
18
|
-
Logger.debug('Reldens CMS Manager instance created.', {configuration: manager.config});
|
|
19
|
-
|
|
20
|
-
manager.start().then((result) => {
|
|
21
|
-
if(!result){
|
|
22
|
-
Logger.info('Reldens CMS started by command failed.');
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
Logger.info('Reldens CMS started by command.');
|
|
26
|
-
return true;
|
|
27
|
-
}).catch((error) => {
|
|
28
|
-
Logger.critical('Failed to start CMS: ' + error.message);
|
|
29
|
-
process.exit();
|
|
30
|
-
});
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - CMS
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { Manager } = require('@reldens/cms');
|
|
8
|
+
const { Logger } = require('@reldens/utils');
|
|
9
|
+
const { rawRegisteredEntities, entitiesConfig, entitiesTranslations } = require('./generated-entities/models/{{driverKey}}/registered-models-{{driverKey}}');
|
|
10
|
+
{{&prismaClientImports}}
|
|
11
|
+
|
|
12
|
+
let manager = new Manager({
|
|
13
|
+
projectRoot: __dirname,
|
|
14
|
+
rawRegisteredEntities,
|
|
15
|
+
entitiesConfig,
|
|
16
|
+
entitiesTranslations{{&prismaClientParam}}
|
|
17
|
+
});
|
|
18
|
+
Logger.debug('Reldens CMS Manager instance created.', {configuration: manager.config});
|
|
19
|
+
|
|
20
|
+
manager.start().then((result) => {
|
|
21
|
+
if(!result){
|
|
22
|
+
Logger.info('Reldens CMS started by command failed.');
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
Logger.info('Reldens CMS started by command.');
|
|
26
|
+
return true;
|
|
27
|
+
}).catch((error) => {
|
|
28
|
+
Logger.critical('Failed to start CMS: ' + error.message);
|
|
29
|
+
process.exit();
|
|
30
|
+
});
|