@flusys/nestjs-email 1.1.0-beta → 2.0.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 (100) hide show
  1. package/README.md +589 -0
  2. package/cjs/config/email.constants.js +0 -18
  3. package/cjs/config/index.js +0 -1
  4. package/cjs/controllers/email-config.controller.js +46 -4
  5. package/cjs/controllers/email-send.controller.js +13 -26
  6. package/cjs/controllers/email-template.controller.js +60 -11
  7. package/cjs/docs/email-swagger.config.js +18 -80
  8. package/cjs/dtos/email-config.dto.js +6 -106
  9. package/cjs/dtos/email-send.dto.js +101 -123
  10. package/cjs/dtos/email-template.dto.js +41 -103
  11. package/cjs/entities/email-config-with-company.entity.js +2 -2
  12. package/cjs/entities/email-config.entity.js +92 -3
  13. package/cjs/entities/email-template-with-company.entity.js +5 -3
  14. package/cjs/entities/email-template.entity.js +119 -3
  15. package/cjs/entities/index.js +34 -19
  16. package/cjs/index.js +1 -0
  17. package/cjs/interfaces/email-provider.interface.js +1 -3
  18. package/cjs/modules/email.module.js +50 -104
  19. package/cjs/providers/email-factory.service.js +37 -109
  20. package/cjs/providers/email-provider.registry.js +5 -15
  21. package/cjs/providers/mailgun-provider.js +54 -58
  22. package/cjs/providers/sendgrid-provider.js +68 -92
  23. package/cjs/providers/smtp-provider.js +58 -69
  24. package/cjs/{config → services}/email-config.service.js +9 -32
  25. package/cjs/services/email-datasource.provider.js +17 -104
  26. package/cjs/services/email-provider-config.service.js +28 -58
  27. package/cjs/services/email-send.service.js +120 -125
  28. package/cjs/services/email-template.service.js +62 -85
  29. package/cjs/services/index.js +2 -1
  30. package/cjs/utils/email-templates.util.js +64 -0
  31. package/cjs/utils/index.js +18 -0
  32. package/config/email.constants.d.ts +0 -9
  33. package/config/index.d.ts +0 -1
  34. package/controllers/email-send.controller.d.ts +5 -12
  35. package/controllers/email-template.controller.d.ts +5 -7
  36. package/dtos/email-config.dto.d.ts +5 -13
  37. package/dtos/email-send.dto.d.ts +17 -21
  38. package/dtos/email-template.dto.d.ts +5 -16
  39. package/entities/email-config-with-company.entity.d.ts +2 -2
  40. package/entities/email-config.entity.d.ts +10 -2
  41. package/entities/email-template-with-company.entity.d.ts +2 -2
  42. package/entities/email-template.entity.d.ts +13 -2
  43. package/entities/index.d.ts +9 -3
  44. package/fesm/config/email.constants.js +0 -9
  45. package/fesm/config/index.js +0 -1
  46. package/fesm/controllers/email-config.controller.js +49 -7
  47. package/fesm/controllers/email-send.controller.js +13 -26
  48. package/fesm/controllers/email-template.controller.js +61 -12
  49. package/fesm/docs/email-swagger.config.js +21 -86
  50. package/fesm/dtos/email-config.dto.js +9 -115
  51. package/fesm/dtos/email-send.dto.js +103 -139
  52. package/fesm/dtos/email-template.dto.js +43 -111
  53. package/fesm/entities/email-config-with-company.entity.js +2 -2
  54. package/fesm/entities/email-config.entity.js +93 -4
  55. package/fesm/entities/email-template-with-company.entity.js +5 -3
  56. package/fesm/entities/email-template.entity.js +120 -4
  57. package/fesm/entities/index.js +22 -16
  58. package/fesm/index.js +1 -0
  59. package/fesm/interfaces/email-config.interface.js +1 -3
  60. package/fesm/interfaces/email-module-options.interface.js +1 -3
  61. package/fesm/interfaces/email-provider.interface.js +1 -5
  62. package/fesm/interfaces/email-template.interface.js +1 -3
  63. package/fesm/modules/email.module.js +52 -106
  64. package/fesm/providers/email-factory.service.js +38 -69
  65. package/fesm/providers/email-provider.registry.js +6 -19
  66. package/fesm/providers/mailgun-provider.js +55 -63
  67. package/fesm/providers/sendgrid-provider.js +69 -97
  68. package/fesm/providers/smtp-provider.js +59 -73
  69. package/fesm/{config → services}/email-config.service.js +9 -32
  70. package/fesm/services/email-datasource.provider.js +18 -64
  71. package/fesm/services/email-provider-config.service.js +26 -56
  72. package/fesm/services/email-send.service.js +118 -123
  73. package/fesm/services/email-template.service.js +60 -83
  74. package/fesm/services/index.js +2 -1
  75. package/fesm/utils/email-templates.util.js +47 -0
  76. package/fesm/utils/index.js +1 -0
  77. package/index.d.ts +1 -0
  78. package/interfaces/email-config.interface.d.ts +6 -0
  79. package/interfaces/email-module-options.interface.d.ts +0 -5
  80. package/modules/email.module.d.ts +1 -2
  81. package/package.json +4 -4
  82. package/providers/email-factory.service.d.ts +4 -7
  83. package/providers/mailgun-provider.d.ts +6 -2
  84. package/providers/sendgrid-provider.d.ts +6 -2
  85. package/providers/smtp-provider.d.ts +7 -2
  86. package/services/email-config.service.d.ts +12 -0
  87. package/services/email-datasource.provider.d.ts +3 -6
  88. package/services/email-provider-config.service.d.ts +3 -3
  89. package/services/email-send.service.d.ts +11 -3
  90. package/services/email-template.service.d.ts +5 -4
  91. package/services/index.d.ts +2 -1
  92. package/utils/email-templates.util.d.ts +2 -0
  93. package/utils/index.d.ts +1 -0
  94. package/cjs/entities/email-config-base.entity.js +0 -111
  95. package/cjs/entities/email-template-base.entity.js +0 -134
  96. package/config/email-config.service.d.ts +0 -13
  97. package/entities/email-config-base.entity.d.ts +0 -11
  98. package/entities/email-template-base.entity.d.ts +0 -14
  99. package/fesm/entities/email-config-base.entity.js +0 -101
  100. package/fesm/entities/email-template-base.entity.js +0 -124
@@ -1,15 +1,104 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
1
14
  function _ts_decorate(decorators, target, key, desc) {
2
15
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
16
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
17
  else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
18
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
19
  }
7
- import { Entity } from 'typeorm';
8
- import { EmailConfigBase } from './email-config-base.entity';
9
- export class EmailConfig extends EmailConfigBase {
20
+ function _ts_metadata(k, v) {
21
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
+ }
23
+ import { Identity } from '@flusys/nestjs-shared/entities';
24
+ import { Column, Entity, Index } from 'typeorm';
25
+ import { EmailProviderTypeEnum } from '../enums';
26
+ export class EmailConfig extends Identity {
27
+ constructor(...args){
28
+ super(...args), _define_property(this, "name", void 0), _define_property(this, "provider", void 0), _define_property(this, "config", void 0), _define_property(this, "fromEmail", void 0), _define_property(this, "fromName", void 0), _define_property(this, "isActive", void 0), _define_property(this, "isDefault", void 0);
29
+ }
10
30
  }
31
+ _ts_decorate([
32
+ Column({
33
+ type: 'varchar',
34
+ length: 255,
35
+ nullable: false
36
+ }),
37
+ _ts_metadata("design:type", String)
38
+ ], EmailConfig.prototype, "name", void 0);
39
+ _ts_decorate([
40
+ Column({
41
+ type: 'enum',
42
+ enum: EmailProviderTypeEnum,
43
+ nullable: false
44
+ }),
45
+ _ts_metadata("design:type", typeof EmailProviderTypeEnum === "undefined" ? Object : EmailProviderTypeEnum)
46
+ ], EmailConfig.prototype, "provider", void 0);
47
+ _ts_decorate([
48
+ Column({
49
+ type: 'json',
50
+ nullable: false
51
+ }),
52
+ _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
53
+ ], EmailConfig.prototype, "config", void 0);
54
+ _ts_decorate([
55
+ Column({
56
+ type: 'varchar',
57
+ length: 255,
58
+ nullable: true,
59
+ name: 'from_email'
60
+ }),
61
+ _ts_metadata("design:type", Object)
62
+ ], EmailConfig.prototype, "fromEmail", void 0);
63
+ _ts_decorate([
64
+ Column({
65
+ type: 'varchar',
66
+ length: 255,
67
+ nullable: true,
68
+ name: 'from_name'
69
+ }),
70
+ _ts_metadata("design:type", Object)
71
+ ], EmailConfig.prototype, "fromName", void 0);
72
+ _ts_decorate([
73
+ Column({
74
+ type: 'boolean',
75
+ default: true,
76
+ name: 'is_active'
77
+ }),
78
+ _ts_metadata("design:type", Boolean)
79
+ ], EmailConfig.prototype, "isActive", void 0);
80
+ _ts_decorate([
81
+ Column({
82
+ type: 'boolean',
83
+ default: false,
84
+ name: 'is_default'
85
+ }),
86
+ _ts_metadata("design:type", Boolean)
87
+ ], EmailConfig.prototype, "isDefault", void 0);
11
88
  EmailConfig = _ts_decorate([
12
89
  Entity({
13
90
  name: 'email_config'
14
- })
91
+ }),
92
+ Index([
93
+ 'name'
94
+ ]),
95
+ Index([
96
+ 'provider'
97
+ ]),
98
+ Index([
99
+ 'isActive'
100
+ ]),
101
+ Index([
102
+ 'isDefault'
103
+ ])
15
104
  ], EmailConfig);
@@ -21,8 +21,8 @@ function _ts_metadata(k, v) {
21
21
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
22
  }
23
23
  import { Column, Entity, Index } from 'typeorm';
24
- import { EmailTemplateBase } from './email-template-base.entity';
25
- export class EmailTemplateWithCompany extends EmailTemplateBase {
24
+ import { EmailTemplate } from './email-template.entity';
25
+ export class EmailTemplateWithCompany extends EmailTemplate {
26
26
  constructor(...args){
27
27
  super(...args), _define_property(this, "companyId", void 0);
28
28
  }
@@ -45,7 +45,9 @@ EmailTemplateWithCompany = _ts_decorate([
45
45
  Index([
46
46
  'companyId',
47
47
  'slug'
48
- ]),
48
+ ], {
49
+ unique: true
50
+ }),
49
51
  Index([
50
52
  'companyId',
51
53
  'isActive'
@@ -1,15 +1,131 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
1
14
  function _ts_decorate(decorators, target, key, desc) {
2
15
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
16
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
17
  else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
18
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
19
  }
7
- import { Entity } from 'typeorm';
8
- import { EmailTemplateBase } from './email-template-base.entity';
9
- export class EmailTemplate extends EmailTemplateBase {
20
+ function _ts_metadata(k, v) {
21
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
+ }
23
+ import { Identity } from '@flusys/nestjs-shared/entities';
24
+ import { Column, Entity, Index } from 'typeorm';
25
+ export class EmailTemplate extends Identity {
26
+ constructor(...args){
27
+ super(...args), _define_property(this, "name", void 0), _define_property(this, "slug", void 0), _define_property(this, "description", void 0), _define_property(this, "subject", void 0), _define_property(this, "schema", void 0), _define_property(this, "htmlContent", void 0), _define_property(this, "textContent", void 0), _define_property(this, "schemaVersion", void 0), _define_property(this, "isActive", void 0), _define_property(this, "isHtml", void 0), _define_property(this, "metadata", void 0);
28
+ }
10
29
  }
30
+ _ts_decorate([
31
+ Column({
32
+ type: 'varchar',
33
+ length: 255,
34
+ nullable: false
35
+ }),
36
+ _ts_metadata("design:type", String)
37
+ ], EmailTemplate.prototype, "name", void 0);
38
+ _ts_decorate([
39
+ Column({
40
+ type: 'varchar',
41
+ length: 255,
42
+ nullable: false
43
+ }),
44
+ _ts_metadata("design:type", String)
45
+ ], EmailTemplate.prototype, "slug", void 0);
46
+ _ts_decorate([
47
+ Column({
48
+ type: 'varchar',
49
+ length: 500,
50
+ nullable: true
51
+ }),
52
+ _ts_metadata("design:type", Object)
53
+ ], EmailTemplate.prototype, "description", void 0);
54
+ _ts_decorate([
55
+ Column({
56
+ type: 'varchar',
57
+ length: 500,
58
+ nullable: false
59
+ }),
60
+ _ts_metadata("design:type", String)
61
+ ], EmailTemplate.prototype, "subject", void 0);
62
+ _ts_decorate([
63
+ Column({
64
+ type: 'json',
65
+ nullable: false
66
+ }),
67
+ _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
68
+ ], EmailTemplate.prototype, "schema", void 0);
69
+ _ts_decorate([
70
+ Column({
71
+ type: 'text',
72
+ nullable: false,
73
+ name: 'html_content'
74
+ }),
75
+ _ts_metadata("design:type", String)
76
+ ], EmailTemplate.prototype, "htmlContent", void 0);
77
+ _ts_decorate([
78
+ Column({
79
+ type: 'text',
80
+ nullable: true,
81
+ name: 'text_content'
82
+ }),
83
+ _ts_metadata("design:type", Object)
84
+ ], EmailTemplate.prototype, "textContent", void 0);
85
+ _ts_decorate([
86
+ Column({
87
+ type: 'int',
88
+ nullable: false,
89
+ default: 1,
90
+ name: 'schema_version'
91
+ }),
92
+ _ts_metadata("design:type", Number)
93
+ ], EmailTemplate.prototype, "schemaVersion", void 0);
94
+ _ts_decorate([
95
+ Column({
96
+ type: 'boolean',
97
+ default: true,
98
+ name: 'is_active'
99
+ }),
100
+ _ts_metadata("design:type", Boolean)
101
+ ], EmailTemplate.prototype, "isActive", void 0);
102
+ _ts_decorate([
103
+ Column({
104
+ type: 'boolean',
105
+ default: true,
106
+ name: 'is_html'
107
+ }),
108
+ _ts_metadata("design:type", Boolean)
109
+ ], EmailTemplate.prototype, "isHtml", void 0);
110
+ _ts_decorate([
111
+ Column('simple-json', {
112
+ nullable: true
113
+ }),
114
+ _ts_metadata("design:type", Object)
115
+ ], EmailTemplate.prototype, "metadata", void 0);
11
116
  EmailTemplate = _ts_decorate([
12
117
  Entity({
13
118
  name: 'email_template'
14
- })
119
+ }),
120
+ Index([
121
+ 'name'
122
+ ]),
123
+ Index([
124
+ 'slug'
125
+ ], {
126
+ unique: true
127
+ }),
128
+ Index([
129
+ 'isActive'
130
+ ])
15
131
  ], EmailTemplate);
@@ -1,20 +1,26 @@
1
- export * from './email-config-base.entity';
1
+ // Entities without company feature
2
2
  export * from './email-config.entity';
3
- export * from './email-config-with-company.entity';
4
- export * from './email-template-base.entity';
5
3
  export * from './email-template.entity';
4
+ // Entities with company feature
5
+ export * from './email-config-with-company.entity';
6
6
  export * from './email-template-with-company.entity';
7
- /**
8
- * Get email entities based on configuration
9
- */ export function getEmailEntitiesByConfig(enableCompanyFeature) {
10
- if (enableCompanyFeature) {
11
- return [
12
- require('./email-config-with-company.entity').EmailConfigWithCompany,
13
- require('./email-template-with-company.entity').EmailTemplateWithCompany
14
- ];
15
- }
16
- return [
17
- require('./email-config.entity').EmailConfig,
18
- require('./email-template.entity').EmailTemplate
19
- ];
7
+ import { EmailConfig } from './email-config.entity';
8
+ import { EmailTemplate } from './email-template.entity';
9
+ import { EmailConfigWithCompany } from './email-config-with-company.entity';
10
+ import { EmailTemplateWithCompany } from './email-template-with-company.entity';
11
+ // Core entities (no company feature)
12
+ export const EmailCoreEntities = [
13
+ EmailConfig,
14
+ EmailTemplate
15
+ ];
16
+ // Company-specific entities
17
+ export const EmailCompanyEntities = [
18
+ EmailConfigWithCompany,
19
+ EmailTemplateWithCompany
20
+ ];
21
+ export function getEmailEntitiesByConfig(enableCompanyFeature) {
22
+ return enableCompanyFeature ? EmailCompanyEntities : EmailCoreEntities;
20
23
  }
24
+ // Base type aliases for backwards compatibility with services
25
+ export { EmailConfig as EmailConfigBase } from './email-config.entity';
26
+ export { EmailTemplate as EmailTemplateBase } from './email-template.entity';
package/fesm/index.js CHANGED
@@ -8,3 +8,4 @@ export * from './dtos';
8
8
  export * from './enums';
9
9
  export * from './interfaces';
10
10
  export * from './providers';
11
+ export * from './utils';
@@ -1,3 +1 @@
1
- /**
2
- * Mailgun provider configuration
3
- */ export { };
1
+ export { };
@@ -1,3 +1 @@
1
- /**
2
- * Async options for EmailModule registration
3
- */ export { };
1
+ export { };
@@ -1,5 +1 @@
1
- /**
2
- * Email provider configuration
3
- */ /**
4
- * Email provider interface - contract for all email providers
5
- */ export { };
1
+ export { };
@@ -1,3 +1 @@
1
- /**
2
- * Full email schema structure
3
- */ export { };
1
+ export { };
@@ -6,27 +6,31 @@ function _ts_decorate(decorators, target, key, desc) {
6
6
  }
7
7
  import { CacheModule, UtilsModule } from '@flusys/nestjs-shared/modules';
8
8
  import { Logger, Module } from '@nestjs/common';
9
- import { EmailConfigService } from '../config';
10
9
  import { EMAIL_MODULE_OPTIONS } from '../config/email.constants';
11
- import { EmailProviderTypeEnum } from '../enums';
12
- import { EmailFactoryService, EmailProviderRegistry, SmtpProvider, SendGridProvider, MailgunProvider } from '../providers';
13
- import { EmailDataSourceProvider, EmailProviderConfigService, EmailSendService, EmailTemplateService } from '../services';
14
10
  import { EmailConfigController, EmailSendController, EmailTemplateController } from '../controllers';
15
- // Auto-register built-in email providers
11
+ import { EmailProviderTypeEnum } from '../enums';
12
+ import { EmailFactoryService, EmailProviderRegistry, MailgunProvider, SendGridProvider, SmtpProvider } from '../providers';
13
+ import { EmailConfigService, EmailDataSourceProvider, EmailProviderConfigService, EmailSendService, EmailTemplateService } from '../services';
16
14
  const logger = new Logger('EmailModule');
17
- // Register all providers (they use dynamic imports internally)
15
+ const CONTROLLERS = [
16
+ EmailConfigController,
17
+ EmailTemplateController,
18
+ EmailSendController
19
+ ];
20
+ const EXPORTED_SERVICES = [
21
+ EmailConfigService,
22
+ EmailDataSourceProvider,
23
+ EmailProviderConfigService,
24
+ EmailTemplateService,
25
+ EmailSendService,
26
+ EmailFactoryService
27
+ ];
18
28
  EmailProviderRegistry.register(EmailProviderTypeEnum.SMTP, SmtpProvider);
19
- logger.log('Registered SmtpProvider');
20
29
  EmailProviderRegistry.register(EmailProviderTypeEnum.SENDGRID, SendGridProvider);
21
- logger.log('Registered SendGridProvider');
22
30
  EmailProviderRegistry.register(EmailProviderTypeEnum.MAILGUN, MailgunProvider);
23
- logger.log('Registered MailgunProvider');
31
+ logger.log('Registered built-in email providers: SMTP, SendGrid, Mailgun');
24
32
  export class EmailModule {
25
- /**
26
- * Register EmailModule synchronously
27
- */ static forRoot(options) {
28
- const controllers = this.getControllers(options);
29
- const providers = this.getProviders(options);
33
+ static forRoot(options) {
30
34
  return {
31
35
  module: EmailModule,
32
36
  global: options.global ?? false,
@@ -34,23 +38,12 @@ export class EmailModule {
34
38
  CacheModule,
35
39
  UtilsModule
36
40
  ],
37
- controllers: options.includeController !== false ? controllers : [],
38
- providers,
39
- exports: [
40
- EmailConfigService,
41
- EmailDataSourceProvider,
42
- EmailProviderConfigService,
43
- EmailTemplateService,
44
- EmailSendService,
45
- EmailFactoryService
46
- ]
41
+ controllers: options.includeController !== false ? CONTROLLERS : [],
42
+ providers: this.buildProviders(options),
43
+ exports: EXPORTED_SERVICES
47
44
  };
48
45
  }
49
- /**
50
- * Register EmailModule asynchronously
51
- */ static forRootAsync(options) {
52
- const controllers = this.getControllers(options);
53
- const asyncProviders = this.createAsyncProviders(options);
46
+ static forRootAsync(options) {
54
47
  return {
55
48
  module: EmailModule,
56
49
  global: options.global ?? false,
@@ -59,43 +52,19 @@ export class EmailModule {
59
52
  CacheModule,
60
53
  UtilsModule
61
54
  ],
62
- controllers: options.includeController !== false ? controllers : [],
55
+ controllers: options.includeController !== false ? CONTROLLERS : [],
63
56
  providers: [
64
- ...asyncProviders,
65
- ...this.getProviders(options, false)
57
+ ...this.createAsyncProviders(options),
58
+ ...this.buildProviders()
66
59
  ],
67
- exports: [
68
- EmailConfigService,
69
- EmailDataSourceProvider,
70
- EmailProviderConfigService,
71
- EmailTemplateService,
72
- EmailSendService,
73
- EmailFactoryService
74
- ]
60
+ exports: EXPORTED_SERVICES
75
61
  };
76
62
  }
77
- // ==================== Private Helper Methods ====================
78
- /**
79
- * Get controllers
80
- */ static getControllers(_options) {
81
- return [
82
- EmailConfigController,
83
- EmailTemplateController,
84
- EmailSendController
85
- ];
86
- }
87
- /**
88
- * Get providers
89
- */ static getProviders(options, includeOptionsProvider = true) {
63
+ static buildProviders(options) {
90
64
  const providers = [
91
- EmailConfigService,
92
- EmailDataSourceProvider,
93
- EmailProviderConfigService,
94
- EmailTemplateService,
95
- EmailSendService,
96
- EmailFactoryService
65
+ ...EXPORTED_SERVICES
97
66
  ];
98
- if (includeOptionsProvider) {
67
+ if (options) {
99
68
  providers.unshift({
100
69
  provide: EMAIL_MODULE_OPTIONS,
101
70
  useValue: options
@@ -103,63 +72,40 @@ export class EmailModule {
103
72
  }
104
73
  return providers;
105
74
  }
106
- /**
107
- * Create async providers for forRootAsync
108
- */ static createAsyncProviders(options) {
75
+ static createAsyncProviders(options) {
109
76
  if (options.useFactory) {
110
77
  return [
111
78
  {
112
79
  provide: EMAIL_MODULE_OPTIONS,
113
- useFactory: async (...args)=>{
114
- const config = await options.useFactory(...args);
115
- return {
80
+ useFactory: async (...args)=>({
116
81
  ...options,
117
- config
118
- };
119
- },
82
+ config: await options.useFactory(...args)
83
+ }),
120
84
  inject: options.inject || []
121
85
  }
122
86
  ];
123
87
  }
88
+ const factoryClass = options.useClass || options.useExisting;
89
+ if (!factoryClass) return [];
90
+ const providers = [
91
+ {
92
+ provide: EMAIL_MODULE_OPTIONS,
93
+ useFactory: async (factory)=>({
94
+ ...options,
95
+ config: await factory.createEmailOptions()
96
+ }),
97
+ inject: [
98
+ factoryClass
99
+ ]
100
+ }
101
+ ];
124
102
  if (options.useClass) {
125
- return [
126
- {
127
- provide: EMAIL_MODULE_OPTIONS,
128
- useFactory: async (optionsFactory)=>{
129
- const config = await optionsFactory.createEmailOptions();
130
- return {
131
- ...options,
132
- config
133
- };
134
- },
135
- inject: [
136
- options.useClass
137
- ]
138
- },
139
- {
140
- provide: options.useClass,
141
- useClass: options.useClass
142
- }
143
- ];
144
- }
145
- if (options.useExisting) {
146
- return [
147
- {
148
- provide: EMAIL_MODULE_OPTIONS,
149
- useFactory: async (optionsFactory)=>{
150
- const config = await optionsFactory.createEmailOptions();
151
- return {
152
- ...options,
153
- config
154
- };
155
- },
156
- inject: [
157
- options.useExisting
158
- ]
159
- }
160
- ];
103
+ providers.push({
104
+ provide: options.useClass,
105
+ useClass: options.useClass
106
+ });
161
107
  }
162
- return [];
108
+ return providers;
163
109
  }
164
110
  }
165
111
  EmailModule = _ts_decorate([