@innet/server 2.0.0-alpha.3 → 2.0.0-alpha.30

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 (304) hide show
  1. package/README.md +1375 -541
  2. package/handler/handler.d.ts +19 -13
  3. package/handler/handler.es6.js +17 -11
  4. package/handler/handler.js +17 -11
  5. package/hooks/index.d.ts +6 -0
  6. package/hooks/index.es6.js +6 -0
  7. package/hooks/index.js +6 -0
  8. package/hooks/useAction/useAction.es6.js +1 -1
  9. package/hooks/useAction/useAction.js +1 -1
  10. package/hooks/useApi/useApi.d.ts +1 -3
  11. package/hooks/useClientIp/index.d.ts +1 -0
  12. package/hooks/useClientIp/index.es6.js +1 -0
  13. package/hooks/useClientIp/index.js +9 -0
  14. package/hooks/useClientIp/useClientIp.d.ts +1 -0
  15. package/hooks/useClientIp/useClientIp.es6.js +9 -0
  16. package/hooks/useClientIp/useClientIp.js +13 -0
  17. package/hooks/useComponentName/useComponentName.d.ts +1 -1
  18. package/hooks/useEndpoint/useEndpoint.d.ts +1 -1
  19. package/hooks/useEndpoint/useEndpoint.es6.js +3 -1
  20. package/hooks/useEndpoint/useEndpoint.js +3 -1
  21. package/hooks/useIsServerHttps/index.d.ts +1 -0
  22. package/hooks/useIsServerHttps/index.es6.js +1 -0
  23. package/hooks/useIsServerHttps/index.js +10 -0
  24. package/hooks/useIsServerHttps/useIsServerHttps.d.ts +3 -0
  25. package/hooks/useIsServerHttps/useIsServerHttps.es6.js +14 -0
  26. package/hooks/useIsServerHttps/useIsServerHttps.js +19 -0
  27. package/hooks/useObjectSchemaContext/index.d.ts +1 -0
  28. package/hooks/useObjectSchemaContext/index.es6.js +1 -0
  29. package/hooks/useObjectSchemaContext/index.js +10 -0
  30. package/hooks/useObjectSchemaContext/useObjectSchemaContext.d.ts +3 -0
  31. package/hooks/useObjectSchemaContext/useObjectSchemaContext.es6.js +14 -0
  32. package/hooks/useObjectSchemaContext/useObjectSchemaContext.js +19 -0
  33. package/hooks/useRequest/index.es6.js +1 -1
  34. package/hooks/useRequest/index.js +0 -1
  35. package/hooks/useRequest/useRequest.d.ts +1 -4
  36. package/hooks/useRequest/useRequest.es6.js +4 -4
  37. package/hooks/useRequest/useRequest.js +3 -4
  38. package/hooks/useResponse/index.es6.js +1 -1
  39. package/hooks/useResponse/index.js +0 -1
  40. package/hooks/useResponse/useResponse.d.ts +1 -4
  41. package/hooks/useResponse/useResponse.es6.js +4 -4
  42. package/hooks/useResponse/useResponse.js +3 -4
  43. package/hooks/useSchemaType/useSchemaType.d.ts +3 -2
  44. package/hooks/useSchemaType/useSchemaType.es6.js +5 -6
  45. package/hooks/useSchemaType/useSchemaType.js +5 -6
  46. package/hooks/useServer/useServer.d.ts +2 -1
  47. package/hooks/useServer/useServer.es6.js +3 -1
  48. package/hooks/useServer/useServer.js +3 -1
  49. package/hooks/useServerPlugin/index.d.ts +1 -0
  50. package/hooks/useServerPlugin/index.es6.js +1 -0
  51. package/hooks/useServerPlugin/index.js +9 -0
  52. package/hooks/useServerPlugin/useServerPlugin.d.ts +2 -0
  53. package/hooks/useServerPlugin/useServerPlugin.es6.js +13 -0
  54. package/hooks/useServerPlugin/useServerPlugin.js +17 -0
  55. package/hooks/useServerPlugins/index.d.ts +1 -0
  56. package/hooks/useServerPlugins/index.es6.js +1 -0
  57. package/hooks/useServerPlugins/index.js +10 -0
  58. package/hooks/useServerPlugins/useServerPlugins.d.ts +4 -0
  59. package/hooks/useServerPlugins/useServerPlugins.es6.js +14 -0
  60. package/hooks/useServerPlugins/useServerPlugins.js +19 -0
  61. package/hooks/useServerPort/index.d.ts +1 -0
  62. package/hooks/useServerPort/index.es6.js +1 -0
  63. package/hooks/useServerPort/index.js +10 -0
  64. package/hooks/useServerPort/useServerPort.d.ts +3 -0
  65. package/hooks/useServerPort/useServerPort.es6.js +14 -0
  66. package/hooks/useServerPort/useServerPort.js +19 -0
  67. package/index.es6.js +17 -8
  68. package/index.js +34 -12
  69. package/package.json +2 -2
  70. package/plugins/main/api/api.d.ts +10 -8
  71. package/plugins/main/api/api.es6.js +53 -55
  72. package/plugins/main/api/api.js +53 -55
  73. package/plugins/main/contact/contact.d.ts +2 -2
  74. package/plugins/main/endpoint/endpoint.d.ts +15 -15
  75. package/plugins/main/endpoint/endpoint.es6.js +7 -4
  76. package/plugins/main/endpoint/endpoint.js +7 -4
  77. package/plugins/main/host/host.d.ts +5 -5
  78. package/plugins/main/index.d.ts +2 -2
  79. package/plugins/main/index.es6.js +2 -2
  80. package/plugins/main/index.js +2 -2
  81. package/plugins/main/license/license.d.ts +5 -5
  82. package/plugins/main/param/param.d.ts +11 -11
  83. package/plugins/main/param/param.es6.js +3 -3
  84. package/plugins/main/param/param.js +3 -3
  85. package/plugins/main/preset/index.d.ts +1 -0
  86. package/plugins/main/preset/index.es6.js +1 -0
  87. package/plugins/{utils/prod → main/preset}/index.js +2 -2
  88. package/plugins/main/preset/preset.d.ts +3 -0
  89. package/plugins/main/preset/preset.es6.js +13 -0
  90. package/plugins/{utils/dev/dev.js → main/preset/preset.js} +9 -6
  91. package/plugins/main/response/index.es6.js +1 -1
  92. package/plugins/main/response/index.js +1 -0
  93. package/plugins/main/response/response.d.ts +6 -2
  94. package/plugins/main/response/response.es6.js +18 -10
  95. package/plugins/main/response/response.js +18 -9
  96. package/plugins/main/return/index.d.ts +1 -0
  97. package/plugins/main/return/index.es6.js +1 -0
  98. package/plugins/main/return/index.js +9 -0
  99. package/plugins/main/return/return.d.ts +4 -0
  100. package/plugins/main/return/return.es6.js +10 -0
  101. package/plugins/main/return/return.js +14 -0
  102. package/plugins/main/server/server.d.ts +5 -5
  103. package/plugins/main/server/server.es6.js +36 -10
  104. package/plugins/main/server/server.js +36 -10
  105. package/plugins/main/tag/tag.d.ts +2 -2
  106. package/plugins/main/tag/tag.es6.js +5 -2
  107. package/plugins/main/tag/tag.js +5 -2
  108. package/plugins/main/variable/variable.d.ts +5 -5
  109. package/plugins/main/variable/variable.es6.js +3 -1
  110. package/plugins/main/variable/variable.js +3 -1
  111. package/plugins/request/cms/cms.es6.js +2 -2
  112. package/plugins/request/cms/cms.js +2 -2
  113. package/plugins/request/cookie/cookie.es6.js +3 -19
  114. package/plugins/request/cookie/cookie.js +3 -23
  115. package/plugins/request/error/error.d.ts +40 -40
  116. package/plugins/request/error/error.es6.js +45 -42
  117. package/plugins/request/error/error.js +45 -42
  118. package/plugins/request/file/file.es6.js +2 -3
  119. package/plugins/request/file/file.js +2 -3
  120. package/plugins/request/header/header.es6.js +1 -1
  121. package/plugins/request/header/header.js +1 -1
  122. package/plugins/request/proxy/proxy.d.ts +4 -1
  123. package/plugins/request/proxy/proxy.es6.js +5 -2
  124. package/plugins/request/proxy/proxy.js +5 -2
  125. package/plugins/request/redirect/redirect.d.ts +8 -7
  126. package/plugins/request/redirect/redirect.es6.js +7 -7
  127. package/plugins/request/redirect/redirect.js +7 -7
  128. package/plugins/request/success/success.d.ts +7 -6
  129. package/plugins/request/success/success.es6.js +21 -10
  130. package/plugins/request/success/success.js +21 -10
  131. package/plugins/schema/any/any.d.ts +5 -0
  132. package/plugins/schema/any/any.es6.js +27 -0
  133. package/plugins/schema/any/any.js +31 -0
  134. package/plugins/schema/binary/binary.d.ts +3 -3
  135. package/plugins/schema/boolean/boolean.es6.js +2 -4
  136. package/plugins/schema/boolean/boolean.js +1 -3
  137. package/plugins/schema/date/date.d.ts +1 -1
  138. package/plugins/schema/date/date.es6.js +3 -3
  139. package/plugins/schema/date/date.js +3 -3
  140. package/plugins/schema/field/field.d.ts +1 -0
  141. package/plugins/schema/field/field.es6.js +7 -6
  142. package/plugins/schema/field/field.js +6 -5
  143. package/plugins/schema/index.d.ts +1 -0
  144. package/plugins/schema/index.es6.js +1 -0
  145. package/plugins/schema/index.js +1 -0
  146. package/plugins/schema/integer/integer.d.ts +3 -3
  147. package/plugins/schema/integer/integer.es6.js +1 -1
  148. package/plugins/schema/integer/integer.js +1 -1
  149. package/plugins/schema/number/number.d.ts +2 -2
  150. package/plugins/schema/number/number.es6.js +1 -1
  151. package/plugins/schema/number/number.js +1 -1
  152. package/plugins/schema/object/object.es6.js +17 -4
  153. package/plugins/schema/object/object.js +17 -4
  154. package/plugins/schema/string/string.d.ts +2 -2
  155. package/plugins/schema/string/string.es6.js +44 -30
  156. package/plugins/schema/string/string.js +44 -30
  157. package/plugins/utils/blacklist/blacklist.d.ts +4 -0
  158. package/plugins/utils/blacklist/blacklist.es6.js +18 -0
  159. package/plugins/utils/blacklist/blacklist.js +22 -0
  160. package/plugins/utils/blacklist/index.d.ts +1 -0
  161. package/plugins/utils/blacklist/index.es6.js +1 -0
  162. package/plugins/utils/blacklist/index.js +9 -0
  163. package/plugins/utils/dts/dts.d.ts +3 -3
  164. package/plugins/utils/dts/dts.es6.js +6 -25
  165. package/plugins/utils/dts/dts.js +5 -29
  166. package/plugins/utils/env/env.d.ts +6 -0
  167. package/plugins/utils/env/env.es6.js +11 -0
  168. package/plugins/utils/{prod/prod.js → env/env.js} +4 -3
  169. package/plugins/utils/env/index.d.ts +1 -0
  170. package/plugins/utils/env/index.es6.js +1 -0
  171. package/plugins/utils/{dev → env}/index.js +2 -2
  172. package/plugins/utils/index.d.ts +4 -2
  173. package/plugins/utils/index.es6.js +4 -2
  174. package/plugins/utils/index.js +4 -2
  175. package/plugins/utils/protection/index.d.ts +1 -0
  176. package/plugins/utils/protection/index.es6.js +1 -0
  177. package/plugins/utils/protection/index.js +9 -0
  178. package/plugins/utils/protection/protection.d.ts +8 -0
  179. package/plugins/utils/protection/protection.es6.js +36 -0
  180. package/plugins/utils/protection/protection.js +40 -0
  181. package/plugins/utils/swagger/swagger.es6.js +10 -12
  182. package/plugins/utils/swagger/swagger.js +10 -12
  183. package/plugins/utils/whitelist/index.d.ts +1 -0
  184. package/plugins/utils/whitelist/index.es6.js +1 -0
  185. package/plugins/utils/whitelist/index.js +9 -0
  186. package/plugins/utils/whitelist/whitelist.d.ts +4 -0
  187. package/plugins/utils/whitelist/whitelist.es6.js +20 -0
  188. package/plugins/utils/whitelist/whitelist.js +24 -0
  189. package/types.d.ts +15 -23
  190. package/utils/FileData/Bin.d.ts +13 -13
  191. package/utils/FileData/Bin.es6.js +2 -2
  192. package/utils/FileData/Bin.js +2 -2
  193. package/utils/action/Action.d.ts +17 -14
  194. package/utils/action/Action.es6.js +102 -78
  195. package/utils/action/Action.js +102 -78
  196. package/utils/dateFormat/dateFormat.d.ts +1 -1
  197. package/utils/dateFormat/dateFormat.es6.js +1 -1
  198. package/utils/dateFormat/dateFormat.js +1 -1
  199. package/utils/generateTypes/generateTypes.d.ts +3 -0
  200. package/utils/generateTypes/generateTypes.es6.js +157 -0
  201. package/utils/generateTypes/generateTypes.js +162 -0
  202. package/utils/generateTypes/index.d.ts +1 -0
  203. package/utils/generateTypes/index.es6.js +1 -0
  204. package/utils/generateTypes/index.js +10 -0
  205. package/utils/getEndpoint/getEndpoint.es6.js +2 -2
  206. package/utils/getEndpoint/getEndpoint.js +2 -2
  207. package/utils/getOrAdd/getOrAdd.d.ts +1 -1
  208. package/utils/httpOnStart/httpOnStart.d.ts +1 -1
  209. package/utils/httpOnStart/httpOnStart.es6.js +1 -1
  210. package/utils/httpOnStart/httpOnStart.js +1 -1
  211. package/utils/index.d.ts +1 -0
  212. package/utils/index.es6.js +1 -0
  213. package/utils/index.js +1 -0
  214. package/utils/rules/binaryAccept/binaryAccept.es6.js +2 -2
  215. package/utils/rules/binaryAccept/binaryAccept.js +2 -2
  216. package/utils/rules/dateTo/dateTo.d.ts +1 -1
  217. package/utils/rules/helpers.d.ts +1 -1
  218. package/utils/rules/index.d.ts +0 -1
  219. package/utils/rules/index.es6.js +0 -1
  220. package/utils/rules/index.js +0 -1
  221. package/utils/rules/int/int.es6.js +2 -2
  222. package/utils/rules/int/int.js +2 -2
  223. package/utils/rules/max/max.d.ts +1 -1
  224. package/utils/rules/max/max.es6.js +3 -3
  225. package/utils/rules/max/max.js +3 -3
  226. package/utils/rules/maxBin/maxBin.es6.js +2 -2
  227. package/utils/rules/maxBin/maxBin.js +2 -2
  228. package/utils/rules/maxDate/maxDate.es6.js +1 -1
  229. package/utils/rules/maxDate/maxDate.js +1 -1
  230. package/utils/rules/maxLength/maxLength.es6.js +2 -2
  231. package/utils/rules/maxLength/maxLength.js +2 -2
  232. package/utils/rules/min/min.d.ts +1 -1
  233. package/utils/rules/min/min.es6.js +3 -3
  234. package/utils/rules/min/min.js +3 -3
  235. package/utils/rules/minBin/minBin.es6.js +2 -2
  236. package/utils/rules/minBin/minBin.js +2 -2
  237. package/utils/rules/minDate/minDate.es6.js +1 -1
  238. package/utils/rules/minDate/minDate.js +1 -1
  239. package/utils/rules/minLength/minLength.es6.js +2 -2
  240. package/utils/rules/minLength/minLength.js +2 -2
  241. package/utils/rules/objectOf/objectOf.d.ts +1 -1
  242. package/utils/rules/objectOf/objectOf.es6.js +15 -2
  243. package/utils/rules/objectOf/objectOf.js +15 -2
  244. package/utils/rules/pattern/pattern.d.ts +1 -1
  245. package/utils/rules/pattern/pattern.es6.js +2 -1
  246. package/utils/rules/pattern/pattern.js +2 -1
  247. package/example/app/App/App.d.ts +0 -1
  248. package/example/app/App/index.d.ts +0 -1
  249. package/example/index.d.ts +0 -1
  250. package/example/requests/index.d.ts +0 -1
  251. package/example/requests/partners/EditPartner/EditPartner.d.ts +0 -1
  252. package/example/requests/partners/EditPartner/index.d.ts +0 -1
  253. package/example/requests/partners/GetPartner/GetPartner.d.ts +0 -1
  254. package/example/requests/partners/GetPartner/index.d.ts +0 -1
  255. package/example/requests/partners/GetPartners/GetPartners.d.ts +0 -1
  256. package/example/requests/partners/GetPartners/index.d.ts +0 -1
  257. package/example/requests/partners/index.d.ts +0 -3
  258. package/example/schemas/address/AddressSchema/AddressSchema.d.ts +0 -1
  259. package/example/schemas/address/AddressSchema/index.d.ts +0 -1
  260. package/example/schemas/address/index.d.ts +0 -1
  261. package/example/schemas/app/ListSchema/ListSchema.d.ts +0 -1
  262. package/example/schemas/app/ListSchema/index.d.ts +0 -1
  263. package/example/schemas/app/index.d.ts +0 -1
  264. package/example/schemas/index.d.ts +0 -4
  265. package/example/schemas/location/LocationSchema/LocationSchema.d.ts +0 -1
  266. package/example/schemas/location/LocationSchema/index.d.ts +0 -1
  267. package/example/schemas/location/index.d.ts +0 -1
  268. package/example/schemas/partner/EditPartnerSchema/EditPartnerSchema.d.ts +0 -1
  269. package/example/schemas/partner/EditPartnerSchema/index.d.ts +0 -1
  270. package/example/schemas/partner/PartnerSchema/PartnerSchema.d.ts +0 -1
  271. package/example/schemas/partner/PartnerSchema/index.d.ts +0 -1
  272. package/example/schemas/partner/index.d.ts +0 -2
  273. package/example/tags/Partner/Partner.d.ts +0 -1
  274. package/example/tags/Partner/index.d.ts +0 -1
  275. package/example/tags/index.d.ts +0 -1
  276. package/openApi.test.d.ts +0 -1
  277. package/plugins/main/fallback/fallback.d.ts +0 -4
  278. package/plugins/main/fallback/fallback.es6.js +0 -19
  279. package/plugins/main/fallback/fallback.js +0 -23
  280. package/plugins/main/fallback/index.d.ts +0 -1
  281. package/plugins/main/fallback/index.es6.js +0 -1
  282. package/plugins/main/fallback/index.js +0 -9
  283. package/plugins/main/request/index.d.ts +0 -1
  284. package/plugins/main/request/index.es6.js +0 -1
  285. package/plugins/main/request/index.js +0 -9
  286. package/plugins/main/request/request.d.ts +0 -4
  287. package/plugins/main/request/request.es6.js +0 -21
  288. package/plugins/main/request/request.js +0 -25
  289. package/plugins/utils/dev/dev.d.ts +0 -4
  290. package/plugins/utils/dev/dev.es6.js +0 -10
  291. package/plugins/utils/dev/index.d.ts +0 -1
  292. package/plugins/utils/dev/index.es6.js +0 -1
  293. package/plugins/utils/prod/index.d.ts +0 -1
  294. package/plugins/utils/prod/index.es6.js +0 -1
  295. package/plugins/utils/prod/prod.d.ts +0 -4
  296. package/plugins/utils/prod/prod.es6.js +0 -10
  297. package/utils/decorators/once/once.test.d.ts +0 -1
  298. package/utils/parseSearch/parseSearch.test.d.ts +0 -1
  299. package/utils/rules/any/any.d.ts +0 -1
  300. package/utils/rules/any/any.es6.js +0 -5
  301. package/utils/rules/any/any.js +0 -9
  302. /package/{utils/rules → plugins/schema}/any/index.d.ts +0 -0
  303. /package/{utils/rules → plugins/schema}/any/index.es6.js +0 -0
  304. /package/{utils/rules → plugins/schema}/any/index.js +0 -0
@@ -3,65 +3,91 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib = require('tslib');
6
- var cookie = require('cookie');
6
+ var cookieLib = require('cookie');
7
+ var requestIp = require('request-ip');
7
8
  require('../decorators/index.js');
8
9
  require('../parseBody/index.js');
9
10
  require('../parseFormBody/index.js');
10
11
  require('../parseSearch/index.js');
11
12
  var constants = require('../../constants.js');
12
- var parseSearch = require('../parseSearch/parseSearch.js');
13
13
  var parseFormBody = require('../parseFormBody/parseFormBody.js');
14
+ var parseSearch = require('../parseSearch/parseSearch.js');
14
15
  var parseBody = require('../parseBody/parseBody.js');
15
16
  var once = require('../decorators/once/once.js');
16
17
 
17
18
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
18
19
 
19
- var cookie__default = /*#__PURE__*/_interopDefaultLegacy(cookie);
20
+ var cookieLib__default = /*#__PURE__*/_interopDefaultLegacy(cookieLib);
20
21
 
21
22
  const URL_PARSER = /^(?<path>[^?]+)(\?(?<search>.*))?/;
22
23
  let Action = (() => {
23
- var _a, _Action_search, _Action_headers, _Action_cookie;
24
+ var _a, _Action_cookie, _Action_headers, _Action_search;
24
25
  let _instanceExtraInitializers = [];
25
- let _get_parsedUrl_decorators;
26
- let _get_originSearch_decorators;
27
- let _get_originCookies_decorators;
28
- let _get_bodyType_decorators;
29
26
  let _parseBody_decorators;
27
+ let _get_bodyType_decorators;
28
+ let _get_clientIp_decorators;
29
+ let _get_originCookies_decorators;
30
+ let _get_originSearch_decorators;
31
+ let _get_parsedUrl_decorators;
30
32
  return _a = class Action {
31
- constructor(req) {
33
+ constructor(req, res) {
32
34
  this.req = (tslib.__runInitializers(this, _instanceExtraInitializers), req);
33
- _Action_search.set(this, void 0);
34
- _Action_headers.set(this, {});
35
+ this.res = res;
35
36
  _Action_cookie.set(this, {});
37
+ _Action_headers.set(this, {});
38
+ _Action_search.set(this, void 0);
36
39
  }
37
- get parsedUrl() {
38
- var _a;
39
- const match = (_a = this.req.url) === null || _a === void 0 ? void 0 : _a.match(URL_PARSER);
40
- if (!match)
41
- throw Error('cannot parse url');
42
- const result = match.groups;
43
- result.path = result.path
44
- .replaceAll(/\/\.\.\//g, '/')
45
- .replaceAll(/\/+/g, '/');
46
- return result;
40
+ parseBody() {
41
+ return tslib.__awaiter(this, void 0, void 0, function* () {
42
+ if (!this.bodyType) {
43
+ return;
44
+ }
45
+ if (this.bodyType === 'multipart/form-data') {
46
+ this.body = yield parseFormBody.parseFormBody(this.req);
47
+ }
48
+ if (this.bodyType === 'application/x-www-form-urlencoded') {
49
+ this.body = parseSearch.parseSearch(yield parseBody.parseBody(this.req));
50
+ }
51
+ if (this.bodyType === 'application/json') {
52
+ this.body = JSON.parse(yield parseBody.parseBody(this.req));
53
+ }
54
+ });
47
55
  }
48
- get path() {
49
- return this.parsedUrl.path;
56
+ setCookie(name, value, options) {
57
+ let cookies = this.res.getHeader('Set-Cookie');
58
+ if (typeof cookies === 'string') {
59
+ cookies = [cookies];
60
+ }
61
+ const normValue = typeof value === 'string' ? cookieLib__default["default"].serialize(name, value, options) : `${name}=; max-age=0`;
62
+ if (cookies) {
63
+ cookies.push(normValue);
64
+ }
65
+ else {
66
+ cookies = normValue;
67
+ }
68
+ this.res.setHeader('Set-Cookie', cookies);
50
69
  }
51
- get originSearch() {
52
- return parseSearch.parseSearch(this.parsedUrl.search);
70
+ get bodyType() {
71
+ const headerType = this.req.headers['content-type'];
72
+ if (!headerType)
73
+ return;
74
+ for (const bodyType of constants.allBodyTypes) {
75
+ if (headerType.startsWith(bodyType)) {
76
+ return bodyType;
77
+ }
78
+ }
53
79
  }
54
- get search() {
55
- if (tslib.__classPrivateFieldGet(this, _Action_search, "f"))
56
- return tslib.__classPrivateFieldGet(this, _Action_search, "f");
57
- tslib.__classPrivateFieldSet(this, _Action_search, this.originSearch, "f");
58
- return tslib.__classPrivateFieldGet(this, _Action_search, "f");
80
+ get clientIp() {
81
+ return requestIp.getClientIp(this.req);
59
82
  }
60
- set search(value) {
61
- tslib.__classPrivateFieldSet(this, _Action_search, value, "f");
83
+ get cookies() {
84
+ if (tslib.__classPrivateFieldGet(this, _Action_cookie, "f"))
85
+ return tslib.__classPrivateFieldGet(this, _Action_cookie, "f");
86
+ tslib.__classPrivateFieldSet(this, _Action_cookie, this.originCookies, "f");
87
+ return tslib.__classPrivateFieldGet(this, _Action_cookie, "f");
62
88
  }
63
- get originHeaders() {
64
- return this.req.headers;
89
+ set cookies(value) {
90
+ tslib.__classPrivateFieldSet(this, _Action_cookie, value, "f");
65
91
  }
66
92
  get headers() {
67
93
  if (tslib.__classPrivateFieldGet(this, _Action_headers, "f"))
@@ -73,59 +99,57 @@ let Action = (() => {
73
99
  tslib.__classPrivateFieldSet(this, _Action_headers, value, "f");
74
100
  }
75
101
  get originCookies() {
76
- var _a;
77
- return cookie__default["default"].parse((_a = this.req.headers.cookie) !== null && _a !== void 0 ? _a : '');
102
+ var _b;
103
+ return cookieLib__default["default"].parse((_b = this.req.headers.cookie) !== null && _b !== void 0 ? _b : '');
78
104
  }
79
- get cookies() {
80
- if (tslib.__classPrivateFieldGet(this, _Action_cookie, "f"))
81
- return tslib.__classPrivateFieldGet(this, _Action_cookie, "f");
82
- tslib.__classPrivateFieldSet(this, _Action_cookie, this.originCookies, "f");
83
- return tslib.__classPrivateFieldGet(this, _Action_cookie, "f");
105
+ get originHeaders() {
106
+ return this.req.headers;
84
107
  }
85
- set cookies(value) {
86
- tslib.__classPrivateFieldSet(this, _Action_cookie, value, "f");
108
+ get originSearch() {
109
+ return parseSearch.parseSearch(this.parsedUrl.search);
87
110
  }
88
- get bodyType() {
89
- const headerType = this.req.headers['content-type'];
90
- if (!headerType)
91
- return;
92
- for (const bodyType of constants.allBodyTypes) {
93
- if (headerType.startsWith(bodyType)) {
94
- return bodyType;
95
- }
96
- }
111
+ get parsedUrl() {
112
+ var _b;
113
+ const match = (_b = this.req.url) === null || _b === void 0 ? void 0 : _b.match(URL_PARSER);
114
+ if (!match)
115
+ throw Error('cannot parse url');
116
+ const result = match.groups;
117
+ result.path = result.path
118
+ .replaceAll(/\/\.\.\//g, '/')
119
+ .replaceAll(/\/+/g, '/');
120
+ return result;
97
121
  }
98
- parseBody() {
99
- return tslib.__awaiter(this, void 0, void 0, function* () {
100
- if (!this.bodyType) {
101
- return;
102
- }
103
- if (this.bodyType === 'multipart/form-data') {
104
- this.body = yield parseFormBody.parseFormBody(this.req);
105
- }
106
- if (this.bodyType === 'application/x-www-form-urlencoded') {
107
- this.body = parseSearch.parseSearch(yield parseBody.parseBody(this.req));
108
- }
109
- if (this.bodyType === 'application/json') {
110
- this.body = JSON.parse(yield parseBody.parseBody(this.req));
111
- }
112
- });
122
+ get path() {
123
+ return this.parsedUrl.path;
124
+ }
125
+ get search() {
126
+ if (tslib.__classPrivateFieldGet(this, _Action_search, "f"))
127
+ return tslib.__classPrivateFieldGet(this, _Action_search, "f");
128
+ tslib.__classPrivateFieldSet(this, _Action_search, this.originSearch, "f");
129
+ return tslib.__classPrivateFieldGet(this, _Action_search, "f");
130
+ }
131
+ set search(value) {
132
+ tslib.__classPrivateFieldSet(this, _Action_search, value, "f");
113
133
  }
114
134
  },
115
- _Action_search = new WeakMap(),
116
- _Action_headers = new WeakMap(),
117
135
  _Action_cookie = new WeakMap(),
136
+ _Action_headers = new WeakMap(),
137
+ _Action_search = new WeakMap(),
118
138
  (() => {
119
- _get_parsedUrl_decorators = [once.once];
120
- _get_originSearch_decorators = [once.once];
121
- _get_originCookies_decorators = [once.once];
122
- _get_bodyType_decorators = [once.once];
139
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
123
140
  _parseBody_decorators = [once.once];
124
- tslib.__esDecorate(_a, null, _get_parsedUrl_decorators, { kind: "getter", name: "parsedUrl", static: false, private: false, access: { has: obj => "parsedUrl" in obj, get: obj => obj.parsedUrl } }, null, _instanceExtraInitializers);
125
- tslib.__esDecorate(_a, null, _get_originSearch_decorators, { kind: "getter", name: "originSearch", static: false, private: false, access: { has: obj => "originSearch" in obj, get: obj => obj.originSearch } }, null, _instanceExtraInitializers);
126
- tslib.__esDecorate(_a, null, _get_originCookies_decorators, { kind: "getter", name: "originCookies", static: false, private: false, access: { has: obj => "originCookies" in obj, get: obj => obj.originCookies } }, null, _instanceExtraInitializers);
127
- tslib.__esDecorate(_a, null, _get_bodyType_decorators, { kind: "getter", name: "bodyType", static: false, private: false, access: { has: obj => "bodyType" in obj, get: obj => obj.bodyType } }, null, _instanceExtraInitializers);
128
- tslib.__esDecorate(_a, null, _parseBody_decorators, { kind: "method", name: "parseBody", static: false, private: false, access: { has: obj => "parseBody" in obj, get: obj => obj.parseBody } }, null, _instanceExtraInitializers);
141
+ _get_bodyType_decorators = [once.once];
142
+ _get_clientIp_decorators = [once.once];
143
+ _get_originCookies_decorators = [once.once];
144
+ _get_originSearch_decorators = [once.once];
145
+ _get_parsedUrl_decorators = [once.once];
146
+ tslib.__esDecorate(_a, null, _parseBody_decorators, { kind: "method", name: "parseBody", static: false, private: false, access: { has: obj => "parseBody" in obj, get: obj => obj.parseBody }, metadata: _metadata }, null, _instanceExtraInitializers);
147
+ tslib.__esDecorate(_a, null, _get_bodyType_decorators, { kind: "getter", name: "bodyType", static: false, private: false, access: { has: obj => "bodyType" in obj, get: obj => obj.bodyType }, metadata: _metadata }, null, _instanceExtraInitializers);
148
+ tslib.__esDecorate(_a, null, _get_clientIp_decorators, { kind: "getter", name: "clientIp", static: false, private: false, access: { has: obj => "clientIp" in obj, get: obj => obj.clientIp }, metadata: _metadata }, null, _instanceExtraInitializers);
149
+ tslib.__esDecorate(_a, null, _get_originCookies_decorators, { kind: "getter", name: "originCookies", static: false, private: false, access: { has: obj => "originCookies" in obj, get: obj => obj.originCookies }, metadata: _metadata }, null, _instanceExtraInitializers);
150
+ tslib.__esDecorate(_a, null, _get_originSearch_decorators, { kind: "getter", name: "originSearch", static: false, private: false, access: { has: obj => "originSearch" in obj, get: obj => obj.originSearch }, metadata: _metadata }, null, _instanceExtraInitializers);
151
+ tslib.__esDecorate(_a, null, _get_parsedUrl_decorators, { kind: "getter", name: "parsedUrl", static: false, private: false, access: { has: obj => "parsedUrl" in obj, get: obj => obj.parsedUrl }, metadata: _metadata }, null, _instanceExtraInitializers);
152
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
129
153
  })(),
130
154
  _a;
131
155
  })();
@@ -1,2 +1,2 @@
1
- export type DateFormat = 'now' | string | number | Date;
1
+ export type DateFormat = 'now' | Date | number | string;
2
2
  export declare function dateFormat(date?: DateFormat): Date | undefined;
@@ -3,7 +3,7 @@ function dateFormat(date) {
3
3
  return;
4
4
  if (date === 'now')
5
5
  return new Date();
6
- if (['string', 'number'].includes(typeof date))
6
+ if (['number', 'string'].includes(typeof date))
7
7
  return new Date(date);
8
8
  return date;
9
9
  }
@@ -7,7 +7,7 @@ function dateFormat(date) {
7
7
  return;
8
8
  if (date === 'now')
9
9
  return new Date();
10
- if (['string', 'number'].includes(typeof date))
10
+ if (['number', 'string'].includes(typeof date))
11
11
  return new Date(date);
12
12
  return date;
13
13
  }
@@ -0,0 +1,3 @@
1
+ import { type Document, type SchemaObject } from '../../types';
2
+ export declare function generateSchemaTypes(schema: SchemaObject, spaces?: number, lastChar?: string): string;
3
+ export declare function generateTypes(docs: Document, namespace?: string): string;
@@ -0,0 +1,157 @@
1
+ function hasDefault(target) {
2
+ return Boolean(target && ('default' in target || 'x-default' in target));
3
+ }
4
+ function generateSchemaTypes(schema, spaces = 2, lastChar = '\n') {
5
+ const space = [...new Array(spaces)].map(() => ' ').join('');
6
+ if ('$ref' in schema) {
7
+ return `Schemas.${schema.$ref.slice(21)}${lastChar}`;
8
+ }
9
+ if (schema.type === 'integer') {
10
+ return `${schema.format === 'int64' ? 'bigint' : 'number'}${lastChar}`;
11
+ }
12
+ if (schema.type === 'string') {
13
+ if (schema.format === 'date-time') {
14
+ return `Date${lastChar}`;
15
+ }
16
+ if (schema.format === 'binary') {
17
+ return `Bin${lastChar}`;
18
+ }
19
+ return `string${lastChar}`;
20
+ }
21
+ if (['boolean', 'null', 'number'].includes(schema.type)) {
22
+ return `${schema.type}${lastChar}`;
23
+ }
24
+ if (schema.oneOf) {
25
+ let result = '';
26
+ for (const item of schema.oneOf) {
27
+ if (result) {
28
+ result += ' | ';
29
+ }
30
+ result += generateSchemaTypes(item, spaces + 2, '');
31
+ }
32
+ return result + lastChar;
33
+ }
34
+ if (schema.type === 'array') {
35
+ if (!schema.items)
36
+ return `any[]${lastChar}`;
37
+ return `Array<${generateSchemaTypes(schema.items, spaces + 2, '')}>${lastChar}`;
38
+ }
39
+ if (!schema.type) {
40
+ return `any${lastChar}`;
41
+ }
42
+ if (schema.type !== 'object') {
43
+ console.error('unknown type', schema);
44
+ return `any${lastChar}`;
45
+ }
46
+ let result = '{\n';
47
+ const required = schema.required || [];
48
+ const hasProps = Boolean(schema.properties && Object.keys(schema.properties).length);
49
+ const hasRestProps = Boolean(typeof schema.additionalProperties === 'object' &&
50
+ Object.keys(schema.additionalProperties).length);
51
+ if (hasProps) {
52
+ for (const key in schema.properties) {
53
+ const prop = schema.properties[key];
54
+ const splitter = required.includes(key) || hasDefault(prop)
55
+ ? ':'
56
+ : '?:';
57
+ if ('deprecated' in prop && prop.deprecated) {
58
+ result += `${space}/** @deprecated */\n`;
59
+ }
60
+ result += `${space}${key}${splitter} ${generateSchemaTypes(prop, spaces + 2)}`;
61
+ }
62
+ }
63
+ if (hasRestProps) {
64
+ const value = hasProps
65
+ ? 'any\n'
66
+ : generateSchemaTypes(schema.additionalProperties, spaces + 2);
67
+ result += `${space}[key: string]: ${value}`;
68
+ }
69
+ return `${result}${space.slice(0, -2)}}${lastChar}`;
70
+ }
71
+ function generateTypes(docs, namespace = 'Api') {
72
+ var _a;
73
+ let result = `declare namespace ${namespace} {
74
+ export interface Bin {
75
+ filename: string
76
+ fieldName: string
77
+ originalFilename: string
78
+ path: string
79
+ type: string
80
+ disposition: string
81
+ size: number
82
+ extension?: string
83
+ }
84
+ `;
85
+ const schemas = (_a = docs.components) === null || _a === void 0 ? void 0 : _a.schemas;
86
+ const paths = docs.paths;
87
+ if (schemas) {
88
+ result += ' namespace Schemas {\n';
89
+ for (const name in schemas) {
90
+ result += ` export type ${name} = ${generateSchemaTypes(schemas[name], 6)}`;
91
+ }
92
+ result += ' }\n';
93
+ }
94
+ result += ' export interface Endpoints {\n';
95
+ for (const path in paths) {
96
+ const pathObject = paths[path];
97
+ for (const method in pathObject) {
98
+ // @ts-expect-error: FIXME
99
+ const endpoint = pathObject[method];
100
+ const parameters = endpoint.parameters;
101
+ const requestBody = endpoint.requestBody;
102
+ const responses = endpoint.responses;
103
+ if (endpoint.deprecated) {
104
+ result += ' /** @deprecated */\n';
105
+ }
106
+ result += ` ['${method.toUpperCase()}:${path}']: {\n`;
107
+ if (parameters) {
108
+ const params = {
109
+ cookie: '',
110
+ header: '',
111
+ path: '',
112
+ query: '',
113
+ };
114
+ for (const param of parameters) {
115
+ const splitter = param.in === 'path' || hasDefault(param.schema) || param.required ? ':' : '?:';
116
+ params[param.in] += ` ${param.name}${splitter} ${generateSchemaTypes(param.schema)}`;
117
+ }
118
+ if (params.path) {
119
+ result += ` Params: {\n${params.path} }\n`;
120
+ }
121
+ if (params.query) {
122
+ result += ` Search: {\n${params.query} }\n`;
123
+ }
124
+ if (params.header) {
125
+ result += ` Headers: {\n${params.header} }\n`;
126
+ }
127
+ if (params.cookie) {
128
+ result += ` Cookies: {\n${params.cookie} }\n`;
129
+ }
130
+ }
131
+ if (requestBody) {
132
+ result += ` Body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
133
+ }
134
+ if (responses) {
135
+ result += ' Response: {\n';
136
+ for (const key in responses) {
137
+ let multiple = false;
138
+ const response = responses[key];
139
+ result += ` ['${key}']: `;
140
+ for (const type in response.content) {
141
+ if (multiple) {
142
+ result += ' | ';
143
+ }
144
+ result += generateSchemaTypes(response.content[type].schema, 10, '');
145
+ multiple = true;
146
+ }
147
+ result += '\n';
148
+ }
149
+ result += ' }\n';
150
+ }
151
+ result += ' }\n';
152
+ }
153
+ }
154
+ return result + ' }\n}';
155
+ }
156
+
157
+ export { generateSchemaTypes, generateTypes };
@@ -0,0 +1,162 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function hasDefault(target) {
6
+ return Boolean(target && ('default' in target || 'x-default' in target));
7
+ }
8
+ function generateSchemaTypes(schema, spaces = 2, lastChar = '\n') {
9
+ const space = [...new Array(spaces)].map(() => ' ').join('');
10
+ if ('$ref' in schema) {
11
+ return `Schemas.${schema.$ref.slice(21)}${lastChar}`;
12
+ }
13
+ if (schema.type === 'integer') {
14
+ return `${schema.format === 'int64' ? 'bigint' : 'number'}${lastChar}`;
15
+ }
16
+ if (schema.type === 'string') {
17
+ if (schema.format === 'date-time') {
18
+ return `Date${lastChar}`;
19
+ }
20
+ if (schema.format === 'binary') {
21
+ return `Bin${lastChar}`;
22
+ }
23
+ return `string${lastChar}`;
24
+ }
25
+ if (['boolean', 'null', 'number'].includes(schema.type)) {
26
+ return `${schema.type}${lastChar}`;
27
+ }
28
+ if (schema.oneOf) {
29
+ let result = '';
30
+ for (const item of schema.oneOf) {
31
+ if (result) {
32
+ result += ' | ';
33
+ }
34
+ result += generateSchemaTypes(item, spaces + 2, '');
35
+ }
36
+ return result + lastChar;
37
+ }
38
+ if (schema.type === 'array') {
39
+ if (!schema.items)
40
+ return `any[]${lastChar}`;
41
+ return `Array<${generateSchemaTypes(schema.items, spaces + 2, '')}>${lastChar}`;
42
+ }
43
+ if (!schema.type) {
44
+ return `any${lastChar}`;
45
+ }
46
+ if (schema.type !== 'object') {
47
+ console.error('unknown type', schema);
48
+ return `any${lastChar}`;
49
+ }
50
+ let result = '{\n';
51
+ const required = schema.required || [];
52
+ const hasProps = Boolean(schema.properties && Object.keys(schema.properties).length);
53
+ const hasRestProps = Boolean(typeof schema.additionalProperties === 'object' &&
54
+ Object.keys(schema.additionalProperties).length);
55
+ if (hasProps) {
56
+ for (const key in schema.properties) {
57
+ const prop = schema.properties[key];
58
+ const splitter = required.includes(key) || hasDefault(prop)
59
+ ? ':'
60
+ : '?:';
61
+ if ('deprecated' in prop && prop.deprecated) {
62
+ result += `${space}/** @deprecated */\n`;
63
+ }
64
+ result += `${space}${key}${splitter} ${generateSchemaTypes(prop, spaces + 2)}`;
65
+ }
66
+ }
67
+ if (hasRestProps) {
68
+ const value = hasProps
69
+ ? 'any\n'
70
+ : generateSchemaTypes(schema.additionalProperties, spaces + 2);
71
+ result += `${space}[key: string]: ${value}`;
72
+ }
73
+ return `${result}${space.slice(0, -2)}}${lastChar}`;
74
+ }
75
+ function generateTypes(docs, namespace = 'Api') {
76
+ var _a;
77
+ let result = `declare namespace ${namespace} {
78
+ export interface Bin {
79
+ filename: string
80
+ fieldName: string
81
+ originalFilename: string
82
+ path: string
83
+ type: string
84
+ disposition: string
85
+ size: number
86
+ extension?: string
87
+ }
88
+ `;
89
+ const schemas = (_a = docs.components) === null || _a === void 0 ? void 0 : _a.schemas;
90
+ const paths = docs.paths;
91
+ if (schemas) {
92
+ result += ' namespace Schemas {\n';
93
+ for (const name in schemas) {
94
+ result += ` export type ${name} = ${generateSchemaTypes(schemas[name], 6)}`;
95
+ }
96
+ result += ' }\n';
97
+ }
98
+ result += ' export interface Endpoints {\n';
99
+ for (const path in paths) {
100
+ const pathObject = paths[path];
101
+ for (const method in pathObject) {
102
+ // @ts-expect-error: FIXME
103
+ const endpoint = pathObject[method];
104
+ const parameters = endpoint.parameters;
105
+ const requestBody = endpoint.requestBody;
106
+ const responses = endpoint.responses;
107
+ if (endpoint.deprecated) {
108
+ result += ' /** @deprecated */\n';
109
+ }
110
+ result += ` ['${method.toUpperCase()}:${path}']: {\n`;
111
+ if (parameters) {
112
+ const params = {
113
+ cookie: '',
114
+ header: '',
115
+ path: '',
116
+ query: '',
117
+ };
118
+ for (const param of parameters) {
119
+ const splitter = param.in === 'path' || hasDefault(param.schema) || param.required ? ':' : '?:';
120
+ params[param.in] += ` ${param.name}${splitter} ${generateSchemaTypes(param.schema)}`;
121
+ }
122
+ if (params.path) {
123
+ result += ` Params: {\n${params.path} }\n`;
124
+ }
125
+ if (params.query) {
126
+ result += ` Search: {\n${params.query} }\n`;
127
+ }
128
+ if (params.header) {
129
+ result += ` Headers: {\n${params.header} }\n`;
130
+ }
131
+ if (params.cookie) {
132
+ result += ` Cookies: {\n${params.cookie} }\n`;
133
+ }
134
+ }
135
+ if (requestBody) {
136
+ result += ` Body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
137
+ }
138
+ if (responses) {
139
+ result += ' Response: {\n';
140
+ for (const key in responses) {
141
+ let multiple = false;
142
+ const response = responses[key];
143
+ result += ` ['${key}']: `;
144
+ for (const type in response.content) {
145
+ if (multiple) {
146
+ result += ' | ';
147
+ }
148
+ result += generateSchemaTypes(response.content[type].schema, 10, '');
149
+ multiple = true;
150
+ }
151
+ result += '\n';
152
+ }
153
+ result += ' }\n';
154
+ }
155
+ result += ' }\n';
156
+ }
157
+ }
158
+ return result + ' }\n}';
159
+ }
160
+
161
+ exports.generateSchemaTypes = generateSchemaTypes;
162
+ exports.generateTypes = generateTypes;
@@ -0,0 +1 @@
1
+ export * from './generateTypes';
@@ -0,0 +1 @@
1
+ export { generateSchemaTypes, generateTypes } from './generateTypes.es6.js';
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var generateTypes = require('./generateTypes.js');
6
+
7
+
8
+
9
+ exports.generateSchemaTypes = generateTypes.generateSchemaTypes;
10
+ exports.generateTypes = generateTypes.generateTypes;
@@ -8,7 +8,7 @@ function getEndpoint(path, parentEndpoint) {
8
8
  parentEndpoint.static = {};
9
9
  }
10
10
  if (!parentEndpoint.static[key]) {
11
- parentEndpoint.static[key] = { key };
11
+ parentEndpoint.static[key] = { key, plugins: new Set() };
12
12
  }
13
13
  parentEndpoint = parentEndpoint.static[key];
14
14
  if (deep + 1 === splitPath.length) {
@@ -19,7 +19,7 @@ function getEndpoint(path, parentEndpoint) {
19
19
  if (!parentEndpoint.dynamic) {
20
20
  parentEndpoint.dynamic = [];
21
21
  }
22
- const newEndpoint = { key };
22
+ const newEndpoint = { key, plugins: new Set() };
23
23
  parentEndpoint.dynamic.push(newEndpoint);
24
24
  parentEndpoint = newEndpoint;
25
25
  if (deep + 1 === splitPath.length) {
@@ -12,7 +12,7 @@ function getEndpoint(path, parentEndpoint) {
12
12
  parentEndpoint.static = {};
13
13
  }
14
14
  if (!parentEndpoint.static[key]) {
15
- parentEndpoint.static[key] = { key };
15
+ parentEndpoint.static[key] = { key, plugins: new Set() };
16
16
  }
17
17
  parentEndpoint = parentEndpoint.static[key];
18
18
  if (deep + 1 === splitPath.length) {
@@ -23,7 +23,7 @@ function getEndpoint(path, parentEndpoint) {
23
23
  if (!parentEndpoint.dynamic) {
24
24
  parentEndpoint.dynamic = [];
25
25
  }
26
- const newEndpoint = { key };
26
+ const newEndpoint = { key, plugins: new Set() };
27
27
  parentEndpoint.dynamic.push(newEndpoint);
28
28
  parentEndpoint = newEndpoint;
29
29
  if (deep + 1 === splitPath.length) {
@@ -1 +1 @@
1
- export declare function getOrAdd<R = any>(target: object, path: string | number, defaultValues: any[]): R;
1
+ export declare function getOrAdd<R = any>(target: object, path: number | string, defaultValues: any[]): R;
@@ -1,2 +1,2 @@
1
1
  import { type ServerStartParams } from '../../types';
2
- export declare function httpOnStart({ port, https }: ServerStartParams): void;
2
+ export declare function httpOnStart({ https, port, }: ServerStartParams): void;
@@ -1,4 +1,4 @@
1
- function httpOnStart({ port, https }) {
1
+ function httpOnStart({ https, port, }) {
2
2
  console.log(`http${https ? 's' : ''}://localhost:${port}`);
3
3
  }
4
4