@typetron/framework 0.3.18 → 0.4.0-rc1
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/Cache/Stores/DatabaseStore.js +0 -104
- package/Cache/Stores/DatabaseStore.js.map +1 -1
- package/Cache/Stores/FileStore.js +1 -1
- package/Cache/Stores/FileStore.js.map +1 -1
- package/Container/ClassResolver.d.ts.map +1 -1
- package/Container/ClassResolver.js +4 -1
- package/Container/ClassResolver.js.map +1 -1
- package/Container/Container.d.ts.map +1 -1
- package/Container/Container.js +3 -2
- package/Container/Container.js.map +1 -1
- package/Container/Decorators.js +1 -1
- package/Container/Decorators.js.map +1 -1
- package/Container/Metadata.d.ts +2 -2
- package/Database/Decorators.js +2 -3
- package/Database/Decorators.js.map +1 -1
- package/Database/Drivers/MySQL/MysqlDriver.js +1 -2
- package/Database/Drivers/MySQL/MysqlDriver.js.map +1 -1
- package/Database/Drivers/MySQL/Schema.js +7 -6
- package/Database/Drivers/MySQL/Schema.js.map +1 -1
- package/Database/Drivers/SQL/Statements/BaseStatement.js +1 -2
- package/Database/Drivers/SQL/Statements/BaseStatement.js.map +1 -1
- package/Database/Drivers/SQL/Statements/Insert.js +1 -2
- package/Database/Drivers/SQL/Statements/Insert.js.map +1 -1
- package/Database/Drivers/SQLite/Schema.js +4 -2
- package/Database/Drivers/SQLite/Schema.js.map +1 -1
- package/Database/Entity.js +2 -3
- package/Database/Entity.js.map +1 -1
- package/Database/Fields.js +17 -21
- package/Database/Fields.js.map +1 -1
- package/Database/List.d.ts +1 -1
- package/Database/Migrations/Migrator.js +3 -4
- package/Database/Migrations/Migrator.js.map +1 -1
- package/Database/Query.js +1 -1
- package/Database/Query.js.map +1 -1
- package/Encryption/index.js +1 -1
- package/Encryption/index.js.map +1 -1
- package/Framework/Application.d.ts.map +1 -1
- package/Framework/Application.js +1 -2
- package/Framework/Application.js.map +1 -1
- package/Framework/Config/AppConfig.d.ts +1 -0
- package/Framework/Config/AppConfig.d.ts.map +1 -1
- package/Framework/Config/AppConfig.js +1 -0
- package/Framework/Config/AppConfig.js.map +1 -1
- package/Framework/Config/CacheConfig.d.ts +1 -1
- package/Framework/Config/CacheConfig.d.ts.map +1 -1
- package/Framework/Config/CacheConfig.js +1 -2
- package/Framework/Config/CacheConfig.js.map +1 -1
- package/Framework/Config/DatabaseConfig.js +2 -3
- package/Framework/Config/DatabaseConfig.js.map +1 -1
- package/Framework/Config/MailConfig.d.ts +19 -0
- package/Framework/Config/MailConfig.d.ts.map +1 -0
- package/Framework/Config/MailConfig.js +12 -0
- package/Framework/Config/MailConfig.js.map +1 -0
- package/Framework/Config/index.d.ts +1 -0
- package/Framework/Config/index.d.ts.map +1 -1
- package/Framework/Config/index.js +1 -0
- package/Framework/Config/index.js.map +1 -1
- package/Framework/Middleware/AuthMiddleware.d.ts +1 -1
- package/Framework/Middleware/AuthMiddleware.js +1 -2
- package/Framework/Middleware/AuthMiddleware.js.map +1 -1
- package/Framework/Middleware/CorsMiddleware.d.ts +1 -1
- package/Framework/Middleware/CorsMiddleware.d.ts.map +1 -1
- package/Framework/Middleware/CorsMiddleware.js +5 -4
- package/Framework/Middleware/CorsMiddleware.js.map +1 -1
- package/Framework/Middleware/StaticAssetsMiddleware.d.ts +1 -1
- package/Framework/Middleware/StaticAssetsMiddleware.js +3 -4
- package/Framework/Middleware/StaticAssetsMiddleware.js.map +1 -1
- package/Framework/Providers/CacheProvider.js +4 -4
- package/Framework/Providers/CacheProvider.js.map +1 -1
- package/Framework/Providers/MailProvider.d.ts +7 -0
- package/Framework/Providers/MailProvider.d.ts.map +1 -0
- package/Framework/Providers/MailProvider.js +40 -0
- package/Framework/Providers/MailProvider.js.map +1 -0
- package/Framework/Providers/WebsocketsProvider.d.ts.map +1 -1
- package/Framework/Providers/WebsocketsProvider.js +6 -10
- package/Framework/Providers/WebsocketsProvider.js.map +1 -1
- package/Framework/Resolvers/EntityResolver.js +1 -2
- package/Framework/Resolvers/EntityResolver.js.map +1 -1
- package/Framework/index.d.ts +1 -0
- package/Framework/index.d.ts.map +1 -1
- package/Framework/index.js +1 -0
- package/Framework/index.js.map +1 -1
- package/Frontend/Angular/index.d.ts +8 -0
- package/Frontend/Angular/index.d.ts.map +1 -0
- package/Frontend/Angular/index.js +20 -0
- package/Frontend/Angular/index.js.map +1 -0
- package/Frontend/Websockets/index.js +76 -0
- package/Frontend/Websockets/index.js.map +1 -0
- package/LICENSE.md +21 -0
- package/Mail/MailAddress.d.ts +5 -0
- package/Mail/MailAddress.d.ts.map +1 -0
- package/{Cache/Contracts/CacheInterface.js → Mail/MailAddress.js} +1 -1
- package/Mail/MailAddress.js.map +1 -0
- package/Mail/MailTransport.d.ts +6 -0
- package/Mail/MailTransport.d.ts.map +1 -0
- package/Mail/MailTransport.js +7 -0
- package/Mail/MailTransport.js.map +1 -0
- package/Mail/Mailable.d.ts +18 -0
- package/Mail/Mailable.d.ts.map +1 -0
- package/Mail/Mailable.js +10 -0
- package/Mail/Mailable.js.map +1 -0
- package/Mail/Mailer.d.ts +12 -0
- package/Mail/Mailer.d.ts.map +1 -0
- package/Mail/Mailer.js +25 -0
- package/Mail/Mailer.js.map +1 -0
- package/Mail/PendingMail.d.ts +30 -0
- package/Mail/PendingMail.d.ts.map +1 -0
- package/Mail/PendingMail.js +53 -0
- package/Mail/PendingMail.js.map +1 -0
- package/Mail/SentMessage.d.ts +16 -0
- package/Mail/SentMessage.d.ts.map +1 -0
- package/Mail/SentMessage.js +13 -0
- package/Mail/SentMessage.js.map +1 -0
- package/Mail/Transports/MemoryTransport.d.ts +8 -0
- package/Mail/Transports/MemoryTransport.d.ts.map +1 -0
- package/Mail/Transports/MemoryTransport.js +18 -0
- package/Mail/Transports/MemoryTransport.js.map +1 -0
- package/Mail/Transports/SendGridTransport.d.ts +11 -0
- package/Mail/Transports/SendGridTransport.d.ts.map +1 -0
- package/Mail/Transports/SendGridTransport.js +59 -0
- package/Mail/Transports/SendGridTransport.js.map +1 -0
- package/Mail/index.d.ts +4 -0
- package/Mail/index.d.ts.map +1 -0
- package/Mail/index.js +16 -0
- package/Mail/index.js.map +1 -0
- package/Models/Model.js +1 -1
- package/Models/Model.js.map +1 -1
- package/Readme.md +123 -0
- package/Router/Http/Handler.d.ts.map +1 -1
- package/Router/Http/Handler.js +14 -14
- package/Router/Http/Handler.js.map +1 -1
- package/Router/Http/Request.d.ts +14 -9
- package/Router/Http/Request.d.ts.map +1 -1
- package/Router/Http/Request.js +82 -48
- package/Router/Http/Request.js.map +1 -1
- package/Router/Http/Response.d.ts +4 -3
- package/Router/Http/Response.d.ts.map +1 -1
- package/Router/Http/Response.js +9 -18
- package/Router/Http/Response.js.map +1 -1
- package/Router/Metadata.d.ts +2 -2
- package/Router/Servers/index.d.ts +5 -0
- package/Router/Servers/index.d.ts.map +1 -0
- package/Router/Servers/index.js +15 -0
- package/Router/Servers/index.js.map +1 -0
- package/Router/Servers/node.d.ts +3 -0
- package/Router/Servers/node.d.ts.map +1 -0
- package/Router/Servers/node.js +15 -0
- package/Router/Servers/node.js.map +1 -0
- package/Router/Servers/uNetworking.d.ts +3 -0
- package/Router/Servers/uNetworking.d.ts.map +1 -0
- package/Router/Servers/uNetworking.js +33 -0
- package/Router/Servers/uNetworking.js.map +1 -0
- package/Router/Websockets/Handler.d.ts +1 -1
- package/Router/Websockets/Handler.d.ts.map +1 -1
- package/Router/Websockets/Handler.js.map +1 -1
- package/Router/Websockets/WebsocketEvent.js +1 -2
- package/Router/Websockets/WebsocketEvent.js.map +1 -1
- package/Router/Websockets/types.d.ts +1 -1
- package/Router/Websockets/types.d.ts.map +1 -1
- package/Router/micro.d.ts +3 -0
- package/Router/micro.d.ts.map +1 -0
- package/Router/micro.js +44 -0
- package/Router/micro.js.map +1 -0
- package/Support/Array.js +3 -0
- package/Support/Array.js.map +1 -1
- package/Support/Metadata.d.ts +6 -5
- package/Support/Metadata.d.ts.map +1 -1
- package/Support/Metadata.js +15 -4
- package/Support/Metadata.js.map +1 -1
- package/Testing/TestCase.js +5 -6
- package/Testing/TestCase.js.map +1 -1
- package/Validation/Rules/Email.js +1 -1
- package/Validation/Rules/Email.js.map +1 -1
- package/Validation/Rules/FileExtension.js +1 -1
- package/Validation/Rules/FileExtension.js.map +1 -1
- package/Validation/Rules/MaxLength.js +1 -1
- package/Validation/Rules/MaxLength.js.map +1 -1
- package/Validation/Rules/MinLength.js +1 -1
- package/Validation/Rules/MinLength.js.map +1 -1
- package/Validation/Rules/Required.js +1 -1
- package/Validation/Rules/Required.js.map +1 -1
- package/benchmark-index.js.map +1 -0
- package/benchmark.js.map +1 -0
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -0
- package/index.js +41 -0
- package/index.js.map +1 -0
- package/package.json +70 -68
- package/test.js.map +1 -0
- package/tests/Cache/DatabaseStoreTest.js +1 -2
- package/tests/Cache/DatabaseStoreTest.js.map +1 -1
- package/tests/Database/EntityRelationshipsTest.js +9 -14
- package/tests/Database/EntityRelationshipsTest.js.map +1 -1
- package/tests/Database/Seeders/RunnerTest.js +1 -1
- package/tests/Database/Seeders/RunnerTest.js.map +1 -1
- package/tests/Framework/Resolvers/EntityResolverTest.js +3 -3
- package/tests/Mail/MailerTest.d.ts +2 -0
- package/tests/Mail/MailerTest.d.ts.map +1 -0
- package/tests/Mail/MailerTest.js +98 -0
- package/tests/Mail/MailerTest.js.map +1 -0
- package/Cache/CacheLoader.d.ts +0 -8
- package/Cache/CacheLoader.d.ts.map +0 -1
- package/Cache/CacheLoader.js +0 -55
- package/Cache/CacheLoader.js.map +0 -1
- package/Cache/Consumers/Cache.d.ts +0 -18
- package/Cache/Consumers/Cache.d.ts.map +0 -1
- package/Cache/Consumers/Cache.js +0 -99
- package/Cache/Consumers/Cache.js.map +0 -1
- package/Cache/Contracts/CacheInterface.d.ts +0 -14
- package/Cache/Contracts/CacheInterface.d.ts.map +0 -1
- package/Cache/Contracts/CacheInterface.js.map +0 -1
- package/Cache/Contracts/EngineInterface.d.ts +0 -8
- package/Cache/Contracts/EngineInterface.d.ts.map +0 -1
- package/Cache/Contracts/EngineInterface.js +0 -3
- package/Cache/Contracts/EngineInterface.js.map +0 -1
- package/Cache/Contracts/ServiceInterface.d.ts +0 -8
- package/Cache/Contracts/ServiceInterface.d.ts.map +0 -1
- package/Cache/Contracts/ServiceInterface.js +0 -3
- package/Cache/Contracts/ServiceInterface.js.map +0 -1
- package/Cache/Engines/DatabaseCache.d.ts +0 -11
- package/Cache/Engines/DatabaseCache.d.ts.map +0 -1
- package/Cache/Engines/DatabaseCache.js +0 -40
- package/Cache/Engines/DatabaseCache.js.map +0 -1
- package/Cache/Engines/FileCache.d.ts +0 -22
- package/Cache/Engines/FileCache.d.ts.map +0 -1
- package/Cache/Engines/FileCache.js +0 -107
- package/Cache/Engines/FileCache.js.map +0 -1
- package/Cache/Services/DatabaseCacheService.d.ts +0 -13
- package/Cache/Services/DatabaseCacheService.d.ts.map +0 -1
- package/Cache/Services/DatabaseCacheService.js +0 -74
- package/Cache/Services/DatabaseCacheService.js.map +0 -1
- package/Cache/Services/FileCacheService.d.ts +0 -13
- package/Cache/Services/FileCacheService.d.ts.map +0 -1
- package/Cache/Services/FileCacheService.js +0 -60
- package/Cache/Services/FileCacheService.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Mailer.js","sourceRoot":"","sources":["../../Mail/Mailer.ts"],"names":[],"mappings":";;;AACA,+CAA2C;AAI3C,MAAa,MAAM;IAGf,YAAmB,IAAiB,EAAE,SAAyB;QAA5C,SAAI,GAAJ,IAAI,CAAa;QAChC,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,+EAA+E;gBAC3F,yDAAyD,CAAC,CAAA;SACjE;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC9B,CAAC;IAED,EAAE,CAAC,KAAa;QACZ,MAAM,IAAI,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QACd,OAAO,IAAI,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAiB;QACxB,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC;CACJ;AArBD,wBAqBC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Mailer } from './index';
|
|
2
|
+
import { Mailable } from './Mailable';
|
|
3
|
+
import { MailAddress } from '@Typetron/Mail/MailAddress';
|
|
4
|
+
export declare class PendingMail {
|
|
5
|
+
private mailer;
|
|
6
|
+
details: {
|
|
7
|
+
subject?: string;
|
|
8
|
+
from: string | MailAddress;
|
|
9
|
+
to?: string | MailAddress;
|
|
10
|
+
replyTo?: string | MailAddress;
|
|
11
|
+
cc?: string | MailAddress;
|
|
12
|
+
bcc?: string | MailAddress;
|
|
13
|
+
body?: string | {
|
|
14
|
+
html: string;
|
|
15
|
+
text: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
constructor(mailer: Mailer);
|
|
19
|
+
subject(subject: string): this;
|
|
20
|
+
from(email: string | MailAddress): this;
|
|
21
|
+
to(email: string | MailAddress): this;
|
|
22
|
+
replyTo(email: string | MailAddress): this;
|
|
23
|
+
cc(email: string | MailAddress): this;
|
|
24
|
+
bcc(email: string | MailAddress): this;
|
|
25
|
+
send(body: string | {
|
|
26
|
+
html: string;
|
|
27
|
+
text: string;
|
|
28
|
+
} | Mailable): Promise<import("./SentMessage").SentMessage>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=PendingMail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingMail.d.ts","sourceRoot":"","sources":["../../Mail/PendingMail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,qBAAa,WAAW;IAYR,OAAO,CAAC,MAAM;IAV1B,OAAO,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;QAC1B,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;QACzB,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;QAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;QACzB,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;QAC1B,IAAI,CAAC,EAAE,MAAM,GAAG;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAA;KAC/C,CAAa;gBAEM,MAAM,EAAE,MAAM;IAGlC,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAKhC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAK9B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAKnC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAK9B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAKzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,QAAQ;CAkBpE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PendingMail = void 0;
|
|
4
|
+
const Mailable_1 = require("./Mailable");
|
|
5
|
+
class PendingMail {
|
|
6
|
+
constructor(mailer) {
|
|
7
|
+
this.mailer = mailer;
|
|
8
|
+
this.details = { from: '' };
|
|
9
|
+
}
|
|
10
|
+
subject(subject) {
|
|
11
|
+
this.details.subject = subject;
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
from(email) {
|
|
15
|
+
this.details.from = email;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
to(email) {
|
|
19
|
+
this.details.to = email;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
replyTo(email) {
|
|
23
|
+
this.details.replyTo = email;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
cc(email) {
|
|
27
|
+
this.details.cc = email;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
bcc(email) {
|
|
31
|
+
this.details.bcc = email;
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
async send(body) {
|
|
35
|
+
let mail;
|
|
36
|
+
if (body instanceof Mailable_1.Mailable) {
|
|
37
|
+
mail = body;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
mail = new Mailable_1.Mailable();
|
|
41
|
+
mail.body = body;
|
|
42
|
+
}
|
|
43
|
+
mail.subject = this.details.subject;
|
|
44
|
+
mail.from = this.details.from;
|
|
45
|
+
mail.to = this.details.to;
|
|
46
|
+
mail.replyTo = this.details.replyTo;
|
|
47
|
+
mail.cc = this.details.cc;
|
|
48
|
+
mail.bcc = this.details.bcc;
|
|
49
|
+
return this.mailer.send(mail);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.PendingMail = PendingMail;
|
|
53
|
+
//# sourceMappingURL=PendingMail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingMail.js","sourceRoot":"","sources":["../../Mail/PendingMail.ts"],"names":[],"mappings":";;;AACA,yCAAqC;AAGrC,MAAa,WAAW;IAYpB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAVlC,YAAO,GAQH,EAAC,IAAI,EAAE,EAAE,EAAC,CAAA;IAGd,CAAC;IAED,OAAO,CAAC,OAAe;QACnB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA;QAC9B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,IAAI,CAAC,KAA2B;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAA;QACzB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,EAAE,CAAC,KAA2B;QAC1B,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAA;QACvB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,CAAC,KAA2B;QAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAA;QAC5B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,EAAE,CAAC,KAA2B;QAC1B,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,CAAA;QACvB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,GAAG,CAAC,KAA2B;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,KAAK,CAAA;QACxB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAsD;QAC7D,IAAI,IAAI,CAAA;QACR,IAAI,IAAI,YAAY,mBAAQ,EAAE;YAC1B,IAAI,GAAG,IAAI,CAAA;SACd;aAAM;YACH,IAAI,GAAG,IAAI,mBAAQ,EAAE,CAAA;YACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;SACnB;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;QAC7B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;QACnC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;QACzB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAA;QAE3B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;CACJ;AA/DD,kCA+DC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MailAddress } from './MailAddress';
|
|
2
|
+
import { Mailable } from '@Typetron/Mail/Mailable';
|
|
3
|
+
export declare class SentMessage {
|
|
4
|
+
readonly from: string | MailAddress;
|
|
5
|
+
readonly subject?: string;
|
|
6
|
+
readonly body?: string | {
|
|
7
|
+
html: string;
|
|
8
|
+
text: string;
|
|
9
|
+
};
|
|
10
|
+
readonly to?: string | MailAddress | (string | MailAddress)[];
|
|
11
|
+
readonly replyTo?: string | MailAddress | (string | MailAddress)[];
|
|
12
|
+
readonly cc?: string | MailAddress | (string | MailAddress)[];
|
|
13
|
+
readonly bcc?: string | MailAddress | (string | MailAddress)[];
|
|
14
|
+
constructor(mail: Mailable);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=SentMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SentMessage.d.ts","sourceRoot":"","sources":["../../Mail/SentMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAElD,qBAAa,WAAW;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAA;IACrD,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAA;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAA;IAClE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAA;IAC7D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,CAAA;gBAElD,IAAI,EAAE,QAAQ;CAO7B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SentMessage = void 0;
|
|
4
|
+
class SentMessage {
|
|
5
|
+
constructor(mail) {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
7
|
+
const { content, ...mailDetails } = mail;
|
|
8
|
+
Object.assign(this, mailDetails);
|
|
9
|
+
this.body = mail.content() ?? mail.body;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.SentMessage = SentMessage;
|
|
13
|
+
//# sourceMappingURL=SentMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SentMessage.js","sourceRoot":"","sources":["../../Mail/SentMessage.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IASpB,YAAY,IAAc;QACtB,6DAA6D;QAC7D,MAAM,EAAC,OAAO,EAAE,GAAG,WAAW,EAAC,GAAG,IAAI,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAA;IAC3C,CAAC;CAEJ;AAhBD,kCAgBC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MailTransport } from '../MailTransport';
|
|
2
|
+
import { SentMessage } from '../SentMessage';
|
|
3
|
+
import { Mailable } from '../Mailable';
|
|
4
|
+
export declare class MemoryTransport extends MailTransport {
|
|
5
|
+
messages: SentMessage[];
|
|
6
|
+
send(message: Mailable): Promise<SentMessage>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=MemoryTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryTransport.d.ts","sourceRoot":"","sources":["../../../Mail/Transports/MemoryTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,qBAAa,eAAgB,SAAQ,aAAa;IAC9C,QAAQ,EAAE,WAAW,EAAE,CAAK;IAEtB,IAAI,CAAC,OAAO,EAAE,QAAQ;CAK/B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryTransport = void 0;
|
|
4
|
+
const MailTransport_1 = require("../MailTransport");
|
|
5
|
+
const SentMessage_1 = require("../SentMessage");
|
|
6
|
+
class MemoryTransport extends MailTransport_1.MailTransport {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.messages = [];
|
|
10
|
+
}
|
|
11
|
+
async send(message) {
|
|
12
|
+
const sentMessage = new SentMessage_1.SentMessage(message);
|
|
13
|
+
this.messages.push(sentMessage);
|
|
14
|
+
return sentMessage;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.MemoryTransport = MemoryTransport;
|
|
18
|
+
//# sourceMappingURL=MemoryTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryTransport.js","sourceRoot":"","sources":["../../../Mail/Transports/MemoryTransport.ts"],"names":[],"mappings":";;;AAAA,oDAAgD;AAChD,gDAA4C;AAG5C,MAAa,eAAgB,SAAQ,6BAAa;IAAlD;;QACI,aAAQ,GAAkB,EAAE,CAAA;IAOhC,CAAC;IALG,KAAK,CAAC,IAAI,CAAC,OAAiB;QACxB,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/B,OAAO,WAAW,CAAA;IACtB,CAAC;CACJ;AARD,0CAQC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MailTransport } from '../MailTransport';
|
|
2
|
+
import { SentMessage } from '../SentMessage';
|
|
3
|
+
import { Mailable } from '../Mailable';
|
|
4
|
+
import { MailConfig } from '../../Framework';
|
|
5
|
+
export declare class SendGridTransport extends MailTransport {
|
|
6
|
+
messages: SentMessage[];
|
|
7
|
+
config: MailConfig;
|
|
8
|
+
constructor(key: string);
|
|
9
|
+
send(message: Mailable): Promise<SentMessage>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=SendGridTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendGridTransport.d.ts","sourceRoot":"","sources":["../../../Mail/Transports/SendGridTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,qBAAa,iBAAkB,SAAQ,aAAa;IAChD,QAAQ,EAAE,WAAW,EAAE,CAAK;IAG5B,MAAM,EAAE,UAAU,CAAA;gBAEN,GAAG,EAAE,MAAM;IAMjB,IAAI,CAAC,OAAO,EAAE,QAAQ;CA0E/B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SendGridTransport = void 0;
|
|
16
|
+
const MailTransport_1 = require("../MailTransport");
|
|
17
|
+
const SentMessage_1 = require("../SentMessage");
|
|
18
|
+
const Container_1 = require("../../Container");
|
|
19
|
+
const Framework_1 = require("../../Framework");
|
|
20
|
+
const mail_1 = __importDefault(require("@sendgrid/mail"));
|
|
21
|
+
const Http_1 = require("@Typetron/Router/Http");
|
|
22
|
+
class SendGridTransport extends MailTransport_1.MailTransport {
|
|
23
|
+
constructor(key) {
|
|
24
|
+
super();
|
|
25
|
+
this.messages = [];
|
|
26
|
+
mail_1.default.setApiKey(key);
|
|
27
|
+
}
|
|
28
|
+
async send(message) {
|
|
29
|
+
const sentMessage = new SentMessage_1.SentMessage(message);
|
|
30
|
+
const sendGridMessage = {
|
|
31
|
+
personalizations: [
|
|
32
|
+
{
|
|
33
|
+
to: sentMessage.to,
|
|
34
|
+
cc: sentMessage.cc,
|
|
35
|
+
bcc: sentMessage.bcc
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
from: sentMessage.from,
|
|
39
|
+
replyTo: sentMessage.replyTo,
|
|
40
|
+
subject: sentMessage.subject,
|
|
41
|
+
content: [
|
|
42
|
+
{
|
|
43
|
+
type: 'text/html',
|
|
44
|
+
value: sentMessage.body
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
49
|
+
/* @ts-ignore */ // SendGrid has TS issues
|
|
50
|
+
await mail_1.default.send(sendGridMessage).catch(error => { throw new Http_1.HttpError(error.response.body.errors, error.code); });
|
|
51
|
+
return sentMessage;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
__decorate([
|
|
55
|
+
Container_1.Inject(),
|
|
56
|
+
__metadata("design:type", Framework_1.MailConfig)
|
|
57
|
+
], SendGridTransport.prototype, "config", void 0);
|
|
58
|
+
exports.SendGridTransport = SendGridTransport;
|
|
59
|
+
//# sourceMappingURL=SendGridTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SendGridTransport.js","sourceRoot":"","sources":["../../../Mail/Transports/SendGridTransport.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAAgD;AAChD,gDAA4C;AAE5C,+CAAwC;AACxC,+CAA4C;AAC5C,0DAAmC;AACnC,gDAAiD;AAEjD,MAAa,iBAAkB,SAAQ,6BAAa;IAMhD,YAAY,GAAW;QACnB,KAAK,EAAE,CAAA;QANX,aAAQ,GAAkB,EAAE,CAAA;QAQxB,cAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAiB;QACxB,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC,OAAO,CAAC,CAAA;QAE5C,MAAM,eAAe,GAAG;YACpB,gBAAgB,EAAE;gBACd;oBACI,EAAE,EAAE,WAAW,CAAC,EAAE;oBAClB,EAAE,EAAE,WAAW,CAAC,EAAE;oBAClB,GAAG,EAAE,WAAW,CAAC,GAAG;iBACvB;aACJ;YACD,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,OAAO,EAAE;gBACL;oBACI,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,WAAW,CAAC,IAAI;iBAC1B;aACJ;SA+CJ,CAAA;QAED,6DAA6D;QAC7D,gBAAgB,CAAC,yBAAyB;QAC1C,MAAM,cAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAE,MAAM,IAAI,gBAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA,CAAA,CAAC,CAAC,CAAA;QAEhH,OAAO,WAAW,CAAA;IACtB,CAAC;CACJ;AAlFG;IADC,kBAAM,EAAE;8BACD,sBAAU;iDAAA;AAJtB,8CAsFC"}
|
package/Mail/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../Mail/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA"}
|
package/Mail/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./Transports/MemoryTransport"), exports);
|
|
14
|
+
__exportStar(require("./Mailer"), exports);
|
|
15
|
+
__exportStar(require("./Mailable"), exports);
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../Mail/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAA4C;AAC5C,2CAAwB;AACxB,6CAA0B"}
|
package/Models/Model.js
CHANGED
|
@@ -22,7 +22,7 @@ class Model {
|
|
|
22
22
|
const value = entity[field.name];
|
|
23
23
|
if (field.type instanceof index_1.ModelTypeInterface && value) {
|
|
24
24
|
// @ts-ignore
|
|
25
|
-
const jsonValue = value['toJSON'] ? value
|
|
25
|
+
const jsonValue = value['toJSON'] ? value?.toJSON() : value;
|
|
26
26
|
data[field.name] = jsonValue ? field.type.transform(jsonValue) : undefined;
|
|
27
27
|
}
|
|
28
28
|
else {
|
package/Models/Model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Model.js","sourceRoot":"","sources":["../../Models/Model.ts"],"names":[],"mappings":";;;AACA,mCAA0E;AAE1E,MAAa,KAAK;IAKd,MAAM,CAAC,IAAI,CAEP,MAAkD;QAElD,IAAI,MAAM,YAAY,OAAO,EAAE;YAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;SAChD;QACD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;YACnC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAqB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAO,IAAI,CAAC,CAAC,CAAA;SAC9E;QACD,MAAM,MAAM,GAA+B,OAAO,CAAC,WAAW,CAAC,wBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;QAE5F,OAAO,IAAI,CAAC,SAAS,CAAO,MAAM,EAAE,MAAW,CAAC,CAAA;IACpD,CAAC;IAES,MAAM,CAAC,SAAS,CAAsB,MAAkC,EAAE,MAAS;QACzF,MAAM,IAAI,GAAyC,IAAI,IAAI,CAAA;QAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC/C,OAAM;aACT;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAe,CAAC,CAAA;YAC3C,IAAI,KAAK,CAAC,IAAI,YAAY,0BAAkB,IAAI,KAAK,EAAE;gBACnD,aAAa;gBACb,MAAM,SAAS,GAAG,KAAK,CAAC,QAAwB,CAAC,CAAC,CAAC,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"Model.js","sourceRoot":"","sources":["../../Models/Model.ts"],"names":[],"mappings":";;;AACA,mCAA0E;AAE1E,MAAa,KAAK;IAKd,MAAM,CAAC,IAAI,CAEP,MAAkD;QAElD,IAAI,MAAM,YAAY,OAAO,EAAE;YAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;SAChD;QACD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE;YACnC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAqB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAO,IAAI,CAAC,CAAC,CAAA;SAC9E;QACD,MAAM,MAAM,GAA+B,OAAO,CAAC,WAAW,CAAC,wBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;QAE5F,OAAO,IAAI,CAAC,SAAS,CAAO,MAAM,EAAE,MAAW,CAAC,CAAA;IACpD,CAAC;IAES,MAAM,CAAC,SAAS,CAAsB,MAAkC,EAAE,MAAS;QACzF,MAAM,IAAI,GAAyC,IAAI,IAAI,CAAA;QAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAC/C,OAAM;aACT;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAe,CAAC,CAAA;YAC3C,IAAI,KAAK,CAAC,IAAI,YAAY,0BAAkB,IAAI,KAAK,EAAE;gBACnD,aAAa;gBACb,MAAM,SAAS,GAAG,KAAK,CAAC,QAAwB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;gBAC3E,IAAI,CAAC,KAAK,CAAC,IAAe,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAe,CAAC,CAAC,CAAC,SAAS,CAAA;aACtG;iBAAM;gBACH,IAAI,CAAC,KAAK,CAAC,IAAe,CAAC,GAAG,KAAK,CAAA;aACtC;QACL,CAAC,CAAC,CAAA;QACF,OAAO,IAAS,CAAA;IACpB,CAAC;CACJ;AArCD,sBAqCC"}
|
package/Readme.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Typetron
|
|
2
|
+
> **Note:** This project is a prototype in heavy development and not ready for production.
|
|
3
|
+
|
|
4
|
+
**[Typetron](https://typetron.org)** is a **modern web framework** built for Node.js, written in **Typescript**, that
|
|
5
|
+
allows you to build fully featured web applications.
|
|
6
|
+
Typetron is best suited for small sized to enterprise level apps.
|
|
7
|
+
Most of the core packages it uses were built from scratch in order to preserve the performance of the framework.
|
|
8
|
+
|
|
9
|
+
_(check [this tutorial](https://typetron.org/tutorials/blog) on how to get started with Typetron)_
|
|
10
|
+
|
|
11
|
+
### Prerequisites
|
|
12
|
+
- [NodeJs >=12 LTS](https://nodejs.org)
|
|
13
|
+
|
|
14
|
+
#### Features
|
|
15
|
+
Typetron aims to have all the features necessary for building any web app without the need for you
|
|
16
|
+
to search the internet for a package to use. Almost all the packages it has were built from scratch and are
|
|
17
|
+
available in the framework.
|
|
18
|
+
This was done to ensure that all the features you are using benefit from the latest language features.
|
|
19
|
+
Also, every package can be tuned for performance or updated in no time if needed.
|
|
20
|
+
|
|
21
|
+
##### Features List
|
|
22
|
+
|
|
23
|
+
[typetron.org](https://typetron.org/docs/)
|
|
24
|
+
|
|
25
|
+
##### Performance
|
|
26
|
+
Being built with packages created from scratch using the latest features of the language, Typetron comes with
|
|
27
|
+
excellent performance out of the box compared to other available frameworks.
|
|
28
|
+
|
|
29
|
+
##### Developer experience
|
|
30
|
+
Typetron's source code is built around developer's expectations: it is modern, clean and beautiful.
|
|
31
|
+
Also, the tools Typetron is providing are everything a developer needs to build his next awesome project.
|
|
32
|
+
|
|
33
|
+
##### Code sharing
|
|
34
|
+
A few years ago we wrote websites. Nowadays we write web applications. The web evolved alongside the tools we are
|
|
35
|
+
using. A typical web application is composed of at least two parts: a backend app and a frontend app.
|
|
36
|
+
This separation led to two different camps that have a very distinct line between them. Typetron provides tools to make
|
|
37
|
+
these two camps work together.
|
|
38
|
+
|
|
39
|
+
#### Source code examples
|
|
40
|
+
|
|
41
|
+
##### Entities
|
|
42
|
+
```ts
|
|
43
|
+
export class User extends Entity {
|
|
44
|
+
|
|
45
|
+
@PrimaryColumn()
|
|
46
|
+
id: number;
|
|
47
|
+
|
|
48
|
+
@Column()
|
|
49
|
+
email: string;
|
|
50
|
+
|
|
51
|
+
@Column()
|
|
52
|
+
name: string;
|
|
53
|
+
|
|
54
|
+
@Relation(() => Post, 'author')
|
|
55
|
+
posts: HasMany<Post> = [];
|
|
56
|
+
|
|
57
|
+
@Relation(() => Group, 'users')
|
|
58
|
+
group: BelongsTo<Group>;
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
##### Forms
|
|
62
|
+
```ts
|
|
63
|
+
export class UserForm extends Form {
|
|
64
|
+
@Field()
|
|
65
|
+
@Rules(
|
|
66
|
+
Required,
|
|
67
|
+
)
|
|
68
|
+
email: string;
|
|
69
|
+
|
|
70
|
+
@Field()
|
|
71
|
+
@Rules(
|
|
72
|
+
Required,
|
|
73
|
+
MinLength(5),
|
|
74
|
+
)
|
|
75
|
+
name: string;
|
|
76
|
+
|
|
77
|
+
@Field()
|
|
78
|
+
dateOfBirth: Date;
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
##### Controllers
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
@Controller('users')
|
|
86
|
+
export class UserController {
|
|
87
|
+
|
|
88
|
+
@Inject()
|
|
89
|
+
storage: Storage;
|
|
90
|
+
|
|
91
|
+
@AuthUser()
|
|
92
|
+
user: User;
|
|
93
|
+
|
|
94
|
+
@Get('me')
|
|
95
|
+
async me() {
|
|
96
|
+
return this.auth.user;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@Get()
|
|
100
|
+
async browse() {
|
|
101
|
+
return UserModel.from(User.get());
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@Get(':User')
|
|
105
|
+
read(user: User) {
|
|
106
|
+
return user;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@Put(':User')
|
|
110
|
+
update(user: User, userForm: UserForm) {
|
|
111
|
+
return user.fill(userForm).save();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@Post()
|
|
115
|
+
create(userForm: UserForm) {
|
|
116
|
+
return User.create(userForm);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## License
|
|
123
|
+
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Handler.d.ts","sourceRoot":"","sources":["../../../Router/Http/Handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAkB,KAAK,EAAsB,MAAM,EAAE,MAAM,KAAK,CAAA;AAC5F,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"Handler.d.ts","sourceRoot":"","sources":["../../../Router/Http/Handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAkB,KAAK,EAAsB,MAAM,EAAE,MAAM,KAAK,CAAA;AAC5F,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAQ/D,qBAAa,OAAO;IAEhB,MAAM,EAAE,MAAM,CAAA;IAGd,YAAY,EAAE,qBAAqB,CAAA;IAEnC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAK;IAEzC,QAAQ,CACJ,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,eAAe,GAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,EAAO,EAC9D,UAAU,GAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAO,GACjD,KAAK;IAkBR,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAa3B,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwCjE,OAAO,CAAC,cAAc;IAsCtB,OAAO,CAAC,UAAU;CASrB"}
|
package/Router/Http/Handler.js
CHANGED
|
@@ -14,8 +14,12 @@ const Container_1 = require("../../Container");
|
|
|
14
14
|
const __1 = require("../");
|
|
15
15
|
const _1 = require("./");
|
|
16
16
|
const Request_1 = require("./Request");
|
|
17
|
-
const http_1 = require("http");
|
|
18
17
|
const Framework_1 = require("../../Framework");
|
|
18
|
+
const Servers_1 = require("@Typetron/Router/Servers");
|
|
19
|
+
const httpServers = {
|
|
20
|
+
node: Servers_1.nodeServer,
|
|
21
|
+
uNetworking: Servers_1.uNetworkingServer
|
|
22
|
+
};
|
|
19
23
|
class Handler {
|
|
20
24
|
constructor() {
|
|
21
25
|
this.cachedRoutes = {};
|
|
@@ -38,26 +42,22 @@ class Handler {
|
|
|
38
42
|
// }
|
|
39
43
|
startServer(app) {
|
|
40
44
|
const config = app.get(Framework_1.AppConfig);
|
|
41
|
-
const
|
|
45
|
+
const startServer = httpServers[config.server];
|
|
46
|
+
startServer(config.port, async (request) => {
|
|
42
47
|
try {
|
|
43
|
-
|
|
44
|
-
const response = await this.handle(app, request);
|
|
45
|
-
_1.Response.send(response, serverResponse);
|
|
48
|
+
return await this.handle(app, request);
|
|
46
49
|
}
|
|
47
50
|
catch (error) {
|
|
48
|
-
|
|
51
|
+
return this.errorHandler.handle(error);
|
|
49
52
|
}
|
|
50
53
|
});
|
|
51
|
-
server.listen(config.port);
|
|
52
54
|
}
|
|
53
55
|
async handle(app, request) {
|
|
54
56
|
const container = app.createChildContainer();
|
|
55
57
|
container.set(Request_1.Request, request);
|
|
56
58
|
let stack = async () => {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// ?? this.findRouteIndex(request.uri ?? '', request.method)
|
|
60
|
-
const routeIndex = this.findRouteIndex((_a = request.uri) !== null && _a !== void 0 ? _a : '', request.method);
|
|
59
|
+
const routeIndex = this.cachedRoutes[`${request.method} ${request.uri}`]
|
|
60
|
+
?? this.findRouteIndex(request.uri ?? '', request.method);
|
|
61
61
|
const route = this.router.routes[routeIndex];
|
|
62
62
|
container.set(__1.Route, route);
|
|
63
63
|
request.parameters = route.parameters;
|
|
@@ -72,18 +72,18 @@ class Handler {
|
|
|
72
72
|
const middleware = container.get(middlewareClass);
|
|
73
73
|
routeStack = middleware.handle.bind(middleware, request, routeStack);
|
|
74
74
|
});
|
|
75
|
-
return
|
|
75
|
+
return routeStack(request);
|
|
76
76
|
};
|
|
77
77
|
this.router.middleware.forEach(middlewareClass => {
|
|
78
78
|
const middleware = container.get(middlewareClass);
|
|
79
79
|
stack = middleware.handle.bind(middleware, request, stack);
|
|
80
80
|
});
|
|
81
|
-
return
|
|
81
|
+
return stack(request);
|
|
82
82
|
}
|
|
83
83
|
findRouteIndex(uri, method) {
|
|
84
84
|
const preparedUri = this.prepareUri(uri);
|
|
85
85
|
const index = this.router.routes.findIndex(route => {
|
|
86
|
-
return route.method === method && route.matches(preparedUri);
|
|
86
|
+
return route.method.toLowerCase() === method.toLowerCase() && route.matches(preparedUri);
|
|
87
87
|
});
|
|
88
88
|
if (index === -1) {
|
|
89
89
|
throw new __1.RouteNotFoundError(`[${method}] ${uri}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Handler.js","sourceRoot":"","sources":["../../../Router/Http/Handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAmD;AACnD,2BAA4F;AAC5F,yBAA0D;AAC1D,uCAAmC;AACnC,+
|
|
1
|
+
{"version":3,"file":"Handler.js","sourceRoot":"","sources":["../../../Router/Http/Handler.ts"],"names":[],"mappings":"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"}
|
package/Router/Http/Request.d.ts
CHANGED
|
@@ -5,18 +5,23 @@ import { Parameters } from './Contracts';
|
|
|
5
5
|
import { ParsedUrlQuery } from 'querystring';
|
|
6
6
|
import { File } from '../../Storage';
|
|
7
7
|
export declare class Request {
|
|
8
|
-
uri: string;
|
|
9
|
-
method: Http.Method;
|
|
10
|
-
query: ParsedUrlQuery;
|
|
11
|
-
cookies: Parameters;
|
|
12
|
-
headers: IncomingHttpHeaders;
|
|
13
|
-
body: string | object | undefined;
|
|
14
|
-
files: Record<string, File | File[]>;
|
|
15
8
|
parameters: Record<string, string | number>;
|
|
16
|
-
|
|
9
|
+
private raw;
|
|
10
|
+
private details;
|
|
11
|
+
constructor(urlOrUri: string, method: Http.Method, headers?: IncomingHttpHeaders, query?: string | ParsedUrlQuery, cookies?: string | Parameters, body?: string | object, files?: Record<string, File | File[]>);
|
|
12
|
+
get headers(): IncomingHttpHeaders;
|
|
13
|
+
get uri(): string;
|
|
14
|
+
get method(): Http.Method;
|
|
15
|
+
get query(): ParsedUrlQuery;
|
|
16
|
+
get cookies(): Parameters;
|
|
17
|
+
get body(): string | object | undefined;
|
|
18
|
+
set body(body: string | object | undefined);
|
|
19
|
+
get files(): Record<string, File | File[]>;
|
|
20
|
+
set files(files: Record<string, File | File[]>);
|
|
21
|
+
static capture(message: IncomingMessage): Promise<Request>;
|
|
17
22
|
static loadMultipartContent(incomingMessage: IncomingMessage): Promise<[string | object, Record<string, File | File[]>]>;
|
|
18
23
|
static loadSimpleContent(incomingMessage: IncomingMessage): Promise<string | object | undefined>;
|
|
19
|
-
|
|
24
|
+
getHeader(name: string): IncomingHttpHeaders;
|
|
20
25
|
private static isJSONRequest;
|
|
21
26
|
private static isMultipartRequest;
|
|
22
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../../Router/Http/Request.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../../Router/Http/Request.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAA;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAQpC,qBAAa,OAAO;IAGT,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAK;IAEvD,OAAO,CAAC,GAAG,CAQV;IAID,OAAO,CAAC,OAAO,CAST;gBAGF,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,OAAO,CAAC,EAAE,mBAAmB,EAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,EAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,EAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC;IAazC,IAAI,OAAO,IAAI,mBAAmB,CAEjC;IAED,IAAI,GAAG,IAAI,MAAM,CAchB;IAED,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,CAExB;IAQD,IAAI,KAAK,IAAI,cAAc,CAU1B;IAED,IAAI,OAAO,IAAI,UAAU,CAIxB;IAED,IAAI,IAAI,IAIO,MAAM,GAAG,MAAM,GAAG,SAAS,CAFzC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,EAEzC;IAED,IAAI,KAAK,IAIQ,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,CAF7C;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAE7C;WAEY,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;WAqBnD,oBAAoB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;WAuCjH,iBAAiB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IA6BtG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB;IAI5C,OAAO,CAAC,MAAM,CAAC,aAAa;IAI5B,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAGpC"}
|