@reldens/cms 0.27.0 → 0.29.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,213 +1,223 @@
1
- /**
2
- *
3
- * Reldens - CMS - TemplateEngine
4
- *
5
- */
6
-
7
- const { JsonFieldsParser } = require('./json-fields-parser');
8
- const { EntitiesTransformer } = require('./template-engine/entities-transformer');
9
- const { CollectionsTransformer } = require('./template-engine/collections-transformer');
10
- const { CollectionsSingleTransformer } = require('./template-engine/collections-single-transformer');
11
- const { PartialsTransformer } = require('./template-engine/partials-transformer');
12
- const { FormsTransformer } = require('./template-engine/forms-transformer');
13
- const { UrlTransformer } = require('./template-engine/url-transformer');
14
- const { AssetTransformer } = require('./template-engine/asset-transformer');
15
- const { DateTransformer } = require('./template-engine/date-transformer');
16
- const { TranslateTransformer } = require('./template-engine/translate-transformer');
17
- const { SystemVariablesProvider } = require('./template-engine/system-variables-provider');
18
- const { Logger, sc } = require('@reldens/utils');
19
-
20
- class TemplateEngine
21
- {
22
-
23
- constructor(props)
24
- {
25
- this.renderEngine = sc.get(props, 'renderEngine', false);
26
- this.dataServer = sc.get(props, 'dataServer', false);
27
- this.getPartials = sc.get(props, 'getPartials', false);
28
- this.events = sc.get(props, 'events', false);
29
- this.defaultDomain = sc.get(props, 'defaultDomain', 'default');
30
- this.projectRoot = sc.get(props, 'projectRoot', './');
31
- this.publicPath = sc.get(props, 'publicPath', './public');
32
- this.dynamicForm = sc.get(props, 'dynamicForm', false);
33
- this.dynamicFormRenderer = sc.get(props, 'dynamicFormRenderer', false);
34
- this.jsonFieldsParser = new JsonFieldsParser({entitiesConfig: sc.get(props, 'entitiesConfig', {})});
35
- this.systemVariablesProvider = new SystemVariablesProvider({
36
- defaultDomain: this.defaultDomain,
37
- projectRoot: this.projectRoot,
38
- publicPath: this.publicPath
39
- });
40
- this.entitiesTransformer = new EntitiesTransformer({
41
- dataServer: this.dataServer,
42
- jsonFieldsParser: this.jsonFieldsParser,
43
- processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this)
44
- });
45
- this.collectionsSingleTransformer = new CollectionsSingleTransformer({
46
- dataServer: this.dataServer,
47
- jsonFieldsParser: this.jsonFieldsParser,
48
- renderEngine: this.renderEngine,
49
- getPartials: this.getPartials,
50
- findAllPartialTags: this.findAllPartialTags.bind(this),
51
- loadPartialTemplate: this.loadPartialTemplate.bind(this),
52
- processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this)
53
- });
54
- this.collectionsTransformer = new CollectionsTransformer({
55
- dataServer: this.dataServer,
56
- jsonFieldsParser: this.jsonFieldsParser,
57
- renderEngine: this.renderEngine,
58
- getPartials: this.getPartials,
59
- findAllPartialTags: this.findAllPartialTags.bind(this),
60
- loadPartialTemplate: this.loadPartialTemplate.bind(this),
61
- processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this)
62
- });
63
- this.partialsTransformer = new PartialsTransformer({
64
- renderEngine: this.renderEngine,
65
- getPartials: this.getPartials,
66
- processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this)
67
- });
68
- this.formsTransformer = false;
69
- if(this.dynamicForm && this.dynamicFormRenderer){
70
- this.formsTransformer = new FormsTransformer({
71
- renderEngine: this.renderEngine,
72
- getPartials: this.getPartials,
73
- processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this),
74
- dynamicForm: this.dynamicForm,
75
- dynamicFormRenderer: this.dynamicFormRenderer,
76
- events: this.events
77
- });
78
- }
79
- this.urlTransformer = new UrlTransformer();
80
- this.assetTransformer = new AssetTransformer();
81
- this.dateTransformer = new DateTransformer({
82
- defaultFormat: sc.get(props, 'defaultDateFormat', 'Y-m-d H:i:s')
83
- });
84
- this.translateTransformer = new TranslateTransformer({
85
- projectRoot: this.projectRoot,
86
- defaultLocale: sc.get(props, 'defaultLocale', 'en'),
87
- fallbackLocale: sc.get(props, 'fallbackLocale', 'en')
88
- });
89
- this.transformers = [
90
- this.entitiesTransformer,
91
- this.collectionsSingleTransformer,
92
- this.collectionsTransformer,
93
- this.partialsTransformer,
94
- this.urlTransformer,
95
- this.assetTransformer,
96
- this.dateTransformer,
97
- this.translateTransformer
98
- ];
99
- if(this.formsTransformer){
100
- this.transformers.push(this.formsTransformer);
101
- }
102
- }
103
-
104
- async processAllTemplateFunctions(template, domain, req, systemVariables, enhancedData = {})
105
- {
106
- let processedTemplate = template;
107
- for(let transformer of this.transformers){
108
- if(!transformer){
109
- continue;
110
- }
111
- if(!sc.isFunction(transformer.transform)){
112
- continue;
113
- }
114
- processedTemplate = await transformer.transform(processedTemplate, domain, req, systemVariables, enhancedData);
115
- }
116
- return processedTemplate;
117
- }
118
-
119
- async render(template, data, partials, domain, req, route, currentEntityData)
120
- {
121
- if(!this.renderEngine){
122
- Logger.critical('Render engine not provided');
123
- return '';
124
- }
125
- if(!sc.isFunction(this.renderEngine.render)){
126
- Logger.critical('Render engine does not contain a render method');
127
- return '';
128
- }
129
- if(!this.events){
130
- Logger.critical('Events manager not provided');
131
- return '';
132
- }
133
- let systemVariables = this.systemVariablesProvider.buildSystemVariables(req, route, domain);
134
- let renderContext = {
135
- template,
136
- data,
137
- partials,
138
- domain,
139
- req,
140
- route,
141
- currentEntityData
142
- };
143
- let eventData = {
144
- variables: systemVariables,
145
- renderContext
146
- };
147
- await this.events.emit('reldens.afterVariablesCreated', eventData);
148
- let enhancedData = this.buildEnhancedRenderData(data, eventData.variables, currentEntityData);
149
- let beforeProcessData = {
150
- content: template,
151
- variables: enhancedData,
152
- renderContext
153
- };
154
- await this.events.emit('reldens.beforeContentProcess', beforeProcessData);
155
- let processedTemplate = await this.processAllTemplateFunctions(
156
- beforeProcessData.content,
157
- domain,
158
- req,
159
- eventData.variables,
160
- enhancedData
161
- );
162
- let afterProcessData = {
163
- processedContent: processedTemplate,
164
- variables: enhancedData,
165
- renderContext
166
- };
167
- await this.events.emit('reldens.afterContentProcess', afterProcessData);
168
- return this.renderEngine.render(
169
- this.unescapeHtml(afterProcessData.processedContent),
170
- enhancedData,
171
- partials
172
- );
173
- }
174
-
175
- buildEnhancedRenderData(originalData, systemVariables, currentEntityData)
176
- {
177
- let enhancedData = Object.assign({}, originalData);
178
- enhancedData.currentRequest = systemVariables.currentRequest;
179
- enhancedData.currentRoute = systemVariables.currentRoute;
180
- enhancedData.currentDomain = systemVariables.currentDomain;
181
- enhancedData.systemInfo = systemVariables.systemInfo;
182
- if(currentEntityData){
183
- enhancedData.currentEntity = currentEntityData;
184
- }
185
- return enhancedData;
186
- }
187
-
188
- unescapeHtml(text)
189
- {
190
- return text
191
- .replace(/"/g, '"')
192
- .replace(/'/g, "'")
193
- .replace(/'/g, "'")
194
- .replace(/=/g, '=')
195
- .replace(///g, '/')
196
- .replace(/&lt;/g, '<')
197
- .replace(/&gt;/g, '>')
198
- .replace(/&amp;/g, '&');
199
- }
200
-
201
- findAllPartialTags(template)
202
- {
203
- return this.partialsTransformer.findAllPartialTags(template);
204
- }
205
-
206
- loadPartialTemplate(partialName, domain)
207
- {
208
- return this.partialsTransformer.loadPartialTemplate(partialName, domain);
209
- }
210
-
211
- }
212
-
213
- module.exports.TemplateEngine = TemplateEngine;
1
+ /**
2
+ *
3
+ * Reldens - CMS - TemplateEngine
4
+ *
5
+ */
6
+
7
+ const { JsonFieldsParser } = require('./json-fields-parser');
8
+ const { EntitiesTransformer } = require('./template-engine/entities-transformer');
9
+ const { CollectionsTransformer } = require('./template-engine/collections-transformer');
10
+ const { CollectionsSingleTransformer } = require('./template-engine/collections-single-transformer');
11
+ const { PartialsTransformer } = require('./template-engine/partials-transformer');
12
+ const { FormsTransformer } = require('./template-engine/forms-transformer');
13
+ const { UrlTransformer } = require('./template-engine/url-transformer');
14
+ const { AssetTransformer } = require('./template-engine/asset-transformer');
15
+ const { DateTransformer } = require('./template-engine/date-transformer');
16
+ const { TranslateTransformer } = require('./template-engine/translate-transformer');
17
+ const { SystemVariablesProvider } = require('./template-engine/system-variables-provider');
18
+ const { Logger, sc } = require('@reldens/utils');
19
+
20
+ class TemplateEngine
21
+ {
22
+
23
+ constructor(props)
24
+ {
25
+ this.renderEngine = sc.get(props, 'renderEngine', false);
26
+ this.dataServer = sc.get(props, 'dataServer', false);
27
+ this.getPartials = sc.get(props, 'getPartials', false);
28
+ this.events = sc.get(props, 'events', false);
29
+ this.defaultDomain = sc.get(props, 'defaultDomain', 'default');
30
+ this.projectRoot = sc.get(props, 'projectRoot', './');
31
+ this.publicPath = sc.get(props, 'publicPath', './public');
32
+ this.domainPublicUrlMapping = sc.get(props, 'domainPublicUrlMapping', {});
33
+ this.defaultPublicUrl = sc.get(props, 'defaultPublicUrl', '');
34
+ this.dynamicForm = sc.get(props, 'dynamicForm', false);
35
+ this.dynamicFormRenderer = sc.get(props, 'dynamicFormRenderer', false);
36
+ this.jsonFieldsParser = new JsonFieldsParser({entitiesConfig: sc.get(props, 'entitiesConfig', {})});
37
+ this.systemVariablesProvider = new SystemVariablesProvider({
38
+ defaultDomain: this.defaultDomain,
39
+ projectRoot: this.projectRoot,
40
+ publicPath: this.publicPath,
41
+ domainPublicUrlMapping: this.domainPublicUrlMapping,
42
+ defaultPublicUrl: this.defaultPublicUrl
43
+ });
44
+ this.entitiesTransformer = new EntitiesTransformer({
45
+ dataServer: this.dataServer,
46
+ jsonFieldsParser: this.jsonFieldsParser,
47
+ processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this)
48
+ });
49
+ this.collectionsSingleTransformer = new CollectionsSingleTransformer({
50
+ dataServer: this.dataServer,
51
+ jsonFieldsParser: this.jsonFieldsParser,
52
+ renderEngine: this.renderEngine,
53
+ getPartials: this.getPartials,
54
+ findAllPartialTags: this.findAllPartialTags.bind(this),
55
+ loadPartialTemplate: this.loadPartialTemplate.bind(this),
56
+ processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this)
57
+ });
58
+ this.collectionsTransformer = new CollectionsTransformer({
59
+ dataServer: this.dataServer,
60
+ jsonFieldsParser: this.jsonFieldsParser,
61
+ renderEngine: this.renderEngine,
62
+ getPartials: this.getPartials,
63
+ findAllPartialTags: this.findAllPartialTags.bind(this),
64
+ loadPartialTemplate: this.loadPartialTemplate.bind(this),
65
+ processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this)
66
+ });
67
+ this.partialsTransformer = new PartialsTransformer({
68
+ renderEngine: this.renderEngine,
69
+ getPartials: this.getPartials,
70
+ processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this)
71
+ });
72
+ this.formsTransformer = false;
73
+ if(this.dynamicForm && this.dynamicFormRenderer){
74
+ this.formsTransformer = new FormsTransformer({
75
+ renderEngine: this.renderEngine,
76
+ getPartials: this.getPartials,
77
+ processAllTemplateFunctions: this.processAllTemplateFunctions.bind(this),
78
+ dynamicForm: this.dynamicForm,
79
+ dynamicFormRenderer: this.dynamicFormRenderer,
80
+ events: this.events
81
+ });
82
+ }
83
+ this.urlTransformer = new UrlTransformer();
84
+ this.assetTransformer = new AssetTransformer();
85
+ this.dateTransformer = new DateTransformer({
86
+ defaultFormat: sc.get(props, 'defaultDateFormat', 'Y-m-d H:i:s')
87
+ });
88
+ this.translateTransformer = new TranslateTransformer({
89
+ projectRoot: this.projectRoot,
90
+ defaultLocale: sc.get(props, 'defaultLocale', 'en'),
91
+ fallbackLocale: sc.get(props, 'fallbackLocale', 'en')
92
+ });
93
+ this.transformers = [
94
+ this.entitiesTransformer,
95
+ this.collectionsSingleTransformer,
96
+ this.collectionsTransformer,
97
+ this.partialsTransformer,
98
+ this.urlTransformer,
99
+ this.assetTransformer,
100
+ this.dateTransformer,
101
+ this.translateTransformer
102
+ ];
103
+ if(this.formsTransformer){
104
+ this.transformers.push(this.formsTransformer);
105
+ }
106
+ }
107
+
108
+ async processAllTemplateFunctions(template, domain, req, systemVariables, enhancedData = {})
109
+ {
110
+ let processedTemplate = template;
111
+ for(let transformer of this.transformers){
112
+ if(!transformer){
113
+ continue;
114
+ }
115
+ if(!sc.isFunction(transformer.transform)){
116
+ continue;
117
+ }
118
+ processedTemplate = await transformer.transform(
119
+ processedTemplate,
120
+ domain,
121
+ req,
122
+ systemVariables,
123
+ enhancedData
124
+ );
125
+ }
126
+ return processedTemplate;
127
+ }
128
+
129
+ async render(template, data, partials, domain, req, route, currentEntityData)
130
+ {
131
+ if(!this.renderEngine){
132
+ Logger.critical('Render engine not provided');
133
+ return '';
134
+ }
135
+ if(!sc.isFunction(this.renderEngine.render)){
136
+ Logger.critical('Render engine does not contain a render method');
137
+ return '';
138
+ }
139
+ if(!this.events){
140
+ Logger.critical('Events manager not provided');
141
+ return '';
142
+ }
143
+ let systemVariables = this.systemVariablesProvider.buildSystemVariables(req, route, domain);
144
+ let renderContext = {
145
+ template,
146
+ data,
147
+ partials,
148
+ domain,
149
+ req,
150
+ route,
151
+ currentEntityData
152
+ };
153
+ let eventData = {
154
+ variables: systemVariables,
155
+ renderContext
156
+ };
157
+ await this.events.emit('reldens.afterVariablesCreated', eventData);
158
+ let enhancedData = this.buildEnhancedRenderData(data, eventData.variables, currentEntityData);
159
+ let beforeProcessData = {
160
+ content: template,
161
+ variables: enhancedData,
162
+ renderContext
163
+ };
164
+ await this.events.emit('reldens.beforeContentProcess', beforeProcessData);
165
+ let processedTemplate = await this.processAllTemplateFunctions(
166
+ beforeProcessData.content,
167
+ domain,
168
+ req,
169
+ eventData.variables,
170
+ enhancedData
171
+ );
172
+ let afterProcessData = {
173
+ processedContent: processedTemplate,
174
+ variables: enhancedData,
175
+ renderContext
176
+ };
177
+ await this.events.emit('reldens.afterContentProcess', afterProcessData);
178
+ return this.renderEngine.render(
179
+ this.unescapeHtml(afterProcessData.processedContent),
180
+ enhancedData,
181
+ partials
182
+ );
183
+ }
184
+
185
+ buildEnhancedRenderData(originalData, systemVariables, currentEntityData)
186
+ {
187
+ let enhancedData = Object.assign({}, originalData);
188
+ enhancedData.currentRequest = systemVariables.currentRequest;
189
+ enhancedData.currentRoute = systemVariables.currentRoute;
190
+ enhancedData.currentDomain = systemVariables.currentDomain;
191
+ enhancedData.systemInfo = systemVariables.systemInfo;
192
+ if(currentEntityData){
193
+ enhancedData.currentEntity = currentEntityData;
194
+ }
195
+ return enhancedData;
196
+ }
197
+
198
+ unescapeHtml(text)
199
+ {
200
+ return text
201
+ .replace(/&quot;/g, '"')
202
+ .replace(/&#x27;/g, "'")
203
+ .replace(/&#39;/g, "'")
204
+ .replace(/&#x3D;/g, '=')
205
+ .replace(/&#x2F;/g, '/')
206
+ .replace(/&lt;/g, '<')
207
+ .replace(/&gt;/g, '>')
208
+ .replace(/&amp;/g, '&');
209
+ }
210
+
211
+ findAllPartialTags(template)
212
+ {
213
+ return this.partialsTransformer.findAllPartialTags(template);
214
+ }
215
+
216
+ loadPartialTemplate(partialName, domain)
217
+ {
218
+ return this.partialsTransformer.loadPartialTemplate(partialName, domain);
219
+ }
220
+
221
+ }
222
+
223
+ module.exports.TemplateEngine = TemplateEngine;
@@ -1,7 +1,7 @@
1
1
  -- Default homepage:
2
2
 
3
3
  -- Create a default route first
4
- REPLACE INTO `routes` (`id`, `path`, `router`, `cache_ttl_seconds`, `enabled`, `created_at`) VALUES (1, '/home', 'cmsPages', 3600, 1, NOW());
4
+ REPLACE INTO `routes` (`id`, `path`, `router`, `cache_ttl_seconds`, `enabled`, `created_at`) VALUES (1, '/', 'cmsPages', 3600, 1, NOW());
5
5
 
6
6
  -- Create a default homepage with route_id reference
7
7
  REPLACE INTO `cms_pages` (
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@reldens/cms",
3
3
  "scope": "@reldens",
4
- "version": "0.27.0",
4
+ "version": "0.29.0",
5
5
  "description": "Reldens - CMS",
6
6
  "author": "Damian A. Pastorini",
7
7
  "license": "MIT",
@@ -33,10 +33,10 @@
33
33
  "url": "https://github.com/damian-pastorini/reldens-cms/issues"
34
34
  },
35
35
  "dependencies": {
36
- "@reldens/server-utils": "^0.26.0",
37
- "@reldens/storage": "^0.69.0",
36
+ "@reldens/server-utils": "^0.29.0",
37
+ "@reldens/storage": "^0.71.0",
38
38
  "@reldens/utils": "^0.53.0",
39
- "dotenv": "^17.2.2",
40
- "mustache": "^4.2.0"
39
+ "dotenv": "17.2.2",
40
+ "mustache": "4.2.0"
41
41
  }
42
42
  }
@@ -14,3 +14,4 @@ RELDENS_ADMIN_SECRET={{&adminSecret}}
14
14
  # Server Configuration
15
15
  RELDENS_APP_HOST={{&host}}
16
16
  RELDENS_APP_PORT={{&port}}
17
+ RELDENS_PUBLIC_URL={{&publicUrl}}
@@ -1,32 +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
- let args = process.argv.slice(2);
12
- let projectRoot = args[0] || process.cwd();
13
-
14
- let manager = new Manager({
15
- projectRoot,
16
- rawRegisteredEntities,
17
- entitiesConfig,
18
- entitiesTranslations{{prismaClientParam}}
19
- });
20
- Logger.debug('Reldens CMS Manager instance created.', {configuration: manager.config});
21
-
22
- manager.start().then((result) => {
23
- if(!result){
24
- Logger.info('Reldens CMS started by command failed.');
25
- return false;
26
- }
27
- Logger.info('Reldens CMS started by command.');
28
- return true;
29
- }).catch((error) => {
30
- Logger.critical('Failed to start CMS: ' + error.message);
31
- process.exit();
32
- });
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
+ });