@fc3/mmcadi 0.1.0

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 (460) hide show
  1. package/LICENSE +673 -0
  2. package/README.md +5 -0
  3. package/bin/compile +63 -0
  4. package/bin/copy-static-files +13 -0
  5. package/bin/install +5 -0
  6. package/bin/precompile +55 -0
  7. package/bin/prepublish +7 -0
  8. package/bin/remap-paths +113 -0
  9. package/bin/test +9 -0
  10. package/config/tsconfig.json +37 -0
  11. package/package.json +33 -0
  12. package/src/bootstrap/start.ts +12 -0
  13. package/src/client/bootstrap.ts +5 -0
  14. package/src/client/client.ts +54 -0
  15. package/src/client/enum/key-code.ts +34 -0
  16. package/src/client/enum/page-type.ts +19 -0
  17. package/src/client/factory/page.ts +61 -0
  18. package/src/client/page/confirm-delete-block.ts +30 -0
  19. package/src/client/page/create-block.ts +6 -0
  20. package/src/client/page/day.ts +8 -0
  21. package/src/client/page/edit-block.ts +43 -0
  22. package/src/client/page/edit-custom.ts +16 -0
  23. package/src/client/page/home.ts +8 -0
  24. package/src/client/page/login.ts +8 -0
  25. package/src/client/page/logout.ts +8 -0
  26. package/src/client/page/month.ts +8 -0
  27. package/src/client/page/move-block.ts +8 -0
  28. package/src/client/page/select-block-type.ts +56 -0
  29. package/src/client/page/settings.ts +8 -0
  30. package/src/client/page/view-custom.ts +665 -0
  31. package/src/client/page/week.ts +8 -0
  32. package/src/client/page/year.ts +8 -0
  33. package/src/client/page.ts +128 -0
  34. package/src/client/shim/execute.ts +5 -0
  35. package/src/client/shim/logger.ts +44 -0
  36. package/src/client/utility/get-meta-value.ts +23 -0
  37. package/src/common/builder/block/background.ts +25 -0
  38. package/src/common/builder/block/folder.ts +43 -0
  39. package/src/common/builder/block/header.ts +15 -0
  40. package/src/common/builder/block/link.ts +32 -0
  41. package/src/common/builder/block/multicolumn.ts +16 -0
  42. package/src/common/builder/block/note.ts +13 -0
  43. package/src/common/builder/block/whitespace.ts +13 -0
  44. package/src/common/utility/get-parent-path.ts +29 -0
  45. package/src/constant/month-names.ts +16 -0
  46. package/src/enum/action-type.ts +11 -0
  47. package/src/enum/block-type.ts +18 -0
  48. package/src/enum/calendar-view-mode.ts +9 -0
  49. package/src/enum/color.ts +15 -0
  50. package/src/enum/default-role.ts +6 -0
  51. package/src/enum/directory-item-type.ts +6 -0
  52. package/src/enum/emoji.ts +94 -0
  53. package/src/enum/field-type.ts +8 -0
  54. package/src/enum/header-size.ts +7 -0
  55. package/src/enum/permission-type.ts +8 -0
  56. package/src/enum/time-place-visibility.ts +8 -0
  57. package/src/enum/tool-type.ts +14 -0
  58. package/src/index.ts +8 -0
  59. package/src/interface/hydration-callback.ts +7 -0
  60. package/src/interface/provider.ts +8 -0
  61. package/src/interface/repository.ts +12 -0
  62. package/src/lib/array/add.ts +10 -0
  63. package/src/lib/array/assert-is-empty.ts +23 -0
  64. package/src/lib/array/clone.ts +5 -0
  65. package/src/lib/array/difference.ts +8 -0
  66. package/src/lib/array/empty.ts +6 -0
  67. package/src/lib/array/equal.ts +24 -0
  68. package/src/lib/array/get-first-value.ts +5 -0
  69. package/src/lib/array/get-last-value.ts +5 -0
  70. package/src/lib/array/get-max-value.ts +5 -0
  71. package/src/lib/array/get-value-after.ts +23 -0
  72. package/src/lib/array/get-value-before.ts +23 -0
  73. package/src/lib/array/get-values-between.ts +18 -0
  74. package/src/lib/array/index.ts +5 -0
  75. package/src/lib/array/is-empty.ts +6 -0
  76. package/src/lib/array/remove.ts +19 -0
  77. package/src/lib/array/sum.ts +11 -0
  78. package/src/lib/array/unique.ts +13 -0
  79. package/src/lib/environment/bootstrap.ts +1 -0
  80. package/src/lib/environment/enum/environment-type.ts +8 -0
  81. package/src/lib/environment/enum/service-type.ts +5 -0
  82. package/src/lib/environment/index.ts +7 -0
  83. package/src/lib/environment/utility/get-environment-type.ts +28 -0
  84. package/src/lib/environment/utility/is-browser.ts +5 -0
  85. package/src/lib/environment/utility/is-development.ts +10 -0
  86. package/src/lib/environment/utility/is-production-or-staging.ts +8 -0
  87. package/src/lib/environment/utility/is-production.ts +10 -0
  88. package/src/lib/environment/utility/is-staging.ts +10 -0
  89. package/src/lib/errors/enum/error-type.ts +13 -0
  90. package/src/lib/errors/error/base.ts +40 -0
  91. package/src/lib/errors/error/conflict.ts +16 -0
  92. package/src/lib/errors/error/generic.ts +23 -0
  93. package/src/lib/errors/error/invalid.ts +14 -0
  94. package/src/lib/errors/error/invariant-violation.ts +5 -0
  95. package/src/lib/errors/error/not-allowed.ts +14 -0
  96. package/src/lib/errors/error/not-found.ts +16 -0
  97. package/src/lib/errors/error/not-implemented.ts +20 -0
  98. package/src/lib/errors/error/omitted.ts +14 -0
  99. package/src/lib/errors/error/timeout.ts +14 -0
  100. package/src/lib/errors/error/unauthorized.ts +14 -0
  101. package/src/lib/errors/index.ts +18 -0
  102. package/src/lib/errors/sugar/invariant.ts +7 -0
  103. package/src/lib/errors/type/coded-error.ts +7 -0
  104. package/src/lib/errors/type/error-data.ts +11 -0
  105. package/src/lib/errors/utility/create-error-for-error-type.ts +60 -0
  106. package/src/lib/errors/utility/create-error-from-ambiguous-json-data.ts +26 -0
  107. package/src/lib/errors/utility/error-matches.ts +28 -0
  108. package/src/lib/errors/utility/get-error-type-for-posix-error-code.ts +37 -0
  109. package/src/lib/errors/utility/get-error-type-for-status-code.ts +38 -0
  110. package/src/lib/errors/utility/get-message-for-error-type.ts +29 -0
  111. package/src/lib/errors/utility/matches-posix-error-code.ts +11 -0
  112. package/src/lib/errors/utility/wrap-error.ts +39 -0
  113. package/src/lib/event-emitter/index.ts +63 -0
  114. package/src/lib/execution-context/execution-context.ts +90 -0
  115. package/src/lib/execution-context/index.ts +8 -0
  116. package/src/lib/execution-context/type/session.ts +7 -0
  117. package/src/lib/feature/feature.ts +108 -0
  118. package/src/lib/feature/index.ts +3 -0
  119. package/src/lib/filesystem/bootstrap.ts +1 -0
  120. package/src/lib/filesystem/enum/file-extension.ts +19 -0
  121. package/src/lib/filesystem/index.ts +4 -0
  122. package/src/lib/filesystem/utility/exists.ts +21 -0
  123. package/src/lib/filesystem/utility/get-extension-for-filepath.ts +20 -0
  124. package/src/lib/filesystem/utility/strip-extension.ts +26 -0
  125. package/src/lib/grammar/index.ts +3 -0
  126. package/src/lib/grammar/noun-inflector.ts +104 -0
  127. package/src/lib/grammar/utility/get-words-from-identifier.ts +9 -0
  128. package/src/lib/grammar/verb-inflector.ts +344 -0
  129. package/src/lib/http/buffer-stream.ts +76 -0
  130. package/src/lib/http/enum/content-type.ts +19 -0
  131. package/src/lib/http/enum/cookie-attribute.ts +11 -0
  132. package/src/lib/http/enum/header.ts +29 -0
  133. package/src/lib/http/enum/method.ts +11 -0
  134. package/src/lib/http/enum/same-site-policy.ts +7 -0
  135. package/src/lib/http/enum/status-code.ts +9 -0
  136. package/src/lib/http/factory/body-parser.ts +55 -0
  137. package/src/lib/http/index.ts +24 -0
  138. package/src/lib/http/interface/client-request.ts +15 -0
  139. package/src/lib/http/interface/incoming-message.ts +24 -0
  140. package/src/lib/http/interface/network-library.ts +9 -0
  141. package/src/lib/http/interface/request-callback.ts +7 -0
  142. package/src/lib/http/isomorphic/request.ts +77 -0
  143. package/src/lib/http/isomorphic/response.ts +77 -0
  144. package/src/lib/http/isomorphic.ts +20 -0
  145. package/src/lib/http/parser/accept-header.ts +35 -0
  146. package/src/lib/http/parser/basic-auth-header.ts +48 -0
  147. package/src/lib/http/parser/body/json.ts +14 -0
  148. package/src/lib/http/parser/body/multipart.ts +89 -0
  149. package/src/lib/http/parser/body/url-encoded.ts +16 -0
  150. package/src/lib/http/parser/body.ts +44 -0
  151. package/src/lib/http/parser/cookie.ts +114 -0
  152. package/src/lib/http/parser/querystring.ts +92 -0
  153. package/src/lib/http/parser/url.ts +76 -0
  154. package/src/lib/http/request/incoming.ts +299 -0
  155. package/src/lib/http/request/outgoing.ts +276 -0
  156. package/src/lib/http/request.ts +26 -0
  157. package/src/lib/http/response/incoming.ts +243 -0
  158. package/src/lib/http/response/outgoing.ts +160 -0
  159. package/src/lib/http/response.ts +74 -0
  160. package/src/lib/http/serializer/basic-auth-header.ts +27 -0
  161. package/src/lib/http/serializer/cookie.ts +90 -0
  162. package/src/lib/http/serializer/query-data.ts +54 -0
  163. package/src/lib/http/transaction.ts +320 -0
  164. package/src/lib/http/type/basic-auth-credentials.ts +6 -0
  165. package/src/lib/http/type/header-map.ts +5 -0
  166. package/src/lib/http/type/log-attributes.ts +12 -0
  167. package/src/lib/http/type/path-parameters.ts +5 -0
  168. package/src/lib/http/type/query-data.ts +7 -0
  169. package/src/lib/http/type/query-value.ts +11 -0
  170. package/src/lib/http/type/request-options.ts +16 -0
  171. package/src/lib/http/type/transaction-data.ts +4 -0
  172. package/src/lib/http/utility/get-content-type-for-extension.ts +47 -0
  173. package/src/lib/http/utility/get-library-for-protocol.ts +25 -0
  174. package/src/lib/http/utility/get-status-code-for-error-type.ts +37 -0
  175. package/src/lib/http/utility/get-status-code-for-error.ts +13 -0
  176. package/src/lib/http/utility/is-client-error-status.ts +15 -0
  177. package/src/lib/http/utility/is-error-status.ts +9 -0
  178. package/src/lib/http/utility/is-server-error-status.ts +7 -0
  179. package/src/lib/http/utility/is-success-status.ts +7 -0
  180. package/src/lib/http/utility/proxy-request.ts +58 -0
  181. package/src/lib/http/utility/serialize-request-options.ts +9 -0
  182. package/src/lib/http/utility/slug-generator.ts +20 -0
  183. package/src/lib/key-generator/index.ts +3 -0
  184. package/src/lib/key-generator/key-generator.ts +7 -0
  185. package/src/lib/logger/enum/ansi-escape-code.ts +14 -0
  186. package/src/lib/logger/enum/log-level.ts +8 -0
  187. package/src/lib/logger/formatter.ts +59 -0
  188. package/src/lib/logger/index.ts +7 -0
  189. package/src/lib/logger/interface/error-reporter.ts +7 -0
  190. package/src/lib/logger/interface/logger.ts +13 -0
  191. package/src/lib/logger/logger.ts +239 -0
  192. package/src/lib/logger/type/error-parameters.ts +9 -0
  193. package/src/lib/logger/type/loggable-data.ts +5 -0
  194. package/src/lib/logger/type/loggable-value.ts +1 -0
  195. package/src/lib/metrics/dispatcher.ts +264 -0
  196. package/src/lib/metrics/enum/dispatch-mode.ts +6 -0
  197. package/src/lib/metrics/index.ts +2 -0
  198. package/src/lib/metrics/settings-hydrator.ts +51 -0
  199. package/src/lib/metrics/type/dispatcher-settings.ts +12 -0
  200. package/src/lib/metrics/type/tag-map.ts +5 -0
  201. package/src/lib/network/bootstrap.ts +1 -0
  202. package/src/lib/network/enum/connection-status.ts +14 -0
  203. package/src/lib/network/enum/http-status-code.ts +75 -0
  204. package/src/lib/network/enum/network-protocol.ts +10 -0
  205. package/src/lib/network/event-emitter.ts +63 -0
  206. package/src/lib/network/index.ts +7 -0
  207. package/src/lib/network/interface/socket.ts +42 -0
  208. package/src/lib/network/type/socket-options.ts +6 -0
  209. package/src/lib/network/utility/get-protocol-from-url.ts +15 -0
  210. package/src/lib/operation/index.ts +6 -0
  211. package/src/lib/operation/operation/auto-logging.ts +94 -0
  212. package/src/lib/operation/operation/silent.ts +17 -0
  213. package/src/lib/operation/operation.ts +80 -0
  214. package/src/lib/process/bootstrap.ts +1 -0
  215. package/src/lib/process/enum/posix-error-code.ts +138 -0
  216. package/src/lib/process/enum/process-signal.ts +68 -0
  217. package/src/lib/process/error.ts +6 -0
  218. package/src/lib/process/execute.ts +77 -0
  219. package/src/lib/process/index.ts +4 -0
  220. package/src/lib/process/type/command-options.ts +9 -0
  221. package/src/lib/process/utility/bind-process-lifespan-to.ts +10 -0
  222. package/src/lib/promise-wrapper/index.ts +3 -0
  223. package/src/lib/promise-wrapper/promise-wrapper.ts +51 -0
  224. package/src/lib/random/chance.ts +5 -0
  225. package/src/lib/random/element.ts +7 -0
  226. package/src/lib/random/elements.ts +12 -0
  227. package/src/lib/random/enum.ts +34 -0
  228. package/src/lib/random/enums.ts +11 -0
  229. package/src/lib/random/index.ts +3 -0
  230. package/src/lib/random/number.ts +8 -0
  231. package/src/lib/server/base.ts +194 -0
  232. package/src/lib/server/enum/server-event.ts +5 -0
  233. package/src/lib/server/enum/server-status.ts +10 -0
  234. package/src/lib/server/http/endpoint/ping.ts +21 -0
  235. package/src/lib/server/http/endpoint.ts +345 -0
  236. package/src/lib/server/http/interface/endpoint-constructor.ts +12 -0
  237. package/src/lib/server/http/interface/result-serializer.ts +5 -0
  238. package/src/lib/server/http/middleware.ts +18 -0
  239. package/src/lib/server/http/result-serializer/html.ts +92 -0
  240. package/src/lib/server/http/result-serializer/json.ts +23 -0
  241. package/src/lib/server/http/route.ts +104 -0
  242. package/src/lib/server/http/router.ts +125 -0
  243. package/src/lib/server/http/type/session-resolver.ts +8 -0
  244. package/src/lib/server/http/utility/create-server.ts +34 -0
  245. package/src/lib/server/http/utility/path-parser.ts +49 -0
  246. package/src/lib/server/http/utility/standardize-html-indentation.ts +54 -0
  247. package/src/lib/server/http/websocket-wrapper.ts +83 -0
  248. package/src/lib/server/http.ts +301 -0
  249. package/src/lib/server/index.ts +5 -0
  250. package/src/lib/server/tcp.ts +53 -0
  251. package/src/lib/server/type/server-options.ts +10 -0
  252. package/src/lib/string/calculate-length.ts +17 -0
  253. package/src/lib/string/capitalize.ts +8 -0
  254. package/src/lib/string/create-slug.ts +14 -0
  255. package/src/lib/string/enum/ansi-escape-code.ts +14 -0
  256. package/src/lib/string/enum/string-encoding.ts +9 -0
  257. package/src/lib/string/hyphenate.ts +5 -0
  258. package/src/lib/string/index.ts +3 -0
  259. package/src/lib/string/pad.ts +14 -0
  260. package/src/lib/string/trim-multiline.ts +21 -0
  261. package/src/lib/string/trim.ts +8 -0
  262. package/src/lib/tcp/channel.ts +13 -0
  263. package/src/lib/tcp/connection/incoming.ts +72 -0
  264. package/src/lib/tcp/connection/outgoing.ts +219 -0
  265. package/src/lib/tcp/connection.ts +360 -0
  266. package/src/lib/tcp/enum/connection-event.ts +12 -0
  267. package/src/lib/tcp/enum/message-type.ts +9 -0
  268. package/src/lib/tcp/index.ts +1 -0
  269. package/src/lib/tcp/type/connection-parameters.ts +6 -0
  270. package/src/lib/tcp/type/message/channel-close.ts +9 -0
  271. package/src/lib/tcp/type/message/channel-open.ts +9 -0
  272. package/src/lib/tcp/type/message.ts +10 -0
  273. package/src/lib/test/index.ts +2 -0
  274. package/src/lib/test/utility/build-config.ts +17 -0
  275. package/src/lib/test/utility/build-execution-context.ts +11 -0
  276. package/src/lib/time/bootstrap.ts +1 -0
  277. package/src/lib/time/enum/time-interval.ts +12 -0
  278. package/src/lib/time/index.ts +4 -0
  279. package/src/lib/time/utility/format-duration.ts +139 -0
  280. package/src/lib/time/utility/format-relative-duration.ts +22 -0
  281. package/src/lib/time/utility/sleep.ts +9 -0
  282. package/src/operation.ts +18 -0
  283. package/src/server/endpoint/abstract-page.ts +126 -0
  284. package/src/server/endpoint/action/create.ts +545 -0
  285. package/src/server/endpoint/action/get.ts +231 -0
  286. package/src/server/endpoint/base.ts +51 -0
  287. package/src/server/endpoint/day.ts +13 -0
  288. package/src/server/endpoint/generic-page.ts +14 -0
  289. package/src/server/endpoint/index.ts +11 -0
  290. package/src/server/endpoint/login.ts +45 -0
  291. package/src/server/endpoint/logout.ts +38 -0
  292. package/src/server/endpoint/month.ts +35 -0
  293. package/src/server/endpoint/robots.ts +18 -0
  294. package/src/server/endpoint/session/create.ts +62 -0
  295. package/src/server/endpoint/settings/get.ts +40 -0
  296. package/src/server/endpoint/settings/update.ts +44 -0
  297. package/src/server/endpoint/today.ts +15 -0
  298. package/src/server/endpoint/week.ts +34 -0
  299. package/src/server/endpoint/year.ts +34 -0
  300. package/src/server/enum/custom-page-type.ts +10 -0
  301. package/src/server/factory/block-result-serializer.ts +115 -0
  302. package/src/server/middleware/base.ts +6 -0
  303. package/src/server/middleware/error-handler.ts +177 -0
  304. package/src/server/middleware/static-file.ts +83 -0
  305. package/src/server/operation/add-block.ts +110 -0
  306. package/src/server/operation/create-session.ts +43 -0
  307. package/src/server/operation/delete-block.ts +96 -0
  308. package/src/server/operation/demote-block.ts +108 -0
  309. package/src/server/operation/destroy-session.ts +26 -0
  310. package/src/server/operation/load-account.ts +30 -0
  311. package/src/server/operation/load-block.ts +48 -0
  312. package/src/server/operation/load-directory-items.ts +75 -0
  313. package/src/server/operation/load-page.ts +368 -0
  314. package/src/server/operation/promote-block.ts +104 -0
  315. package/src/server/operation/save-page.ts +60 -0
  316. package/src/server/operation/update-account-settings.ts +52 -0
  317. package/src/server/operation/update-block.ts +124 -0
  318. package/src/server/repository/memory.ts +112 -0
  319. package/src/server/result-serializer/action.ts +939 -0
  320. package/src/server/result-serializer/base.ts +1267 -0
  321. package/src/server/result-serializer/block/audio.ts +33 -0
  322. package/src/server/result-serializer/block/background.ts +20 -0
  323. package/src/server/result-serializer/block/calendar.ts +148 -0
  324. package/src/server/result-serializer/block/directory.ts +57 -0
  325. package/src/server/result-serializer/block/ephemeral.ts +14 -0
  326. package/src/server/result-serializer/block/folder.ts +106 -0
  327. package/src/server/result-serializer/block/header.ts +31 -0
  328. package/src/server/result-serializer/block/image.ts +46 -0
  329. package/src/server/result-serializer/block/link.ts +40 -0
  330. package/src/server/result-serializer/block/list.ts +140 -0
  331. package/src/server/result-serializer/block/multi-column.ts +97 -0
  332. package/src/server/result-serializer/block/note.ts +44 -0
  333. package/src/server/result-serializer/block/todo.ts +78 -0
  334. package/src/server/result-serializer/block/whitespace.ts +15 -0
  335. package/src/server/result-serializer/block.ts +248 -0
  336. package/src/server/result-serializer/common/time-place-options.ts +33 -0
  337. package/src/server/result-serializer/login.ts +58 -0
  338. package/src/server/result-serializer/month.ts +170 -0
  339. package/src/server/result-serializer/page.ts +548 -0
  340. package/src/server/result-serializer/settings.ts +85 -0
  341. package/src/server/result-serializer/week.ts +195 -0
  342. package/src/server/result-serializer/year.ts +160 -0
  343. package/src/server/utility/accepts-content-type.ts +16 -0
  344. package/src/server/utility/accepts-html.ts +9 -0
  345. package/src/server/utility/accepts-json.ts +9 -0
  346. package/src/server/utility/add-days.ts +11 -0
  347. package/src/server/utility/create-date.ts +23 -0
  348. package/src/server/utility/create-index-path.ts +5 -0
  349. package/src/server/utility/create-slug.ts +9 -0
  350. package/src/server/utility/create-toast-path.ts +19 -0
  351. package/src/server/utility/date-less-than.ts +5 -0
  352. package/src/server/utility/date-occurs-before.ts +22 -0
  353. package/src/server/utility/date-to-key.ts +7 -0
  354. package/src/server/utility/date-to-label.ts +5 -0
  355. package/src/server/utility/date-to-path.ts +9 -0
  356. package/src/server/utility/dates-are-equal.ts +22 -0
  357. package/src/server/utility/dates-are-in-order.ts +9 -0
  358. package/src/server/utility/dates-are-on-the-same-day.ts +9 -0
  359. package/src/server/utility/dates-in-same-month.ts +8 -0
  360. package/src/server/utility/day-to-date.ts +40 -0
  361. package/src/server/utility/decrement-date.ts +11 -0
  362. package/src/server/utility/get-block-at-index-path.ts +32 -0
  363. package/src/server/utility/get-block-permissions.ts +15 -0
  364. package/src/server/utility/get-compact-label-for-date.ts +8 -0
  365. package/src/server/utility/get-custom-page-type-for-path.ts +37 -0
  366. package/src/server/utility/get-element-id-for-block.ts +15 -0
  367. package/src/server/utility/get-emoji-for-block-type.ts +39 -0
  368. package/src/server/utility/get-emoji-for-tool-type.ts +20 -0
  369. package/src/server/utility/get-end-of-month.ts +13 -0
  370. package/src/server/utility/get-end-of-week.ts +13 -0
  371. package/src/server/utility/get-filepath-for-folder-block.ts +23 -0
  372. package/src/server/utility/get-hex-for-color.ts +31 -0
  373. package/src/server/utility/get-label-for-time-place-visibility.ts +23 -0
  374. package/src/server/utility/get-month-name.ts +18 -0
  375. package/src/server/utility/get-next-day.ts +7 -0
  376. package/src/server/utility/get-next-month.ts +12 -0
  377. package/src/server/utility/get-next-week.ts +12 -0
  378. package/src/server/utility/get-next-year.ts +13 -0
  379. package/src/server/utility/get-ordinal-label-for-week.ts +11 -0
  380. package/src/server/utility/get-ordinal-of-week-within-month.ts +15 -0
  381. package/src/server/utility/get-padded-date.ts +11 -0
  382. package/src/server/utility/get-parent-index-path.ts +18 -0
  383. package/src/server/utility/get-path-for-folder-block.ts +25 -0
  384. package/src/server/utility/get-path-from-url.ts +13 -0
  385. package/src/server/utility/get-previous-index-path.ts +27 -0
  386. package/src/server/utility/get-previous-month.ts +12 -0
  387. package/src/server/utility/get-previous-week.ts +11 -0
  388. package/src/server/utility/get-previous-year.ts +13 -0
  389. package/src/server/utility/get-random-emoji-for-date.ts +109 -0
  390. package/src/server/utility/get-short-label-for-date.ts +11 -0
  391. package/src/server/utility/get-short-month-name.ts +9 -0
  392. package/src/server/utility/get-short-ordinal.ts +26 -0
  393. package/src/server/utility/get-siblings-and-index-for-index-path.ts +67 -0
  394. package/src/server/utility/get-start-of-month.ts +11 -0
  395. package/src/server/utility/get-start-of-week.ts +12 -0
  396. package/src/server/utility/get-start-of-year.ts +12 -0
  397. package/src/server/utility/get-weekday-name.ts +24 -0
  398. package/src/server/utility/increment-date.ts +15 -0
  399. package/src/server/utility/is-index-path.ts +5 -0
  400. package/src/server/utility/key-to-date.ts +25 -0
  401. package/src/server/utility/month-has-week-containing-date.ts +13 -0
  402. package/src/server/utility/month-to-date.ts +28 -0
  403. package/src/server/utility/month-to-path.ts +10 -0
  404. package/src/server/utility/months-are-equal.ts +8 -0
  405. package/src/server/utility/parse-index-path.ts +23 -0
  406. package/src/server/utility/path-is-date.ts +13 -0
  407. package/src/server/utility/path-to-date.ts +24 -0
  408. package/src/server/utility/subtract-days.ts +7 -0
  409. package/src/server/utility/validate-month.ts +10 -0
  410. package/src/server/utility/validate-page.ts +46 -0
  411. package/src/server/utility/validate-path.ts +9 -0
  412. package/src/server/utility/validate-url.ts +12 -0
  413. package/src/server/utility/week-greater-than.ts +10 -0
  414. package/src/server/utility/week-to-date.ts +8 -0
  415. package/src/server/utility/week-to-path.ts +12 -0
  416. package/src/server/utility/weeks-are-equal.ts +8 -0
  417. package/src/server/utility/year-to-date.ts +26 -0
  418. package/src/server/utility/year-to-path.ts +7 -0
  419. package/src/server/utility/years-are-equal.ts +8 -0
  420. package/src/server.ts +140 -0
  421. package/src/test.ts +195 -0
  422. package/src/type/account-settings.ts +9 -0
  423. package/src/type/account.ts +11 -0
  424. package/src/type/action/add-block.ts +74 -0
  425. package/src/type/action/complete-block.ts +10 -0
  426. package/src/type/action/delete-block.ts +11 -0
  427. package/src/type/action/demote-block.ts +9 -0
  428. package/src/type/action/edit-block.ts +11 -0
  429. package/src/type/action/promote-block.ts +9 -0
  430. package/src/type/action.ts +9 -0
  431. package/src/type/block/audio.ts +8 -0
  432. package/src/type/block/background.ts +10 -0
  433. package/src/type/block/directory.ts +18 -0
  434. package/src/type/block/ephemeral.ts +9 -0
  435. package/src/type/block/folder.ts +14 -0
  436. package/src/type/block/header.ts +11 -0
  437. package/src/type/block/image.ts +8 -0
  438. package/src/type/block/link.ts +12 -0
  439. package/src/type/block/list.ts +24 -0
  440. package/src/type/block/multi-column.ts +10 -0
  441. package/src/type/block/note.ts +9 -0
  442. package/src/type/block/todo.ts +10 -0
  443. package/src/type/block/whitespace.ts +9 -0
  444. package/src/type/block-metadata.ts +14 -0
  445. package/src/type/block.ts +18 -0
  446. package/src/type/day.ts +5 -0
  447. package/src/type/field-definition.ts +8 -0
  448. package/src/type/field-value.ts +5 -0
  449. package/src/type/file.ts +6 -0
  450. package/src/type/month.ts +5 -0
  451. package/src/type/page.ts +8 -0
  452. package/src/type/price.ts +11 -0
  453. package/src/type/resource.ts +5 -0
  454. package/src/type/runtime-config.ts +13 -0
  455. package/src/type/server-settings.ts +17 -0
  456. package/src/type/toast.ts +8 -0
  457. package/src/type/week.ts +5 -0
  458. package/src/type/year.ts +5 -0
  459. package/test/unit/index.ts +11 -0
  460. package/test/unit/server/operation/promote-block.ts +84 -0
@@ -0,0 +1,125 @@
1
+ import Logger from 'lib/logger';
2
+ import {HttpMethod, IncomingRequest, OutgoingResponse} from 'lib/http';
3
+
4
+ import Middleware from 'lib/server/http/middleware';
5
+ import Route from 'lib/server/http/route';
6
+ import Endpoint from 'lib/server/http/endpoint';
7
+
8
+ interface MethodRoutes {
9
+ [HttpMethod.DELETE]: Route[];
10
+ [HttpMethod.GET]: Route[];
11
+ [HttpMethod.HEAD]: Route[];
12
+ [HttpMethod.OPTIONS]: Route[];
13
+ [HttpMethod.PATCH]: Route[];
14
+ [HttpMethod.PUT]: Route[];
15
+ [HttpMethod.POST]: Route[];
16
+ }
17
+
18
+ interface EndpointSetupCallback {
19
+ (endpoint: Endpoint<any, any>): Promise<void>;
20
+ }
21
+
22
+ class Router extends Middleware {
23
+ private logger: Logger;
24
+ private method_routes: MethodRoutes;
25
+ private endpoint_setup_callback: EndpointSetupCallback | undefined;
26
+
27
+ public constructor(logger: Logger, endpoint_setup_callback?: EndpointSetupCallback) {
28
+ super();
29
+
30
+ this.logger = logger;
31
+ this.endpoint_setup_callback = endpoint_setup_callback;
32
+
33
+ this.method_routes = {
34
+ [HttpMethod.DELETE]: [],
35
+ [HttpMethod.GET]: [],
36
+ [HttpMethod.HEAD]: [],
37
+ [HttpMethod.OPTIONS]: [],
38
+ [HttpMethod.PATCH]: [],
39
+ [HttpMethod.PUT]: [],
40
+ [HttpMethod.POST]: []
41
+ };
42
+ }
43
+
44
+ public addRoute(route: Route): void {
45
+ const method = route.getMethod();
46
+ const routes = this.getRoutesForMethod(method);
47
+
48
+ routes.push(route);
49
+ }
50
+
51
+ // Returns a boolean indicating whether the request was successfully processed
52
+ // (read: we can skip subsequent middleware)
53
+ public async handleRequest(
54
+ request: IncomingRequest,
55
+ response: OutgoingResponse
56
+ ): Promise<boolean> {
57
+ const method = request.getMethod();
58
+ const routes = this.getRoutesForMethod(method);
59
+ const logger = this.getLogger();
60
+
61
+ if (routes.length === 0) {
62
+ logger.warn(`No routes matched method: ${method}`);
63
+
64
+ return false;
65
+ }
66
+
67
+ const path = request.getPath();
68
+
69
+ const routes_subset = routes.filter((route) => {
70
+ return route.matchesPath(path);
71
+ });
72
+
73
+ if (routes_subset.length === 0) {
74
+ logger.warn(`No routes matched path: ${path}`);
75
+
76
+ return false;
77
+ }
78
+
79
+ const content_types = request.getAcceptedContentTypes();
80
+
81
+ const matching_route = routes_subset.find((route) => {
82
+ return route.matchesContentTypes(content_types);
83
+ });
84
+
85
+ if (matching_route === undefined) {
86
+ logger.warn(`No routes matched content types: ${content_types}`);
87
+
88
+ return false;
89
+ }
90
+
91
+ // TODO: Why is this necessary, given that we're explicitly checking for
92
+ // undefined values above?
93
+ const route = matching_route;
94
+
95
+ const path_parameters = route.getPathParametersForRequest(request);
96
+
97
+ request.setPathParameters(path_parameters);
98
+
99
+ const endpoint = await route.buildEndpoint(request, response);
100
+
101
+ if (this.endpoint_setup_callback !== undefined) {
102
+ await this.endpoint_setup_callback(endpoint);
103
+ }
104
+
105
+ await endpoint.serve();
106
+
107
+ return true;
108
+ }
109
+
110
+ private getRoutesForMethod(method: HttpMethod): Route[] {
111
+ const method_routes = this.getMethodRoutes();
112
+
113
+ return method_routes[method];
114
+ }
115
+
116
+ private getMethodRoutes(): MethodRoutes {
117
+ return this.method_routes;
118
+ }
119
+
120
+ private getLogger(): Logger {
121
+ return this.logger;
122
+ }
123
+ }
124
+
125
+ export default Router;
@@ -0,0 +1,8 @@
1
+ import {IncomingRequest} from 'lib/http';
2
+ import {Session} from 'lib/execution-context';
3
+
4
+ interface SessionResolver {
5
+ (request: IncomingRequest): Promise<Session | undefined>;
6
+ }
7
+
8
+ export default SessionResolver;
@@ -0,0 +1,34 @@
1
+ import HTTP from 'http';
2
+ import HTTPS from 'https';
3
+
4
+ import {InvalidError} from 'lib/errors';
5
+ import {NetworkProtocol} from 'lib/network';
6
+
7
+ interface ServerConfig {
8
+ readonly key: string | Buffer | undefined;
9
+ readonly cert: string | Buffer | undefined;
10
+ readonly protocol: NetworkProtocol;
11
+ }
12
+
13
+ function createServer(config: ServerConfig): HTTP.Server | HTTPS.Server {
14
+ const {key, cert, protocol} = config;
15
+
16
+ if (protocol === NetworkProtocol.HTTPS) {
17
+ if (key === undefined || cert === undefined) {
18
+ throw new InvalidError('Must specify a key and cert when using HTTPS');
19
+ }
20
+
21
+ return HTTPS.createServer({
22
+ key,
23
+ cert
24
+ });
25
+ }
26
+
27
+ if (key !== undefined || cert !== undefined) {
28
+ throw new InvalidError('SSL key/cert were supplied, but protocol was HTTP');
29
+ }
30
+
31
+ return HTTP.createServer();
32
+ }
33
+
34
+ export default createServer;
@@ -0,0 +1,49 @@
1
+ interface ParsedPath {
2
+ readonly regex: RegExp;
3
+ readonly parameter_keys: string[];
4
+ }
5
+
6
+ class PathParser {
7
+ private path: string;
8
+
9
+ public constructor(path: string) {
10
+ this.path = path;
11
+ }
12
+
13
+ public parse(): ParsedPath {
14
+ const path = this.getPathWithoutLeadingSlash();
15
+ const path_parts = path.split('/');
16
+ const parameter_keys: string[] = [];
17
+
18
+ const regex_parts = path_parts.map((path_part) => {
19
+ const colon_index = path_part.indexOf(':');
20
+
21
+ if (colon_index === -1) {
22
+ return path_part;
23
+ }
24
+
25
+ const prefix = path_part.slice(0, colon_index);
26
+ const parameter_key = path_part.slice(colon_index + 1);
27
+
28
+ parameter_keys.push(parameter_key);
29
+
30
+ return `${prefix}([^\\/?]+)`;
31
+ });
32
+
33
+ const querystring = '(\\?[^/?]+)?';
34
+
35
+ const regex_string = '^/' + regex_parts.join('/') + querystring + '$';
36
+ const regex = new RegExp(regex_string);
37
+
38
+ return {
39
+ regex,
40
+ parameter_keys
41
+ };
42
+ }
43
+
44
+ private getPathWithoutLeadingSlash(): string {
45
+ return this.path.slice(1);
46
+ }
47
+ }
48
+
49
+ export default PathParser;
@@ -0,0 +1,54 @@
1
+ function standardizeHtmlIndentation(html: string): string {
2
+ const original_lines = html.split('\n');
3
+ const standardized_lines: string[] = [];
4
+
5
+ let indentation = '';
6
+ let within_multiline_block = false;
7
+
8
+ original_lines.forEach((original_line) => {
9
+ const trimmed_line = original_line.trim();
10
+
11
+ if (trimmed_line.length === 0) {
12
+ return;
13
+ }
14
+
15
+ if (trimmed_line === '<br>' || trimmed_line === '<hr>') {
16
+ throw new Error('Specify void elements as self-closing');
17
+ }
18
+
19
+ const has_open_tag = /^<[a-z]/.test(trimmed_line);
20
+ const has_close_tag = /<\/[^>]+>$/.test(trimmed_line);
21
+ const is_self_closing = /^<[a-z].*\/>$/.test(trimmed_line);
22
+
23
+ if (!has_open_tag && has_close_tag && !is_self_closing) {
24
+ indentation = indentation.slice(0, -1);
25
+ }
26
+
27
+ if (within_multiline_block) {
28
+ standardized_lines.push(original_line);
29
+ } else {
30
+ const indented_line = `${indentation}${trimmed_line}`;
31
+
32
+ standardized_lines.push(indented_line);
33
+ }
34
+
35
+ const multiline_open_regex = /<(pre|textarea|script)/;
36
+ const multiline_close_regex = /<\/(pre|textarea|script)>/;
37
+
38
+ if (has_open_tag && multiline_open_regex.test(trimmed_line)) {
39
+ within_multiline_block = true;
40
+ }
41
+
42
+ if (has_close_tag && multiline_close_regex.test(trimmed_line) && within_multiline_block) {
43
+ within_multiline_block = false;
44
+ }
45
+
46
+ if (has_open_tag && !has_close_tag && !is_self_closing) {
47
+ indentation += '\t';
48
+ }
49
+ });
50
+
51
+ return standardized_lines.join('\n');
52
+ }
53
+
54
+ export default standardizeHtmlIndentation;
@@ -0,0 +1,83 @@
1
+ import {EventEmitter} from 'events';
2
+
3
+ import WebSocket from 'ws';
4
+
5
+ import {Socket, SocketOptions} from 'lib/network';
6
+
7
+ class WebsocketWrapper extends EventEmitter implements Socket {
8
+ public connecting: boolean;
9
+ public pending: boolean;
10
+ // eslint-disable-next-line @typescript-eslint/naming-convention
11
+ public readyState: 'open';
12
+
13
+ private websocket: WebSocket;
14
+
15
+ public constructor(websocket: WebSocket) {
16
+ super();
17
+
18
+ this.connecting = false;
19
+ this.pending = false;
20
+ this.readyState = 'open';
21
+
22
+ this.websocket = websocket;
23
+
24
+ this.bindHandlers();
25
+ this.assignHandlers();
26
+ }
27
+
28
+ public write(message: string): void {
29
+ const websocket = this.getWebsocket();
30
+
31
+ websocket.send(message);
32
+ }
33
+
34
+ public end(): void {
35
+ const websocket = this.getWebsocket();
36
+
37
+ websocket.close();
38
+ }
39
+
40
+ public destroy(): void {
41
+ const websocket = this.getWebsocket();
42
+
43
+ websocket.terminate();
44
+ }
45
+
46
+ public connect(_options: SocketOptions): void {
47
+ throw new Error('Cannot call connect() on a server-side websocket');
48
+ }
49
+
50
+ private bindHandlers(): void {
51
+ this.handleMessage = this.handleMessage.bind(this);
52
+ this.handleClose = this.handleClose.bind(this);
53
+ this.handleError = this.handleError.bind(this);
54
+ }
55
+
56
+ private assignHandlers(): void {
57
+ const websocket = this.getWebsocket();
58
+
59
+ websocket.on('message', this.handleMessage);
60
+ websocket.on('close', this.handleClose);
61
+ websocket.on('error', this.handleError);
62
+ }
63
+
64
+ private handleMessage(message: string): void {
65
+ this.emit('data', message);
66
+ }
67
+
68
+ private handleClose(): void {
69
+ // Simulate the normal events in a native Net.Socket teardown lifecycle:
70
+ this.emit('end');
71
+ this.emit('close');
72
+ }
73
+
74
+ private handleError(error: Error): void {
75
+ this.emit('error', error);
76
+ }
77
+
78
+ private getWebsocket(): WebSocket {
79
+ return this.websocket;
80
+ }
81
+ }
82
+
83
+ export default WebsocketWrapper;
@@ -0,0 +1,301 @@
1
+ import Net from 'net';
2
+ import HTTP from 'http';
3
+ import Util from 'util';
4
+ import HTTPS from 'https';
5
+
6
+ import Websocket from 'ws';
7
+
8
+ import {sleep, TimeInterval} from 'lib/time';
9
+ import {NotFoundError} from 'lib/errors';
10
+ import {IncomingRequest, OutgoingResponse} from 'lib/http';
11
+ import {NetworkProtocol} from 'lib/network';
12
+ import ExecutionContext from 'lib/execution-context';
13
+ import {IncomingConnection} from 'lib/tcp';
14
+
15
+ import Route from 'lib/server/http/route';
16
+ import Router from 'lib/server/http/router';
17
+ import BaseServer from 'lib/server/base';
18
+ import Middleware from 'lib/server/http/middleware';
19
+ import Endpoint from 'lib/server/http/endpoint';
20
+ import ServerEvent from 'lib/server/enum/server-event';
21
+ import PingEndpoint from 'lib/server/http/endpoint/ping';
22
+ import ServerOptions from 'lib/server/type/server-options';
23
+ import SessionResolver from 'lib/server/http/type/session-resolver';
24
+ import WebsocketWrapper from 'lib/server/http/websocket-wrapper';
25
+ import EndpointConstructor from 'lib/server/http/interface/endpoint-constructor';
26
+
27
+ class HttpServer extends BaseServer {
28
+ private router: Router;
29
+ private middlewares: Middleware[];
30
+ private connections: IncomingConnection[];
31
+ private session_resolver: SessionResolver | undefined;
32
+ private websocket_server: Websocket.Server | undefined;
33
+
34
+ public constructor(
35
+ options: ServerOptions,
36
+ raw_server?: HTTP.Server | HTTPS.Server
37
+ ) {
38
+ if (raw_server === undefined) {
39
+ raw_server = HTTP.createServer();
40
+ }
41
+
42
+ super(options, raw_server);
43
+
44
+ const logger = this.getLogger();
45
+
46
+ const router = new Router(logger, (endpoint) => {
47
+ return this.setupEndpoint(endpoint);
48
+ });
49
+
50
+ this.router = router;
51
+ this.middlewares = [router];
52
+ this.connections = [];
53
+ }
54
+
55
+ public async stop(): Promise<void> {
56
+ await super.stop();
57
+ await this.drain();
58
+ }
59
+
60
+ public addEndpoint(endpoint_constructor: EndpointConstructor): this {
61
+ const router = this.getRouter();
62
+ const route = new Route(endpoint_constructor);
63
+
64
+ router.addRoute(route);
65
+
66
+ return this;
67
+ }
68
+
69
+ public prependMiddleware(middleware: Middleware): this {
70
+ const middlewares = this.getMiddlewares();
71
+
72
+ middlewares.unshift(middleware);
73
+
74
+ return this;
75
+ }
76
+
77
+ public appendMiddleware(middleware: Middleware): this {
78
+ const middlewares = this.getMiddlewares();
79
+
80
+ middlewares.push(middleware);
81
+
82
+ return this;
83
+ }
84
+
85
+ public enablePingEndpoint(): this {
86
+ this.addEndpoint(PingEndpoint);
87
+
88
+ return this;
89
+ }
90
+
91
+ public setSessionResolver(session_resolver: SessionResolver): void {
92
+ this.session_resolver = session_resolver;
93
+ }
94
+
95
+ protected bindHandlers(): void {
96
+ const raw_server = this.getRawServer();
97
+
98
+ raw_server.on('request', this.handleRawRequest.bind(this));
99
+ raw_server.on('upgrade', this.handleUpgrade.bind(this));
100
+ }
101
+
102
+ protected getProtocol(): NetworkProtocol {
103
+ const raw_server = this.getRawServer();
104
+
105
+ if (raw_server instanceof HTTPS.Server) {
106
+ return NetworkProtocol.HTTPS;
107
+ } else if (raw_server instanceof HTTP.Server) {
108
+ return NetworkProtocol.HTTP;
109
+ } else {
110
+ throw new Error('Unable to determine server protocol');
111
+ }
112
+ }
113
+
114
+ protected async setupEndpoint(endpoint: Endpoint<any, any>): Promise<void> {
115
+ }
116
+
117
+ private handleRawRequest(
118
+ raw_request: HTTP.IncomingMessage,
119
+ raw_response: HTTP.ServerResponse
120
+ ): void {
121
+ const config = this.getConfig();
122
+ const execution_context = new ExecutionContext(config);
123
+ const request = new IncomingRequest(raw_request, execution_context);
124
+ const response = new OutgoingResponse(raw_response);
125
+
126
+ response.setExecutionContext(execution_context);
127
+ response.setPath(request.getPath());
128
+ response.setMethod(request.getMethod());
129
+
130
+ const promise = this.handleRequestAsync(request, response);
131
+
132
+ promise.catch((error) => {
133
+ response.error(error);
134
+ });
135
+ }
136
+
137
+ private async handleRequestAsync(
138
+ request: IncomingRequest,
139
+ response: OutgoingResponse
140
+ ): Promise<void> {
141
+ await this.assignSessionToRequest(request);
142
+
143
+ const middlewares = this.getMiddlewares();
144
+ const logger = this.getLogger();
145
+
146
+ let index = 0;
147
+ let error: Error | undefined = undefined;
148
+
149
+ while (index < middlewares.length) {
150
+ const middleware = middlewares[index];
151
+
152
+ if (error) {
153
+ if (await middleware.handleError(error, request, response)) {
154
+ return;
155
+ }
156
+ } else {
157
+ try {
158
+ if (await middleware.handleRequest(request, response)) {
159
+ return;
160
+ }
161
+ } catch (middleware_error) {
162
+ error = middleware_error as Error;
163
+ logger.error(error);
164
+ }
165
+ }
166
+
167
+ index++;
168
+ }
169
+
170
+ if (error === undefined) {
171
+ error = new NotFoundError(
172
+ 'Unable to find a matching resource for this request'
173
+ );
174
+ }
175
+
176
+ response.error(error);
177
+ }
178
+
179
+ private handleUpgrade(
180
+ raw_request: HTTP.IncomingMessage,
181
+ socket: Net.Socket,
182
+ head: Buffer
183
+ ): void {
184
+ const promise = this.handleUpgradeAsync(raw_request, socket, head);
185
+
186
+ promise.catch((error) => {
187
+ const logger = this.getLogger();
188
+
189
+ logger.error(`
190
+ Error occurred when upgrading websocket connection:
191
+ ${error.message}
192
+ `);
193
+
194
+ socket.end();
195
+ });
196
+ }
197
+
198
+ private async handleUpgradeAsync(
199
+ raw_request: HTTP.IncomingMessage,
200
+ socket: Net.Socket,
201
+ head: Buffer
202
+ ): Promise<void> {
203
+ const config = this.getConfig();
204
+ const execution_context = new ExecutionContext(config);
205
+ const request = new IncomingRequest(raw_request, execution_context);
206
+
207
+ await this.assignSessionToRequest(request);
208
+
209
+ const websocket_server = this.getWebsocketServer();
210
+
211
+ websocket_server.handleUpgrade(raw_request, socket, head, (websocket) => {
212
+ const wrapper = new WebsocketWrapper(websocket);
213
+ const connection = new IncomingConnection(wrapper, execution_context);
214
+
215
+ this.addConnection(connection);
216
+ });
217
+ }
218
+
219
+ private async assignSessionToRequest(
220
+ request: IncomingRequest
221
+ ): Promise<void> {
222
+ if (!this.hasSessionResolver()) {
223
+ return;
224
+ }
225
+
226
+ const resolver = this.getSessionResolver();
227
+ const session = await resolver(request);
228
+ const execution_context = request.getExecutionContext();
229
+
230
+ if (session) {
231
+ execution_context.setSession(session);
232
+ }
233
+ }
234
+
235
+ private async drain(): Promise<void> {
236
+ const connections = this.getConnections();
237
+
238
+ connections.forEach((connection) => {
239
+ connection.end();
240
+ });
241
+
242
+ const raw_server = this.getRawServer();
243
+
244
+ const bound_method = raw_server.getConnections.bind(raw_server);
245
+ // eslint-disable-next-line @typescript-eslint/naming-convention
246
+ const getRawConnections = Util.promisify(bound_method);
247
+
248
+ let raw_connection_count = await getRawConnections();
249
+
250
+ while (raw_connection_count > 0) {
251
+ await sleep(TimeInterval.ONE_SECOND);
252
+
253
+ raw_connection_count = await getRawConnections();
254
+ }
255
+ }
256
+
257
+ private getRouter(): Router {
258
+ return this.router;
259
+ }
260
+
261
+ private getMiddlewares(): Middleware[] {
262
+ return this.middlewares;
263
+ }
264
+
265
+ private getWebsocketServer(): Websocket.Server {
266
+ if (this.websocket_server === undefined) {
267
+ this.websocket_server = new Websocket.Server({
268
+ // eslint-disable-next-line @typescript-eslint/naming-convention
269
+ noServer: true
270
+ });
271
+ }
272
+
273
+ return this.websocket_server;
274
+ }
275
+
276
+ private hasSessionResolver(): boolean {
277
+ return this.session_resolver !== undefined;
278
+ }
279
+
280
+ private getSessionResolver(): SessionResolver {
281
+ if (this.session_resolver === undefined) {
282
+ throw new Error('Tried to read session resolver, but it was not set');
283
+ }
284
+
285
+ return this.session_resolver;
286
+ }
287
+
288
+ private addConnection(connection: IncomingConnection): void {
289
+ const connections = this.getConnections();
290
+
291
+ connections.push(connection);
292
+
293
+ this.emit(ServerEvent.CONNECTION, connection);
294
+ }
295
+
296
+ private getConnections(): IncomingConnection[] {
297
+ return this.connections;
298
+ }
299
+ }
300
+
301
+ export default HttpServer;
@@ -0,0 +1,5 @@
1
+ export {default as HttpServer} from 'lib/server/http';
2
+ export {default as Middleware} from 'lib/server/http/middleware';
3
+ export {default as Endpoint} from 'lib/server/http/endpoint';
4
+ export {default as createServer} from 'lib/server/http/utility/create-server';
5
+ export {default as HtmlResultSerializer} from 'lib/server/http/result-serializer/html';