@ackplus/nest-dynamic-templates 0.1.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/README.md +173 -0
- package/package.json +62 -0
- package/src/index.d.ts +5 -0
- package/src/index.js +9 -0
- package/src/index.js.map +1 -0
- package/src/lib/constant.d.ts +1 -0
- package/src/lib/constant.js +5 -0
- package/src/lib/constant.js.map +1 -0
- package/src/lib/controllers/template-layout.controller.d.ts +18 -0
- package/src/lib/controllers/template-layout.controller.js +96 -0
- package/src/lib/controllers/template-layout.controller.js.map +1 -0
- package/src/lib/controllers/template.controller.d.ts +17 -0
- package/src/lib/controllers/template.controller.js +100 -0
- package/src/lib/controllers/template.controller.js.map +1 -0
- package/src/lib/dto/create-template-layout.dto.d.ts +15 -0
- package/src/lib/dto/create-template-layout.dto.js +86 -0
- package/src/lib/dto/create-template-layout.dto.js.map +1 -0
- package/src/lib/dto/create-template.dto.d.ts +16 -0
- package/src/lib/dto/create-template.dto.js +91 -0
- package/src/lib/dto/create-template.dto.js.map +1 -0
- package/src/lib/dto/render-template-layout.dto.d.ts +12 -0
- package/src/lib/dto/render-template-layout.dto.js +69 -0
- package/src/lib/dto/render-template-layout.dto.js.map +1 -0
- package/src/lib/dto/render-template.dto.d.ts +13 -0
- package/src/lib/dto/render-template.dto.js +82 -0
- package/src/lib/dto/render-template.dto.js.map +1 -0
- package/src/lib/dto/template-filter.dto.d.ts +8 -0
- package/src/lib/dto/template-filter.dto.js +62 -0
- package/src/lib/dto/template-filter.dto.js.map +1 -0
- package/src/lib/dto/template-layout-filter.dto.d.ts +8 -0
- package/src/lib/dto/template-layout-filter.dto.js +62 -0
- package/src/lib/dto/template-layout-filter.dto.js.map +1 -0
- package/src/lib/engines/language/html.engine.d.ts +9 -0
- package/src/lib/engines/language/html.engine.js +79 -0
- package/src/lib/engines/language/html.engine.js.map +1 -0
- package/src/lib/engines/language/index.d.ts +4 -0
- package/src/lib/engines/language/index.js +12 -0
- package/src/lib/engines/language/index.js.map +1 -0
- package/src/lib/engines/language/markdown.engine.d.ts +9 -0
- package/src/lib/engines/language/markdown.engine.js +39 -0
- package/src/lib/engines/language/markdown.engine.js.map +1 -0
- package/src/lib/engines/language/mjml.engine.d.ts +9 -0
- package/src/lib/engines/language/mjml.engine.js +77 -0
- package/src/lib/engines/language/mjml.engine.js.map +1 -0
- package/src/lib/engines/language/text.engine.d.ts +7 -0
- package/src/lib/engines/language/text.engine.js +16 -0
- package/src/lib/engines/language/text.engine.js.map +1 -0
- package/src/lib/engines/language-engine.d.ts +5 -0
- package/src/lib/engines/language-engine.js +7 -0
- package/src/lib/engines/language-engine.js.map +1 -0
- package/src/lib/engines/template/ejs.engine.d.ts +9 -0
- package/src/lib/engines/template/ejs.engine.js +66 -0
- package/src/lib/engines/template/ejs.engine.js.map +1 -0
- package/src/lib/engines/template/handlebars.engine.d.ts +9 -0
- package/src/lib/engines/template/handlebars.engine.js +67 -0
- package/src/lib/engines/template/handlebars.engine.js.map +1 -0
- package/src/lib/engines/template/index.d.ts +4 -0
- package/src/lib/engines/template/index.js +12 -0
- package/src/lib/engines/template/index.js.map +1 -0
- package/src/lib/engines/template/nunjucks.engine.d.ts +12 -0
- package/src/lib/engines/template/nunjucks.engine.js +82 -0
- package/src/lib/engines/template/nunjucks.engine.js.map +1 -0
- package/src/lib/engines/template/pug.engine.d.ts +10 -0
- package/src/lib/engines/template/pug.engine.js +67 -0
- package/src/lib/engines/template/pug.engine.js.map +1 -0
- package/src/lib/engines/template-engine.d.ts +5 -0
- package/src/lib/engines/template-engine.js +7 -0
- package/src/lib/engines/template-engine.js.map +1 -0
- package/src/lib/entities/template-layout.entity.d.ts +18 -0
- package/src/lib/entities/template-layout.entity.js +117 -0
- package/src/lib/entities/template-layout.entity.js.map +1 -0
- package/src/lib/entities/template.entity.d.ts +20 -0
- package/src/lib/entities/template.entity.js +127 -0
- package/src/lib/entities/template.entity.js.map +1 -0
- package/src/lib/interfaces/module-config.interface.d.ts +15 -0
- package/src/lib/interfaces/module-config.interface.js +3 -0
- package/src/lib/interfaces/module-config.interface.js.map +1 -0
- package/src/lib/interfaces/template.types.d.ts +22 -0
- package/src/lib/interfaces/template.types.js +25 -0
- package/src/lib/interfaces/template.types.js.map +1 -0
- package/src/lib/services/template-engine.registry.d.ts +22 -0
- package/src/lib/services/template-engine.registry.js +91 -0
- package/src/lib/services/template-engine.registry.js.map +1 -0
- package/src/lib/services/template-layout.service.d.ts +19 -0
- package/src/lib/services/template-layout.service.js +182 -0
- package/src/lib/services/template-layout.service.js.map +1 -0
- package/src/lib/services/template.service.d.ts +21 -0
- package/src/lib/services/template.service.js +231 -0
- package/src/lib/services/template.service.js.map +1 -0
- package/src/lib/templates.module.d.ts +5 -0
- package/src/lib/templates.module.js +50 -0
- package/src/lib/templates.module.js.map +1 -0
- package/src/test/test-database.config.d.ts +4 -0
- package/src/test/test-database.config.js +24 -0
- package/src/test/test-database.config.js.map +1 -0
- package/src/test/test.setup.d.ts +3 -0
- package/src/test/test.setup.js +29 -0
- package/src/test/test.setup.js.map +1 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TemplateLayoutService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
7
|
+
const typeorm_2 = require("typeorm");
|
|
8
|
+
const template_layout_entity_1 = require("../entities/template-layout.entity");
|
|
9
|
+
const template_engine_registry_1 = require("./template-engine.registry");
|
|
10
|
+
let TemplateLayoutService = class TemplateLayoutService {
|
|
11
|
+
constructor(layoutRepository, engineRegistry) {
|
|
12
|
+
this.layoutRepository = layoutRepository;
|
|
13
|
+
this.engineRegistry = engineRegistry;
|
|
14
|
+
}
|
|
15
|
+
async render(renderDto) {
|
|
16
|
+
const { type, name, scope, scopeId, locale, context } = renderDto;
|
|
17
|
+
const template = await this.findTemplateLayout(name, type, scope, scopeId, locale);
|
|
18
|
+
if (!template) {
|
|
19
|
+
throw new common_1.NotFoundException(`Template not found: ${name}`);
|
|
20
|
+
}
|
|
21
|
+
const templateEngine = this.engineRegistry.getTemplateEngine(template.engine);
|
|
22
|
+
let content = await templateEngine.render(template.content, context);
|
|
23
|
+
if (template.language) {
|
|
24
|
+
const languageEngine = this.engineRegistry.getLanguageEngine(template.language);
|
|
25
|
+
content = await languageEngine.render(content);
|
|
26
|
+
}
|
|
27
|
+
if (content) {
|
|
28
|
+
const contentEngine = this.engineRegistry.getTemplateEngine(template.engine);
|
|
29
|
+
content = await contentEngine.render(content, context);
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
content
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async getTemplateLayouts(filter = {}) {
|
|
36
|
+
const { scope, scopeId, type, locale, excludeNames = [], } = filter;
|
|
37
|
+
const where = {};
|
|
38
|
+
if (type)
|
|
39
|
+
where.type = type;
|
|
40
|
+
if (locale)
|
|
41
|
+
where.locale = locale;
|
|
42
|
+
if (excludeNames.length > 0)
|
|
43
|
+
where.name = (0, typeorm_2.Not)((0, typeorm_2.In)(excludeNames));
|
|
44
|
+
const systemTemplates = await this.layoutRepository.find({
|
|
45
|
+
where: {
|
|
46
|
+
...where,
|
|
47
|
+
scope: 'system',
|
|
48
|
+
scopeId: (0, typeorm_2.IsNull)(),
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
if (scope === 'system') {
|
|
52
|
+
return systemTemplates;
|
|
53
|
+
}
|
|
54
|
+
const templates = await this.layoutRepository.find({
|
|
55
|
+
where: {
|
|
56
|
+
...where,
|
|
57
|
+
scope: (0, typeorm_2.Equal)(scope),
|
|
58
|
+
scopeId: (0, typeorm_2.Equal)(scopeId),
|
|
59
|
+
},
|
|
60
|
+
order: {
|
|
61
|
+
createdAt: 'DESC',
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
const templateMap = new Map();
|
|
65
|
+
for (const template of systemTemplates) {
|
|
66
|
+
const key = `${template.type}/${template.name}/${template.locale}`;
|
|
67
|
+
templateMap.set(key, template);
|
|
68
|
+
}
|
|
69
|
+
for (const template of templates) {
|
|
70
|
+
const key = `${template.type}/${template.name}/${template.locale}`;
|
|
71
|
+
templateMap.set(key, template);
|
|
72
|
+
}
|
|
73
|
+
return Array.from(templateMap.values());
|
|
74
|
+
}
|
|
75
|
+
async findTemplateLayout(name, type, scope = 'system', scopeId = null, locale = 'en') {
|
|
76
|
+
const template = await this.layoutRepository.findOne({
|
|
77
|
+
where: {
|
|
78
|
+
type,
|
|
79
|
+
name,
|
|
80
|
+
scope,
|
|
81
|
+
scopeId: scopeId || (0, typeorm_2.IsNull)(),
|
|
82
|
+
locale,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (!template && scope !== 'system') {
|
|
86
|
+
return this.layoutRepository.findOne({
|
|
87
|
+
where: {
|
|
88
|
+
type,
|
|
89
|
+
name,
|
|
90
|
+
scope: 'system',
|
|
91
|
+
scopeId: (0, typeorm_2.IsNull)(),
|
|
92
|
+
locale,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return template;
|
|
97
|
+
}
|
|
98
|
+
async createSystemTemplateLayout(data) {
|
|
99
|
+
const existingTemplate = await this.layoutRepository.findOne({
|
|
100
|
+
where: {
|
|
101
|
+
name: data.name,
|
|
102
|
+
scope: 'system',
|
|
103
|
+
scopeId: null
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
if (existingTemplate) {
|
|
107
|
+
throw new Error(`System template already exists: ${data.name}`);
|
|
108
|
+
}
|
|
109
|
+
const template = this.layoutRepository.create({
|
|
110
|
+
...data,
|
|
111
|
+
scopeId: null
|
|
112
|
+
});
|
|
113
|
+
return this.layoutRepository.save(template);
|
|
114
|
+
}
|
|
115
|
+
async updateSystemTemplateLayout(id, updates, canUpdateSystemTemplate = false) {
|
|
116
|
+
const template = await this.layoutRepository.findOne({
|
|
117
|
+
where: {
|
|
118
|
+
id,
|
|
119
|
+
scope: 'system',
|
|
120
|
+
scopeId: null
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
if (!template) {
|
|
124
|
+
throw new common_1.NotFoundException(`System template not found: ${id}`);
|
|
125
|
+
}
|
|
126
|
+
if (canUpdateSystemTemplate) {
|
|
127
|
+
this.layoutRepository.merge(template, updates);
|
|
128
|
+
return this.layoutRepository.save(template);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
let existingTemplate = await this.layoutRepository.findOne({
|
|
132
|
+
where: {
|
|
133
|
+
name: template.name,
|
|
134
|
+
scope: updates.scope || template.scope,
|
|
135
|
+
scopeId: updates.scopeId || template.scopeId
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
if (!existingTemplate) {
|
|
139
|
+
const cloneData = { ...template };
|
|
140
|
+
delete cloneData.id;
|
|
141
|
+
delete cloneData.scopeId;
|
|
142
|
+
existingTemplate = this.layoutRepository.create({
|
|
143
|
+
...cloneData
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
existingTemplate = this.layoutRepository.merge(existingTemplate, updates);
|
|
147
|
+
return this.layoutRepository.save(existingTemplate);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async deleteTemplateLayout(id, canDeleteSystemTemplate = false) {
|
|
151
|
+
const template = await this.layoutRepository.findOne({
|
|
152
|
+
where: { id },
|
|
153
|
+
});
|
|
154
|
+
if (!template) {
|
|
155
|
+
throw new Error(`Template not found: ${id}`);
|
|
156
|
+
}
|
|
157
|
+
if (template.scope === 'system' && !canDeleteSystemTemplate) {
|
|
158
|
+
throw new common_1.ForbiddenException('Cannot delete system templates');
|
|
159
|
+
}
|
|
160
|
+
await this.layoutRepository.remove(template);
|
|
161
|
+
}
|
|
162
|
+
async deleteSystemTemplateLayout(id, canDeleteSystemTemplate = false) {
|
|
163
|
+
const template = await this.layoutRepository.findOne({
|
|
164
|
+
where: { id }
|
|
165
|
+
});
|
|
166
|
+
if (!template) {
|
|
167
|
+
throw new common_1.NotFoundException(`Template not found: ${id}`);
|
|
168
|
+
}
|
|
169
|
+
if (template.scope === 'system' && !canDeleteSystemTemplate) {
|
|
170
|
+
throw new Error('Cannot delete system template');
|
|
171
|
+
}
|
|
172
|
+
await this.layoutRepository.remove(template);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
exports.TemplateLayoutService = TemplateLayoutService;
|
|
176
|
+
exports.TemplateLayoutService = TemplateLayoutService = tslib_1.__decorate([
|
|
177
|
+
(0, common_1.Injectable)(),
|
|
178
|
+
tslib_1.__param(0, (0, typeorm_1.InjectRepository)(template_layout_entity_1.NestDynamicTemplateLayout)),
|
|
179
|
+
tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
180
|
+
template_engine_registry_1.TemplateEngineRegistryService])
|
|
181
|
+
], TemplateLayoutService);
|
|
182
|
+
//# sourceMappingURL=template-layout.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-layout.service.js","sourceRoot":"","sources":["../../../../../../packages/nest-dynamic-templates/src/lib/services/template-layout.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Repository } from 'typeorm';
|
|
2
|
+
import { NestDynamicTemplate } from '../entities/template.entity';
|
|
3
|
+
import { TemplateTypeEnum } from '../interfaces/template.types';
|
|
4
|
+
import { RenderTemplateDto, RenderTemplateOutputDTO } from '../dto/render-template.dto';
|
|
5
|
+
import { CreateTemplateDto } from '../dto/create-template.dto';
|
|
6
|
+
import { TemplateFilterDto } from '../dto/template-filter.dto';
|
|
7
|
+
import { TemplateLayoutService } from './template-layout.service';
|
|
8
|
+
import { TemplateEngineRegistryService } from './template-engine.registry';
|
|
9
|
+
export declare class TemplateService {
|
|
10
|
+
private readonly templateRepository;
|
|
11
|
+
private readonly engineRegistry;
|
|
12
|
+
private readonly templateLayoutService;
|
|
13
|
+
constructor(templateRepository: Repository<NestDynamicTemplate>, engineRegistry: TemplateEngineRegistryService, templateLayoutService: TemplateLayoutService);
|
|
14
|
+
render(renderDto: RenderTemplateDto): Promise<RenderTemplateOutputDTO>;
|
|
15
|
+
getTemplates(filter?: TemplateFilterDto): Promise<NestDynamicTemplate[]>;
|
|
16
|
+
findTemplate(type: TemplateTypeEnum, name: string, scope?: string, scopeId?: string, locale?: string): Promise<NestDynamicTemplate | null>;
|
|
17
|
+
createTemplate(data: CreateTemplateDto): Promise<NestDynamicTemplate>;
|
|
18
|
+
overwriteSystemTemplate(templateId: string, updates: Partial<CreateTemplateDto>): Promise<NestDynamicTemplate>;
|
|
19
|
+
updateTemplate(id: string, updates: Partial<CreateTemplateDto>, canUpdateSystemTemplate?: boolean): Promise<NestDynamicTemplate>;
|
|
20
|
+
deleteTemplate(id: string, canDeleteSystemTemplate?: boolean): Promise<void>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TemplateService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
7
|
+
const typeorm_2 = require("typeorm");
|
|
8
|
+
const template_entity_1 = require("../entities/template.entity");
|
|
9
|
+
const template_layout_service_1 = require("./template-layout.service");
|
|
10
|
+
const template_engine_registry_1 = require("./template-engine.registry");
|
|
11
|
+
let TemplateService = class TemplateService {
|
|
12
|
+
constructor(templateRepository, engineRegistry, templateLayoutService) {
|
|
13
|
+
this.templateRepository = templateRepository;
|
|
14
|
+
this.engineRegistry = engineRegistry;
|
|
15
|
+
this.templateLayoutService = templateLayoutService;
|
|
16
|
+
}
|
|
17
|
+
async render(renderDto) {
|
|
18
|
+
const { type, name, scope, scopeId, locale, context } = renderDto;
|
|
19
|
+
const template = await this.findTemplate(type, name, scope, scopeId, locale);
|
|
20
|
+
if (!template) {
|
|
21
|
+
throw new common_1.NotFoundException(`Template not found: ${name}`);
|
|
22
|
+
}
|
|
23
|
+
const templateEngine = this.engineRegistry.getTemplateEngine(template.engine);
|
|
24
|
+
let content = await templateEngine.render(template.content, context);
|
|
25
|
+
if (template.language) {
|
|
26
|
+
const languageEngine = this.engineRegistry.getLanguageEngine(template.language);
|
|
27
|
+
content = await languageEngine.render(content);
|
|
28
|
+
}
|
|
29
|
+
let subject;
|
|
30
|
+
if (template.subject) {
|
|
31
|
+
const subjectEngine = this.engineRegistry.getTemplateEngine(template.engine);
|
|
32
|
+
subject = await subjectEngine.render(template.subject, context);
|
|
33
|
+
}
|
|
34
|
+
if (content) {
|
|
35
|
+
const contentEngine = this.engineRegistry.getTemplateEngine(template.engine);
|
|
36
|
+
content = await contentEngine.render(content, context);
|
|
37
|
+
}
|
|
38
|
+
if (template.templateLayoutName) {
|
|
39
|
+
const layout = await this.templateLayoutService.render({
|
|
40
|
+
type: template.type,
|
|
41
|
+
name: template.templateLayoutName,
|
|
42
|
+
scope,
|
|
43
|
+
scopeId,
|
|
44
|
+
locale,
|
|
45
|
+
context: {
|
|
46
|
+
...context,
|
|
47
|
+
content
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
content = layout.content;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
subject,
|
|
54
|
+
content
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async getTemplates(filter = {}) {
|
|
58
|
+
const { scope, scopeId, type, locale, excludeNames = [], } = filter;
|
|
59
|
+
const where = {};
|
|
60
|
+
if (type)
|
|
61
|
+
where.type = type;
|
|
62
|
+
if (locale)
|
|
63
|
+
where.locale = locale;
|
|
64
|
+
if (excludeNames.length > 0)
|
|
65
|
+
where.name = (0, typeorm_2.Not)((0, typeorm_2.In)(excludeNames));
|
|
66
|
+
const systemTemplates = await this.templateRepository.find({
|
|
67
|
+
where: {
|
|
68
|
+
...where,
|
|
69
|
+
scope: 'system',
|
|
70
|
+
scopeId: (0, typeorm_2.IsNull)(),
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
if (scope === 'system') {
|
|
74
|
+
return systemTemplates;
|
|
75
|
+
}
|
|
76
|
+
const templates = await this.templateRepository.find({
|
|
77
|
+
where: {
|
|
78
|
+
...where,
|
|
79
|
+
scope: (0, typeorm_2.Equal)(scope),
|
|
80
|
+
scopeId: (0, typeorm_2.Equal)(scopeId),
|
|
81
|
+
},
|
|
82
|
+
order: {
|
|
83
|
+
createdAt: 'DESC',
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
const templateMap = new Map();
|
|
87
|
+
for (const template of systemTemplates) {
|
|
88
|
+
const key = `${template.type}/${template.name}/${template.locale}`;
|
|
89
|
+
templateMap.set(key, template);
|
|
90
|
+
}
|
|
91
|
+
for (const template of templates) {
|
|
92
|
+
const key = `${template.type}/${template.name}/${template.locale}`;
|
|
93
|
+
templateMap.set(key, template);
|
|
94
|
+
}
|
|
95
|
+
return Array.from(templateMap.values());
|
|
96
|
+
}
|
|
97
|
+
async findTemplate(type, name, scope, scopeId, locale) {
|
|
98
|
+
const locales = (locale ? [locale, 'en'] : ['en']).filter(Boolean);
|
|
99
|
+
for (const currentLocale of locales) {
|
|
100
|
+
const template = await this.templateRepository.findOne({
|
|
101
|
+
where: {
|
|
102
|
+
type,
|
|
103
|
+
name,
|
|
104
|
+
scope,
|
|
105
|
+
scopeId: scope === 'system' ? (0, typeorm_2.IsNull)() : (0, typeorm_2.Equal)(scopeId),
|
|
106
|
+
locale: currentLocale,
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
if (template) {
|
|
110
|
+
return template;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (scope !== 'system') {
|
|
114
|
+
for (const currentLocale of locales) {
|
|
115
|
+
const template = await this.templateRepository.findOne({
|
|
116
|
+
where: {
|
|
117
|
+
type,
|
|
118
|
+
name,
|
|
119
|
+
scope: 'system',
|
|
120
|
+
scopeId: (0, typeorm_2.IsNull)(),
|
|
121
|
+
locale: currentLocale,
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
if (template) {
|
|
125
|
+
return template;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
async createTemplate(data) {
|
|
132
|
+
if (data.scope !== 'system') {
|
|
133
|
+
throw new common_1.ForbiddenException('Only system templates can be created directly');
|
|
134
|
+
}
|
|
135
|
+
const existingTemplate = await this.templateRepository.findOne({
|
|
136
|
+
where: {
|
|
137
|
+
name: data.name,
|
|
138
|
+
type: data.type,
|
|
139
|
+
scope: 'system',
|
|
140
|
+
scopeId: (0, typeorm_2.IsNull)(),
|
|
141
|
+
locale: data.locale,
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
if (existingTemplate) {
|
|
145
|
+
throw new common_1.ConflictException(`System template already exists`);
|
|
146
|
+
}
|
|
147
|
+
const template = this.templateRepository.create({
|
|
148
|
+
...data,
|
|
149
|
+
scopeId: null,
|
|
150
|
+
});
|
|
151
|
+
return this.templateRepository.save(template);
|
|
152
|
+
}
|
|
153
|
+
async overwriteSystemTemplate(templateId, updates) {
|
|
154
|
+
let template = await this.templateRepository.findOne({
|
|
155
|
+
where: { id: templateId },
|
|
156
|
+
});
|
|
157
|
+
if (!template) {
|
|
158
|
+
throw new common_1.NotFoundException(`Template not found: ${templateId}`);
|
|
159
|
+
}
|
|
160
|
+
if (template.scope === 'system') {
|
|
161
|
+
if (!updates.scope) {
|
|
162
|
+
throw new common_1.BadRequestException('Scope is required when overwriting system template');
|
|
163
|
+
}
|
|
164
|
+
const existingTemplate = await this.templateRepository.findOne({
|
|
165
|
+
where: {
|
|
166
|
+
name: template.name,
|
|
167
|
+
type: template.type,
|
|
168
|
+
locale: template.locale,
|
|
169
|
+
scope: updates.scope,
|
|
170
|
+
scopeId: (0, typeorm_2.Equal)(updates.scopeId),
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
if (existingTemplate) {
|
|
174
|
+
template = existingTemplate;
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
const newTemplate = this.templateRepository.create({
|
|
178
|
+
...template,
|
|
179
|
+
id: undefined,
|
|
180
|
+
createdAt: undefined,
|
|
181
|
+
updatedAt: undefined,
|
|
182
|
+
scope: updates.scope,
|
|
183
|
+
scopeId: updates.scopeId,
|
|
184
|
+
});
|
|
185
|
+
template = newTemplate;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
template = this.templateRepository.merge(template, updates);
|
|
189
|
+
await this.templateRepository.save(template);
|
|
190
|
+
return template;
|
|
191
|
+
}
|
|
192
|
+
async updateTemplate(id, updates, canUpdateSystemTemplate = false) {
|
|
193
|
+
let template = await this.templateRepository.findOne({
|
|
194
|
+
where: { id },
|
|
195
|
+
});
|
|
196
|
+
if (!template) {
|
|
197
|
+
throw new common_1.NotFoundException(`Template not found: ${id}`);
|
|
198
|
+
}
|
|
199
|
+
if (template.scope === 'system' && !canUpdateSystemTemplate) {
|
|
200
|
+
if (updates.scope) {
|
|
201
|
+
return this.overwriteSystemTemplate(id, updates);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
throw new common_1.ForbiddenException('Cannot update system templates');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
template = this.templateRepository.merge(template, updates);
|
|
208
|
+
return this.templateRepository.save(template);
|
|
209
|
+
}
|
|
210
|
+
async deleteTemplate(id, canDeleteSystemTemplate = false) {
|
|
211
|
+
const template = await this.templateRepository.findOne({
|
|
212
|
+
where: { id },
|
|
213
|
+
});
|
|
214
|
+
if (!template) {
|
|
215
|
+
throw new Error(`Template not found: ${id}`);
|
|
216
|
+
}
|
|
217
|
+
if (template.scope === 'system' && !canDeleteSystemTemplate) {
|
|
218
|
+
throw new common_1.ForbiddenException('Cannot delete system templates');
|
|
219
|
+
}
|
|
220
|
+
await this.templateRepository.remove(template);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
exports.TemplateService = TemplateService;
|
|
224
|
+
exports.TemplateService = TemplateService = tslib_1.__decorate([
|
|
225
|
+
(0, common_1.Injectable)(),
|
|
226
|
+
tslib_1.__param(0, (0, typeorm_1.InjectRepository)(template_entity_1.NestDynamicTemplate)),
|
|
227
|
+
tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
228
|
+
template_engine_registry_1.TemplateEngineRegistryService,
|
|
229
|
+
template_layout_service_1.TemplateLayoutService])
|
|
230
|
+
], TemplateService);
|
|
231
|
+
//# sourceMappingURL=template.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.service.js","sourceRoot":"","sources":["../../../../../../packages/nest-dynamic-templates/src/lib/services/template.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var NestDynamicTemplatesModule_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NestDynamicTemplatesModule = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
8
|
+
const template_entity_1 = require("./entities/template.entity");
|
|
9
|
+
const template_layout_entity_1 = require("./entities/template-layout.entity");
|
|
10
|
+
const template_service_1 = require("./services/template.service");
|
|
11
|
+
const template_layout_service_1 = require("./services/template-layout.service");
|
|
12
|
+
const template_engine_registry_1 = require("./services/template-engine.registry");
|
|
13
|
+
const template_layout_controller_1 = require("./controllers/template-layout.controller");
|
|
14
|
+
const template_controller_1 = require("./controllers/template.controller");
|
|
15
|
+
const constant_1 = require("./constant");
|
|
16
|
+
const deepmerge_1 = tslib_1.__importDefault(require("deepmerge"));
|
|
17
|
+
const template_types_1 = require("./interfaces/template.types");
|
|
18
|
+
const defaultConfig = {
|
|
19
|
+
engines: {
|
|
20
|
+
template: [template_types_1.TemplateEngineEnum.NUNJUCKS],
|
|
21
|
+
language: [template_types_1.TemplateLanguageEnum.HTML, template_types_1.TemplateLanguageEnum.MJML, template_types_1.TemplateLanguageEnum.TEXT]
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
let NestDynamicTemplatesModule = NestDynamicTemplatesModule_1 = class NestDynamicTemplatesModule {
|
|
25
|
+
static forRoot(config) {
|
|
26
|
+
const providers = [
|
|
27
|
+
template_service_1.TemplateService,
|
|
28
|
+
template_layout_service_1.TemplateLayoutService,
|
|
29
|
+
template_engine_registry_1.TemplateEngineRegistryService,
|
|
30
|
+
{
|
|
31
|
+
provide: constant_1.NEST_DYNAMIC_TEMPLATES_MODULE_CONFIG,
|
|
32
|
+
useValue: (0, deepmerge_1.default)(defaultConfig, config)
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
return {
|
|
36
|
+
module: NestDynamicTemplatesModule_1,
|
|
37
|
+
controllers: [template_controller_1.TemplateController, template_layout_controller_1.TemplateLayoutController],
|
|
38
|
+
imports: [
|
|
39
|
+
typeorm_1.TypeOrmModule.forFeature([template_entity_1.NestDynamicTemplate, template_layout_entity_1.NestDynamicTemplateLayout])
|
|
40
|
+
],
|
|
41
|
+
providers,
|
|
42
|
+
exports: [template_service_1.TemplateService, template_layout_service_1.TemplateLayoutService]
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
exports.NestDynamicTemplatesModule = NestDynamicTemplatesModule;
|
|
47
|
+
exports.NestDynamicTemplatesModule = NestDynamicTemplatesModule = NestDynamicTemplatesModule_1 = tslib_1.__decorate([
|
|
48
|
+
(0, common_1.Module)({})
|
|
49
|
+
], NestDynamicTemplatesModule);
|
|
50
|
+
//# sourceMappingURL=templates.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.module.js","sourceRoot":"","sources":["../../../../../packages/nest-dynamic-templates/src/lib/templates.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAuD;AACvD,6CAAgD;AAChD,gEAAiE;AACjE,8EAA8E;AAC9E,kEAA8D;AAC9D,gFAA2E;AAC3E,kFAAoF;AACpF,yFAAoF;AACpF,2EAAuE;AAEvE,yCAAkE;AAClE,kEAAkC;AAClC,gEAAuF;AAGvF,MAAM,aAAa,GAAqC;IACtD,OAAO,EAAE;QACP,QAAQ,EAAE,CAAC,mCAAkB,CAAC,QAAQ,CAAC;QACvC,QAAQ,EAAE,CAAC,qCAAoB,CAAC,IAAI,EAAE,qCAAoB,CAAC,IAAI,EAAE,qCAAoB,CAAC,IAAI,CAAC;KAC5F;CACF,CAAA;AAGM,IAAM,0BAA0B,kCAAhC,MAAM,0BAA0B;IAErC,MAAM,CAAC,OAAO,CAAC,MAAyC;QACtD,MAAM,SAAS,GAAG;YAChB,kCAAe;YACf,+CAAqB;YACrB,wDAA6B;YAC7B;gBACE,OAAO,EAAE,+CAAoC;gBAC7C,QAAQ,EAAE,IAAA,mBAAS,EAAC,aAAa,EAAE,MAAM,CAAC;aAC3C;SACF,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,4BAA0B;YAClC,WAAW,EAAE,CAAC,wCAAkB,EAAE,qDAAwB,CAAC;YAC3D,OAAO,EAAE;gBACP,uBAAa,CAAC,UAAU,CAAC,CAAC,qCAAmB,EAAE,kDAAyB,CAAC,CAAC;aAC3E;YACD,SAAS;YACT,OAAO,EAAE,CAAC,kCAAe,EAAE,+CAAqB,CAAC;SAClD,CAAC;IACJ,CAAC;CAEF,CAAA;AAxBY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,0BAA0B,CAwBtC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.testRedisConfig = exports.testDatabaseConfig = void 0;
|
|
4
|
+
const template_entity_1 = require("../lib/entities/template.entity");
|
|
5
|
+
const template_layout_entity_1 = require("../lib/entities/template-layout.entity");
|
|
6
|
+
exports.testDatabaseConfig = {
|
|
7
|
+
type: 'sqlite',
|
|
8
|
+
database: ':memory:',
|
|
9
|
+
entities: [template_entity_1.NestDynamicTemplate, template_layout_entity_1.NestDynamicTemplateLayout],
|
|
10
|
+
logging: ['error', 'warn'],
|
|
11
|
+
synchronize: true,
|
|
12
|
+
dropSchema: true,
|
|
13
|
+
};
|
|
14
|
+
exports.testRedisConfig = {
|
|
15
|
+
type: 'single',
|
|
16
|
+
options: {
|
|
17
|
+
host: 'localhost',
|
|
18
|
+
port: 6379,
|
|
19
|
+
retryStrategy: (times) => {
|
|
20
|
+
return Math.min(times * 50, 2000);
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=test-database.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-database.config.js","sourceRoot":"","sources":["../../../../../packages/nest-dynamic-templates/src/test/test-database.config.ts"],"names":[],"mappings":";;;AAEA,qEAAsE;AACtE,mFAAmF;AAEtE,QAAA,kBAAkB,GAAyB;IACpD,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,CAAC,qCAAmB,EAAE,kDAAyB,CAAC;IAC1D,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,IAAI;CACnB,CAAC;AAEW,QAAA,eAAe,GAAuB;IAC/C,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE;QACL,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,IAAI;QACV,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;KACJ;CACJ,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { NestDynamicTemplatesModuleConfig } from '../lib/interfaces/module-config.interface';
|
|
2
|
+
export declare function createTestModule(options?: Partial<NestDynamicTemplatesModuleConfig>): Promise<import("@nestjs/testing").TestingModule>;
|
|
3
|
+
export declare function createTestApp(options?: Partial<NestDynamicTemplatesModuleConfig>): Promise<import("@nestjs/common").INestApplication<any>>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTestModule = createTestModule;
|
|
4
|
+
exports.createTestApp = createTestApp;
|
|
5
|
+
const testing_1 = require("@nestjs/testing");
|
|
6
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
7
|
+
const test_database_config_1 = require("./test-database.config");
|
|
8
|
+
const template_layout_entity_1 = require("../lib/entities/template-layout.entity");
|
|
9
|
+
const template_entity_1 = require("../lib/entities/template.entity");
|
|
10
|
+
const templates_module_1 = require("../lib/templates.module");
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
async function createTestModule(options = {}) {
|
|
13
|
+
const moduleRef = await testing_1.Test.createTestingModule({
|
|
14
|
+
imports: [
|
|
15
|
+
typeorm_1.TypeOrmModule.forRoot(test_database_config_1.testDatabaseConfig),
|
|
16
|
+
typeorm_1.TypeOrmModule.forFeature([template_entity_1.NestDynamicTemplate, template_layout_entity_1.NestDynamicTemplateLayout]),
|
|
17
|
+
templates_module_1.NestDynamicTemplatesModule.forRoot(options),
|
|
18
|
+
],
|
|
19
|
+
}).compile();
|
|
20
|
+
return moduleRef;
|
|
21
|
+
}
|
|
22
|
+
async function createTestApp(options = {}) {
|
|
23
|
+
const moduleRef = await createTestModule(options);
|
|
24
|
+
const app = moduleRef.createNestApplication();
|
|
25
|
+
app.useGlobalPipes(new common_1.ValidationPipe());
|
|
26
|
+
await app.init();
|
|
27
|
+
return app;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=test.setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.setup.js","sourceRoot":"","sources":["../../../../../packages/nest-dynamic-templates/src/test/test.setup.ts"],"names":[],"mappings":";;AASA,4CAYC;AAED,sCAUC;AAjCD,6CAAuC;AACvC,6CAAgD;AAChD,iEAA6E;AAC7E,mFAAmF;AACnF,qEAAsE;AACtE,8DAAqE;AACrE,2CAAgD;AAGzC,KAAK,UAAU,gBAAgB,CAAC,UAAqD,EAAE;IAE1F,MAAM,SAAS,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;QAC7C,OAAO,EAAE;YACL,uBAAa,CAAC,OAAO,CAAC,yCAAkB,CAAC;YACzC,uBAAa,CAAC,UAAU,CAAC,CAAC,qCAAmB,EAAE,kDAAyB,CAAC,CAAC;YAE1E,6CAA0B,CAAC,OAAO,CAAC,OAAO,CAAC;SAC9C;KACJ,CAAC,CAAC,OAAO,EAAE,CAAC;IAEb,OAAO,SAAS,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,UAAqD,EAAE;IAEvF,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;IAG9C,GAAG,CAAC,cAAc,CAAC,IAAI,uBAAc,EAAE,CAAC,CAAC;IAEzC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":"5.7.3"}
|