@impruthvi/nodemail 0.3.0 → 0.4.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/CHANGELOG.md +63 -0
- package/README.md +145 -7
- package/dist/core/MailFacade.d.ts +1 -0
- package/dist/core/MailFacade.d.ts.map +1 -1
- package/dist/core/MailFacade.js +4 -0
- package/dist/core/MailFacade.js.map +1 -1
- package/dist/core/MailManager.d.ts +11 -2
- package/dist/core/MailManager.d.ts.map +1 -1
- package/dist/core/MailManager.js +79 -1
- package/dist/core/MailManager.js.map +1 -1
- package/dist/core/Mailable.d.ts +12 -2
- package/dist/core/Mailable.d.ts.map +1 -1
- package/dist/core/Mailable.js +44 -2
- package/dist/core/Mailable.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/templates/EjsEngine.d.ts +14 -0
- package/dist/templates/EjsEngine.d.ts.map +1 -0
- package/dist/templates/EjsEngine.js +59 -0
- package/dist/templates/EjsEngine.js.map +1 -0
- package/dist/templates/HandlebarsEngine.d.ts +16 -0
- package/dist/templates/HandlebarsEngine.d.ts.map +1 -0
- package/dist/templates/HandlebarsEngine.js +65 -0
- package/dist/templates/HandlebarsEngine.js.map +1 -0
- package/dist/templates/PugEngine.d.ts +15 -0
- package/dist/templates/PugEngine.d.ts.map +1 -0
- package/dist/templates/PugEngine.js +70 -0
- package/dist/templates/PugEngine.js.map +1 -0
- package/dist/templates/TemplateEngine.d.ts +12 -0
- package/dist/templates/TemplateEngine.d.ts.map +1 -0
- package/dist/templates/TemplateEngine.js +3 -0
- package/dist/templates/TemplateEngine.js.map +1 -0
- package/dist/templates/index.d.ts +5 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +10 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -1
- package/examples/mailgun.ts +1 -1
- package/examples/postmark.ts +1 -1
- package/examples/resend.ts +1 -1
- package/examples/views/invoice.ejs +26 -0
- package/examples/views/notification.pug +14 -0
- package/examples/views/welcome.hbs +15 -0
- package/examples/with-ejs.ts +63 -0
- package/examples/with-handlebars.ts +60 -0
- package/examples/with-mailable-templates.ts +146 -0
- package/examples/with-pug.ts +66 -0
- package/package.json +16 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,69 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0] - 2025-12-07
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Template Engine Support** (Phase 4 complete)
|
|
14
|
+
- HandlebarsEngine with dynamic loading and caching
|
|
15
|
+
- EjsEngine with dynamic loading and caching
|
|
16
|
+
- PugEngine with dynamic loading and caching
|
|
17
|
+
- TemplateEngine interface for custom engines
|
|
18
|
+
- **Complete Fluent API** - All email options now chainable
|
|
19
|
+
- Added `cc()` method for carbon copy recipients
|
|
20
|
+
- Added `bcc()` method for blind carbon copy recipients
|
|
21
|
+
- Added `replyTo()` method for reply-to addresses
|
|
22
|
+
- Added `attachments()` method for file attachments
|
|
23
|
+
- Added `headers()` method for custom headers
|
|
24
|
+
- **Laravel-like Mailable Pattern** - Elegant email class API
|
|
25
|
+
- `Mailable.to()` method for setting recipients
|
|
26
|
+
- `Mailable.send()` method for direct sending
|
|
27
|
+
- `Mail.to().send(mailable)` Laravel-style syntax (recommended)
|
|
28
|
+
- `mailable.to().send()` alternative direct syntax
|
|
29
|
+
- Protected methods: `cc()`, `bcc()`, `replyTo()`, `attach()`, `withHeaders()`
|
|
30
|
+
- Enhanced MailManager with automatic template rendering
|
|
31
|
+
- Added template configuration to MailConfig
|
|
32
|
+
- Support for 'handlebars', 'ejs', 'pug' engines
|
|
33
|
+
- Custom engine instance support
|
|
34
|
+
- Configurable views path, extension, and caching
|
|
35
|
+
- Template engine tests (34 new tests)
|
|
36
|
+
- HandlebarsEngine.test.ts (11 tests)
|
|
37
|
+
- EjsEngine.test.ts (11 tests)
|
|
38
|
+
- PugEngine.test.ts (12 tests)
|
|
39
|
+
- Mailable tests (10 new tests)
|
|
40
|
+
- Comprehensive Mailable class testing
|
|
41
|
+
- Template support validation
|
|
42
|
+
- Laravel-style API testing
|
|
43
|
+
- Template examples
|
|
44
|
+
- examples/with-handlebars.ts
|
|
45
|
+
- examples/with-ejs.ts
|
|
46
|
+
- examples/with-pug.ts
|
|
47
|
+
- examples/with-mailable-templates.ts (refactored)
|
|
48
|
+
- examples/views/ directory with sample templates
|
|
49
|
+
- Test utilities
|
|
50
|
+
- test-smtp-ethereal.ts for instant SMTP testing
|
|
51
|
+
- test-templates.ts for template engine validation
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
- **BREAKING**: Refactored Mailable class to Laravel-like pattern
|
|
55
|
+
- Removed `getMailOptions()` method
|
|
56
|
+
- Now uses `build()` method with fluent API
|
|
57
|
+
- Direct sending capability added
|
|
58
|
+
- Updated package.json to version 0.4.0
|
|
59
|
+
- Added handlebars, ejs, pug to peerDependencies (all optional)
|
|
60
|
+
- Enhanced MessageBuilder.send() to accept Mailable instances
|
|
61
|
+
- Updated test suite: 122 total tests (17 new tests added)
|
|
62
|
+
- Code coverage: 85%+ overall
|
|
63
|
+
- Template engines coverage: 93.5%
|
|
64
|
+
- ESLint configuration for all directories (src, examples, tests)
|
|
65
|
+
|
|
66
|
+
### Fixed
|
|
67
|
+
- Type safety for template engine configuration
|
|
68
|
+
- Promise handling in template rendering
|
|
69
|
+
- ESLint warnings for template engine dynamic loading
|
|
70
|
+
- ESLint parsing errors for examples directory
|
|
71
|
+
- Floating promise warnings in example files
|
|
72
|
+
|
|
10
73
|
## [0.3.0] - 2025-11-25
|
|
11
74
|
|
|
12
75
|
### Added
|
package/README.md
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@impruthvi/nodemail)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
[](https://www.typescriptlang.org/)
|
|
6
|
-
[](https://github.com/impruthvi/nodemail)
|
|
7
|
+
[](https://github.com/impruthvi/nodemail)
|
|
8
8
|
|
|
9
9
|
> 🚧 **Work in Progress** - A unified mail service for Node.js/TypeScript inspired by Laravel's elegant Mail system.
|
|
10
10
|
|
|
@@ -22,21 +22,21 @@ Inspired by [Laravel's Mail system](https://laravel.com/docs/mail).
|
|
|
22
22
|
|
|
23
23
|
## ✨ Features
|
|
24
24
|
|
|
25
|
-
### ✅ Available Now
|
|
25
|
+
### ✅ Available Now (v0.4.0)
|
|
26
26
|
- 🎯 **Multiple Providers** - SMTP (Nodemailer), SendGrid, AWS SES, Mailgun, Resend, Postmark
|
|
27
|
+
- 🎨 **Template Engines** - Handlebars, EJS, Pug support with dynamic loading
|
|
28
|
+
- 📝 **Mailable Classes** - Reusable email definitions with template support
|
|
27
29
|
- 🪶 **Lightweight** - Only ~25MB with SMTP, install additional providers as needed
|
|
28
30
|
- 🔒 **Type-Safe** - Full TypeScript support with strict typing
|
|
29
|
-
-
|
|
30
|
-
- ⚡ **Dynamic Loading** - Providers loaded only when installed (peerDependencies)
|
|
31
|
+
- ✨ **Complete Fluent API** - Chain to(), subject(), html(), template(), data(), cc(), bcc(), attachments(), headers()
|
|
32
|
+
- ⚡ **Dynamic Loading** - Providers and templates loaded only when installed (peerDependencies)
|
|
31
33
|
- 🛡️ **Error Handling** - Graceful degradation with helpful error messages
|
|
32
34
|
|
|
33
35
|
### 🚧 Coming Soon
|
|
34
|
-
- 📝 **Mailable Classes** - Enhanced reusable email definitions
|
|
35
36
|
- 🔔 **Notifications** - Multi-channel notification system
|
|
36
37
|
- 📋 **Markdown Mail** - Beautiful emails from markdown
|
|
37
38
|
- 🧪 **Testing Utilities** - Mail::fake() for testing
|
|
38
39
|
- 📦 **Queue Support** - Background email sending (Bull/BullMQ)
|
|
39
|
-
- 🎨 **Template Engines** - Handlebars, EJS, Pug
|
|
40
40
|
- 🌍 **i18n Support** - Multi-language emails
|
|
41
41
|
- 🚀 **More Providers** - Mailtrap and others
|
|
42
42
|
|
|
@@ -73,6 +73,20 @@ npm install resend
|
|
|
73
73
|
npm install postmark
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
+
### Adding Template Engines (Optional)
|
|
77
|
+
|
|
78
|
+
**Currently Supported:**
|
|
79
|
+
```bash
|
|
80
|
+
# Handlebars (✅ Implemented)
|
|
81
|
+
npm install handlebars
|
|
82
|
+
|
|
83
|
+
# EJS (✅ Implemented)
|
|
84
|
+
npm install ejs
|
|
85
|
+
|
|
86
|
+
# Pug (✅ Implemented)
|
|
87
|
+
npm install pug
|
|
88
|
+
```
|
|
89
|
+
|
|
76
90
|
## 🚀 Quick Start
|
|
77
91
|
|
|
78
92
|
### SMTP (Nodemailer)
|
|
@@ -200,6 +214,130 @@ Mail.configure({
|
|
|
200
214
|
});
|
|
201
215
|
```
|
|
202
216
|
|
|
217
|
+
## 🎨 Template Engines
|
|
218
|
+
|
|
219
|
+
### Using Handlebars
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
// npm install handlebars
|
|
223
|
+
import { Mail } from '@impruthvi/nodemail';
|
|
224
|
+
|
|
225
|
+
Mail.configure({
|
|
226
|
+
default: 'smtp',
|
|
227
|
+
from: { address: 'noreply@example.com', name: 'My App' },
|
|
228
|
+
mailers: { /* your mailer config */ },
|
|
229
|
+
templates: {
|
|
230
|
+
engine: 'handlebars',
|
|
231
|
+
viewsPath: './views/emails',
|
|
232
|
+
extension: '.hbs',
|
|
233
|
+
cache: true,
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
// Send with template
|
|
238
|
+
await Mail.to('user@example.com')
|
|
239
|
+
.subject('Welcome!')
|
|
240
|
+
.template('welcome')
|
|
241
|
+
.data({ name: 'John', appName: 'My App' })
|
|
242
|
+
.send();
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**Template file** (`views/emails/welcome.hbs`):
|
|
246
|
+
```handlebars
|
|
247
|
+
<h1>Welcome, {{name}}!</h1>
|
|
248
|
+
<p>Thank you for joining {{appName}}.</p>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Using EJS
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
// npm install ejs
|
|
255
|
+
Mail.configure({
|
|
256
|
+
templates: {
|
|
257
|
+
engine: 'ejs',
|
|
258
|
+
viewsPath: './views/emails',
|
|
259
|
+
extension: '.ejs',
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
await Mail.to('customer@example.com')
|
|
264
|
+
.subject('Your Invoice')
|
|
265
|
+
.template('invoice')
|
|
266
|
+
.data({ items: [...], total: 99.99 })
|
|
267
|
+
.send();
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### Using Pug
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
// npm install pug
|
|
274
|
+
Mail.configure({
|
|
275
|
+
templates: {
|
|
276
|
+
engine: 'pug',
|
|
277
|
+
viewsPath: './views/emails',
|
|
278
|
+
cache: true,
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
await Mail.to('user@example.com')
|
|
283
|
+
.subject('Notification')
|
|
284
|
+
.template('notification')
|
|
285
|
+
.data({ title: 'Update', message: 'New features!' })
|
|
286
|
+
.send();
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## 📨 Complete Fluent API
|
|
290
|
+
|
|
291
|
+
```typescript
|
|
292
|
+
await Mail.to('user@example.com')
|
|
293
|
+
.subject('Complete Example')
|
|
294
|
+
.html('<h1>Hello!</h1>')
|
|
295
|
+
.text('Hello!')
|
|
296
|
+
.from('custom@example.com')
|
|
297
|
+
.cc(['manager@example.com', 'team@example.com'])
|
|
298
|
+
.bcc('archive@example.com')
|
|
299
|
+
.replyTo('support@example.com')
|
|
300
|
+
.attachments([
|
|
301
|
+
{ filename: 'report.pdf', path: './files/report.pdf' },
|
|
302
|
+
{ filename: 'image.png', content: buffer },
|
|
303
|
+
])
|
|
304
|
+
.headers({ 'X-Custom-Header': 'value' })
|
|
305
|
+
.send();
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## 📝 Mailable Classes
|
|
309
|
+
|
|
310
|
+
Create reusable email classes with Laravel-like syntax:
|
|
311
|
+
|
|
312
|
+
```typescript
|
|
313
|
+
import { Mailable } from '@impruthvi/nodemail';
|
|
314
|
+
|
|
315
|
+
class WelcomeEmail extends Mailable {
|
|
316
|
+
constructor(
|
|
317
|
+
private user: { name: string; email: string },
|
|
318
|
+
private appName: string
|
|
319
|
+
) {
|
|
320
|
+
super();
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
build() {
|
|
324
|
+
return this
|
|
325
|
+
.subject(`Welcome to ${this.appName}!`)
|
|
326
|
+
.view('welcome', {
|
|
327
|
+
name: this.user.name,
|
|
328
|
+
email: this.user.email,
|
|
329
|
+
appName: this.appName,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Method 1: Laravel-style (recommended)
|
|
335
|
+
await Mail.to('user@example.com').send(new WelcomeEmail(user, 'My App'));
|
|
336
|
+
|
|
337
|
+
// Method 2: Direct sending
|
|
338
|
+
await new WelcomeEmail(user, 'My App').to('user@example.com').send();
|
|
339
|
+
```
|
|
340
|
+
|
|
203
341
|
**Advanced usage (coming soon):**
|
|
204
342
|
|
|
205
343
|
```typescript
|
|
@@ -6,6 +6,7 @@ declare class MailFacade {
|
|
|
6
6
|
private static getInstance;
|
|
7
7
|
static to(address: string | string[]): import("./MailManager").MessageBuilder;
|
|
8
8
|
static mailer(name: string): MailManager;
|
|
9
|
+
static send(mailable: import('./Mailable').Mailable): Promise<import('../types').MailResponse>;
|
|
9
10
|
static fake(): void;
|
|
10
11
|
static assertSent(): void;
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailFacade.d.ts","sourceRoot":"","sources":["../../src/core/MailFacade.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,cAAM,UAAU;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAKnD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAO1C,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAOpC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"MailFacade.d.ts","sourceRoot":"","sources":["../../src/core/MailFacade.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,cAAM,UAAU;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAKnD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAO1C,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAOpC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM;WAOb,IAAI,CAAC,QAAQ,EAAE,OAAO,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,UAAU,EAAE,YAAY,CAAC;IAQpG,MAAM,CAAC,IAAI,IAAI,IAAI;IAQnB,MAAM,CAAC,UAAU,IAAI,IAAI;CAI1B;AAED,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,CAAC"}
|
package/dist/core/MailFacade.js
CHANGED
|
@@ -19,6 +19,10 @@ class MailFacade {
|
|
|
19
19
|
static mailer(name) {
|
|
20
20
|
return this.getInstance().mailer(name);
|
|
21
21
|
}
|
|
22
|
+
static async send(mailable) {
|
|
23
|
+
mailable.setMailManager(this.getInstance());
|
|
24
|
+
return mailable.send();
|
|
25
|
+
}
|
|
22
26
|
static fake() {
|
|
23
27
|
throw new Error('Mail.fake() not yet implemented');
|
|
24
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailFacade.js","sourceRoot":"","sources":["../../src/core/MailFacade.ts"],"names":[],"mappings":";;;AAKA,+CAA4C;AAG5C,MAAM,UAAU;IACN,MAAM,CAAC,QAAQ,GAAuB,IAAI,CAAC;IAKnD,MAAM,CAAC,SAAS,CAAC,MAAkB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAKO,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAKD,MAAM,CAAC,EAAE,CAAC,OAA0B;QAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAKD,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAKD,MAAM,CAAC,IAAI;QAET,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAKD,MAAM,CAAC,UAAU;QAEf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;;AAGoB,0BAAI"}
|
|
1
|
+
{"version":3,"file":"MailFacade.js","sourceRoot":"","sources":["../../src/core/MailFacade.ts"],"names":[],"mappings":";;;AAKA,+CAA4C;AAG5C,MAAM,UAAU;IACN,MAAM,CAAC,QAAQ,GAAuB,IAAI,CAAC;IAKnD,MAAM,CAAC,SAAS,CAAC,MAAkB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAKO,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAKD,MAAM,CAAC,EAAE,CAAC,OAA0B;QAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAKD,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAKD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAuC;QACvD,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAKD,MAAM,CAAC,IAAI;QAET,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAKD,MAAM,CAAC,UAAU;QAEf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;;AAGoB,0BAAI"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type { MailConfig, MailOptions, MailResponse } from '../types';
|
|
1
|
+
import type { MailConfig, MailOptions, MailResponse, Attachment } from '../types';
|
|
2
2
|
export declare class MailManager {
|
|
3
3
|
private config;
|
|
4
4
|
private providers;
|
|
5
|
+
private templateEngine?;
|
|
5
6
|
constructor(config: MailConfig);
|
|
7
|
+
private initializeTemplateEngine;
|
|
6
8
|
private createProvider;
|
|
7
9
|
private getProvider;
|
|
8
10
|
to(address: string | string[]): MessageBuilder;
|
|
@@ -18,6 +20,13 @@ export declare class MessageBuilder {
|
|
|
18
20
|
html(html: string): this;
|
|
19
21
|
text(text: string): this;
|
|
20
22
|
from(from: string): this;
|
|
21
|
-
|
|
23
|
+
cc(cc: string | string[]): this;
|
|
24
|
+
bcc(bcc: string | string[]): this;
|
|
25
|
+
replyTo(replyTo: string): this;
|
|
26
|
+
attachments(attachments: Attachment[]): this;
|
|
27
|
+
headers(headers: Record<string, string>): this;
|
|
28
|
+
template(template: string): this;
|
|
29
|
+
data(data: Record<string, unknown>): this;
|
|
30
|
+
send(mailable?: import('./Mailable').Mailable): Promise<MailResponse>;
|
|
22
31
|
}
|
|
23
32
|
//# sourceMappingURL=MailManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailManager.d.ts","sourceRoot":"","sources":["../../src/core/MailManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEX,YAAY,
|
|
1
|
+
{"version":3,"file":"MailManager.d.ts","sourceRoot":"","sources":["../../src/core/MailManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEX,YAAY,EAEZ,UAAU,EACX,MAAM,UAAU,CAAC;AAYlB,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,MAAM,EAAE,UAAU;IAS9B,OAAO,CAAC,wBAAwB;IA0ChC,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,WAAW;IAyBnB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAO7B,MAAM,CAAC,IAAI,EAAE,MAAM;IAab,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBvD,gBAAgB,IAAI,MAAM;CAG3B;AAKD,qBAAa,cAAc;IAIvB,OAAO,CAAC,OAAO;IAHV,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;gBAGhC,OAAO,EAAE,WAAW,EAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKvB,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAK1B,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE;IAKrC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAKvC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAKzB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK5B,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;CAoB5E"}
|
package/dist/core/MailManager.js
CHANGED
|
@@ -7,11 +7,49 @@ const SesProvider_1 = require("../providers/SesProvider");
|
|
|
7
7
|
const MailgunProvider_1 = require("../providers/MailgunProvider");
|
|
8
8
|
const ResendProvider_1 = require("../providers/ResendProvider");
|
|
9
9
|
const PostmarkProvider_1 = require("../providers/PostmarkProvider");
|
|
10
|
+
const HandlebarsEngine_1 = require("../templates/HandlebarsEngine");
|
|
11
|
+
const EjsEngine_1 = require("../templates/EjsEngine");
|
|
12
|
+
const PugEngine_1 = require("../templates/PugEngine");
|
|
10
13
|
class MailManager {
|
|
11
14
|
config;
|
|
12
15
|
providers = new Map();
|
|
16
|
+
templateEngine;
|
|
13
17
|
constructor(config) {
|
|
14
18
|
this.config = config;
|
|
19
|
+
this.initializeTemplateEngine();
|
|
20
|
+
}
|
|
21
|
+
initializeTemplateEngine() {
|
|
22
|
+
if (!this.config.templates) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const { engine, viewsPath, extension, cache, options } = this.config.templates;
|
|
26
|
+
if (!engine) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const engineOptions = {
|
|
30
|
+
...(viewsPath && { viewsPath }),
|
|
31
|
+
...(extension && { extension }),
|
|
32
|
+
...(cache !== undefined && { cache }),
|
|
33
|
+
...(options && { options }),
|
|
34
|
+
};
|
|
35
|
+
if (typeof engine === 'string') {
|
|
36
|
+
switch (engine) {
|
|
37
|
+
case 'handlebars':
|
|
38
|
+
this.templateEngine = new HandlebarsEngine_1.HandlebarsEngine(engineOptions);
|
|
39
|
+
break;
|
|
40
|
+
case 'ejs':
|
|
41
|
+
this.templateEngine = new EjsEngine_1.EjsEngine(engineOptions);
|
|
42
|
+
break;
|
|
43
|
+
case 'pug':
|
|
44
|
+
this.templateEngine = new PugEngine_1.PugEngine(engineOptions);
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
throw new Error(`Unsupported template engine: ${engine}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.templateEngine = engine;
|
|
52
|
+
}
|
|
15
53
|
}
|
|
16
54
|
createProvider(mailerConfig) {
|
|
17
55
|
switch (mailerConfig.driver) {
|
|
@@ -58,6 +96,10 @@ class MailManager {
|
|
|
58
96
|
return new MailManager(newConfig);
|
|
59
97
|
}
|
|
60
98
|
async send(options) {
|
|
99
|
+
if (options.template && this.templateEngine) {
|
|
100
|
+
const html = await this.templateEngine.renderFile(options.template, options.data);
|
|
101
|
+
options = { ...options, html };
|
|
102
|
+
}
|
|
61
103
|
const provider = this.getProvider();
|
|
62
104
|
return provider.send(options);
|
|
63
105
|
}
|
|
@@ -89,7 +131,43 @@ class MessageBuilder {
|
|
|
89
131
|
this.options.from = from;
|
|
90
132
|
return this;
|
|
91
133
|
}
|
|
92
|
-
|
|
134
|
+
cc(cc) {
|
|
135
|
+
this.options.cc = cc;
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
bcc(bcc) {
|
|
139
|
+
this.options.bcc = bcc;
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
replyTo(replyTo) {
|
|
143
|
+
this.options.replyTo = replyTo;
|
|
144
|
+
return this;
|
|
145
|
+
}
|
|
146
|
+
attachments(attachments) {
|
|
147
|
+
this.options.attachments = attachments;
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
headers(headers) {
|
|
151
|
+
this.options.headers = headers;
|
|
152
|
+
return this;
|
|
153
|
+
}
|
|
154
|
+
template(template) {
|
|
155
|
+
this.options.template = template;
|
|
156
|
+
return this;
|
|
157
|
+
}
|
|
158
|
+
data(data) {
|
|
159
|
+
this.options.data = data;
|
|
160
|
+
return this;
|
|
161
|
+
}
|
|
162
|
+
async send(mailable) {
|
|
163
|
+
if (mailable) {
|
|
164
|
+
mailable.setMailManager(this.manager);
|
|
165
|
+
const mailOptions = mailable.getMailOptions();
|
|
166
|
+
return this.manager.send({
|
|
167
|
+
...mailOptions,
|
|
168
|
+
to: this.options.to,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
93
171
|
if (!this.options.subject) {
|
|
94
172
|
throw new Error('Email subject is required');
|
|
95
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailManager.js","sourceRoot":"","sources":["../../src/core/MailManager.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"MailManager.js","sourceRoot":"","sources":["../../src/core/MailManager.ts"],"names":[],"mappings":"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"}
|
package/dist/core/Mailable.d.ts
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
import type { MailOptions } from '../types';
|
|
1
|
+
import type { MailOptions, MailResponse } from '../types';
|
|
2
|
+
import type { MailManager } from './MailManager';
|
|
2
3
|
export declare abstract class Mailable {
|
|
3
4
|
protected options: Partial<MailOptions>;
|
|
5
|
+
private recipients;
|
|
6
|
+
private mailManager?;
|
|
4
7
|
abstract build(): this;
|
|
8
|
+
to(recipients: string | string[]): this;
|
|
9
|
+
setMailManager(manager: MailManager): this;
|
|
10
|
+
send(): Promise<MailResponse>;
|
|
5
11
|
protected subject(subject: string): this;
|
|
6
12
|
protected html(html: string): this;
|
|
7
13
|
protected text(text: string): this;
|
|
8
14
|
protected view(template: string, data?: Record<string, unknown>): this;
|
|
9
|
-
protected
|
|
15
|
+
protected cc(cc: string | string[]): this;
|
|
16
|
+
protected bcc(bcc: string | string[]): this;
|
|
17
|
+
protected replyTo(replyTo: string): this;
|
|
18
|
+
protected attach(path: string, filename?: string): this;
|
|
19
|
+
protected withHeaders(headers: Record<string, string>): this;
|
|
10
20
|
getMailOptions(): Partial<MailOptions>;
|
|
11
21
|
}
|
|
12
22
|
//# sourceMappingURL=Mailable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mailable.d.ts","sourceRoot":"","sources":["../../src/core/Mailable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Mailable.d.ts","sourceRoot":"","sources":["../../src/core/Mailable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAC7C,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAc;IAMlC,QAAQ,CAAC,KAAK,IAAI,IAAI;IAKtB,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQvC,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAQpC,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAmBnC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQlC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQlC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWtE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQzC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQ3C,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAcvD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ5D,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;CAIvC"}
|
package/dist/core/Mailable.js
CHANGED
|
@@ -3,6 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Mailable = void 0;
|
|
4
4
|
class Mailable {
|
|
5
5
|
options = {};
|
|
6
|
+
recipients = [];
|
|
7
|
+
mailManager;
|
|
8
|
+
to(recipients) {
|
|
9
|
+
this.recipients = recipients;
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
setMailManager(manager) {
|
|
13
|
+
this.mailManager = manager;
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
async send() {
|
|
17
|
+
if (!this.mailManager) {
|
|
18
|
+
throw new Error('Mail manager not configured. Use Mail.to().send(mailable) or configure mailable with setMailManager()');
|
|
19
|
+
}
|
|
20
|
+
if (!this.recipients || (Array.isArray(this.recipients) && this.recipients.length === 0)) {
|
|
21
|
+
throw new Error('No recipients specified. Use .to() to set recipients.');
|
|
22
|
+
}
|
|
23
|
+
const mailOptions = this.getMailOptions();
|
|
24
|
+
return this.mailManager.send({
|
|
25
|
+
...mailOptions,
|
|
26
|
+
to: this.recipients,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
6
29
|
subject(subject) {
|
|
7
30
|
this.options.subject = subject;
|
|
8
31
|
return this;
|
|
@@ -22,11 +45,30 @@ class Mailable {
|
|
|
22
45
|
}
|
|
23
46
|
return this;
|
|
24
47
|
}
|
|
25
|
-
|
|
48
|
+
cc(cc) {
|
|
49
|
+
this.options.cc = cc;
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
bcc(bcc) {
|
|
53
|
+
this.options.bcc = bcc;
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
replyTo(replyTo) {
|
|
57
|
+
this.options.replyTo = replyTo;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
attach(path, filename) {
|
|
26
61
|
if (!this.options.attachments) {
|
|
27
62
|
this.options.attachments = [];
|
|
28
63
|
}
|
|
29
|
-
this.options.attachments.push({
|
|
64
|
+
this.options.attachments.push({
|
|
65
|
+
filename: filename || path.split('/').pop() || 'attachment',
|
|
66
|
+
path
|
|
67
|
+
});
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
withHeaders(headers) {
|
|
71
|
+
this.options.headers = headers;
|
|
30
72
|
return this;
|
|
31
73
|
}
|
|
32
74
|
getMailOptions() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mailable.js","sourceRoot":"","sources":["../../src/core/Mailable.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Mailable.js","sourceRoot":"","sources":["../../src/core/Mailable.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export { SesProvider } from './providers/SesProvider';
|
|
|
8
8
|
export { MailgunProvider } from './providers/MailgunProvider';
|
|
9
9
|
export { ResendProvider } from './providers/ResendProvider';
|
|
10
10
|
export { PostmarkProvider } from './providers/PostmarkProvider';
|
|
11
|
+
export type { TemplateEngine, TemplateEngineOptions } from './templates';
|
|
12
|
+
export { HandlebarsEngine, EjsEngine, PugEngine } from './templates';
|
|
11
13
|
export * from './types';
|
|
12
|
-
export declare const VERSION = "0.
|
|
14
|
+
export declare const VERSION = "0.4.0";
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,cAAc,SAAS,CAAC;AAGxB,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGrE,cAAc,SAAS,CAAC;AAGxB,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.VERSION = exports.PostmarkProvider = exports.ResendProvider = exports.MailgunProvider = exports.SesProvider = exports.SendGridProvider = exports.SmtpProvider = exports.Message = exports.Mailable = exports.MailManager = exports.Mail = void 0;
|
|
17
|
+
exports.VERSION = exports.PugEngine = exports.EjsEngine = exports.HandlebarsEngine = exports.PostmarkProvider = exports.ResendProvider = exports.MailgunProvider = exports.SesProvider = exports.SendGridProvider = exports.SmtpProvider = exports.Message = exports.Mailable = exports.MailManager = exports.Mail = void 0;
|
|
18
18
|
var MailFacade_1 = require("./core/MailFacade");
|
|
19
19
|
Object.defineProperty(exports, "Mail", { enumerable: true, get: function () { return MailFacade_1.Mail; } });
|
|
20
20
|
var MailManager_1 = require("./core/MailManager");
|
|
@@ -35,6 +35,10 @@ var ResendProvider_1 = require("./providers/ResendProvider");
|
|
|
35
35
|
Object.defineProperty(exports, "ResendProvider", { enumerable: true, get: function () { return ResendProvider_1.ResendProvider; } });
|
|
36
36
|
var PostmarkProvider_1 = require("./providers/PostmarkProvider");
|
|
37
37
|
Object.defineProperty(exports, "PostmarkProvider", { enumerable: true, get: function () { return PostmarkProvider_1.PostmarkProvider; } });
|
|
38
|
+
var templates_1 = require("./templates");
|
|
39
|
+
Object.defineProperty(exports, "HandlebarsEngine", { enumerable: true, get: function () { return templates_1.HandlebarsEngine; } });
|
|
40
|
+
Object.defineProperty(exports, "EjsEngine", { enumerable: true, get: function () { return templates_1.EjsEngine; } });
|
|
41
|
+
Object.defineProperty(exports, "PugEngine", { enumerable: true, get: function () { return templates_1.PugEngine; } });
|
|
38
42
|
__exportStar(require("./types"), exports);
|
|
39
|
-
exports.VERSION = '0.
|
|
43
|
+
exports.VERSION = '0.4.0';
|
|
40
44
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAKA,gDAAyC;AAAhC,kGAAA,IAAI,OAAA;AACb,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AACpB,4CAA2C;AAAlC,oGAAA,QAAQ,OAAA;AACjB,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAGhB,yDAAwD;AAA/C,4GAAA,YAAY,OAAA;AACrB,iEAAgE;AAAvD,oHAAA,gBAAgB,OAAA;AACzB,uDAAsD;AAA7C,0GAAA,WAAW,OAAA;AACpB,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AACxB,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AACvB,iEAAgE;AAAvD,oHAAA,gBAAgB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAKA,gDAAyC;AAAhC,kGAAA,IAAI,OAAA;AACb,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AACpB,4CAA2C;AAAlC,oGAAA,QAAQ,OAAA;AACjB,0CAAyC;AAAhC,kGAAA,OAAO,OAAA;AAGhB,yDAAwD;AAA/C,4GAAA,YAAY,OAAA;AACrB,iEAAgE;AAAvD,oHAAA,gBAAgB,OAAA;AACzB,uDAAsD;AAA7C,0GAAA,WAAW,OAAA;AACpB,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AACxB,6DAA4D;AAAnD,gHAAA,cAAc,OAAA;AACvB,iEAAgE;AAAvD,oHAAA,gBAAgB,OAAA;AAIzB,yCAAqE;AAA5D,6GAAA,gBAAgB,OAAA;AAAE,sGAAA,SAAS,OAAA;AAAE,sGAAA,SAAS,OAAA;AAG/C,0CAAwB;AAGX,QAAA,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TemplateEngine, TemplateEngineOptions } from './TemplateEngine';
|
|
2
|
+
export declare class EjsEngine implements TemplateEngine {
|
|
3
|
+
private ejs;
|
|
4
|
+
private cache;
|
|
5
|
+
private options;
|
|
6
|
+
constructor(options?: TemplateEngineOptions);
|
|
7
|
+
private loadEjs;
|
|
8
|
+
render(template: string, data?: Record<string, unknown>): Promise<string>;
|
|
9
|
+
renderFile(filePath: string, data?: Record<string, unknown>): Promise<string>;
|
|
10
|
+
compile(template: string): (data?: Record<string, unknown>) => string;
|
|
11
|
+
clearCache(): void;
|
|
12
|
+
private resolveTemplatePath;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=EjsEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EjsEngine.d.ts","sourceRoot":"","sources":["../../src/templates/EjsEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AASzE,qBAAa,SAAU,YAAW,cAAc;IAC9C,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,OAAO,CAAwB;gBAE3B,OAAO,GAAE,qBAA0B;IAW/C,OAAO,CAAC,OAAO;IAWf,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAOnE,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC;IA2BlB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM;IAOrE,UAAU,IAAI,IAAI;IAOlB,OAAO,CAAC,mBAAmB;CAS5B"}
|