@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,320 @@
1
+ /**
2
+ * This is a base class that represents the common interface between the
3
+ * following HTTP transaction types:
4
+ * - incoming requests
5
+ * - outgoing responses
6
+ * - outgoing requests
7
+ * - incoming responses
8
+ *
9
+ * This class is useful as a means of consolidating the common logic between
10
+ * these four transaction types. Things such as HTTP headers, status codes,
11
+ * connection state, and so on.
12
+ */
13
+
14
+ import Logger, {LogLevel} from 'lib/logger';
15
+ import {ConnectionStatus} from 'lib/network';
16
+ import ExecutionContext from 'lib/execution-context';
17
+ import {InvariantViolation} from 'lib/errors';
18
+ import {isBrowser} from 'lib/environment';
19
+ import {StringEncoding} from 'lib/string';
20
+ import {Dispatcher, TagMap} from 'lib/metrics';
21
+
22
+ import HeaderMap from 'lib/http/type/header-map';
23
+ import HttpMethod from 'lib/http/enum/method';
24
+ import HttpHeader from 'lib/http/enum/header';
25
+ import ContentType from 'lib/http/enum/content-type';
26
+ import LogAttributes from 'lib/http/type/log-attributes';
27
+ import TransactionData from 'lib/http/type/transaction-data';
28
+
29
+ abstract class Transaction {
30
+ private execution_context: ExecutionContext | undefined;
31
+ private path: string;
32
+ private data: TransactionData | undefined;
33
+ private headers: HeaderMap | undefined;
34
+ private method: HttpMethod;
35
+ private body: Buffer;
36
+ private connection_status: ConnectionStatus;
37
+ private start_time: number;
38
+ private end_time: number | undefined;
39
+ private logging_disabled: boolean;
40
+
41
+ public constructor(execution_context?: ExecutionContext) {
42
+ this.execution_context = execution_context;
43
+ this.path = '/';
44
+ this.method = HttpMethod.GET;
45
+ this.start_time = Date.now();
46
+ this.body = Buffer.from('');
47
+ this.logging_disabled = false;
48
+ this.connection_status = ConnectionStatus.DISCONNECTED;
49
+ }
50
+
51
+ public setPath(path: string): this {
52
+ this.path = path;
53
+ return this;
54
+ }
55
+
56
+ public getPath(): string {
57
+ return this.path;
58
+ }
59
+
60
+ public setData(data: TransactionData): this {
61
+ this.data = data;
62
+ return this;
63
+ }
64
+
65
+ public setBody(body: Buffer): this {
66
+ this.body = body;
67
+ return this;
68
+ }
69
+
70
+ public getBody(): Buffer {
71
+ if (!this.hasBody() && this.hasData()) {
72
+ const data = this.getData();
73
+ const serialized_data = JSON.stringify(data);
74
+
75
+ this.body = Buffer.from(serialized_data);
76
+ }
77
+
78
+ return this.body;
79
+ }
80
+
81
+ public setHeaders(headers: HeaderMap): this {
82
+ this.headers = headers;
83
+ return this;
84
+ }
85
+
86
+ public getHeaders(): HeaderMap {
87
+ if (this.headers === undefined) {
88
+ this.headers = {} as HeaderMap;
89
+ }
90
+
91
+ return this.headers;
92
+ }
93
+
94
+ public getContentType(): ContentType | void {
95
+ const header_value = this.getHeaderValue(HttpHeader.CONTENT_TYPE);
96
+
97
+ if (!header_value) {
98
+ return undefined;
99
+ }
100
+
101
+ return this.stripHeaderParameter(header_value) as ContentType;
102
+ }
103
+
104
+ public setContentType(content_type: ContentType): this {
105
+ this.setHeaderValue(HttpHeader.CONTENT_TYPE, content_type);
106
+ return this;
107
+ }
108
+
109
+ public getHeaderValue(key: HttpHeader): string | undefined {
110
+ return this.getHeaders()[key];
111
+ }
112
+
113
+ public setHeaderValue(key: HttpHeader, value: string | number): this {
114
+ if (typeof value === 'number') {
115
+ value = value.toString();
116
+ }
117
+
118
+ const headers = this.getHeaders();
119
+
120
+ headers[key] = value;
121
+
122
+ return this;
123
+ }
124
+
125
+ public setMethod(method: HttpMethod): this {
126
+ this.method = method;
127
+ return this;
128
+ }
129
+
130
+ public getMethod(): HttpMethod {
131
+ return this.method;
132
+ }
133
+
134
+ public getConnectionStatus(): ConnectionStatus {
135
+ return this.connection_status;
136
+ }
137
+
138
+ public setConnectionStatus(connection_status: ConnectionStatus): this {
139
+ this.connection_status = connection_status;
140
+ return this;
141
+ }
142
+
143
+ public getRequestId(): string {
144
+ const execution_context = this.getExecutionContext();
145
+
146
+ return execution_context.getUniqueId();
147
+ }
148
+
149
+ public log(): void {
150
+ if (this.loggingIsDisabled()) {
151
+ return;
152
+ }
153
+
154
+ const logger = this.getLogger();
155
+
156
+ logger.writeMessage(this.getLogMessage(), this.getLogLevel());
157
+ }
158
+
159
+ public getLogger(): Logger {
160
+ return this.getExecutionContext().getLogger();
161
+ }
162
+
163
+ public getExecutionContext(): ExecutionContext {
164
+ if (this.execution_context === undefined) {
165
+ throw new InvariantViolation(`
166
+ Tried to read execution context, but it was not set
167
+ `);
168
+ }
169
+
170
+ return this.execution_context;
171
+ }
172
+
173
+ public setExecutionContext(execution_context: ExecutionContext): this {
174
+ this.execution_context = execution_context;
175
+ return this;
176
+ }
177
+
178
+ public disableLogging(): this {
179
+ this.logging_disabled = true;
180
+ return this;
181
+ }
182
+
183
+ public getData(): TransactionData {
184
+ if (this.data === undefined) {
185
+ throw new Error('Tried to read data, but it was not set');
186
+ }
187
+
188
+ return this.data;
189
+ }
190
+
191
+ protected hasData(): boolean {
192
+ return this.data !== undefined;
193
+ }
194
+
195
+ protected hasBody(): boolean {
196
+ return this.body.length > 0;
197
+ }
198
+
199
+ protected getBodyAsString(): string {
200
+ const body = this.getBody();
201
+
202
+ return body.toString(StringEncoding.UTF8);
203
+ }
204
+
205
+ protected appendToBody(data: Buffer): void {
206
+ this.body = Buffer.concat([this.body, data]);
207
+ }
208
+
209
+ protected hasHeaderValue(key: HttpHeader): boolean {
210
+ return this.getHeaderValue(key) !== undefined;
211
+ }
212
+
213
+ protected createExecutionContext(): ExecutionContext {
214
+ throw new Error(
215
+ `Tried to create request context in non-request class: ${this.constructor.name}`
216
+ );
217
+ }
218
+
219
+ protected getDuration(): number {
220
+ if (this.hasEnded()) {
221
+ return this.getEndTime() - this.getStartTime();
222
+ }
223
+
224
+ return Date.now() - this.getStartTime();
225
+ }
226
+
227
+ protected hasEnded(): boolean {
228
+ return this.end_time !== undefined;
229
+ }
230
+
231
+ protected end(): void {
232
+ this.markEndTime();
233
+ this.log();
234
+ this.dispatchMetrics();
235
+ }
236
+
237
+ protected getSanitizedPath(): string {
238
+ const path = this.getPath();
239
+
240
+ return path.replace(/(secret|code)=([^&]+)/g, (_match, parameter) => {
241
+ return `${parameter}=REDACTED`;
242
+ });
243
+ }
244
+
245
+ protected loggingIsDisabled(): boolean {
246
+ return this.logging_disabled;
247
+ }
248
+
249
+ private dispatchMetrics(): void {
250
+ if (isBrowser()) {
251
+ return;
252
+ }
253
+
254
+ this.dispatchCountMetric();
255
+ this.dispatchTimingMetric();
256
+ }
257
+
258
+ private dispatchCountMetric(): void {
259
+ const dispatcher = Dispatcher.getInstance();
260
+ const metric_name = this.getCountMetricName();
261
+ const metric_tags = this.getMetricTags();
262
+
263
+ dispatcher.increment(metric_name, 1, metric_tags);
264
+ }
265
+
266
+ private dispatchTimingMetric(): void {
267
+ const dispatcher = Dispatcher.getInstance();
268
+ const metric_name = this.getTimingMetricName();
269
+ const duration = this.getDuration();
270
+ const metric_tags = this.getMetricTags();
271
+
272
+ dispatcher.timing(metric_name, duration, metric_tags);
273
+ }
274
+
275
+ private getLogMessage(): string {
276
+ const log_attributes = this.getLogAttributes();
277
+
278
+ let message = `${log_attributes.http_method} ${log_attributes.path}`;
279
+
280
+ if (log_attributes.status_code) {
281
+ message = `[${log_attributes.status_code}] ${message}`;
282
+ }
283
+
284
+ return message;
285
+ }
286
+
287
+ private stripHeaderParameter(header_value: string): string {
288
+ const parts = header_value.split(';');
289
+
290
+ if (parts[0]) {
291
+ return parts[0];
292
+ }
293
+
294
+ return header_value;
295
+ }
296
+
297
+ private markEndTime(): void {
298
+ this.end_time = Date.now();
299
+ }
300
+
301
+ private getStartTime(): number {
302
+ return this.start_time;
303
+ }
304
+
305
+ private getEndTime(): number {
306
+ if (this.end_time === undefined) {
307
+ throw new Error('Tried to read end time, but it was not set');
308
+ }
309
+
310
+ return this.end_time;
311
+ }
312
+
313
+ protected abstract getLogAttributes(): LogAttributes;
314
+ protected abstract getLogLevel(): LogLevel;
315
+ protected abstract getMetricTags(): TagMap;
316
+ protected abstract getCountMetricName(): string;
317
+ protected abstract getTimingMetricName(): string;
318
+ }
319
+
320
+ export default Transaction;
@@ -0,0 +1,6 @@
1
+ interface BasicAuthCredentials {
2
+ username: string;
3
+ password: string;
4
+ }
5
+
6
+ export default BasicAuthCredentials;
@@ -0,0 +1,5 @@
1
+ interface HeaderMap {
2
+ [key: string]: string;
3
+ }
4
+
5
+ export default HeaderMap;
@@ -0,0 +1,12 @@
1
+ import Method from 'lib/http/enum/method';
2
+ import StatusCode from 'lib/http/enum/status-code';
3
+
4
+ interface LogAttributes {
5
+ readonly class_name: string;
6
+ readonly status_code?: StatusCode;
7
+ readonly http_method: Method;
8
+ readonly path: string;
9
+ readonly body: string;
10
+ }
11
+
12
+ export default LogAttributes;
@@ -0,0 +1,5 @@
1
+ interface PathParameters {
2
+ [key: string]: string;
3
+ }
4
+
5
+ export default PathParameters;
@@ -0,0 +1,7 @@
1
+ import QueryValue from 'lib/http/type/query-value';
2
+
3
+ interface QueryData {
4
+ [key: string]: QueryValue;
5
+ }
6
+
7
+ export default QueryData;
@@ -0,0 +1,11 @@
1
+ type QueryValue =
2
+ | string
3
+ | number
4
+ | boolean
5
+ | readonly string[]
6
+ | readonly number[]
7
+ | readonly boolean[]
8
+ | null
9
+ | undefined;
10
+
11
+ export default QueryValue;
@@ -0,0 +1,16 @@
1
+ import Method from 'lib/http/enum/method';
2
+ import HeaderMap from 'lib/http/type/header-map';
3
+
4
+ interface RequestOptions {
5
+ // TODO: Should we use a more restrictive string union type (http: | https:)?
6
+ protocol: string;
7
+ hostname: string;
8
+ port: number;
9
+ path: string;
10
+ method: Method;
11
+ headers: HeaderMap;
12
+ // eslint-disable-next-line @typescript-eslint/naming-convention
13
+ rejectUnauthorized?: boolean;
14
+ }
15
+
16
+ export default RequestOptions;
@@ -0,0 +1,4 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
+ type TransactionData = Record<string, unknown> | Array<unknown>;
3
+
4
+ export default TransactionData;
@@ -0,0 +1,47 @@
1
+ import {InvalidError} from 'lib/errors';
2
+ import {FileExtension} from 'lib/filesystem';
3
+
4
+ import ContentType from 'lib/http/enum/content-type';
5
+
6
+ function getContentTypeForExtension(extension: FileExtension): ContentType {
7
+ switch (extension) {
8
+ case FileExtension.CSS:
9
+ return ContentType.CSS;
10
+
11
+ case FileExtension.GIF:
12
+ return ContentType.GIF;
13
+
14
+ case FileExtension.HTML:
15
+ return ContentType.HTML;
16
+
17
+ case FileExtension.ICO:
18
+ return ContentType.ICO;
19
+
20
+ case FileExtension.JPEG:
21
+ case FileExtension.JPG:
22
+ return ContentType.JPEG;
23
+
24
+ case FileExtension.JS:
25
+ return ContentType.JS;
26
+
27
+ case FileExtension.JSON:
28
+ return ContentType.JSON;
29
+
30
+ case FileExtension.MP3:
31
+ return ContentType.MP3;
32
+
33
+ case FileExtension.PNG:
34
+ return ContentType.PNG;
35
+
36
+ case FileExtension.TXT:
37
+ return ContentType.TEXT;
38
+
39
+ case FileExtension.WAV:
40
+ return ContentType.WAV;
41
+
42
+ default:
43
+ throw new InvalidError(`Unsupported file extension: ${extension}`);
44
+ }
45
+ }
46
+
47
+ export default getContentTypeForExtension;
@@ -0,0 +1,25 @@
1
+ import HTTP from 'http';
2
+ import HTTPS from 'https';
3
+
4
+ import {isBrowser} from 'lib/environment';
5
+ import {NetworkProtocol} from 'lib/network';
6
+
7
+ import IsomorphicHttp from 'lib/http/isomorphic';
8
+ import NetworkLibrary from 'lib/http/interface/network-library';
9
+
10
+ function getLibraryForProtocol(protocol: NetworkProtocol): NetworkLibrary {
11
+ if (isBrowser()) {
12
+ return new IsomorphicHttp();
13
+ }
14
+
15
+ switch (protocol) {
16
+ case NetworkProtocol.HTTP:
17
+ return HTTP;
18
+ case NetworkProtocol.HTTPS:
19
+ return HTTPS;
20
+ default:
21
+ throw new Error(`Unsupported network protocol: ${protocol}`);
22
+ }
23
+ }
24
+
25
+ export default getLibraryForProtocol;
@@ -0,0 +1,37 @@
1
+ import {ErrorType, GenericError} from 'lib/errors';
2
+
3
+ import StatusCode from 'lib/http/enum/status-code';
4
+
5
+ function getStatusCodeForErrorType(error_code: ErrorType): StatusCode {
6
+ switch (error_code) {
7
+ case ErrorType.CONFLICT:
8
+ return StatusCode.CONFLICT;
9
+
10
+ case ErrorType.GENERIC:
11
+ return StatusCode.SERVER_ERROR;
12
+
13
+ case ErrorType.INVALID:
14
+ case ErrorType.OMITTED:
15
+ return StatusCode.BAD_REQUEST;
16
+
17
+ case ErrorType.NOT_FOUND:
18
+ return StatusCode.FILE_NOT_FOUND;
19
+
20
+ case ErrorType.NOT_ALLOWED:
21
+ return StatusCode.METHOD_NOT_ALLOWED;
22
+
23
+ case ErrorType.NOT_IMPLEMENTED:
24
+ return StatusCode.NOT_IMPLEMENTED;
25
+
26
+ case ErrorType.TIMEOUT:
27
+ return StatusCode.REQUEST_TIMEOUT;
28
+
29
+ case ErrorType.UNAUTHORIZED:
30
+ return StatusCode.UNAUTHORIZED;
31
+
32
+ default:
33
+ throw new GenericError(`Unsupported error code: ${error_code}`);
34
+ }
35
+ }
36
+
37
+ export default getStatusCodeForErrorType;
@@ -0,0 +1,13 @@
1
+ import {wrapError} from 'lib/errors';
2
+
3
+ import StatusCode from 'lib/http/enum/status-code';
4
+ import getStatusCodeForErrorType from 'lib/http/utility/get-status-code-for-error-type';
5
+
6
+ function getStatusCodeForError(error: Error): StatusCode {
7
+ const wrapped_error = wrapError(error);
8
+ const error_type = wrapped_error.getType();
9
+
10
+ return getStatusCodeForErrorType(error_type);
11
+ }
12
+
13
+ export default getStatusCodeForError;
@@ -0,0 +1,15 @@
1
+ import StatusCode from 'lib/http/enum/status-code';
2
+
3
+ function isClientErrorStatus(status_code: StatusCode): boolean {
4
+ if (status_code < StatusCode.BAD_REQUEST) {
5
+ return false;
6
+ }
7
+
8
+ if (status_code >= StatusCode.SERVER_ERROR) {
9
+ return false;
10
+ }
11
+
12
+ return true;
13
+ }
14
+
15
+ export default isClientErrorStatus;
@@ -0,0 +1,9 @@
1
+ import StatusCode from 'lib/http/enum/status-code';
2
+ import isClientErrorStatus from 'lib/http/utility/is-client-error-status';
3
+ import isServerErrorStatus from 'lib/http/utility/is-server-error-status';
4
+
5
+ function isErrorStatus(status_code: StatusCode): boolean {
6
+ return isClientErrorStatus(status_code) || isServerErrorStatus(status_code);
7
+ }
8
+
9
+ export default isErrorStatus;
@@ -0,0 +1,7 @@
1
+ import StatusCode from 'lib/http/enum/status-code';
2
+
3
+ function isServerErrorStatus(status_code: StatusCode): boolean {
4
+ return status_code >= StatusCode.SERVER_ERROR;
5
+ }
6
+
7
+ export default isServerErrorStatus;
@@ -0,0 +1,7 @@
1
+ import StatusCode from 'lib/http/enum/status-code';
2
+
3
+ function isSuccessStatus(status_code: StatusCode): boolean {
4
+ return status_code <= StatusCode.PARTIAL_CONTENT;
5
+ }
6
+
7
+ export default isSuccessStatus;
@@ -0,0 +1,58 @@
1
+ import HTTP from 'http';
2
+
3
+ import Logger from 'lib/logger';
4
+ import PromiseWrapper from 'lib/promise-wrapper';
5
+ import {NetworkProtocol} from 'lib/network';
6
+
7
+ import StatusCode from 'lib/http/enum/status-code';
8
+ import RequestOptions from 'lib/http/type/request-options';
9
+ import getLibraryForProtocol from 'lib/http/utility/get-library-for-protocol';
10
+ import serializeRequestOptions from 'lib/http/utility/serialize-request-options';
11
+
12
+ async function proxyRequest(
13
+ protocol: NetworkProtocol,
14
+ options: RequestOptions,
15
+ request: HTTP.IncomingMessage,
16
+ response: HTTP.ServerResponse
17
+ ): Promise<void> {
18
+ const promise_wrapper = new PromiseWrapper();
19
+ const library = getLibraryForProtocol(protocol);
20
+
21
+ const proxy_request = library.request(options, (raw_response) => {
22
+ const proxy_response = raw_response as HTTP.IncomingMessage;
23
+ const status_code = proxy_response.statusCode || StatusCode.SUCCESS;
24
+
25
+ response.writeHead(status_code, proxy_response.headers);
26
+
27
+ proxy_response.on('data', (data) => {
28
+ response.write(data);
29
+ });
30
+
31
+ proxy_response.on('end', () => {
32
+ response.end();
33
+ promise_wrapper.resolve();
34
+ });
35
+ // TODO: Remove the need to cast here (and the response above) by
36
+ // implementing the remaining stuff on the IsomorphicRequest class.
37
+ }) as HTTP.ClientRequest;
38
+
39
+ request.pipe(proxy_request, {
40
+ end: true
41
+ });
42
+
43
+ proxy_request.on('error', (error) => {
44
+ const logger = new Logger();
45
+ const serialized_options = serializeRequestOptions(options);
46
+
47
+ logger.warn(`
48
+ Received error when proxying request: ${serialized_options}:
49
+ ${error.message}
50
+ `);
51
+
52
+ return promise_wrapper.reject(error);
53
+ });
54
+
55
+ await promise_wrapper.getPromise();
56
+ }
57
+
58
+ export default proxyRequest;
@@ -0,0 +1,9 @@
1
+ import RequestOptions from 'lib/http/type/request-options';
2
+
3
+ function serializeRequestOptions(options: RequestOptions): string {
4
+ const {method, protocol, hostname, port, path} = options;
5
+
6
+ return `${method} ${protocol}//${hostname}:${port}${path}`;
7
+ }
8
+
9
+ export default serializeRequestOptions;
@@ -0,0 +1,20 @@
1
+ class SlugGenerator {
2
+ private message: string;
3
+
4
+ public constructor(message: string) {
5
+ this.message = message;
6
+ }
7
+
8
+ public generate(): string {
9
+ return this.getMessage()
10
+ .replace(/\s/g, '-')
11
+ .replace(/[^A-Za-z0-9-]/g, '')
12
+ .toLowerCase();
13
+ }
14
+
15
+ private getMessage(): string {
16
+ return this.message;
17
+ }
18
+ }
19
+
20
+ export default SlugGenerator;
@@ -0,0 +1,3 @@
1
+ import KeyGenerator from 'lib/key-generator/key-generator';
2
+
3
+ export default KeyGenerator;
@@ -0,0 +1,7 @@
1
+ class KeyGenerator {
2
+ public static generateToken(): string {
3
+ return Math.random().toString(16).slice(2);
4
+ }
5
+ }
6
+
7
+ export default KeyGenerator;
@@ -0,0 +1,14 @@
1
+ enum AnsiEscapeCode {
2
+ BLACK = '\x1b[30m',
3
+ RED = '\x1b[31m',
4
+ GREEN = '\x1b[32m',
5
+ YELLOW = '\x1b[33m',
6
+ BLUE = '\x1b[34m',
7
+ MAGENTA = '\x1b[35m',
8
+ CYAN = '\x1b[36m',
9
+ WHITE = '\x1b[37m',
10
+ GREY = '\x1b[38m',
11
+ RESET = '\x1b[39;49m'
12
+ }
13
+
14
+ export default AnsiEscapeCode;