@deepkit/http 1.0.1-alpha.100

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 (121) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/dist/.gitkeep +0 -0
  4. package/dist/cjs/index.d.ts +14 -0
  5. package/dist/cjs/index.js +31 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/src/controllers.d.ts +13 -0
  8. package/dist/cjs/src/controllers.js +17 -0
  9. package/dist/cjs/src/controllers.js.map +1 -0
  10. package/dist/cjs/src/decorator.d.ts +241 -0
  11. package/dist/cjs/src/decorator.js +422 -0
  12. package/dist/cjs/src/decorator.js.map +1 -0
  13. package/dist/cjs/src/filter.d.ts +49 -0
  14. package/dist/cjs/src/filter.js +215 -0
  15. package/dist/cjs/src/filter.js.map +1 -0
  16. package/dist/cjs/src/http-app.d.ts +8 -0
  17. package/dist/cjs/src/http-app.js +16 -0
  18. package/dist/cjs/src/http-app.js.map +1 -0
  19. package/dist/cjs/src/http.d.ts +278 -0
  20. package/dist/cjs/src/http.js +878 -0
  21. package/dist/cjs/src/http.js.map +1 -0
  22. package/dist/cjs/src/kernel.d.ts +16 -0
  23. package/dist/cjs/src/kernel.js +79 -0
  24. package/dist/cjs/src/kernel.js.map +1 -0
  25. package/dist/cjs/src/logger.d.ts +7 -0
  26. package/dist/cjs/src/logger.js +34 -0
  27. package/dist/cjs/src/logger.js.map +1 -0
  28. package/dist/cjs/src/middleware.d.ts +61 -0
  29. package/dist/cjs/src/middleware.js +95 -0
  30. package/dist/cjs/src/middleware.js.map +1 -0
  31. package/dist/cjs/src/model.d.ts +165 -0
  32. package/dist/cjs/src/model.js +398 -0
  33. package/dist/cjs/src/model.js.map +1 -0
  34. package/dist/cjs/src/module.config.d.ts +84 -0
  35. package/dist/cjs/src/module.config.js +14 -0
  36. package/dist/cjs/src/module.config.js.map +1 -0
  37. package/dist/cjs/src/module.d.ts +14 -0
  38. package/dist/cjs/src/module.js +124 -0
  39. package/dist/cjs/src/module.js.map +1 -0
  40. package/dist/cjs/src/request-parser.d.ts +36 -0
  41. package/dist/cjs/src/request-parser.js +305 -0
  42. package/dist/cjs/src/request-parser.js.map +1 -0
  43. package/dist/cjs/src/router.d.ts +230 -0
  44. package/dist/cjs/src/router.js +617 -0
  45. package/dist/cjs/src/router.js.map +1 -0
  46. package/dist/cjs/src/static-serving.d.ts +32 -0
  47. package/dist/cjs/src/static-serving.js +157 -0
  48. package/dist/cjs/src/static-serving.js.map +1 -0
  49. package/dist/cjs/src/utils.d.ts +1 -0
  50. package/dist/cjs/src/utils.js +13 -0
  51. package/dist/cjs/src/utils.js.map +1 -0
  52. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  53. package/dist/esm/index.d.ts +14 -0
  54. package/dist/esm/index.js +15 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/package.json +1 -0
  57. package/dist/esm/src/controllers.d.ts +13 -0
  58. package/dist/esm/src/controllers.js +13 -0
  59. package/dist/esm/src/controllers.js.map +1 -0
  60. package/dist/esm/src/decorator.d.ts +241 -0
  61. package/dist/esm/src/decorator.js +414 -0
  62. package/dist/esm/src/decorator.js.map +1 -0
  63. package/dist/esm/src/filter.d.ts +49 -0
  64. package/dist/esm/src/filter.js +209 -0
  65. package/dist/esm/src/filter.js.map +1 -0
  66. package/dist/esm/src/http-app.d.ts +8 -0
  67. package/dist/esm/src/http-app.js +12 -0
  68. package/dist/esm/src/http-app.js.map +1 -0
  69. package/dist/esm/src/http.d.ts +278 -0
  70. package/dist/esm/src/http.js +841 -0
  71. package/dist/esm/src/http.js.map +1 -0
  72. package/dist/esm/src/kernel.d.ts +16 -0
  73. package/dist/esm/src/kernel.js +75 -0
  74. package/dist/esm/src/kernel.js.map +1 -0
  75. package/dist/esm/src/logger.d.ts +7 -0
  76. package/dist/esm/src/logger.js +30 -0
  77. package/dist/esm/src/logger.js.map +1 -0
  78. package/dist/esm/src/middleware.d.ts +61 -0
  79. package/dist/esm/src/middleware.js +90 -0
  80. package/dist/esm/src/middleware.js.map +1 -0
  81. package/dist/esm/src/model.d.ts +165 -0
  82. package/dist/esm/src/model.js +363 -0
  83. package/dist/esm/src/model.js.map +1 -0
  84. package/dist/esm/src/module.config.d.ts +84 -0
  85. package/dist/esm/src/module.config.js +10 -0
  86. package/dist/esm/src/module.config.js.map +1 -0
  87. package/dist/esm/src/module.d.ts +14 -0
  88. package/dist/esm/src/module.js +120 -0
  89. package/dist/esm/src/module.js.map +1 -0
  90. package/dist/esm/src/request-parser.d.ts +36 -0
  91. package/dist/esm/src/request-parser.js +295 -0
  92. package/dist/esm/src/request-parser.js.map +1 -0
  93. package/dist/esm/src/router.d.ts +230 -0
  94. package/dist/esm/src/router.js +605 -0
  95. package/dist/esm/src/router.js.map +1 -0
  96. package/dist/esm/src/static-serving.d.ts +32 -0
  97. package/dist/esm/src/static-serving.js +149 -0
  98. package/dist/esm/src/static-serving.js.map +1 -0
  99. package/dist/esm/src/utils.d.ts +1 -0
  100. package/dist/esm/src/utils.js +9 -0
  101. package/dist/esm/src/utils.js.map +1 -0
  102. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  103. package/index.ts +14 -0
  104. package/package.json +67 -0
  105. package/src/controllers.ts +11 -0
  106. package/src/decorator.ts +411 -0
  107. package/src/filter.ts +224 -0
  108. package/src/http-app.ts +11 -0
  109. package/src/http.ts +828 -0
  110. package/src/kernel.ts +79 -0
  111. package/src/logger.ts +20 -0
  112. package/src/middleware.ts +116 -0
  113. package/src/model.ts +392 -0
  114. package/src/module.config.ts +95 -0
  115. package/src/module.ts +116 -0
  116. package/src/request-parser.ts +346 -0
  117. package/src/router.ts +747 -0
  118. package/src/static-serving.ts +153 -0
  119. package/src/utils.ts +5 -0
  120. package/tsconfig.esm.json +36 -0
  121. package/tsconfig.json +53 -0
@@ -0,0 +1,363 @@
1
+ function __assignType(fn, args) {
2
+ fn.__type = args;
3
+ return fn;
4
+ }
5
+ const __ΩConcatArray = ['T', 'length', 'separator', 'join', 'start', 'end', 'slice', 'b!P\'4"9\'e"!LP&2#8&1$P\'2%8\'2&8e#!F1\'M'];
6
+ const __ΩError = ['name', 'message', 'stack', 'P&4!&4"&4#8M'];
7
+ const __ΩPartial = ['T', 'l+e#!e"!fRb!Pde"!gN#"'];
8
+ const __ΩReadonlyArray = ['T', 'length', 'toString', 'toLocaleString', () => __ΩConcatArray, 'items', 'concat', () => __ΩConcatArray, 'separator', 'join', 'start', 'end', 'slice', 'searchElement', 'fromIndex', 'indexOf', 'lastIndexOf', 'value', 'index', 'array', '', 'predicate', 'thisArg', 'every', 'some', 'callbackfn', 'forEach', 'map', 'filter', 'previousValue', 'currentValue', 'currentIndex', 'reduce', 'initialValue', 'reduceRight', 'b!P\'4"9P&1#P&1$Pe#!o%"@2&e#!F1\'PPe$!e$!o("J@2&e#!F1\'P&2)8&1*P\'2+8\'2,8e#!F1-Pe#!2.\'2/8\'10Pe#!2.\'2/8\'11PPe$!22\'23e$!F924!/526"278!18PPe$!22\'23e$!F924#/526"278)18PPe$!22\'23e$!F924#/526"278)19PPe$!22\'23e$!F924$/52:"278$1;PPe$!22\'23e$!F924"/52:"278"F1<PPe$!22\'23e$!F924!/526"278"F1=PPe$!22\'23e$!F924#/526"278e#!F1=PPe$!2>e$!2?\'2@e$!F924e$!/52:e#!1APPe$!2>e$!2?\'2@e$!F924e$!/52:e#!2Be#!1APP"2>e$!2?\'2@e$!F924"/52:"2B"1APPe$!2>e$!2?\'2@e$!F924e$!/52:e#!1CPPe$!2>e$!2?\'2@e$!F924e$!/52:e#!2Be#!1CPP"2>e$!2?\'2@e$!F924"/52:"2B"1C\'e"!LM'];
9
+ /*
10
+ * Deepkit Framework
11
+ * Copyright (C) 2021 Deepkit UG, Marc J. Schmidt
12
+ *
13
+ * This program is free software: you can redistribute it and/or modify
14
+ * it under the terms of the MIT License.
15
+ *
16
+ * You should have received a copy of the MIT License along with this program.
17
+ */
18
+ import { IncomingMessage, ServerResponse } from 'http';
19
+ import { UploadedFile } from './router.js';
20
+ import * as querystring from 'querystring';
21
+ import { Writable } from 'stream';
22
+ import { metaAnnotation, ReflectionKind, ValidationErrorItem } from '@deepkit/type';
23
+ import { asyncOperation, isArray } from '@deepkit/core';
24
+ export class HttpResponse extends ServerResponse {
25
+ status(code) {
26
+ this.writeHead(code);
27
+ this.end();
28
+ }
29
+ }
30
+ HttpResponse.__type = [() => ServerResponse, 'code', 'status', 'P7!P\'2""0#5'];
31
+ /**
32
+ * Reads the body of the request and returns it as a Buffer.
33
+ * The result will be cached in the request object as `request.body`.
34
+ *
35
+ * Deepkit's router will automatically use `request.body` if available.
36
+ */
37
+ export function readBody(request) {
38
+ return asyncOperation(__assignType((resolve, reject) => {
39
+ const chunks = [];
40
+ request.on('data', __assignType((chunk) => {
41
+ chunks.push(chunk);
42
+ }, ['chunk', '', 'P!2!"/"']));
43
+ request.on('end', () => {
44
+ const body = Buffer.concat(chunks);
45
+ //the router uses this now instead of trying to read the body again
46
+ request.body = body;
47
+ resolve(body);
48
+ });
49
+ request.on('error', __assignType((error) => {
50
+ reject(error);
51
+ }, [() => __ΩError, 'error', '', 'Pn!2""/#']));
52
+ }, ['resolve', 'reject', '', 'P"2!"2""/#']));
53
+ }
54
+ readBody.__type = ['request', 'readBody', 'P!2!!`/"'];
55
+ export function createRequestWithCachedBody(request, body) {
56
+ var _a;
57
+ const headers = request.headers;
58
+ const method = request.method;
59
+ const url = request.url;
60
+ const writable = new Writable({
61
+ write: __assignType(function write(chunk, encoding, callback) {
62
+ callback();
63
+ }, ['chunk', 'encoding', 'callback', 'write', 'P"2!"2""2#"/$']),
64
+ writev: __assignType(function writev(chunks, callback) {
65
+ callback();
66
+ }, ['chunks', 'callback', 'writev', 'P"2!"2""/#'])
67
+ });
68
+ return new (_a = class extends HttpRequest {
69
+ constructor() {
70
+ super(...arguments);
71
+ this.url = url;
72
+ this.method = method;
73
+ this.position = 0;
74
+ this.headers = headers;
75
+ }
76
+ _read(size) {
77
+ if (this.complete) {
78
+ this.push(null);
79
+ }
80
+ else {
81
+ //in Node 18 this seems to be necessary to not trigger the abort event
82
+ this.complete = true;
83
+ this.push(body);
84
+ }
85
+ }
86
+ },
87
+ _a.__type = [() => HttpRequest, 'size', '_read', 'P7!P\'2""0#5'],
88
+ _a)(writable);
89
+ }
90
+ createRequestWithCachedBody.__type = [() => __ΩPartial, 'request', 'body', () => HttpRequest, 'createRequestWithCachedBody', 'P!o!"2"!2#P7$/%'];
91
+ const __ΩHttpRequestQuery = ['P&&LM'];
92
+ export { __ΩHttpRequestQuery as __ΩHttpRequestQuery };
93
+ const __ΩHttpRequestResolvedParameters = ['P&"LM'];
94
+ export { __ΩHttpRequestResolvedParameters as __ΩHttpRequestResolvedParameters };
95
+ const __ΩHttpRequestPositionedParameters = ['arguments', () => __ΩHttpRequestResolvedParameters, 'parameters', 'P"F4!n"4#M'];
96
+ export { __ΩHttpRequestPositionedParameters as __ΩHttpRequestPositionedParameters };
97
+ export class BodyValidationError {
98
+ constructor(errors = []) {
99
+ this.errors = errors;
100
+ }
101
+ hasErrors(prefix) {
102
+ return this.getErrors(prefix).length > 0;
103
+ }
104
+ getErrors(prefix) {
105
+ if (prefix)
106
+ return this.errors.filter(__assignType(v => v.path.startsWith(prefix), ['v', '', 'P"2!"/"']));
107
+ return this.errors;
108
+ }
109
+ getErrorsForPath(path) {
110
+ return this.errors.filter(__assignType(v => v.path === path, ['v', '', 'P"2!"/"']));
111
+ }
112
+ getErrorMessageForPath(path) {
113
+ return this.getErrorsForPath(path).map(__assignType(v => v.message, ['v', '', 'P"2!"/"'])).join(', ');
114
+ }
115
+ }
116
+ BodyValidationError.__type = [() => ValidationErrorItem, 'errors', () => [], 'constructor', 'prefix', 'hasErrors', () => ValidationErrorItem, 'getErrors', 'path', () => ValidationErrorItem, 'getErrorsForPath', 'getErrorMessageForPath', 'PP7!F2":9>#"0$P&2%8)0&P&2%8P7\'F0(P&2)P7*F0+P&2)&0,5'];
117
+ export class ValidatedBody {
118
+ constructor(error, value) {
119
+ this.error = error;
120
+ this.value = value;
121
+ }
122
+ valid() {
123
+ return this.value !== undefined;
124
+ }
125
+ }
126
+ ValidatedBody.__type = ['T', () => BodyValidationError, 'error', 'value', 'constructor', 'valid', 'b!PP7"2#:e"!2$8:"0%P!0&5'];
127
+ const __ΩHttpBody = ['T', "httpBody", '__meta', 'b!Pe"!PP."G4#8MK'];
128
+ export { __ΩHttpBody as __ΩHttpBody };
129
+ const __ΩHttpBodyValidation = ['T', () => ValidatedBody, "httpBodyValidation", '__meta', 'b!PPe#!7"PP.#G4$8MK'];
130
+ export { __ΩHttpBodyValidation as __ΩHttpBodyValidation };
131
+ const __ΩHttpPath = ['T', 'Options', "httpPath", '__meta', 'b!PMc"Pe"!PP.#e$"G4$8MK'];
132
+ export { __ΩHttpPath as __ΩHttpPath };
133
+ const __ΩHttpHeader = ['T', 'Options', "httpHeader", '__meta', 'b!PMc"Pe"!PP.#e$"G4$8MK'];
134
+ export { __ΩHttpHeader as __ΩHttpHeader };
135
+ const __ΩHttpQuery = ['T', 'Options', "httpQuery", '__meta', 'b!PMc"Pe"!PP.#e$"G4$8MK'];
136
+ export { __ΩHttpQuery as __ΩHttpQuery };
137
+ const __ΩHttpQueries = ['T', 'Options', "httpQueries", '__meta', 'b!PMc"Pe"!PP.#e$"G4$8MK'];
138
+ export { __ΩHttpQueries as __ΩHttpQueries };
139
+ const __ΩHttpRegExp = ['T', 'Pattern', "httpRegExp", '__meta', 'b!b"Pe"!PP.#e$"G4$8MK'];
140
+ export { __ΩHttpRegExp as __ΩHttpRegExp };
141
+ export function getRegExp(type) {
142
+ const options = metaAnnotation.getForName(type, 'httpRegExp');
143
+ if (!options || !options[0])
144
+ return;
145
+ if (options[0].kind === ReflectionKind.literal && 'string' === typeof options[0].literal)
146
+ return options[0].literal;
147
+ if (options[0].kind === ReflectionKind.literal && options[0].literal instanceof RegExp)
148
+ return options[0].literal;
149
+ return;
150
+ }
151
+ getRegExp.__type = ['type', 'getRegExp', 'P"2!P&A-J/"'];
152
+ export class RequestBuilder {
153
+ constructor(path, method = 'GET') {
154
+ this.path = path;
155
+ this.method = method;
156
+ this.contentBuffer = Buffer.alloc(0);
157
+ this._headers = {};
158
+ }
159
+ getUrl() {
160
+ if (this.queryPath) {
161
+ return this.path + '?' + this.queryPath;
162
+ }
163
+ return this.path;
164
+ }
165
+ build() {
166
+ return createRequestWithCachedBody({
167
+ method: this.method,
168
+ url: this.getUrl(),
169
+ headers: this._headers,
170
+ }, this.contentBuffer);
171
+ }
172
+ headers(headers) {
173
+ this._headers = headers;
174
+ return this;
175
+ }
176
+ header(name, value) {
177
+ this._headers[name] = String(value);
178
+ return this;
179
+ }
180
+ json(body) {
181
+ this.contentBuffer = Buffer.from(JSON.stringify(body), 'utf8');
182
+ this._headers['content-type'] = 'application/json; charset=utf-8';
183
+ this._headers['content-length'] = String(this.contentBuffer.byteLength);
184
+ return this;
185
+ }
186
+ multiPart(items) {
187
+ const boundary = '--------------------------' + Math.random().toString(36).substr(2, 10);
188
+ this._headers['content-type'] = 'multipart/form-data; boundary=' + boundary;
189
+ const parts = items.map(__assignType(item => {
190
+ if (item.file) {
191
+ const header = Buffer.from(`--${boundary}\r
192
+ Content-Disposition: form-data; name="${item.name}"; filename="${item.fileName || 'file'}"\r
193
+ Content-Type: application/octet-stream\r
194
+ \r\n`, 'utf8');
195
+ return Buffer.concat([header, item.file, Buffer.from('\r\n', 'utf8')]);
196
+ }
197
+ else if (item.json) {
198
+ const header = Buffer.from(`--${boundary}\r
199
+ Content-Disposition: form-data; name="${item.name}"\r
200
+ Content-Type: application/json\r
201
+ \r\n`, 'utf8');
202
+ return Buffer.concat([header, Buffer.from(JSON.stringify(item.json) + '\r\n', 'utf8')]);
203
+ }
204
+ else {
205
+ throw new Error('Invalid multiPart item');
206
+ }
207
+ }, ['item', '', 'P"2!"/"']));
208
+ parts.push(Buffer.from(`--${boundary}--`, 'utf8'));
209
+ this.contentBuffer = Buffer.concat(parts);
210
+ this._headers['content-length'] = String(this.contentBuffer.byteLength);
211
+ return this;
212
+ }
213
+ body(body) {
214
+ if ('string' === typeof body) {
215
+ this.contentBuffer = Buffer.from(body, 'utf8');
216
+ }
217
+ else {
218
+ this.contentBuffer = body;
219
+ }
220
+ this._headers['content-length'] = String(this.contentBuffer.byteLength);
221
+ return this;
222
+ }
223
+ query(query) {
224
+ this.queryPath = querystring.stringify(query);
225
+ return this;
226
+ }
227
+ }
228
+ RequestBuilder.__type = ['contentBuffer', function () { return Buffer.alloc(0); }, '_headers', function () { return {}; }, 'queryPath', 'path', 'method', () => "GET", 'constructor', 'getUrl', () => HttpRequest, 'build', 'headers', 'name', 'value', 'header', 'body', 'json', 'file', 'fileName', 'items', 'multiPart', 'query', '!3!<>"P&&LM3#<>$&3%8<P&2&<&2\'<>("0)P"0*PP7+0,PP&&LM2-!0-P&2.P&\'J2/!00P%21!02PP&4.W438&448"428MF25!06PP&!J21!01P"27!075'];
229
+ export class HttpRequest extends IncomingMessage {
230
+ constructor() {
231
+ super(...arguments);
232
+ /**
233
+ * A store that can be used to transport data from guards/listeners to ParameterResolvers/controllers.
234
+ */
235
+ this.store = {};
236
+ this.uploadedFiles = {};
237
+ }
238
+ async readBody() {
239
+ if (this.body)
240
+ return this.body;
241
+ return await readBody(this);
242
+ }
243
+ async readBodyText() {
244
+ return (await this.readBody()).toString('utf8');
245
+ }
246
+ static GET(path) {
247
+ return new RequestBuilder(path);
248
+ }
249
+ static POST(path) {
250
+ return new RequestBuilder(path, 'POST');
251
+ }
252
+ static OPTIONS(path) {
253
+ return new RequestBuilder(path, 'OPTIONS');
254
+ }
255
+ static TRACE(path) {
256
+ return new RequestBuilder(path, 'TRACE');
257
+ }
258
+ static HEAD(path) {
259
+ return new RequestBuilder(path, 'HEAD');
260
+ }
261
+ static PATCH(path) {
262
+ return new RequestBuilder(path, 'PATCH');
263
+ }
264
+ static PUT(path) {
265
+ return new RequestBuilder(path, 'PUT');
266
+ }
267
+ static DELETE(path) {
268
+ return new RequestBuilder(path, 'DELETE');
269
+ }
270
+ getUrl() {
271
+ return this.url || '/';
272
+ }
273
+ getMethod() {
274
+ return this.method || 'GET';
275
+ }
276
+ getRemoteAddress() {
277
+ return this.socket.remoteAddress || '';
278
+ }
279
+ }
280
+ HttpRequest.__type = [() => IncomingMessage, 'store', function () { return {}; }, () => UploadedFile, 'uploadedFiles', function () { return {}; }, 'body', 'readBody', 'readBodyText', 'path', () => RequestBuilder, 'GET', () => RequestBuilder, 'POST', () => RequestBuilder, 'OPTIONS', () => RequestBuilder, 'TRACE', () => RequestBuilder, 'HEAD', () => RequestBuilder, 'PATCH', () => RequestBuilder, 'PUT', () => RequestBuilder, 'DELETE', 'getUrl', 'getMethod', 'getRemoteAddress', 'P7!P&"LM3">#P&P7$LM3%>&!3\'8P!`0(P&`0)P&2*P7+0,sP&2*P7-0.sP&2*P7/00sP&2*P7102sP&2*P7304sP&2*P7506sP&2*P7708sP&2*P790:sP&0;P&0<P&0=5'];
281
+ export class MemoryHttpResponse extends HttpResponse {
282
+ constructor() {
283
+ super(...arguments);
284
+ this.body = Buffer.alloc(0);
285
+ this.headers = Object.create(null);
286
+ }
287
+ setHeader(name, value) {
288
+ this.headers[name] = value;
289
+ super.setHeader(name, value);
290
+ return this;
291
+ }
292
+ removeHeader(name) {
293
+ delete this.headers[name];
294
+ super.removeHeader(name);
295
+ }
296
+ getHeader(name) {
297
+ return this.headers[name];
298
+ }
299
+ getHeaders() {
300
+ return this.headers;
301
+ }
302
+ writeHead(statusCode, headersOrReasonPhrase, headers) {
303
+ headers = typeof headersOrReasonPhrase === 'string' ? headers : headersOrReasonPhrase;
304
+ if (headers && !isArray(headers))
305
+ this.headers = headers;
306
+ if (typeof headersOrReasonPhrase === 'string')
307
+ return super.writeHead(statusCode, headersOrReasonPhrase, headers);
308
+ return super.writeHead(statusCode, headers);
309
+ }
310
+ get json() {
311
+ const json = this.bodyString;
312
+ try {
313
+ return JSON.parse(json);
314
+ }
315
+ catch (error) {
316
+ throw new Error(`Could not parse JSON: ${error.message}, body: ${json}`);
317
+ }
318
+ }
319
+ get text() {
320
+ return this.bodyString;
321
+ }
322
+ get bodyString() {
323
+ return this.body.toString('utf8');
324
+ }
325
+ write(chunk, encoding, callback) {
326
+ if (typeof encoding === 'function') {
327
+ callback = encoding;
328
+ encoding = null;
329
+ }
330
+ if (chunk) {
331
+ if ('string' === typeof chunk) {
332
+ chunk = Buffer.from(chunk, encoding || 'utf8');
333
+ }
334
+ this.body = Buffer.concat([this.body, chunk]);
335
+ }
336
+ if (callback)
337
+ callback();
338
+ return true;
339
+ }
340
+ end(chunk, encoding, callback) {
341
+ if (typeof chunk === 'function') {
342
+ callback = chunk;
343
+ chunk = null;
344
+ encoding = null;
345
+ }
346
+ else if (typeof encoding === 'function') {
347
+ callback = encoding;
348
+ encoding = null;
349
+ }
350
+ if (chunk) {
351
+ if ('string' === typeof chunk) {
352
+ chunk = Buffer.from(chunk, encoding || 'utf8');
353
+ }
354
+ this.body = Buffer.concat([this.body, chunk]);
355
+ }
356
+ this.emit('finish');
357
+ super.end(chunk, encoding, callback);
358
+ this.emit('close');
359
+ return this;
360
+ }
361
+ }
362
+ MemoryHttpResponse.__type = [() => HttpResponse, 'body', function () { return Buffer.alloc(0); }, 'headers', function () { return Object.create(null); }, 'name', () => __ΩReadonlyArray, 'value', 'setHeader', 'removeHeader', 'getHeader', 'getHeaders', 'statusCode', 'headersOrReasonPhrase', 'writeHead', 'chunk', 'encoding', 'callback', 'write', 'end', 'P7!!3">#P&P\'&&F-JLM3$>%P&2&P\'&&o\'"J2(!0)P&2&"0*P&2&"0+P!0,P\'2-P&!!FJ2.8P!!FJ2$8!0/!!!P"20"21"228"03P"20"218"228"045'];
363
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/model.ts"],"names":[],"mappings":";;;;;;;;AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAA2C,cAAc,EAAE,MAAM,MAAM,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,WAAW,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAQ,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC5C,MAAM,CAAC,IAAY;QACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,EAAE,CAAC;IACf,CAAC;;;AAGL;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAwB;IAC7C,OAAO,cAAc,cAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,EAAE,CAAC,MAAM,eAAE,CAAC,KAAa,EAAE,EAAE;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,4BAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACnB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACnC,mEAAmE;YAClE,OAAuB,CAAC,IAAI,GAAG,IAAI,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,OAAO,eAAE,CAAC,KAAY,EAAE,EAAE;YACjC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,6CAAC,CAAC;IACP,CAAC,2CAAC,CAAC;AACP,CAAC;;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAiC,EAAE,IAAY;;IACvF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAExB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC1B,KAAK,wBAAL,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ;YAC3B,QAAQ,EAAE,CAAC;QACf,CAAC;QACD,MAAM,wBAAN,MAAM,CAAC,MAAM,EAAE,QAAQ;YACnB,QAAQ,EAAE,CAAC;QACf,CAAC;KACJ,CAAC,CAAC;IACH,OAAO,IAAI,MAAC,KAAM,SAAQ,WAAW;YAAzB;;gBACR,QAAG,GAAG,GAAG,CAAC;gBACV,WAAM,GAAG,MAAM,CAAC;gBAChB,aAAQ,GAAG,CAAC,CAAC;gBAEb,YAAO,GAAG,OAAc,CAAC;aAW5B;YATG,KAAK,CAAC,IAAY;gBACd,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnB;qBAAM;oBACH,sEAAsE;oBACtE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnB;YACL,CAAC;SACJ;;WAAC,CAAC,QAAe,CAAC,CAAC;AACxB,CAAC;;;;;;;;AAMD,MAAM,OAAO,mBAAmB;IAC5B,YACoB,SAAgC,EAAE;QAAlC,WAAM,GAAN,MAAM,CAA4B;IAEtD,CAAC;IAED,SAAS,CAAC,MAAe;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,CAAC,MAAe;QACrB,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,cAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,wBAAC,CAAC;QAEtE,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,gBAAgB,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,cAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,wBAAC,CAAC;IACpD,CAAC;IAED,sBAAsB,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,cAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,wBAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;;;AAGL,MAAM,OAAO,aAAa;IACtB,YAAmB,KAA0B,EAAS,KAAS;QAA5C,UAAK,GAAL,KAAK,CAAqB;QAAS,UAAK,GAAL,KAAK,CAAI;IAC/D,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;IACpC,CAAC;;;;;;;;;;;;;;;;;AA0BL,MAAM,UAAU,SAAS,CAAC,IAAU;IAChC,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO;IACpC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO,IAAI,QAAQ,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACpH,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,YAAY,MAAM;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAClH,OAAO;AACX,CAAC;;AAED,MAAM,OAAO,cAAc;IAKvB,YACc,IAAY,EACZ,SAAiB,KAAK;QADtB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAgB;QAN1B,kBAAa,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,aAAQ,GAA+B,EAAE,CAAC;IAOpD,CAAC;IAED,MAAM;QACF,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,OAAO,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;SAC3C;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK;QACD,OAAO,2BAA2B,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;YAClB,OAAO,EAAE,IAAI,CAAC,QAAQ;SACzB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,OAAmC;QACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,KAAsB;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,IAAY;QACb,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,iCAAiC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,KAA2E;QACjF,MAAM,QAAQ,GAAG,4BAA4B,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,gCAAgC,GAAG,QAAQ,CAAC;QAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,cAAC,IAAI,CAAC,EAAE;YAC3B,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ;wCAChB,IAAI,CAAC,IAAI,gBAAgB,IAAI,CAAC,QAAQ,IAAI,MAAM;;KAEnF,EAAE,MAAM,CAAC,CAAC;gBACC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aAC1E;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE;gBAClB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ;wCAChB,IAAI,CAAC,IAAI;;KAE5C,EAAE,MAAM,CAAC,CAAC;gBACC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aAC3F;iBAAM;gBACH,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;aAC7C;QACL,CAAC,2BAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,IAAqB;QACtB,IAAI,QAAQ,KAAK,OAAO,IAAI,EAAE;YAC1B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAClD;aAAM;YACH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B;QACD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,KAAU;QACZ,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;;+DAjFiC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,sCACA,EAAE;AAmFvD,MAAM,OAAO,WAAY,SAAQ,eAAe;IAAhD;;QACI;;WAEG;QACI,UAAK,GAA4B,EAAE,CAAC;QAEpC,kBAAa,GAAqC,EAAE,CAAC;KA2D/D;IApDG,KAAK,CAAC,QAAQ;QACV,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAChC,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,YAAY;QACd,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,IAAY;QACnB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAY;QACpB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAY;QACvB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACrB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAY;QACpB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACrB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,IAAY;QACnB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY;QACtB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC;IAC3B,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;IAChC,CAAC;IAED,gBAAgB;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;IAC3C,CAAC;;2EA5DuC,EAAE,+DAEe,EAAE;AA6D/D,MAAM,OAAO,kBAAmB,SAAQ,YAAY;IAApD;;QACW,SAAI,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,YAAO,GAA+D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAwFpG;IAtFG,SAAS,CAAC,IAAY,EAAE,KAA8C;QAClE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAY,CAAC;QAClC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,UAAU;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,UAAkB,EAAE,qBAA2E,EAAE,OAAoD;QAC3J,OAAO,GAAG,OAAO,qBAAqB,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;QACtF,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEzD,IAAI,OAAO,qBAAqB,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAClH,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,IAAI;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAI;YACA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC3B;QAAC,OAAO,KAAU,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,WAAW,IAAI,EAAE,CAAC,CAAC;SAC5E;IACL,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CACD,KAAU,EACV,QAAa,EACb,QAAc;QAEd,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YAChC,QAAQ,GAAG,QAAQ,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC;SACnB;QAED,IAAI,KAAK,EAAE;YACP,IAAI,QAAQ,KAAK,OAAO,KAAK,EAAE;gBAC3B,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC;aAClD;YACD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;SACjD;QAED,IAAI,QAAQ;YAAE,QAAQ,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,GAAG,CAAC,KAAU,EAAE,QAAc,EAAE,QAAc;QAC1C,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC7B,QAAQ,GAAG,KAAK,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC;YACb,QAAQ,GAAG,IAAI,CAAC;SACnB;aAAM,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YACvC,QAAQ,GAAG,QAAQ,CAAC;YACpB,QAAQ,GAAG,IAAI,CAAC;SACnB;QAED,IAAI,KAAK,EAAE;YACP,IAAI,QAAQ,KAAK,OAAO,KAAK,EAAE;gBAC3B,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC;aAClD;YACD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;SACjD;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;;8EAxFqB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,qCACwC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC"}
@@ -0,0 +1,84 @@
1
+ /// <reference types="node" />
2
+ export interface HttpParserOptions {
3
+ /**
4
+ * sets encoding for incoming form fields
5
+ *
6
+ * @default 'utf-8'
7
+ */
8
+ encoding?: BufferEncoding | undefined;
9
+ /**
10
+ * the directory for placing file uploads in. You can move them later by using fs.rename()
11
+ *
12
+ * @default os.tmpdir()
13
+ */
14
+ uploadDir?: string | undefined;
15
+ /**
16
+ * to include the extensions of the original files or not
17
+ *
18
+ * @default false
19
+ */
20
+ keepExtensions?: boolean | undefined;
21
+ /**
22
+ * allow upload empty files
23
+ *
24
+ * @default true
25
+ */
26
+ allowEmptyFiles?: boolean | undefined;
27
+ /**
28
+ * the minium size of uploaded file
29
+ *
30
+ * @default 1
31
+ */
32
+ minFileSize?: number | undefined;
33
+ /**
34
+ * limit the amount of uploaded files, set Infinity for unlimited
35
+ *
36
+ * @default Infinity
37
+ */
38
+ maxFiles?: number | undefined;
39
+ /**
40
+ * limit the size of uploaded file
41
+ *
42
+ * @default 200 * 1024 * 1024
43
+ */
44
+ maxFileSize?: number | undefined;
45
+ /**
46
+ * limit the size of the batch of uploaded files
47
+ *
48
+ * @default options.maxFileSize
49
+ */
50
+ maxTotalFileSize?: number | undefined;
51
+ /**
52
+ * limit the number of fields, set 0 for unlimited
53
+ *
54
+ * @default 1000
55
+ */
56
+ maxFields?: number | undefined;
57
+ /**
58
+ * limit the amount of memory all fields together (except files) can allocate in bytes
59
+ *
60
+ * @default 20 * 1024 * 1024
61
+ */
62
+ maxFieldsSize?: number | undefined;
63
+ /**
64
+ * include checksums calculated for incoming files, set this to some hash algorithm, see
65
+ * crypto.createHash for available algorithms
66
+ *
67
+ * @default false
68
+ */
69
+ hashAlgorithm?: string | false | undefined;
70
+ /**
71
+ * when you call the .parse method, the files argument (of the callback) will contain arrays of
72
+ * files for inputs which submit multiple files using the HTML5 multiple attribute. Also, the
73
+ * fields argument will contain arrays of values for fields that have names ending with '[]'
74
+ *
75
+ * @default false
76
+ */
77
+ multiples?: boolean | undefined;
78
+ enabledPlugins?: string[] | undefined;
79
+ }
80
+ export declare class HttpConfig {
81
+ debug: boolean;
82
+ parser: HttpParserOptions;
83
+ }
84
+ export declare type __ΩHttpParserOptions = any[];
@@ -0,0 +1,10 @@
1
+ const __ΩHttpParserOptions = ['encoding', 'uploadDir', 'keepExtensions', 'allowEmptyFiles', 'minFileSize', 'maxFiles', 'maxFileSize', 'maxTotalFileSize', 'maxFields', 'maxFieldsSize', false, 'hashAlgorithm', 'multiples', 'enabledPlugins', 'PP!-J4!8P&-J4"8P)-J4#8P)-J4$8P\'-J4%8P\'-J4&8P\'-J4\'8P\'-J4(8P\'-J4)8P\'-J4*8P&.+-J4,8P)-J4-8P&F-J4.8M'];
2
+ export { __ΩHttpParserOptions as __ΩHttpParserOptions };
3
+ export class HttpConfig {
4
+ constructor() {
5
+ this.debug = false;
6
+ this.parser = {};
7
+ }
8
+ }
9
+ HttpConfig.__type = ['debug', function () { return false; }, () => __ΩHttpParserOptions, 'parser', function () { return {}; }, ')3!>"n#3$>%5'];
10
+ //# sourceMappingURL=module.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.config.js","sourceRoot":"","sources":["../../../src/module.config.ts"],"names":[],"mappings":";;AA2FA,MAAM,OAAO,UAAU;IAAvB;QACI,UAAK,GAAY,KAAK,CAAC;QACvB,WAAM,GAAsB,EAAE,CAAC;KAClC;;mDAFoB,KAAK,gEACM,EAAE"}
@@ -0,0 +1,14 @@
1
+ import { HttpConfig } from './module.config.js';
2
+ import { AddedListener, AppModule, ControllerConfig } from '@deepkit/app';
3
+ import { HttpControllers } from './controllers.js';
4
+ import '@deepkit/type';
5
+ import { EventToken } from '@deepkit/event';
6
+ declare const HttpModule_base: import("@deepkit/app").AppModuleClass<HttpConfig>;
7
+ export declare class HttpModule extends HttpModule_base {
8
+ protected httpControllers: HttpControllers;
9
+ process(): void;
10
+ protected patchEventsForHttpRequestAccess: EventToken<any>[];
11
+ processListener(module: AppModule<any>, listener: AddedListener): void;
12
+ processController(module: AppModule<any>, config: ControllerConfig): void;
13
+ }
14
+ export {};
@@ -0,0 +1,120 @@
1
+ /*@ts-ignore*/
2
+ import { __ΩControllerConfig as __ΩControllerConfig } from '@deepkit/app';
3
+ function __assignType(fn, args) {
4
+ fn.__type = args;
5
+ return fn;
6
+ }
7
+ import { HttpListener, HttpResultFormatter, httpWorkflow } from './http.js';
8
+ import { HttpConfig } from './module.config.js';
9
+ import { AppModule, createModule, stringifyListener } from '@deepkit/app';
10
+ import { HttpRouter, HttpRouterRegistry, RouteConfig } from './router.js';
11
+ import { HttpKernel } from './kernel.js';
12
+ import { HttpRouterFilterResolver } from './filter.js';
13
+ import { HttpControllers } from './controllers.js';
14
+ import { ConsoleTransport, Logger } from '@deepkit/logger';
15
+ import { HttpRequest, HttpResponse } from './model.js';
16
+ import '@deepkit/type';
17
+ import { httpClass } from './decorator.js';
18
+ import { EventToken } from '@deepkit/event';
19
+ import { metaAnnotation, ReflectionKind, ReflectionParameter } from '@deepkit/type';
20
+ import { buildRequestParser } from './request-parser.js';
21
+ import { InjectorContext } from '@deepkit/injector';
22
+ function parameterRequiresRequest(parameter) {
23
+ return Boolean(metaAnnotation.getForName(parameter.type, 'httpQueries') || metaAnnotation.getForName(parameter.type, 'httpQuery')
24
+ || metaAnnotation.getForName(parameter.type, 'httpBody') || metaAnnotation.getForName(parameter.type, 'httpPath') || metaAnnotation.getForName(parameter.type, 'httpHeader'));
25
+ }
26
+ parameterRequiresRequest.__type = [() => ReflectionParameter, 'parameter', 'parameterRequiresRequest', 'PP7!2")/#'];
27
+ export class HttpModule extends createModule({
28
+ config: HttpConfig,
29
+ providers: [
30
+ HttpRouter,
31
+ HttpKernel,
32
+ HttpResultFormatter,
33
+ HttpRouterRegistry,
34
+ HttpRouterFilterResolver,
35
+ { provide: HttpResponse, scope: 'http' },
36
+ { provide: HttpRequest, scope: 'http' },
37
+ { provide: RouteConfig, useValue: undefined, scope: 'http' },
38
+ { provide: Logger, useValue: new Logger([new ConsoleTransport()]) },
39
+ ],
40
+ listeners: [
41
+ HttpListener,
42
+ ],
43
+ workflows: [
44
+ httpWorkflow
45
+ ],
46
+ exports: [
47
+ HttpRouter,
48
+ HttpRouterRegistry,
49
+ HttpKernel,
50
+ HttpResultFormatter,
51
+ HttpRouterFilterResolver,
52
+ HttpResponse,
53
+ HttpRequest,
54
+ HttpControllers,
55
+ RouteConfig,
56
+ Logger,
57
+ ]
58
+ }) {
59
+ constructor() {
60
+ super(...arguments);
61
+ this.httpControllers = new HttpControllers;
62
+ this.patchEventsForHttpRequestAccess = [httpWorkflow.onRequest, httpWorkflow.onAuth, httpWorkflow.onController];
63
+ }
64
+ process() {
65
+ this.addProvider({ provide: HttpControllers, useValue: this.httpControllers });
66
+ }
67
+ processListener(module, listener) {
68
+ if (!this.patchEventsForHttpRequestAccess.includes(listener.eventToken))
69
+ return;
70
+ let requiresHttpRequest = false;
71
+ let needsAsync = false;
72
+ const params = listener.reflection.getParameters().slice(1);
73
+ for (const parameter of params) {
74
+ if (metaAnnotation.getForName(parameter.type, 'httpBody'))
75
+ needsAsync = true;
76
+ if (parameterRequiresRequest(parameter))
77
+ requiresHttpRequest = true;
78
+ }
79
+ if (needsAsync) {
80
+ //not yet supported since we have to patch the listener to be async and redirect the call (as the DI container is sync).
81
+ throw new Error(`Listener ${stringifyListener(listener)} requires async HttpBody. This is not yet supported. You have to parse the request manually by injecting HttpRequest.`);
82
+ }
83
+ for (let index = 0; index < params.length; index++) {
84
+ const parameter = params[index];
85
+ if (!parameterRequiresRequest(parameter))
86
+ continue;
87
+ //change the reflection type so that we create a unique injection token for that type.
88
+ const unique = Symbol('unique');
89
+ const uniqueType = { kind: ReflectionKind.literal, literal: unique };
90
+ metaAnnotation.registerType(parameter.type, { name: 'inject', options: [uniqueType] });
91
+ let build;
92
+ let i = index;
93
+ this.addProvider({
94
+ provide: uniqueType, useFactory: __assignType((httpConfig, request, injector, config) => {
95
+ if (!build) {
96
+ const params = listener.reflection.getParameters().slice(1);
97
+ build = buildRequestParser(httpConfig.parser, params, config === null || config === void 0 ? void 0 : config.getFullPath());
98
+ }
99
+ const parser = build(request);
100
+ const params = parser(injector);
101
+ return params.arguments[i];
102
+ }, [() => HttpConfig, 'httpConfig', () => HttpRequest, 'request', () => InjectorContext, 'injector', () => RouteConfig, 'config', '', 'PP7!2"P7#2$P7%2&P7\'2(8"/)']), scope: 'http'
103
+ });
104
+ this.addExport(uniqueType);
105
+ }
106
+ }
107
+ processController(module, config) {
108
+ const controller = config.controller;
109
+ if (!controller)
110
+ return;
111
+ const httpConfig = httpClass._fetch(controller);
112
+ if (!httpConfig)
113
+ return;
114
+ if (!module.isProvided(controller))
115
+ module.addProvider({ provide: controller, scope: 'http' });
116
+ this.httpControllers.add(controller, module);
117
+ }
118
+ }
119
+ HttpModule.__type = [() => createModule({ config: HttpConfig, providers: [HttpRouter, HttpKernel, HttpResultFormatter, HttpRouterRegistry, HttpRouterFilterResolver, { provide: HttpResponse, scope: "http" }, { provide: HttpRequest, scope: "http" }, { provide: RouteConfig, useValue: undefined, scope: "http" }, { provide: Logger, useValue: new Logger([new ConsoleTransport()]) }], listeners: [HttpListener], workflows: [httpWorkflow], exports: [HttpRouter, HttpRouterRegistry, HttpKernel, HttpResultFormatter, HttpRouterFilterResolver, HttpResponse, HttpRequest, HttpControllers, RouteConfig, Logger] }), 'process', () => EventToken, 'patchEventsForHttpRequestAccess', function () { return [httpWorkflow.onRequest, httpWorkflow.onAuth, httpWorkflow.onController]; }, () => AppModule, 'module', 'listener', 'processListener', () => AppModule, () => __ΩControllerConfig, 'config', 'processController', 'P7!P"0"P"7#F3$<>%PP"7&2\'"2("0)PP"7*2\'n+2,"0-5'];
120
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/module.ts"],"names":[],"mappings":"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"}