@typetron/framework 0.5.0 → 0.5.3

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 (197) hide show
  1. package/build/Database/EntityProxyHandler.js +2 -2
  2. package/build/Database/EntityProxyHandler.js.map +1 -1
  3. package/package.json +4 -7
  4. package/.eslintrc-old.js +0 -208
  5. package/Cache/Cache.ts +0 -13
  6. package/Cache/Stores/DatabaseStore.ts +0 -120
  7. package/Cache/Stores/FileStore.ts +0 -69
  8. package/Cache/Stores/MemoryStore.ts +0 -71
  9. package/Cache/index.ts +0 -5
  10. package/Cache/types.ts +0 -4
  11. package/Container/ClassResolver.ts +0 -106
  12. package/Container/Container.ts +0 -144
  13. package/Container/Contracts.ts +0 -3
  14. package/Container/Decorators.ts +0 -20
  15. package/Container/Metadata.ts +0 -16
  16. package/Container/Resolver.ts +0 -27
  17. package/Container/index.ts +0 -5
  18. package/Database/Clauses/Where.ts +0 -0
  19. package/Database/Connection.ts +0 -52
  20. package/Database/Decorators.ts +0 -142
  21. package/Database/Drivers/DatabaseDriver.ts +0 -37
  22. package/Database/Drivers/MySQL/Alter/index.ts +0 -55
  23. package/Database/Drivers/MySQL/ColumnDefinition.ts +0 -16
  24. package/Database/Drivers/MySQL/Create.ts +0 -47
  25. package/Database/Drivers/MySQL/MysqlDriver.ts +0 -123
  26. package/Database/Drivers/MySQL/Schema.ts +0 -82
  27. package/Database/Drivers/MySQL/index.ts +0 -13
  28. package/Database/Drivers/SQL/Schema.ts +0 -73
  29. package/Database/Drivers/SQL/Statements/Alter.ts +0 -22
  30. package/Database/Drivers/SQL/Statements/BaseStatement.ts +0 -55
  31. package/Database/Drivers/SQL/Statements/Delete.ts +0 -20
  32. package/Database/Drivers/SQL/Statements/Insert.ts +0 -24
  33. package/Database/Drivers/SQL/Statements/Select.ts +0 -55
  34. package/Database/Drivers/SQL/Statements/Update.ts +0 -33
  35. package/Database/Drivers/SQL/index.ts +0 -8
  36. package/Database/Drivers/SQLite/Create.ts +0 -45
  37. package/Database/Drivers/SQLite/Schema.ts +0 -54
  38. package/Database/Drivers/SQLite/SqliteDriver.ts +0 -144
  39. package/Database/Drivers/SQLite/index.ts +0 -15
  40. package/Database/Drivers/SchemaContract.ts +0 -11
  41. package/Database/Drivers/Statement.ts +0 -16
  42. package/Database/Drivers/index.ts +0 -4
  43. package/Database/Entity.ts +0 -377
  44. package/Database/EntityNotFoundError.ts +0 -5
  45. package/Database/EntityProxyHandler.ts +0 -43
  46. package/Database/EntityQuery.ts +0 -197
  47. package/Database/Expression.ts +0 -3
  48. package/Database/Fields.ts +0 -816
  49. package/Database/Helpers.ts +0 -12
  50. package/Database/List.ts +0 -71
  51. package/Database/Migrations/Migration.ts +0 -10
  52. package/Database/Migrations/MigrationHistory.ts +0 -20
  53. package/Database/Migrations/Migrator.ts +0 -122
  54. package/Database/Migrations/index.ts +0 -3
  55. package/Database/ORM/BaseRelationship.ts +0 -10
  56. package/Database/Query.ts +0 -374
  57. package/Database/Seeders/Seeder.ts +0 -3
  58. package/Database/Seeders/SeederManager.ts +0 -27
  59. package/Database/Seeders/index.ts +0 -2
  60. package/Database/StringExpression.ts +0 -9
  61. package/Database/Types.ts +0 -165
  62. package/Database/index.ts +0 -23
  63. package/Encryption/index.ts +0 -51
  64. package/Forms/Decorators.ts +0 -29
  65. package/Forms/Form.ts +0 -70
  66. package/Forms/FormFields.ts +0 -36
  67. package/Forms/index.ts +0 -3
  68. package/Framework/App.ts +0 -10
  69. package/Framework/Application.ts +0 -118
  70. package/Framework/Auth/Auth.ts +0 -122
  71. package/Framework/Auth/Authenticatable.ts +0 -9
  72. package/Framework/Auth/User.ts +0 -27
  73. package/Framework/Auth/index.ts +0 -29
  74. package/Framework/Config/AppConfig.ts +0 -25
  75. package/Framework/Config/AuthConfig.ts +0 -9
  76. package/Framework/Config/BaseConfig.ts +0 -9
  77. package/Framework/Config/CacheConfig.ts +0 -38
  78. package/Framework/Config/DatabaseConfig.ts +0 -21
  79. package/Framework/Config/MailConfig.ts +0 -30
  80. package/Framework/Config/index.ts +0 -6
  81. package/Framework/Middleware/AuthMiddleware.ts +0 -31
  82. package/Framework/Middleware/CorsMiddleware.ts +0 -32
  83. package/Framework/Middleware/StaticAssetsMiddleware.ts +0 -76
  84. package/Framework/Middleware/index.ts +0 -2
  85. package/Framework/Provider.ts +0 -9
  86. package/Framework/Providers/CacheProvider.ts +0 -28
  87. package/Framework/Providers/DatabaseProvider.ts +0 -36
  88. package/Framework/Providers/MailProvider.ts +0 -31
  89. package/Framework/Providers/WebsocketsProvider.ts +0 -120
  90. package/Framework/Resolvers/AuthResolver.ts +0 -23
  91. package/Framework/Resolvers/EntityResolver.ts +0 -41
  92. package/Framework/Resolvers/FormResolver.ts +0 -37
  93. package/Framework/RootDir.ts +0 -1
  94. package/Framework/index.ts +0 -8
  95. package/Frontend/Angular/index.ts +0 -24
  96. package/Frontend/Websockets/index.ts +0 -86
  97. package/Mail/MailAddress.ts +0 -4
  98. package/Mail/MailTransport.ts +0 -6
  99. package/Mail/Mailable.ts +0 -16
  100. package/Mail/Mailer.ts +0 -27
  101. package/Mail/PendingMail.ts +0 -68
  102. package/Mail/SentMessage.ts +0 -20
  103. package/Mail/Transports/MemoryTransport.ts +0 -13
  104. package/Mail/Transports/SendGridTransport.ts +0 -95
  105. package/Mail/index.ts +0 -3
  106. package/Models/Model.ts +0 -41
  107. package/Models/index.ts +0 -54
  108. package/Router/BaseController.ts +0 -7
  109. package/Router/Decorators.ts +0 -224
  110. package/Router/Guard.ts +0 -10
  111. package/Router/Http/Contracts.ts +0 -4
  112. package/Router/Http/ErrorHandler.ts +0 -45
  113. package/Router/Http/ErrorHandlerInterface.ts +0 -6
  114. package/Router/Http/Errors/HttpError.ts +0 -15
  115. package/Router/Http/Handler.ts +0 -183
  116. package/Router/Http/HttpRoute.ts +0 -110
  117. package/Router/Http/Middleware.ts +0 -7
  118. package/Router/Http/Request.ts +0 -225
  119. package/Router/Http/Response.ts +0 -35
  120. package/Router/Http/index.ts +0 -85
  121. package/Router/Metadata.ts +0 -34
  122. package/Router/Middleware.ts +0 -16
  123. package/Router/Request.ts +0 -65
  124. package/Router/Route.ts +0 -16
  125. package/Router/RouteNotFoundError.ts +0 -5
  126. package/Router/Router.ts +0 -35
  127. package/Router/Servers/index.ts +0 -6
  128. package/Router/Servers/node.ts +0 -49
  129. package/Router/Servers/uNetworking.ts +0 -151
  130. package/Router/Websockets/Handler.ts +0 -82
  131. package/Router/Websockets/Middleware.ts +0 -7
  132. package/Router/Websockets/Request.ts +0 -3
  133. package/Router/Websockets/WebsocketRoute.ts +0 -61
  134. package/Router/Websockets/index.ts +0 -57
  135. package/Router/Websockets/types.ts +0 -23
  136. package/Router/index.ts +0 -6
  137. package/Storage/File.ts +0 -30
  138. package/Storage/Image.ts +0 -19
  139. package/Storage/InvalidImage.ts +0 -3
  140. package/Storage/Storage.ts +0 -98
  141. package/Storage/index.ts +0 -4
  142. package/Storage/utils.ts +0 -18
  143. package/Support/Array.ts +0 -184
  144. package/Support/Math.ts +0 -12
  145. package/Support/Metadata.ts +0 -31
  146. package/Support/String.ts +0 -38
  147. package/Support/index.ts +0 -19
  148. package/Support/utils.ts +0 -7
  149. package/Testing/TestCase.ts +0 -193
  150. package/Validation/Rule.ts +0 -9
  151. package/Validation/RuleInterface.ts +0 -10
  152. package/Validation/Rules/Email.ts +0 -20
  153. package/Validation/Rules/FileExtension.ts +0 -21
  154. package/Validation/Rules/MaxLength.ts +0 -17
  155. package/Validation/Rules/MinLength.ts +0 -18
  156. package/Validation/Rules/Optional.ts +0 -18
  157. package/Validation/Rules/Required.ts +0 -29
  158. package/Validation/Validator.ts +0 -7
  159. package/Validation/index.ts +0 -12
  160. package/benchmark-index.js +0 -20
  161. package/benchmark.ts +0 -47
  162. package/tests/Cache/DatabaseStoreTest.ts +0 -110
  163. package/tests/Cache/FileStoreTest.ts +0 -93
  164. package/tests/Cache/MemoryStoreTest.ts +0 -92
  165. package/tests/Container/ContainerTest.ts +0 -336
  166. package/tests/Database/Drivers/MySQL/AlterTest.ts +0 -100
  167. package/tests/Database/Drivers/MySQL/CreateTest.ts +0 -39
  168. package/tests/Database/Drivers/MysqlDriverTest.ts +0 -140
  169. package/tests/Database/Drivers/SqliteDriverTest.ts +0 -126
  170. package/tests/Database/Entities/Article.ts +0 -21
  171. package/tests/Database/Entities/Profile.ts +0 -21
  172. package/tests/Database/Entities/Role.ts +0 -15
  173. package/tests/Database/Entities/User.ts +0 -35
  174. package/tests/Database/EntityRelationshipsTest.ts +0 -475
  175. package/tests/Database/EntityTest.ts +0 -202
  176. package/tests/Database/Migrations/RunnerTest.ts +0 -96
  177. package/tests/Database/Migrations/migrations/1.createUserTable.ts +0 -12
  178. package/tests/Database/Migrations/migrations/2.createArticlesTable.ts +0 -12
  179. package/tests/Database/QueryTest.ts +0 -573
  180. package/tests/Database/SchemaTest.ts +0 -32
  181. package/tests/Database/Seeders/RunnerTest.ts +0 -30
  182. package/tests/Database/Seeders/seeders/RandomSeeder.ts +0 -10
  183. package/tests/Database/utils.ts +0 -16
  184. package/tests/Forms/FormsTest.ts +0 -59
  185. package/tests/Framework/Middleware/StaticAssetsMiddlewareTest.ts +0 -129
  186. package/tests/Framework/Resolvers/EntityResolverTest.ts +0 -48
  187. package/tests/Framework/Router/RouterTest.ts +0 -33
  188. package/tests/Mail/MailerTest.ts +0 -76
  189. package/tests/Model/ModelTest.ts +0 -183
  190. package/tests/Router/HttpHandlerTest.ts +0 -72
  191. package/tests/Router/RequestTest.ts +0 -77
  192. package/tests/Router/WebSocketsHandlerTest.ts +0 -51
  193. package/tests/Storage/StorageTest.ts +0 -97
  194. package/tests/Support/ArrayTest.ts +0 -167
  195. package/tests/Support/StringTest.ts +0 -18
  196. package/tests/Validation/RulesTest.ts +0 -54
  197. package/types.d.ts +0 -8
@@ -1,225 +0,0 @@
1
- import { IncomingHttpHeaders, IncomingMessage } from 'http'
2
- import { Http } from '.'
3
- import { Parameters } from './Contracts'
4
- import * as querystring from 'querystring'
5
- import { ParsedUrlQuery } from 'querystring'
6
- import { File } from '../../Storage'
7
- import busboy, { FileInfo } from 'busboy'
8
- import * as os from 'os'
9
- import * as fs from 'fs'
10
- import * as Url from 'fast-url-parser'
11
- import { Readable } from 'stream'
12
- import { Request as BaseRequest } from '@Typetron/Router/Request'
13
-
14
- const cacheURLs = new Array<{url: string, instance: URL}>(100)
15
-
16
- export class Request extends BaseRequest {
17
- // static methodField = '_method'
18
-
19
- public parameters: Record<string, string | number> = {}
20
-
21
- declare protected raw: BaseRequest['raw'] & {
22
- urlOrUri: string,
23
- method: Http.Method,
24
- query?: string | ParsedUrlQuery,
25
- }
26
-
27
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
28
- // @ts-ignore
29
- protected details: BaseRequest['details'] & {
30
- url: string,
31
- uri: string,
32
- method: Http.Method,
33
- query: ParsedUrlQuery,
34
- } = {}
35
-
36
- getHeader: <T extends string | string[]>(name: keyof IncomingHttpHeaders | string) => T | undefined
37
-
38
- constructor(
39
- urlOrUri: string,
40
- method: Http.Method,
41
- query?: string | ParsedUrlQuery,
42
- cookies?: string | Parameters,
43
- body?: string | object,
44
- files?: Record<string, File | File[]>,
45
- ) {
46
- super(urlOrUri, body, cookies, files)
47
- this.raw.urlOrUri = urlOrUri
48
- this.raw.method = method
49
- this.raw.query = query
50
- }
51
-
52
- get headers(): IncomingHttpHeaders {
53
- return {}
54
- }
55
-
56
- get url(): string {
57
- return this.details.url ?? (() => {
58
- const url = Url.parse(this.raw.urlOrUri)
59
- return this.details.url = url.format()
60
- })()
61
- }
62
-
63
- get uri(): string {
64
- return this.details.uri ?? (() => {
65
- const url = cacheURLs[this.raw.urlOrUri.length]?.url === this.raw.urlOrUri
66
- ? cacheURLs[this.raw.urlOrUri.length].instance
67
- : (() => {
68
- cacheURLs[this.raw.urlOrUri.length] = {
69
- url: this.raw.urlOrUri,
70
- instance: Url.parse(this.raw.urlOrUri)
71
- }
72
- return cacheURLs[this.raw.urlOrUri.length].instance
73
- })()
74
-
75
- return this.details.uri = url.pathname ?? ''
76
- })()
77
- }
78
-
79
- get method(): Http.Method {
80
- return this.raw.method
81
- }
82
-
83
- get query(): ParsedUrlQuery {
84
- return this.details.query ?? (() => {
85
- return this.details.query = typeof this.raw.query === 'object'
86
- ? this.raw.query
87
- : querystring.parse(
88
- typeof this.raw.query === 'string'
89
- ? this.raw.query
90
- : Url.parse(this.raw.urlOrUri).query ?? ''
91
- )
92
- })()
93
- }
94
-
95
- get body() {
96
- return this.details.body ?? (() => {
97
- return this.details.body = this.raw.body
98
- })()
99
- }
100
-
101
- get cookies(): Parameters {
102
- return this.details.cookies ?? (() => {
103
- return {todo: 'parse cookies'}
104
- })()
105
- }
106
-
107
- static async loadMultipartContent(incomingMessage: IncomingMessage): Promise<[string | object, Record<string, File | File[]>]> {
108
-
109
- return new Promise((resolve, reject) => {
110
- const formDataParser = busboy({headers: incomingMessage.headers})
111
- const files: Record<string, File | File[]> = {}
112
- const content: Record<string, string> = {}
113
-
114
- formDataParser.on('file', function(fieldName: string, file: Readable, {filename, encoding, mimeType}: FileInfo) {
115
- const extension = filename.split('.').pop()
116
- const fileInstance = new File(`upload_${new Date().getTime().toString()}_${String.randomAlphaNum(9)}.${extension}`)
117
-
118
- fileInstance.originalName = filename
119
- fileInstance.directory = os.tmpdir()
120
- fileInstance.saved = true
121
-
122
- const stream = fs.createWriteStream(fileInstance.path)
123
- stream.on('error', reject)
124
-
125
- file.on('data', function(data) {
126
- stream.write(data)
127
- })
128
- file.on('end', function() {
129
- stream.end()
130
-
131
- const field = files[fieldName]
132
- files[fieldName] = field instanceof Array ? [...field, fileInstance] : field ? [field, fileInstance] : fileInstance
133
- })
134
- })
135
- formDataParser.on('field', function(fieldName, value) {
136
- content[fieldName] = value
137
- })
138
- formDataParser.on('finish', function() {
139
- resolve([content, files])
140
- })
141
-
142
- incomingMessage.pipe(formDataParser)
143
- })
144
- }
145
-
146
- set body(body: string | object | undefined) {
147
- this.details.body = body
148
- }
149
-
150
- get files() {
151
- return this.raw.files ?? {}
152
- }
153
-
154
- set files(files: Record<string, File | File[]>) {
155
- this.raw.files = files
156
- }
157
-
158
- // static async capture(message: IncomingMessage): Promise<Request> {
159
- // const request = new this(
160
- // message.url ?? '',
161
- // message.method as Http.Method || Http.Method.GET,
162
- // message.headers
163
- // )
164
- //
165
- // if (request.method !== Http.Method.GET) {
166
- // if (this.isMultipartRequest(message)) {
167
- // [request.body, request.files] = await Request.loadMultipartContent(message)
168
- // } else {
169
- // request.body = await Request.loadSimpleContent(message)
170
- // }
171
- //
172
- // // const overwrittenMethod = (request.body as Record<string, string | undefined>)[Request.methodField] || ''
173
- // // request.method = Http.Method[overwrittenMethod.toUpperCase() as Http.Method] || request.method
174
- // }
175
- //
176
- // return request
177
- // }
178
-
179
- private static isJSONRequest(incomingMessage: IncomingMessage): boolean {
180
- return Boolean(incomingMessage.headers['content-type']?.includes('application/json'))
181
- }
182
-
183
- static async loadSimpleContent(incomingMessage: IncomingMessage): Promise<string | object | undefined> {
184
- let rawData = ''
185
- incomingMessage.on('data', chunk => {
186
- rawData += chunk
187
- })
188
-
189
- return new Promise((resolve, reject) => {
190
- incomingMessage.on('end', async () => {
191
- try {
192
- if (this.isJSONRequest(incomingMessage)) {
193
- try {
194
- return resolve(JSON.parse(rawData))
195
- } catch (error) {
196
- resolve({})
197
- }
198
- }
199
-
200
- resolve(rawData)
201
- } catch (error) {
202
- if (error instanceof SyntaxError) {
203
- error.stack = `Value used: '${rawData}'\n at ` + error.stack
204
- reject(error)
205
- }
206
- resolve(rawData ? rawData : undefined)
207
- }
208
- })
209
- })
210
- }
211
-
212
- setHeadersLoader(loader: () => IncomingHttpHeaders): void {
213
- Object.defineProperty(this, 'headers', {
214
- get: function() {
215
- return loader()
216
- },
217
- enumerable: true,
218
- configurable: true
219
- })
220
- }
221
-
222
- isMultipartRequest() {
223
- return Boolean(this.getHeader('content-type')?.includes('multipart/form-data'))
224
- }
225
- }
@@ -1,35 +0,0 @@
1
- import { OutgoingHttpHeaders } from 'http'
2
- import { Http } from '.'
3
- import { Buffer } from 'buffer'
4
-
5
- type Content = unknown | undefined | number | string | object | Buffer
6
-
7
- export class Response<T = unknown> {
8
-
9
- constructor(
10
- public body: T,
11
- public status: Http.Status = Http.Status.OK,
12
- public headers: OutgoingHttpHeaders = {}
13
- ) {
14
- }
15
-
16
- static ok(content: string | object) {
17
- return new Response(content, Http.Status.OK)
18
- }
19
-
20
- static notFound(content: string | object) {
21
- return new Response(content, Http.Status.NOT_FOUND)
22
- }
23
-
24
- static badRequest(content: string | object) {
25
- return new Response(content, Http.Status.BAD_REQUEST)
26
- }
27
-
28
- setHeader(name: string, value: string) {
29
- this.headers[name] = value
30
- }
31
-
32
- setHeaders(headers: OutgoingHttpHeaders) {
33
- this.headers = headers
34
- }
35
- }
@@ -1,85 +0,0 @@
1
- export namespace Http {
2
- export enum Method {
3
- GET = 'GET',
4
- HEAD = 'HEAD',
5
- POST = 'POST',
6
- PUT = 'PUT',
7
- PATCH = 'PATCH',
8
- DELETE = 'DELETE',
9
- OPTIONS = 'OPTIONS',
10
- }
11
-
12
- export enum Status {
13
- CONTINUE = 100,
14
- SWITCHING_PROTOCOLS = 101,
15
- PROCESSING = 102, // RFC2518
16
- EARLY_HINTS = 103, // RFC8297
17
- OK = 200,
18
- CREATED = 201,
19
- ACCEPTED = 202,
20
- NON_AUTHORITATIVE_INFORMATION = 203,
21
- NO_CONTENT = 204,
22
- RESET_CONTENT = 205,
23
- PARTIAL_CONTENT = 206,
24
- MULTI_STATUS = 207, // RFC4918
25
- ALREADY_REPORTED = 208, // RFC5842
26
- IM_USED = 226, // RFC3229
27
- MULTIPLE_CHOICES = 300,
28
- MOVED_PERMANENTLY = 301,
29
- FOUND = 302,
30
- SEE_OTHER = 303,
31
- NOT_MODIFIED = 304,
32
- USE_PROXY = 305,
33
- RESERVED = 306,
34
- TEMPORARY_REDIRECT = 307,
35
- PERMANENTLY_REDIRECT = 308, // RFC7238
36
- BAD_REQUEST = 400,
37
- UNAUTHORIZED = 401,
38
- PAYMENT_REQUIRED = 402,
39
- FORBIDDEN = 403,
40
- NOT_FOUND = 404,
41
- METHOD_NOT_ALLOWED = 405,
42
- NOT_ACCEPTABLE = 406,
43
- PROXY_AUTHENTICATION_REQUIRED = 407,
44
- REQUEST_TIMEOUT = 408,
45
- CONFLICT = 409,
46
- GONE = 410,
47
- LENGTH_REQUIRED = 411,
48
- PRECONDITION_FAILED = 412,
49
- REQUEST_ENTITY_TOO_LARGE = 413,
50
- REQUEST_URI_TOO_LONG = 414,
51
- UNSUPPORTED_MEDIA_TYPE = 415,
52
- REQUESTED_RANGE_NOT_SATISFIABLE = 416,
53
- EXPECTATION_FAILED = 417,
54
- I_AM_A_TEAPOT = 418, // RFC2324
55
- MISDIRECTED_REQUEST = 421, // RFC7540
56
- UNPROCESSABLE_ENTITY = 422, // RFC4918
57
- LOCKED = 423, // RFC4918
58
- FAILED_DEPENDENCY = 424, // RFC4918
59
- RESERVED_FOR_WEBDAV_ADVANCED_COLLECTIONS_EXPIRED_PROPOSAL = 425, // RFC2817
60
- TOO_EARLY = 425, // RFC-ietf-httpbis-replay-04
61
- UPGRADE_REQUIRED = 426, // RFC2817
62
- PRECONDITION_REQUIRED = 428, // RFC6585
63
- TOO_MANY_REQUESTS = 429, // RFC6585
64
- REQUEST_HEADER_FIELDS_TOO_LARGE = 431, // RFC6585
65
- UNAVAILABLE_FOR_LEGAL_REASONS = 451,
66
- INTERNAL_SERVER_ERROR = 500,
67
- NOT_IMPLEMENTED = 501,
68
- BAD_GATEWAY = 502,
69
- SERVICE_UNAVAILABLE = 503,
70
- GATEWAY_TIMEOUT = 504,
71
- VERSION_NOT_SUPPORTED = 505,
72
- VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL = 506, // RFC2295
73
- INSUFFICIENT_STORAGE = 507, // RFC4918
74
- LOOP_DETECTED = 508, // RFC5842
75
- NOT_EXTENDED = 510, // RFC2774
76
- NETWORK_AUTHENTICATION_REQUIRED = 511, // RFC6585
77
- }
78
- }
79
-
80
- export * from './ErrorHandler'
81
- export * from './ErrorHandlerInterface'
82
- export * from './Handler'
83
- export * from './Request'
84
- export * from './Response'
85
- export * from './Errors/HttpError'
@@ -1,34 +0,0 @@
1
- import { MetadataKey } from '../Support/Metadata'
2
- import { Abstract, Type } from '../Support'
3
- import { MiddlewareInterface } from './Middleware'
4
- import { Http } from './Http'
5
- import { Guard } from './Guard'
6
- import { Container } from '@Typetron/Container'
7
-
8
- export class MethodMetadata {
9
- middleware: Abstract<MiddlewareInterface>[] = []
10
- parametersTypes: (Type<(...args: any[]) => any> | FunctionConstructor)[]
11
- name: string
12
- parametersOverrides: ((container: Container) => any)[] = []
13
- guards: typeof Guard[] = []
14
- }
15
-
16
- export class ActionMetadata extends MethodMetadata {
17
- }
18
-
19
- export class RouteMetadata extends MethodMetadata {
20
- path: string
21
- method: Http.Method
22
- }
23
-
24
- export class ControllerOptions {
25
- prefix?: string
26
- }
27
-
28
- export class ControllerMetadata extends MetadataKey('framework:controller') {
29
- middleware: Abstract<MiddlewareInterface>[] = []
30
- routes: {[key: string]: RouteMetadata} = {}
31
- actions: {[key: string]: ActionMetadata} = {}
32
- methods: {[key: string]: MethodMetadata} = {}
33
- guards: typeof Guard[] = []
34
- }
@@ -1,16 +0,0 @@
1
- import { Response } from './Http'
2
- import { Request } from '@Typetron/Router/Request'
3
-
4
- export type RequestHandler = (request: Request) => Promise<Response>
5
-
6
- /**
7
- * @deprecated Please use the Middleware, HttpMiddleware or WebsocketMiddleware classes instead
8
- */
9
- export type MiddlewareInterface = {
10
- handle(request: Request, next: RequestHandler): Promise<Response>
11
- }
12
-
13
- export abstract class GlobalMiddleware {
14
- abstract handle(request: Request, next: RequestHandler): Promise<Response>
15
- }
16
-
package/Router/Request.ts DELETED
@@ -1,65 +0,0 @@
1
- import { File } from '../Storage'
2
-
3
- export class Request {
4
- public parameters: Record<string, string | number> = {}
5
-
6
- protected raw: {
7
- name: string,
8
- body?: string | object,
9
- cookies?: Record<string, string | undefined> | string,
10
- files?: Record<string, File | File[]>,
11
- }
12
-
13
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
14
- // @ts-ignore
15
- protected details: {
16
- name: string,
17
- body: string | object | undefined,
18
- cookies: Record<string, string | undefined>,
19
- files: Record<string, File | File[]>,
20
- } = {}
21
-
22
- constructor(
23
- name: string,
24
- body?: string | object,
25
- cookies?: string | Record<string, string | undefined>,
26
- files?: Record<string, File | File[]>,
27
- ) {
28
- this.raw = {
29
- name,
30
- cookies,
31
- body,
32
- files,
33
- }
34
- }
35
-
36
- get name(): string {
37
- return this.details.name ?? (() => {
38
- return this.details.name = this.raw.name
39
- })()
40
- }
41
-
42
- get body() {
43
- return this.details.body ?? (() => {
44
- return this.details.body = this.raw.body
45
- })()
46
- }
47
-
48
- set body(body: string | object | undefined) {
49
- this.details.body = body
50
- }
51
-
52
- get cookies(): Record<string, string | undefined> {
53
- return this.details.cookies ?? (() => {
54
- return {todo: 'parse cookies'}
55
- })()
56
- }
57
-
58
- get files() {
59
- return this.raw.files ?? {}
60
- }
61
-
62
- set files(files: Record<string, File | File[]>) {
63
- this.raw.files = files
64
- }
65
- }
package/Router/Route.ts DELETED
@@ -1,16 +0,0 @@
1
- import { Abstract, AnyFunction, Constructor, Type } from '../Support'
2
- import { GlobalMiddleware } from './Middleware'
3
- import { Guard } from './Guard'
4
-
5
- export abstract class Route {
6
- guards: (typeof Guard)[] = []
7
-
8
- constructor(
9
- public name = '',
10
- public controller: Constructor,
11
- public controllerMethod: string,
12
- public parametersTypes: (Type<AnyFunction> | FunctionConstructor)[] = [],
13
- public middleware: Abstract<GlobalMiddleware>[] = []
14
- ) {
15
- }
16
- }
@@ -1,5 +0,0 @@
1
- export class RouteNotFoundError extends Error {
2
- constructor(path: string) {
3
- super(`Route '${path}' not found`)
4
- }
5
- }
package/Router/Router.ts DELETED
@@ -1,35 +0,0 @@
1
- import { Container, Inject } from '../Container'
2
- import { Storage } from '../Storage'
3
- import { Abstract } from '../Support'
4
- import { GlobalMiddleware } from './Middleware'
5
- import { WebsocketRoute } from './Websockets/WebsocketRoute'
6
- import { HttpRoute } from '@Typetron/Router/Http/HttpRoute'
7
- import { HttpMiddleware } from '@Typetron/Router/Http/Middleware'
8
- import { WebsocketMiddleware } from '@Typetron/Router/Websockets/Middleware'
9
-
10
- export class Router {
11
-
12
- @Inject()
13
- app: Container
14
-
15
- routes: HttpRoute[] = []
16
- actions = new Map<string, WebsocketRoute>()
17
-
18
- middleware: {
19
- global: Abstract<GlobalMiddleware>[],
20
- http: Abstract<HttpMiddleware>[],
21
- websocket: Abstract<WebsocketMiddleware>[],
22
- } = {
23
- global: [],
24
- http: [],
25
- websocket: [],
26
- }
27
-
28
- public loadControllers(directory: string) {
29
- this.app.get(Storage)
30
- .files(directory, true)
31
- .whereIn('extension', ['ts'])
32
- .forEach(file => require(file.path))
33
- }
34
-
35
- }
@@ -1,6 +0,0 @@
1
- import { Request, Response } from '@Typetron/Router/Http'
2
-
3
- export * from './node'
4
- export * from './uNetworking'
5
-
6
- export type AppServer = (port: number, handler: (request: Request) => Promise<Response>) => void
@@ -1,49 +0,0 @@
1
- import { Http, Request, Response } from '@Typetron/Router/Http'
2
- import { createServer, IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http'
3
- import { Buffer } from 'buffer'
4
-
5
- export function nodeServer(port: number, handler: (request: Request) => Promise<Response>) {
6
- const server = createServer(async (incomingMessage: IncomingMessage, serverResponse: ServerResponse) => {
7
- const request = new Request(
8
- incomingMessage.url ?? '',
9
- incomingMessage.method as Http.Method || Http.Method.GET
10
- )
11
-
12
- request.setHeadersLoader(() => incomingMessage.headers)
13
- request.getHeader = <T extends string | string[] | undefined>(name: keyof IncomingHttpHeaders | string): T => {
14
- return incomingMessage.headers[String(name).toLowerCase()] as T
15
- }
16
-
17
- if (request.method.toLowerCase() !== Http.Method.GET.toLowerCase()) {
18
- if (request.isMultipartRequest()) {
19
- [request.body, request.files] = await Request.loadMultipartContent(incomingMessage)
20
- } else {
21
- request.body = await Request.loadSimpleContent(incomingMessage)
22
- }
23
-
24
- // const overwrittenMethod = (request.body as Record<string, string | undefined>)[Request.methodField] || ''
25
- // request.method = Http.Method[overwrittenMethod.toUpperCase() as Http.Method] || request.method
26
- }
27
-
28
- const response = await handler(request)
29
-
30
- let content = response.body
31
-
32
- if (!(content instanceof Buffer)) {
33
- if (content instanceof Object) {
34
- content = JSON.stringify(content)
35
- serverResponse.setHeader('Content-Type', 'application/json')
36
- }
37
- content = String(content ?? '')
38
- }
39
-
40
- for (const header in response.headers) {
41
- serverResponse.setHeader(header, response.headers[header] || '')
42
- }
43
-
44
- serverResponse.statusCode = response.status
45
- serverResponse.end(content)
46
- })
47
-
48
- server.listen(port)
49
- }