@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.
Files changed (99) hide show
  1. package/README.md +173 -0
  2. package/package.json +62 -0
  3. package/src/index.d.ts +5 -0
  4. package/src/index.js +9 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/constant.d.ts +1 -0
  7. package/src/lib/constant.js +5 -0
  8. package/src/lib/constant.js.map +1 -0
  9. package/src/lib/controllers/template-layout.controller.d.ts +18 -0
  10. package/src/lib/controllers/template-layout.controller.js +96 -0
  11. package/src/lib/controllers/template-layout.controller.js.map +1 -0
  12. package/src/lib/controllers/template.controller.d.ts +17 -0
  13. package/src/lib/controllers/template.controller.js +100 -0
  14. package/src/lib/controllers/template.controller.js.map +1 -0
  15. package/src/lib/dto/create-template-layout.dto.d.ts +15 -0
  16. package/src/lib/dto/create-template-layout.dto.js +86 -0
  17. package/src/lib/dto/create-template-layout.dto.js.map +1 -0
  18. package/src/lib/dto/create-template.dto.d.ts +16 -0
  19. package/src/lib/dto/create-template.dto.js +91 -0
  20. package/src/lib/dto/create-template.dto.js.map +1 -0
  21. package/src/lib/dto/render-template-layout.dto.d.ts +12 -0
  22. package/src/lib/dto/render-template-layout.dto.js +69 -0
  23. package/src/lib/dto/render-template-layout.dto.js.map +1 -0
  24. package/src/lib/dto/render-template.dto.d.ts +13 -0
  25. package/src/lib/dto/render-template.dto.js +82 -0
  26. package/src/lib/dto/render-template.dto.js.map +1 -0
  27. package/src/lib/dto/template-filter.dto.d.ts +8 -0
  28. package/src/lib/dto/template-filter.dto.js +62 -0
  29. package/src/lib/dto/template-filter.dto.js.map +1 -0
  30. package/src/lib/dto/template-layout-filter.dto.d.ts +8 -0
  31. package/src/lib/dto/template-layout-filter.dto.js +62 -0
  32. package/src/lib/dto/template-layout-filter.dto.js.map +1 -0
  33. package/src/lib/engines/language/html.engine.d.ts +9 -0
  34. package/src/lib/engines/language/html.engine.js +79 -0
  35. package/src/lib/engines/language/html.engine.js.map +1 -0
  36. package/src/lib/engines/language/index.d.ts +4 -0
  37. package/src/lib/engines/language/index.js +12 -0
  38. package/src/lib/engines/language/index.js.map +1 -0
  39. package/src/lib/engines/language/markdown.engine.d.ts +9 -0
  40. package/src/lib/engines/language/markdown.engine.js +39 -0
  41. package/src/lib/engines/language/markdown.engine.js.map +1 -0
  42. package/src/lib/engines/language/mjml.engine.d.ts +9 -0
  43. package/src/lib/engines/language/mjml.engine.js +77 -0
  44. package/src/lib/engines/language/mjml.engine.js.map +1 -0
  45. package/src/lib/engines/language/text.engine.d.ts +7 -0
  46. package/src/lib/engines/language/text.engine.js +16 -0
  47. package/src/lib/engines/language/text.engine.js.map +1 -0
  48. package/src/lib/engines/language-engine.d.ts +5 -0
  49. package/src/lib/engines/language-engine.js +7 -0
  50. package/src/lib/engines/language-engine.js.map +1 -0
  51. package/src/lib/engines/template/ejs.engine.d.ts +9 -0
  52. package/src/lib/engines/template/ejs.engine.js +66 -0
  53. package/src/lib/engines/template/ejs.engine.js.map +1 -0
  54. package/src/lib/engines/template/handlebars.engine.d.ts +9 -0
  55. package/src/lib/engines/template/handlebars.engine.js +67 -0
  56. package/src/lib/engines/template/handlebars.engine.js.map +1 -0
  57. package/src/lib/engines/template/index.d.ts +4 -0
  58. package/src/lib/engines/template/index.js +12 -0
  59. package/src/lib/engines/template/index.js.map +1 -0
  60. package/src/lib/engines/template/nunjucks.engine.d.ts +12 -0
  61. package/src/lib/engines/template/nunjucks.engine.js +82 -0
  62. package/src/lib/engines/template/nunjucks.engine.js.map +1 -0
  63. package/src/lib/engines/template/pug.engine.d.ts +10 -0
  64. package/src/lib/engines/template/pug.engine.js +67 -0
  65. package/src/lib/engines/template/pug.engine.js.map +1 -0
  66. package/src/lib/engines/template-engine.d.ts +5 -0
  67. package/src/lib/engines/template-engine.js +7 -0
  68. package/src/lib/engines/template-engine.js.map +1 -0
  69. package/src/lib/entities/template-layout.entity.d.ts +18 -0
  70. package/src/lib/entities/template-layout.entity.js +117 -0
  71. package/src/lib/entities/template-layout.entity.js.map +1 -0
  72. package/src/lib/entities/template.entity.d.ts +20 -0
  73. package/src/lib/entities/template.entity.js +127 -0
  74. package/src/lib/entities/template.entity.js.map +1 -0
  75. package/src/lib/interfaces/module-config.interface.d.ts +15 -0
  76. package/src/lib/interfaces/module-config.interface.js +3 -0
  77. package/src/lib/interfaces/module-config.interface.js.map +1 -0
  78. package/src/lib/interfaces/template.types.d.ts +22 -0
  79. package/src/lib/interfaces/template.types.js +25 -0
  80. package/src/lib/interfaces/template.types.js.map +1 -0
  81. package/src/lib/services/template-engine.registry.d.ts +22 -0
  82. package/src/lib/services/template-engine.registry.js +91 -0
  83. package/src/lib/services/template-engine.registry.js.map +1 -0
  84. package/src/lib/services/template-layout.service.d.ts +19 -0
  85. package/src/lib/services/template-layout.service.js +182 -0
  86. package/src/lib/services/template-layout.service.js.map +1 -0
  87. package/src/lib/services/template.service.d.ts +21 -0
  88. package/src/lib/services/template.service.js +231 -0
  89. package/src/lib/services/template.service.js.map +1 -0
  90. package/src/lib/templates.module.d.ts +5 -0
  91. package/src/lib/templates.module.js +50 -0
  92. package/src/lib/templates.module.js.map +1 -0
  93. package/src/test/test-database.config.d.ts +4 -0
  94. package/src/test/test-database.config.js +24 -0
  95. package/src/test/test-database.config.js.map +1 -0
  96. package/src/test/test.setup.d.ts +3 -0
  97. package/src/test/test.setup.js +29 -0
  98. package/src/test/test.setup.js.map +1 -0
  99. 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,5 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { NestDynamicTemplatesModuleConfig } from './interfaces/module-config.interface';
3
+ export declare class NestDynamicTemplatesModule {
4
+ static forRoot(config?: NestDynamicTemplatesModuleConfig): DynamicModule;
5
+ }
@@ -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,4 @@
1
+ import { TypeOrmModuleOptions } from '@nestjs/typeorm';
2
+ import { RedisModuleOptions } from '@nestjs-modules/ioredis';
3
+ export declare const testDatabaseConfig: TypeOrmModuleOptions;
4
+ export declare const testRedisConfig: RedisModuleOptions;
@@ -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"}