@spinajs/http 2.0.481 → 2.0.484

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 (189) hide show
  1. package/lib/cjs/config/http.d.ts +15 -7
  2. package/lib/cjs/config/http.d.ts.map +1 -1
  3. package/lib/cjs/config/http.js +28 -9
  4. package/lib/cjs/config/http.js.map +1 -1
  5. package/lib/cjs/controllers.d.ts.map +1 -1
  6. package/lib/cjs/controllers.js +48 -12
  7. package/lib/cjs/controllers.js.map +1 -1
  8. package/lib/cjs/cookie.d.ts +8 -0
  9. package/lib/cjs/cookie.d.ts.map +1 -0
  10. package/lib/cjs/cookie.js +40 -0
  11. package/lib/cjs/cookie.js.map +1 -0
  12. package/lib/cjs/decorators.d.ts +46 -4
  13. package/lib/cjs/decorators.d.ts.map +1 -1
  14. package/lib/cjs/decorators.js +127 -23
  15. package/lib/cjs/decorators.js.map +1 -1
  16. package/lib/cjs/error.js +3 -3
  17. package/lib/cjs/error.js.map +1 -1
  18. package/lib/cjs/file-middlewares/validation.d.ts +11 -0
  19. package/lib/cjs/file-middlewares/validation.d.ts.map +1 -1
  20. package/lib/cjs/file-middlewares/validation.js +52 -9
  21. package/lib/cjs/file-middlewares/validation.js.map +1 -1
  22. package/lib/cjs/file-middlewares/zip.d.ts.map +1 -1
  23. package/lib/cjs/file-middlewares/zip.js +6 -1
  24. package/lib/cjs/file-middlewares/zip.js.map +1 -1
  25. package/lib/cjs/index.d.ts +1 -0
  26. package/lib/cjs/index.d.ts.map +1 -1
  27. package/lib/cjs/index.js +1 -0
  28. package/lib/cjs/index.js.map +1 -1
  29. package/lib/cjs/interfaces.d.ts +95 -1
  30. package/lib/cjs/interfaces.d.ts.map +1 -1
  31. package/lib/cjs/interfaces.js +100 -4
  32. package/lib/cjs/interfaces.js.map +1 -1
  33. package/lib/cjs/middlewares/PerfRollup.d.ts +19 -0
  34. package/lib/cjs/middlewares/PerfRollup.d.ts.map +1 -0
  35. package/lib/cjs/middlewares/PerfRollup.js +61 -0
  36. package/lib/cjs/middlewares/PerfRollup.js.map +1 -0
  37. package/lib/cjs/middlewares/RequestId.d.ts +1 -2
  38. package/lib/cjs/middlewares/RequestId.d.ts.map +1 -1
  39. package/lib/cjs/middlewares/RequestId.js +19 -5
  40. package/lib/cjs/middlewares/RequestId.js.map +1 -1
  41. package/lib/cjs/middlewares/ResponseTime.d.ts +1 -2
  42. package/lib/cjs/middlewares/ResponseTime.d.ts.map +1 -1
  43. package/lib/cjs/middlewares/ResponseTime.js +29 -11
  44. package/lib/cjs/middlewares/ResponseTime.js.map +1 -1
  45. package/lib/cjs/response-methods/file.d.ts.map +1 -1
  46. package/lib/cjs/response-methods/file.js +47 -21
  47. package/lib/cjs/response-methods/file.js.map +1 -1
  48. package/lib/cjs/response-methods/index.d.ts +3 -0
  49. package/lib/cjs/response-methods/index.d.ts.map +1 -1
  50. package/lib/cjs/response-methods/index.js +3 -0
  51. package/lib/cjs/response-methods/index.js.map +1 -1
  52. package/lib/cjs/response-methods/redirect.d.ts +11 -4
  53. package/lib/cjs/response-methods/redirect.d.ts.map +1 -1
  54. package/lib/cjs/response-methods/redirect.js +14 -4
  55. package/lib/cjs/response-methods/redirect.js.map +1 -1
  56. package/lib/cjs/response-methods/xml.d.ts +17 -0
  57. package/lib/cjs/response-methods/xml.d.ts.map +1 -0
  58. package/lib/cjs/response-methods/xml.js +26 -0
  59. package/lib/cjs/response-methods/xml.js.map +1 -0
  60. package/lib/cjs/responses.d.ts +10 -0
  61. package/lib/cjs/responses.d.ts.map +1 -1
  62. package/lib/cjs/responses.js +94 -35
  63. package/lib/cjs/responses.js.map +1 -1
  64. package/lib/cjs/route-args/FromBody.d.ts.map +1 -1
  65. package/lib/cjs/route-args/FromBody.js +6 -1
  66. package/lib/cjs/route-args/FromBody.js.map +1 -1
  67. package/lib/cjs/route-args/FromForm.d.ts +1 -1
  68. package/lib/cjs/route-args/FromForm.d.ts.map +1 -1
  69. package/lib/cjs/route-args/FromForm.js +116 -37
  70. package/lib/cjs/route-args/FromForm.js.map +1 -1
  71. package/lib/cjs/route-args/FromXml.d.ts +17 -0
  72. package/lib/cjs/route-args/FromXml.d.ts.map +1 -0
  73. package/lib/cjs/route-args/FromXml.js +55 -0
  74. package/lib/cjs/route-args/FromXml.js.map +1 -0
  75. package/lib/cjs/route-args/RequestContext.d.ts +43 -0
  76. package/lib/cjs/route-args/RequestContext.d.ts.map +1 -0
  77. package/lib/cjs/route-args/RequestContext.js +94 -0
  78. package/lib/cjs/route-args/RequestContext.js.map +1 -0
  79. package/lib/cjs/route-args/RequestFields.d.ts +1 -1
  80. package/lib/cjs/route-args/RequestFields.d.ts.map +1 -1
  81. package/lib/cjs/route-args/RequestFields.js +1 -0
  82. package/lib/cjs/route-args/RequestFields.js.map +1 -1
  83. package/lib/cjs/route-args/RouteArgs.d.ts.map +1 -1
  84. package/lib/cjs/route-args/RouteArgs.js +50 -10
  85. package/lib/cjs/route-args/RouteArgs.js.map +1 -1
  86. package/lib/cjs/route-args/index.d.ts +2 -0
  87. package/lib/cjs/route-args/index.d.ts.map +1 -1
  88. package/lib/cjs/route-args/index.js +2 -0
  89. package/lib/cjs/route-args/index.js.map +1 -1
  90. package/lib/cjs/server.d.ts +36 -3
  91. package/lib/cjs/server.d.ts.map +1 -1
  92. package/lib/cjs/server.js +131 -42
  93. package/lib/cjs/server.js.map +1 -1
  94. package/lib/mjs/config/http.d.ts +15 -7
  95. package/lib/mjs/config/http.d.ts.map +1 -1
  96. package/lib/mjs/config/http.js +28 -9
  97. package/lib/mjs/config/http.js.map +1 -1
  98. package/lib/mjs/controllers.d.ts.map +1 -1
  99. package/lib/mjs/controllers.js +46 -10
  100. package/lib/mjs/controllers.js.map +1 -1
  101. package/lib/mjs/cookie.d.ts +8 -0
  102. package/lib/mjs/cookie.d.ts.map +1 -0
  103. package/lib/mjs/cookie.js +32 -0
  104. package/lib/mjs/cookie.js.map +1 -0
  105. package/lib/mjs/decorators.d.ts +46 -4
  106. package/lib/mjs/decorators.d.ts.map +1 -1
  107. package/lib/mjs/decorators.js +121 -24
  108. package/lib/mjs/decorators.js.map +1 -1
  109. package/lib/mjs/error.js +3 -3
  110. package/lib/mjs/error.js.map +1 -1
  111. package/lib/mjs/file-middlewares/validation.d.ts +11 -0
  112. package/lib/mjs/file-middlewares/validation.d.ts.map +1 -1
  113. package/lib/mjs/file-middlewares/validation.js +53 -10
  114. package/lib/mjs/file-middlewares/validation.js.map +1 -1
  115. package/lib/mjs/file-middlewares/zip.d.ts.map +1 -1
  116. package/lib/mjs/file-middlewares/zip.js +6 -1
  117. package/lib/mjs/file-middlewares/zip.js.map +1 -1
  118. package/lib/mjs/index.d.ts +1 -0
  119. package/lib/mjs/index.d.ts.map +1 -1
  120. package/lib/mjs/index.js +1 -0
  121. package/lib/mjs/index.js.map +1 -1
  122. package/lib/mjs/interfaces.d.ts +95 -1
  123. package/lib/mjs/interfaces.d.ts.map +1 -1
  124. package/lib/mjs/interfaces.js +65 -2
  125. package/lib/mjs/interfaces.js.map +1 -1
  126. package/lib/mjs/middlewares/PerfRollup.d.ts +19 -0
  127. package/lib/mjs/middlewares/PerfRollup.d.ts.map +1 -0
  128. package/lib/mjs/middlewares/PerfRollup.js +58 -0
  129. package/lib/mjs/middlewares/PerfRollup.js.map +1 -0
  130. package/lib/mjs/middlewares/RequestId.d.ts +1 -2
  131. package/lib/mjs/middlewares/RequestId.d.ts.map +1 -1
  132. package/lib/mjs/middlewares/RequestId.js +19 -5
  133. package/lib/mjs/middlewares/RequestId.js.map +1 -1
  134. package/lib/mjs/middlewares/ResponseTime.d.ts +1 -2
  135. package/lib/mjs/middlewares/ResponseTime.d.ts.map +1 -1
  136. package/lib/mjs/middlewares/ResponseTime.js +29 -11
  137. package/lib/mjs/middlewares/ResponseTime.js.map +1 -1
  138. package/lib/mjs/response-methods/file.d.ts.map +1 -1
  139. package/lib/mjs/response-methods/file.js +41 -15
  140. package/lib/mjs/response-methods/file.js.map +1 -1
  141. package/lib/mjs/response-methods/index.d.ts +3 -0
  142. package/lib/mjs/response-methods/index.d.ts.map +1 -1
  143. package/lib/mjs/response-methods/index.js +3 -0
  144. package/lib/mjs/response-methods/index.js.map +1 -1
  145. package/lib/mjs/response-methods/redirect.d.ts +11 -4
  146. package/lib/mjs/response-methods/redirect.d.ts.map +1 -1
  147. package/lib/mjs/response-methods/redirect.js +15 -5
  148. package/lib/mjs/response-methods/redirect.js.map +1 -1
  149. package/lib/mjs/response-methods/xml.d.ts +17 -0
  150. package/lib/mjs/response-methods/xml.d.ts.map +1 -0
  151. package/lib/mjs/response-methods/xml.js +22 -0
  152. package/lib/mjs/response-methods/xml.js.map +1 -0
  153. package/lib/mjs/responses.d.ts +10 -0
  154. package/lib/mjs/responses.d.ts.map +1 -1
  155. package/lib/mjs/responses.js +93 -35
  156. package/lib/mjs/responses.js.map +1 -1
  157. package/lib/mjs/route-args/FromBody.d.ts.map +1 -1
  158. package/lib/mjs/route-args/FromBody.js +6 -1
  159. package/lib/mjs/route-args/FromBody.js.map +1 -1
  160. package/lib/mjs/route-args/FromForm.d.ts +1 -1
  161. package/lib/mjs/route-args/FromForm.d.ts.map +1 -1
  162. package/lib/mjs/route-args/FromForm.js +114 -38
  163. package/lib/mjs/route-args/FromForm.js.map +1 -1
  164. package/lib/mjs/route-args/FromXml.d.ts +17 -0
  165. package/lib/mjs/route-args/FromXml.d.ts.map +1 -0
  166. package/lib/mjs/route-args/FromXml.js +52 -0
  167. package/lib/mjs/route-args/FromXml.js.map +1 -0
  168. package/lib/mjs/route-args/RequestContext.d.ts +43 -0
  169. package/lib/mjs/route-args/RequestContext.d.ts.map +1 -0
  170. package/lib/mjs/route-args/RequestContext.js +91 -0
  171. package/lib/mjs/route-args/RequestContext.js.map +1 -0
  172. package/lib/mjs/route-args/RequestFields.d.ts +1 -1
  173. package/lib/mjs/route-args/RequestFields.d.ts.map +1 -1
  174. package/lib/mjs/route-args/RequestFields.js +1 -0
  175. package/lib/mjs/route-args/RequestFields.js.map +1 -1
  176. package/lib/mjs/route-args/RouteArgs.d.ts.map +1 -1
  177. package/lib/mjs/route-args/RouteArgs.js +51 -11
  178. package/lib/mjs/route-args/RouteArgs.js.map +1 -1
  179. package/lib/mjs/route-args/index.d.ts +2 -0
  180. package/lib/mjs/route-args/index.d.ts.map +1 -1
  181. package/lib/mjs/route-args/index.js +2 -0
  182. package/lib/mjs/route-args/index.js.map +1 -1
  183. package/lib/mjs/server.d.ts +36 -3
  184. package/lib/mjs/server.d.ts.map +1 -1
  185. package/lib/mjs/server.js +132 -43
  186. package/lib/mjs/server.js.map +1 -1
  187. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  188. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  189. package/package.json +17 -12
@@ -7,9 +7,12 @@ exports.JsonFileResponse = exports.FileResponse = exports.ZipResponse = void 0;
7
7
  const di_1 = require("@spinajs/di");
8
8
  const exceptions_1 = require("@spinajs/exceptions");
9
9
  const lodash_1 = __importDefault(require("lodash"));
10
- const mime_1 = __importDefault(require("mime"));
10
+ const fs_1 = require("fs");
11
+ const path_1 = require("path");
11
12
  const interfaces_js_1 = require("./../interfaces.js");
12
- const index_js_1 = require("../index.js");
13
+ // import from the defining module, not the package barrel - '../index.js' pulls
14
+ // the whole export graph back through interfaces.js and re-forms an import cycle
15
+ const responses_js_1 = require("../responses.js");
13
16
  class ZipResponse extends interfaces_js_1.Response {
14
17
  /**
15
18
  * Sends zipped file to client at given path & filename. If file exists
@@ -19,7 +22,10 @@ class ZipResponse extends interfaces_js_1.Response {
19
22
  super(null);
20
23
  this.Options = Options;
21
24
  this.responseOptions = responseOptions;
22
- this.Options.mimeType = Options.mimeType ?? mime_1.default.getType(Options.filename) ?? undefined;
25
+ // The payload is always a zip archive — default to application/zip rather
26
+ // than deriving from the (original) download filename, which would mislabel
27
+ // e.g. a zipped `report.txt` as text/plain.
28
+ this.Options.mimeType = Options.mimeType ?? 'application/zip';
23
29
  this.Options.provider = Options.provider ?? 'local';
24
30
  }
25
31
  async execute(_req, res) {
@@ -32,9 +38,9 @@ class ZipResponse extends interfaces_js_1.Response {
32
38
  const fPath = zippedFile.asFilePath();
33
39
  return new Promise((resolve, reject) => {
34
40
  const encodedFilename = encodeURIComponent(this.Options.filename);
35
- (0, index_js_1._setCoockies)(res, this.responseOptions);
36
- (0, index_js_1._setHeaders)(res, this.responseOptions);
37
- res.setHeader('Content-Type', this.Options.mimeType || 'application/octet-stream');
41
+ (0, responses_js_1._setCoockies)(res, this.responseOptions);
42
+ (0, responses_js_1._setHeaders)(res, this.responseOptions);
43
+ res.setHeader('Content-Type', this.Options.mimeType || 'application/zip');
38
44
  res.setHeader('Content-Disposition', `attachment; filename*=UTF-8''${encodedFilename}`);
39
45
  res.sendFile(zippedFile.fs.resolvePath(fPath), (err) => {
40
46
  zippedFile.fs.rm(fPath).finally(() => {
@@ -59,7 +65,11 @@ class FileResponse extends interfaces_js_1.Response {
59
65
  super(null);
60
66
  this.Options = Options;
61
67
  this.responseOptions = responseOptions;
62
- this.Options.mimeType = Options.mimeType ?? mime_1.default.getType(Options.filename) ?? undefined;
68
+ // Do NOT default the mime type here. When the caller doesn't specify one we
69
+ // let res.sendFile derive it from the actual file, which yields the correct
70
+ // charset for text types (e.g. `text/plain; charset=utf-8`) and the right
71
+ // type for binaries — deriving it from the filename dropped the charset.
72
+ this.Options.mimeType = Options.mimeType;
63
73
  this.Options.provider = Options.provider ?? 'local';
64
74
  }
65
75
  async execute(_req, res) {
@@ -72,27 +82,41 @@ class FileResponse extends interfaces_js_1.Response {
72
82
  throw new exceptions_1.ResourceNotFound(`File ${this.Options.path} not exists`);
73
83
  }
74
84
  const file = await provider.download(this.Options.path);
85
+ // A local provider returns the real on-disk file (must NOT be deleted); a
86
+ // remote provider downloads to a throwaway temp copy that must be cleaned
87
+ // up after sending. Detect the local case by the file living under the
88
+ // provider's own base path.
89
+ const basePath = provider.Options?.basePath;
90
+ const isLocalRealFile = !!basePath && (0, path_1.resolve)(file).startsWith((0, path_1.resolve)(basePath));
75
91
  return new Promise((resolve, reject) => {
76
92
  const encodedFilename = encodeURIComponent(this.Options.filename);
77
- (0, index_js_1._setCoockies)(res, this.responseOptions);
78
- (0, index_js_1._setHeaders)(res, this.responseOptions);
79
- res.setHeader('Content-Type', this.Options.mimeType || 'application/octet-stream');
93
+ (0, responses_js_1._setCoockies)(res, this.responseOptions);
94
+ (0, responses_js_1._setHeaders)(res, this.responseOptions);
95
+ // Only pin the Content-Type when the caller gave an explicit mime type;
96
+ // otherwise let sendFile set it from the file (correct charset / type).
97
+ if (this.Options.mimeType) {
98
+ res.setHeader('Content-Type', this.Options.mimeType);
99
+ }
80
100
  res.setHeader('Content-Disposition', `attachment; filename*=UTF-8''${encodedFilename}`);
81
101
  res.sendFile(file, (err) => {
82
- const r = () => {
102
+ const cleanups = [];
103
+ // Remove the source file on the provider when requested.
104
+ if (this.Options.deleteAfterDownload) {
105
+ cleanups.push(provider.rm(this.Options.path).catch(() => undefined));
106
+ }
107
+ // Remove the downloaded temp copy for remote providers (never the real
108
+ // local file).
109
+ if (!isLocalRealFile) {
110
+ cleanups.push(fs_1.promises.unlink(file).catch(() => undefined));
111
+ }
112
+ Promise.allSettled(cleanups).finally(() => {
83
113
  if (!lodash_1.default.isNil(err)) {
84
114
  reject(err);
85
115
  }
86
116
  else {
87
117
  resolve();
88
118
  }
89
- };
90
- if (this.Options.deleteAfterDownload) {
91
- provider.rm(this.Options.path).finally(r);
92
- }
93
- else {
94
- r();
95
- }
119
+ });
96
120
  });
97
121
  });
98
122
  }
@@ -108,11 +132,13 @@ class JsonFileResponse extends interfaces_js_1.Response {
108
132
  async execute(_req, res) {
109
133
  const provider = await di_1.DI.resolve('__file_provider__', ['fs-temp']);
110
134
  const tmpPath = provider.tmppath();
111
- provider.write(tmpPath, JSON.stringify(this.data));
135
+ // Must await: sendFile below races the write otherwise and can hit the
136
+ // path before it exists, producing an intermittent ENOENT / 500.
137
+ await provider.write(tmpPath, JSON.stringify(this.data));
112
138
  return new Promise((resolve, reject) => {
113
139
  const encodedFilename = encodeURIComponent(this.filename);
114
- (0, index_js_1._setCoockies)(res, this.responseOptions);
115
- (0, index_js_1._setHeaders)(res, this.responseOptions);
140
+ (0, responses_js_1._setCoockies)(res, this.responseOptions);
141
+ (0, responses_js_1._setHeaders)(res, this.responseOptions);
116
142
  res.setHeader('Content-Type', 'application/json');
117
143
  res.setHeader('Content-Disposition', `attachment; filename*=UTF-8''${encodedFilename}`);
118
144
  res.sendFile(tmpPath, (err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/response-methods/file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/response-methods/file.ts"],"names":[],"mappings":"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"}
@@ -5,12 +5,15 @@ export * from './forbidden.js';
5
5
  export * from './noContent.js';
6
6
  export * from './notFound.js';
7
7
  export * from './json.js';
8
+ export * from './xml.js';
8
9
  export * from './ok.js';
9
10
  export * from './template.js';
11
+ export * from './redirect.js';
10
12
  export * from './serverError.js';
11
13
  export * from './unauthorized.js';
12
14
  export * from './conflict.js';
13
15
  export * from './notAllowed.js';
16
+ export * from './notAcceptable.js';
14
17
  export * from './validationError.js';
15
18
  export * from './entityTooLarge.js';
16
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/response-methods/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/response-methods/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
@@ -21,12 +21,15 @@ __exportStar(require("./forbidden.js"), exports);
21
21
  __exportStar(require("./noContent.js"), exports);
22
22
  __exportStar(require("./notFound.js"), exports);
23
23
  __exportStar(require("./json.js"), exports);
24
+ __exportStar(require("./xml.js"), exports);
24
25
  __exportStar(require("./ok.js"), exports);
25
26
  __exportStar(require("./template.js"), exports);
27
+ __exportStar(require("./redirect.js"), exports);
26
28
  __exportStar(require("./serverError.js"), exports);
27
29
  __exportStar(require("./unauthorized.js"), exports);
28
30
  __exportStar(require("./conflict.js"), exports);
29
31
  __exportStar(require("./notAllowed.js"), exports);
32
+ __exportStar(require("./notAcceptable.js"), exports);
30
33
  __exportStar(require("./validationError.js"), exports);
31
34
  __exportStar(require("./entityTooLarge.js"), exports);
32
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/response-methods/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,+CAA6B;AAC7B,4CAA0B;AAC1B,iDAA+B;AAC/B,iDAA+B;AAC/B,gDAA8B;AAC9B,4CAA0B;AAC1B,0CAAwB;AACxB,gDAA8B;AAC9B,mDAAiC;AACjC,oDAAkC;AAClC,gDAA8B;AAC9B,kDAAgC;AAChC,uDAAqC;AACrC,sDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/response-methods/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,+CAA6B;AAC7B,4CAA0B;AAC1B,iDAA+B;AAC/B,iDAA+B;AAC/B,gDAA8B;AAC9B,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,gDAA8B;AAC9B,gDAA8B;AAC9B,mDAAiC;AACjC,oDAAkC;AAClC,gDAA8B;AAC9B,kDAAgC;AAChC,qDAAmC;AACnC,uDAAqC;AACrC,sDAAoC"}
@@ -1,13 +1,20 @@
1
1
  import * as express from 'express';
2
- import { Response } from '../interfaces.js';
2
+ import { IResponseOptions, Response } from '../interfaces.js';
3
3
  /**
4
- * Redirects to another route ( simple alias for request.redirect for api consistency)
4
+ * Redirects to another url. Simple alias over res.redirect for api consistency,
5
+ * with control over the redirect status code and the ability to set cookies /
6
+ * headers on the redirect response (useful for auth flows).
5
7
  *
6
- * @param url - url path to another location
8
+ * @param url - target url
9
+ * @param status - redirect status code (default 302 FOUND). Use 301/308 for
10
+ * permanent, 307 to preserve method/body.
11
+ * @param responseOptions - cookies / headers to set before redirecting
7
12
  */
8
13
  export declare class Redirect extends Response {
14
+ protected responseOptions?: IResponseOptions | undefined;
9
15
  protected url: string;
10
- constructor(url: any);
16
+ protected status: number;
17
+ constructor(url: string, status?: number, responseOptions?: IResponseOptions | undefined);
11
18
  execute(_req: express.Request, res: express.Response): Promise<void>;
12
19
  }
13
20
  //# sourceMappingURL=redirect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../../src/response-methods/redirect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C;;;;GAIG;AACH,qBAAa,QAAS,SAAQ,QAAQ;IACpC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;gBAEV,GAAG,EAAE,GAAG;IAMP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ;CAGlE"}
1
+ {"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../../src/response-methods/redirect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAoB,gBAAgB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGhF;;;;;;;;;GASG;AACH,qBAAa,QAAS,SAAQ,QAAQ;IAI8B,SAAS,CAAC,eAAe,CAAC,EAAE,gBAAgB;IAH9G,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEb,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAA+B,EAAY,eAAe,CAAC,EAAE,gBAAgB,YAAA;IAOjG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ;CAMlE"}
@@ -2,18 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Redirect = void 0;
4
4
  const interfaces_js_1 = require("../interfaces.js");
5
+ const responses_js_1 = require("../responses.js");
5
6
  /**
6
- * Redirects to another route ( simple alias for request.redirect for api consistency)
7
+ * Redirects to another url. Simple alias over res.redirect for api consistency,
8
+ * with control over the redirect status code and the ability to set cookies /
9
+ * headers on the redirect response (useful for auth flows).
7
10
  *
8
- * @param url - url path to another location
11
+ * @param url - target url
12
+ * @param status - redirect status code (default 302 FOUND). Use 301/308 for
13
+ * permanent, 307 to preserve method/body.
14
+ * @param responseOptions - cookies / headers to set before redirecting
9
15
  */
10
16
  class Redirect extends interfaces_js_1.Response {
11
- constructor(url) {
17
+ constructor(url, status = interfaces_js_1.HTTP_STATUS_CODE.FOUND, responseOptions) {
12
18
  super(null);
19
+ this.responseOptions = responseOptions;
13
20
  this.url = url;
21
+ this.status = status;
14
22
  }
15
23
  async execute(_req, res) {
16
- res.redirect(this.url);
24
+ (0, responses_js_1._setCoockies)(res, this.responseOptions);
25
+ (0, responses_js_1._setHeaders)(res, this.responseOptions);
26
+ res.redirect(this.status, this.url);
17
27
  }
18
28
  }
19
29
  exports.Redirect = Redirect;
@@ -1 +1 @@
1
- {"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../../src/response-methods/redirect.ts"],"names":[],"mappings":";;;AACA,oDAA4C;AAE5C;;;;GAIG;AACH,MAAa,QAAS,SAAQ,wBAAQ;IAGpC,YAAY,GAAQ;QAClB,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,GAAqB;QAC/D,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;CACF;AAZD,4BAYC"}
1
+ {"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../../src/response-methods/redirect.ts"],"names":[],"mappings":";;;AACA,oDAAgF;AAChF,kDAA4D;AAE5D;;;;;;;;;GASG;AACH,MAAa,QAAS,SAAQ,wBAAQ;IAIpC,YAAY,GAAW,EAAE,SAAiB,gCAAgB,CAAC,KAAK,EAAY,eAAkC;QAC5G,KAAK,CAAC,IAAI,CAAC,CAAC;QAD8D,oBAAe,GAAf,eAAe,CAAmB;QAG5G,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,GAAqB;QAC/D,IAAA,2BAAY,EAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACxC,IAAA,0BAAW,EAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEvC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;CACF;AAjBD,4BAiBC"}
@@ -0,0 +1,17 @@
1
+ import * as express from 'express';
2
+ import { HTTP_STATUS_CODE, IResponseOptions, Response, ResponseFunction } from '../interfaces.js';
3
+ /**
4
+ * Returns an HTTP 200 response with an XML body, bypassing Accept-header
5
+ * negotiation. Use when the endpoint must always respond with XML. The data
6
+ * should be a plain object graph; arrays / scalars are wrapped under a
7
+ * `<response>` root. Optional fast-xml-parser XMLBuilder options can be passed.
8
+ */
9
+ export declare class Xml<T = any> extends Response<T> {
10
+ protected options?: IResponseOptions | undefined;
11
+ protected xmlOptions?: any | undefined;
12
+ protected _errorCode: HTTP_STATUS_CODE;
13
+ protected _template: string;
14
+ constructor(data?: T | Promise<T> | null, options?: IResponseOptions | undefined, xmlOptions?: any | undefined);
15
+ execute(_req: express.Request, _res: express.Response): Promise<ResponseFunction | void>;
16
+ }
17
+ //# sourceMappingURL=xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../../src/response-methods/xml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGlG;;;;;GAKG;AACH,qBAAa,GAAG,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAID,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB;IAAE,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG;IAH1G,SAAS,CAAC,UAAU,mBAAuB;IAC3C,SAAS,CAAC,SAAS,SAAM;gBAEb,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,EAAY,OAAO,CAAC,EAAE,gBAAgB,YAAA,EAAY,UAAU,CAAC,EAAE,GAAG,YAAA;IAI7F,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;CAItG"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Xml = void 0;
4
+ const interfaces_js_1 = require("../interfaces.js");
5
+ const responses_js_1 = require("../responses.js");
6
+ /**
7
+ * Returns an HTTP 200 response with an XML body, bypassing Accept-header
8
+ * negotiation. Use when the endpoint must always respond with XML. The data
9
+ * should be a plain object graph; arrays / scalars are wrapped under a
10
+ * `<response>` root. Optional fast-xml-parser XMLBuilder options can be passed.
11
+ */
12
+ class Xml extends interfaces_js_1.Response {
13
+ constructor(data, options, xmlOptions) {
14
+ super(data, options);
15
+ this.options = options;
16
+ this.xmlOptions = xmlOptions;
17
+ this._errorCode = interfaces_js_1.HTTP_STATUS_CODE.OK;
18
+ this._template = '';
19
+ }
20
+ async execute(_req, _res) {
21
+ const data = await this.prepareResponse();
22
+ return (0, responses_js_1.xmlResponse)(data, { ...this.options, StatusCode: this.options?.StatusCode ?? this._errorCode }, this.xmlOptions);
23
+ }
24
+ }
25
+ exports.Xml = Xml;
26
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../../src/response-methods/xml.ts"],"names":[],"mappings":";;;AACA,oDAAkG;AAClG,kDAA8C;AAE9C;;;;;GAKG;AACH,MAAa,GAAa,SAAQ,wBAAW;IAI3C,YAAY,IAA4B,EAAY,OAA0B,EAAY,UAAgB;QACxG,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAD6B,YAAO,GAAP,OAAO,CAAmB;QAAY,eAAU,GAAV,UAAU,CAAM;QAHhG,eAAU,GAAG,gCAAgB,CAAC,EAAE,CAAC;QACjC,cAAS,GAAG,EAAE,CAAC;IAIzB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,OAAO,IAAA,0BAAW,EAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1H,CAAC;CACF;AAZD,kBAYC"}
@@ -16,6 +16,16 @@ export declare function jsonResponse(model: any, options?: IResponseOptions): (_
16
16
  * @param status - status code
17
17
  */
18
18
  export declare function textResponse(model: any, options?: IResponseOptions): (_req: express.Request, res: express.Response) => void;
19
+ /**
20
+ * Serializes data to an XML body. The payload should be a plain object graph;
21
+ * arrays and scalars are wrapped under a `<response>` root so the output is a
22
+ * single well-formed document.
23
+ *
24
+ * @param model - data to serialize
25
+ * @param options - response options (status, headers, cookies)
26
+ * @param xmlOptions - fast-xml-parser XMLBuilder options
27
+ */
28
+ export declare function xmlResponse(model: any, options?: IResponseOptions, xmlOptions?: any): (_req: express.Request, res: express.Response) => void;
19
29
  /**
20
30
  * Sends html response & sets proper header. If template is not avaible, handles proper error rendering.
21
31
  *
@@ -1 +1 @@
1
- {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAwD,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAYzG,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,gBAAgB,QA6B7E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,gBAAgB,QAI5E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,IACzD,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UAYrD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,IACzD,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UAWrD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,IAGvE,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UA0DpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,IAwC3E,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UA0CpD"}
1
+ {"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAwD,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAmBzG,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,gBAAgB,QA6B7E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,gBAAgB,QAI5E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,IACzD,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UAcrD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,IACzD,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UAgBrD;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,GAAG,IAC1E,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UAYrD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,IAGvE,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UA0DpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,IA+E3E,KAAK,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,QAAQ,UA4BpD"}
@@ -37,6 +37,7 @@ exports._setCoockies = _setCoockies;
37
37
  exports._setHeaders = _setHeaders;
38
38
  exports.jsonResponse = jsonResponse;
39
39
  exports.textResponse = textResponse;
40
+ exports.xmlResponse = xmlResponse;
40
41
  exports.htmlResponse = htmlResponse;
41
42
  exports.httpResponse = httpResponse;
42
43
  const interfaces_js_1 = require("./interfaces.js");
@@ -45,8 +46,15 @@ const di_1 = require("@spinajs/di");
45
46
  const log_common_1 = require("@spinajs/log-common");
46
47
  const randomstring = __importStar(require("randomstring"));
47
48
  const templates_1 = require("@spinajs/templates");
48
- const index_js_1 = require("./index.js");
49
+ // NOTE: import the exception, not the `ServerError` *response* from './index.js'.
50
+ // That barrel import created the cycle interfaces -> responses -> index ->
51
+ // response-methods/badRequest -> interfaces, which blew up with
52
+ // "Cannot access 'Response' before initialization" whenever a module other
53
+ // than index.js (eg. server.js) was the entry point. `UnexpectedServerError`
54
+ // is mapped back to the ServerError response by __handle_error__ anyway.
55
+ const exceptions_1 = require("@spinajs/exceptions");
49
56
  const cs = __importStar(require("cookie-signature"));
57
+ const fast_xml_parser_1 = require("fast-xml-parser");
50
58
  function _setCoockies(res, options) {
51
59
  const cfg = di_1.DI.get(configuration_1.Configuration);
52
60
  if (!cfg) {
@@ -86,7 +94,9 @@ function jsonResponse(model, options) {
86
94
  res.status(options?.StatusCode ? options?.StatusCode : interfaces_js_1.HTTP_STATUS_CODE.OK);
87
95
  _setCoockies(res, options);
88
96
  _setHeaders(res, options);
89
- if (model) {
97
+ // Presence check, not truthiness: 0 / false / '' are valid JSON bodies and
98
+ // must be sent. Only undefined / null mean "no body".
99
+ if (model !== undefined && model !== null) {
90
100
  res.json(model);
91
101
  }
92
102
  else {
@@ -105,10 +115,36 @@ function textResponse(model, options) {
105
115
  res.status(options?.StatusCode ? options?.StatusCode : interfaces_js_1.HTTP_STATUS_CODE.OK);
106
116
  _setCoockies(res, options);
107
117
  _setHeaders(res, options);
108
- if (model) {
118
+ // Presence check, not truthiness: 0 / false / '' are valid bodies. Only
119
+ // undefined / null end the response empty (and always terminate it —
120
+ // otherwise a missing body on this fallback path hangs until timeout).
121
+ if (model !== undefined && model !== null) {
109
122
  res.set('Content-Type', 'text/plain');
110
123
  res.send(JSON.stringify(model));
111
124
  }
125
+ else {
126
+ res.end();
127
+ }
128
+ };
129
+ }
130
+ /**
131
+ * Serializes data to an XML body. The payload should be a plain object graph;
132
+ * arrays and scalars are wrapped under a `<response>` root so the output is a
133
+ * single well-formed document.
134
+ *
135
+ * @param model - data to serialize
136
+ * @param options - response options (status, headers, cookies)
137
+ * @param xmlOptions - fast-xml-parser XMLBuilder options
138
+ */
139
+ function xmlResponse(model, options, xmlOptions) {
140
+ return (_req, res) => {
141
+ res.status(options?.StatusCode ? options.StatusCode : interfaces_js_1.HTTP_STATUS_CODE.OK);
142
+ _setCoockies(res, options);
143
+ _setHeaders(res, options);
144
+ res.set('Content-Type', 'application/xml');
145
+ const builder = new fast_xml_parser_1.XMLBuilder({ ignoreAttributes: false, ...xmlOptions });
146
+ const payload = model !== null && typeof model === 'object' && !Array.isArray(model) ? model : { response: model };
147
+ res.send(builder.build(payload));
112
148
  };
113
149
  }
114
150
  /**
@@ -205,44 +241,67 @@ function httpResponse(model, template, options) {
205
241
  })(req, res);
206
242
  }
207
243
  };
208
- return (req, res) => {
209
- if (req.accepts('html') && (acceptedHeaders & interfaces_js_1.HttpAcceptHeaders.HTML) === interfaces_js_1.HttpAcceptHeaders.HTML) {
210
- const fs = di_1.DI.resolve('__file_provider__', ['__fs_http_response_templates__']);
211
- if (!fs) {
212
- throw new index_js_1.ServerError('file provider __fs_http_response_templates__ not set. Pleas set response template file provider for html http default responses !');
213
- }
214
- fs.download(template)
215
- .then((file) => {
216
- htmlResponse(file, model, options)(req, res);
217
- })
218
- .catch((err) => {
219
- const log = di_1.DI.resolve(log_common_1.Log, ['http']);
220
- log.warn(`Cannot render html file ${template}, error: ${err.message}:${err.stack}`, err);
221
- fs.download('serverError.pug').then((file) => {
222
- // try to render server error response
223
- htmlResponse(file, { error: err }, {
224
- ...options,
225
- StatusCode: interfaces_js_1.HTTP_STATUS_CODE.INTERNAL_ERROR,
226
- })(req, res);
227
- });
244
+ const htmlBranch = (req, res) => {
245
+ const fs = di_1.DI.resolve('__file_provider__', ['__fs_http_response_templates__']);
246
+ if (!fs) {
247
+ throw new exceptions_1.UnexpectedServerError('file provider __fs_http_response_templates__ not set. Pleas set response template file provider for html http default responses !');
248
+ }
249
+ fs.download(template)
250
+ .then((file) => {
251
+ htmlResponse(file, model, options)(req, res);
252
+ })
253
+ .catch((err) => {
254
+ const log = di_1.DI.resolve(log_common_1.Log, ['http']);
255
+ log.warn(`Cannot render html file ${template}, error: ${err.message}:${err.stack}`, err);
256
+ fs.download('serverError.pug').then((file) => {
257
+ // try to render server error response
258
+ htmlResponse(file, { error: err }, {
259
+ ...options,
260
+ StatusCode: interfaces_js_1.HTTP_STATUS_CODE.INTERNAL_ERROR,
261
+ })(req, res);
228
262
  });
263
+ });
264
+ };
265
+ const jsonBranch = (req, res) => {
266
+ if (options && options.StatusCode && options.StatusCode >= 400) {
267
+ errorTransform(req, res);
229
268
  }
230
- else if (req.accepts('json') && (acceptedHeaders & interfaces_js_1.HttpAcceptHeaders.JSON) === interfaces_js_1.HttpAcceptHeaders.JSON) {
231
- if (options && options.StatusCode && options.StatusCode >= 400) {
232
- errorTransform(req, res);
233
- }
234
- else {
235
- if (req.headers['x-data-transform']) {
236
- dataTransform(req, res);
237
- }
238
- else {
239
- jsonResponse(model, options)(req, res);
240
- }
241
- }
269
+ else if (req.headers['x-data-transform']) {
270
+ dataTransform(req, res);
242
271
  }
243
272
  else {
273
+ jsonResponse(model, options)(req, res);
274
+ }
275
+ };
276
+ return (req, res) => {
277
+ // Offer the types the server is configured to produce, JSON first so a
278
+ // wildcard / absent Accept (*/*) defaults to JSON rather than HTML. Explicit
279
+ // client preferences (order / q-values) are still honored by req.accepts.
280
+ const offered = [];
281
+ if ((acceptedHeaders & interfaces_js_1.HttpAcceptHeaders.JSON) === interfaces_js_1.HttpAcceptHeaders.JSON)
282
+ offered.push('json');
283
+ if ((acceptedHeaders & interfaces_js_1.HttpAcceptHeaders.HTML) === interfaces_js_1.HttpAcceptHeaders.HTML)
284
+ offered.push('html');
285
+ if ((acceptedHeaders & interfaces_js_1.HttpAcceptHeaders.XML) === interfaces_js_1.HttpAcceptHeaders.XML)
286
+ offered.push('xml');
287
+ const best = offered.length ? req.accepts(offered) : false;
288
+ if (best === 'html') {
289
+ htmlBranch(req, res);
290
+ }
291
+ else if (best === 'json') {
292
+ jsonBranch(req, res);
293
+ }
294
+ else if (best === 'xml') {
295
+ xmlResponse(model, options)(req, res);
296
+ }
297
+ else if (req.accepts('text/plain')) {
298
+ // Client accepts plain text (or the config offers nothing negotiable).
244
299
  textResponse(model, options)(req, res);
245
300
  }
301
+ else {
302
+ // Client explicitly asked for a media type the server can't produce.
303
+ jsonResponse({ error: { message: 'Not Acceptable', code: interfaces_js_1.HTTP_STATUS_CODE.NOT_ACCEPTABLE } }, { ...options, StatusCode: interfaces_js_1.HTTP_STATUS_CODE.NOT_ACCEPTABLE })(req, res);
304
+ }
246
305
  };
247
306
  }
248
307
  //# sourceMappingURL=responses.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../src/responses.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FromBody.d.ts","sourceRoot":"","sources":["../../../src/route-args/FromBody.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,qBACa,QAAS,SAAQ,SAAS;IACrC,IAAW,aAAa,IAAI,aAAa,CAExC;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAC,KAAK,EAAG,OAAO,EAAG,EAAG,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;;;;CASnJ"}
1
+ {"version":3,"file":"FromBody.d.ts","sourceRoot":"","sources":["../../../src/route-args/FromBody.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,qBACa,QAAS,SAAQ,SAAS;IACrC,IAAW,aAAa,IAAI,aAAa,CAExC;IAEY,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAC,KAAK,EAAG,OAAO,EAAG,EAAG,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;;;;CAenJ"}
@@ -18,7 +18,12 @@ let FromBody = class FromBody extends RouteArgs_js_1.RouteArgs {
18
18
  if (!req.body) {
19
19
  return { CallData: callData, Args: null };
20
20
  }
21
- const arg = req.body[param.Name] ? req.body[param.Name] : [...route.Parameters.values()].filter((p) => p.Type === interfaces_js_1.ParameterType.FromBody).length === 1 ? req.body : null;
21
+ // Use presence, not truthiness a body field legitimately holding 0,
22
+ // false or '' must map to that value, not be treated as absent (which
23
+ // would wrongly fall through to passing the whole body).
24
+ const hasNamedField = Object.prototype.hasOwnProperty.call(req.body, param.Name);
25
+ const isSingleBodyParam = [...route.Parameters.values()].filter((p) => p.Type === interfaces_js_1.ParameterType.FromBody).length === 1;
26
+ const arg = hasNamedField ? req.body[param.Name] : isSingleBodyParam ? req.body : null;
22
27
  let result = await this.tryHydrateParam(arg, param, route);
23
28
  return { CallData: callData, Args: result };
24
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FromBody.js","sourceRoot":"","sources":["../../../src/route-args/FromBody.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iDAA2C;AAC3C,oDAAsF;AAEtF,oCAAyC;AAGlC,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,wBAAS;IACrC,IAAW,aAAa;QACtB,OAAO,6BAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAoB,EAAC,KAAkB,EAAG,KAAsB,EAAE,GAAoB,EAAE,IAAsB,EAAE,KAAa;QAChJ,IAAG,CAAC,GAAG,CAAC,IAAI,EAAC,CAAC;YACZ,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,6BAAa,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACzK,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC;CACF,CAAA;AAdY,4BAAQ;mBAAR,QAAQ;IADpB,IAAA,eAAU,GAAE;GACA,QAAQ,CAcpB"}
1
+ {"version":3,"file":"FromBody.js","sourceRoot":"","sources":["../../../src/route-args/FromBody.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iDAA2C;AAC3C,oDAAsF;AAEtF,oCAAyC;AAGlC,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,wBAAS;IACrC,IAAW,aAAa;QACtB,OAAO,6BAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAoB,EAAC,KAAkB,EAAG,KAAsB,EAAE,GAAoB,EAAE,IAAsB,EAAE,KAAa;QAChJ,IAAG,CAAC,GAAG,CAAC,IAAI,EAAC,CAAC;YACZ,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC;QAED,sEAAsE;QACtE,sEAAsE;QACtE,yDAAyD;QACzD,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjF,MAAM,iBAAiB,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,6BAAa,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QACvH,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvF,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC;CACF,CAAA;AApBY,4BAAQ;mBAAR,QAAQ;IADpB,IAAA,eAAU,GAAE;GACA,QAAQ,CAoBpB"}
@@ -85,7 +85,7 @@ export declare class FromCSV extends FromFormBase {
85
85
  export declare class FromFormField extends FromFormBase {
86
86
  get SupportedType(): ParameterType;
87
87
  extract(callData: IRouteCall, _args: unknown[], param: IRouteParameter, req: Request, res: express.Response, route?: IRoute): Promise<{
88
- Args: string | IRouteArgsResult;
88
+ Args: any;
89
89
  CallData: IRouteCall;
90
90
  }>;
91
91
  }