@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,53 @@
1
+ import Net from 'net';
2
+
3
+ import {NetworkProtocol} from 'lib/network';
4
+ import ExecutionContext from 'lib/execution-context';
5
+ import {IncomingConnection} from 'lib/tcp';
6
+
7
+ import BaseServer from 'lib/server/base';
8
+ import ServerEvent from 'lib/server/enum/server-event';
9
+ import ServerOptions from 'lib/server/type/server-options';
10
+
11
+ class TcpServer extends BaseServer {
12
+ private connections: IncomingConnection[];
13
+
14
+ public constructor(options: ServerOptions) {
15
+ const raw_server = Net.createServer();
16
+
17
+ super(options, raw_server);
18
+
19
+ this.connections = [];
20
+ }
21
+
22
+ protected bindHandlers(): void {
23
+ const raw_server = this.getRawServer();
24
+
25
+ raw_server.on('connection', this.handleSocket.bind(this));
26
+ }
27
+
28
+ protected getProtocol(): NetworkProtocol {
29
+ return NetworkProtocol.TCP;
30
+ }
31
+
32
+ private handleSocket(socket: Net.Socket): void {
33
+ const config = this.getConfig();
34
+ const execution_context = new ExecutionContext(config);
35
+ const connection = new IncomingConnection(socket, execution_context);
36
+
37
+ this.addConnection(connection);
38
+ }
39
+
40
+ private addConnection(connection: IncomingConnection): void {
41
+ const connections = this.getConnections();
42
+
43
+ connections.push(connection);
44
+
45
+ this.emit(ServerEvent.CONNECTION, connection);
46
+ }
47
+
48
+ private getConnections(): IncomingConnection[] {
49
+ return this.connections;
50
+ }
51
+ }
52
+
53
+ export default TcpServer;
@@ -0,0 +1,10 @@
1
+ import RuntimeConfig from 'type/runtime-config';
2
+
3
+ interface ServerOptions {
4
+ readonly port: number;
5
+ readonly label: string;
6
+ readonly id?: string;
7
+ readonly config: RuntimeConfig;
8
+ }
9
+
10
+ export default ServerOptions;
@@ -0,0 +1,17 @@
1
+ import AnsiEscapeCode from 'lib/string/enum/ansi-escape-code';
2
+
3
+ function calculateLength(value: string): number {
4
+ if (value.indexOf('\x1b') === -1) {
5
+ return value.length;
6
+ }
7
+
8
+ Object.values(AnsiEscapeCode).forEach((escape_code) => {
9
+ while (value.indexOf(escape_code) !== -1) {
10
+ value = value.replace(escape_code, '');
11
+ }
12
+ });
13
+
14
+ return value.length;
15
+ }
16
+
17
+ export default calculateLength;
@@ -0,0 +1,8 @@
1
+ function capitalize(str: string): string {
2
+ const first_character = str[0];
3
+ const remaining_characters = str.slice(1);
4
+
5
+ return first_character.toUpperCase() + remaining_characters;
6
+ }
7
+
8
+ export default capitalize;
@@ -0,0 +1,14 @@
1
+ import {InvariantViolation} from 'lib/errors';
2
+
3
+ function createSlug(message: string): string {
4
+ if (message === '') {
5
+ throw new InvariantViolation('Tried to create slug, but message was empty');
6
+ }
7
+
8
+ return message
9
+ .replace(/[\s_]/g, '-')
10
+ .replace(/[^A-Za-z0-9-]/g, '')
11
+ .toLowerCase();
12
+ }
13
+
14
+ export default createSlug;
@@ -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;
@@ -0,0 +1,9 @@
1
+ enum StringEncoding {
2
+ ASCII = 'ascii',
3
+ BASE64 = 'base64',
4
+ BINARY = 'binary',
5
+ HEX = 'hex',
6
+ UTF8 = 'utf8'
7
+ }
8
+
9
+ export default StringEncoding;
@@ -0,0 +1,5 @@
1
+ function hyphenate(text: string): string {
2
+ return text.replace(/[_\s]/g, '-');
3
+ }
4
+
5
+ export default hyphenate;
@@ -0,0 +1,3 @@
1
+ export {default as createSlug} from 'lib/string/create-slug';
2
+ export {default as capitalize} from 'lib/string/capitalize';
3
+ export {default as StringEncoding} from 'lib/string/enum/string-encoding';
@@ -0,0 +1,14 @@
1
+ import calculateLength from 'lib/string/calculate-length';
2
+
3
+ function pad(value: string, desired_length: number, character = ' '): string {
4
+ let actual_length = calculateLength(value);
5
+
6
+ while (actual_length < desired_length) {
7
+ value += character;
8
+ actual_length += 1;
9
+ }
10
+
11
+ return value;
12
+ }
13
+
14
+ export default pad;
@@ -0,0 +1,21 @@
1
+ function trimMultiline(value: string): string {
2
+ value = value.trim();
3
+
4
+ const lines = value.split('\n');
5
+
6
+ let result = '';
7
+
8
+ lines.forEach((line) => {
9
+ line = line.replace(/\s+/g, ' ');
10
+
11
+ if (line.trim() === '') {
12
+ result += '\n';
13
+ } else {
14
+ result += line;
15
+ }
16
+ });
17
+
18
+ return result;
19
+ }
20
+
21
+ export default trimMultiline;
@@ -0,0 +1,8 @@
1
+ function trim(value: string): string {
2
+ value = value.replace(/^[\s\t\n]+/g, '');
3
+ value = value.replace(/[\s\t\n]+$/g, '');
4
+
5
+ return value;
6
+ }
7
+
8
+ export default trim;
@@ -0,0 +1,13 @@
1
+ class Channel {
2
+ private id: string;
3
+
4
+ public constructor(id: string) {
5
+ this.id = id;
6
+ }
7
+
8
+ public getId(): string {
9
+ return this.id;
10
+ }
11
+ }
12
+
13
+ export default Channel;
@@ -0,0 +1,72 @@
1
+ import {Socket} from 'lib/network';
2
+ import ExecutionContext from 'lib/execution-context';
3
+
4
+ import Connection from 'lib/tcp/connection';
5
+
6
+ class IncomingConnection extends Connection {
7
+ private paused: boolean;
8
+ private execution_context: ExecutionContext;
9
+ private data_queue: Buffer[] | undefined;
10
+
11
+ public constructor(socket: Socket, execution_context: ExecutionContext) {
12
+ super(socket);
13
+
14
+ this.paused = false;
15
+ this.execution_context = execution_context;
16
+
17
+ this.sendHeartbeat();
18
+ }
19
+
20
+ public enqueueData(data: Buffer): void {
21
+ const queue = this.getDataQueue();
22
+
23
+ queue.push(data);
24
+ }
25
+
26
+ public pause(): void {
27
+ this.paused = true;
28
+ }
29
+
30
+ public resume(): void {
31
+ this.paused = false;
32
+ this.emptyQueue();
33
+ }
34
+
35
+ public getExecutionContext(): ExecutionContext {
36
+ return this.execution_context;
37
+ }
38
+
39
+ protected handleSocketData(data: Buffer): void {
40
+ if (this.isPaused()) {
41
+ this.enqueueData(data);
42
+ } else {
43
+ super.handleSocketData(data);
44
+ }
45
+ }
46
+
47
+ private emptyQueue(): void {
48
+ const queue = this.getDataQueue();
49
+
50
+ while (queue.length) {
51
+ const data = queue.shift();
52
+
53
+ if (data) {
54
+ this.handleSocketData(data);
55
+ }
56
+ }
57
+ }
58
+
59
+ private isPaused(): boolean {
60
+ return this.paused;
61
+ }
62
+
63
+ private getDataQueue(): Buffer[] {
64
+ if (this.data_queue === undefined) {
65
+ this.data_queue = [];
66
+ }
67
+
68
+ return this.data_queue;
69
+ }
70
+ }
71
+
72
+ export default IncomingConnection;
@@ -0,0 +1,219 @@
1
+
2
+ import {Socket, SocketOptions, ConnectionStatus} from 'lib/network';
3
+ import {GenericError} from 'lib/errors';
4
+ import PromiseWrapper from 'lib/promise-wrapper';
5
+
6
+ import Connection from 'lib/tcp/connection';
7
+ import ConnectionParameters from 'lib/tcp/type/connection-parameters';
8
+
9
+ class OutgoingConnection extends Connection {
10
+ private connection_parameters: ConnectionParameters;
11
+ private connect_promise_wrapper: PromiseWrapper<void> | undefined;
12
+ private disconnect_promise_wrapper: PromiseWrapper<void> | undefined;
13
+
14
+ public constructor(
15
+ socket: Socket,
16
+ connection_parameters: ConnectionParameters
17
+ ) {
18
+ super(socket);
19
+
20
+ this.connection_parameters = connection_parameters;
21
+ }
22
+
23
+ public async connect(): Promise<void> {
24
+ if (!this.canConnect()) {
25
+ this.throwUnableToConnectError();
26
+ }
27
+
28
+ this.setConnectionStatus(ConnectionStatus.CONNECTING);
29
+
30
+ const promise_wrapper = new PromiseWrapper<void>();
31
+ const socket = this.getSocket();
32
+ const socket_options = this.getSocketOptions();
33
+
34
+ this.setConnectPromiseWrapper(promise_wrapper);
35
+ this.logConnecting();
36
+
37
+ socket.connect(socket_options);
38
+
39
+ return promise_wrapper.getPromise();
40
+ }
41
+
42
+ public async disconnect(): Promise<void> {
43
+ if (!this.canDisconnect()) {
44
+ this.throwUnableToDisconnectError();
45
+ }
46
+
47
+ this.setConnectionStatus(ConnectionStatus.DISCONNECTING);
48
+
49
+ const promise_wrapper = new PromiseWrapper<void>();
50
+ const socket = this.getSocket();
51
+
52
+ this.setDisconnectPromiseWrapper(promise_wrapper);
53
+ this.logDisconnecting();
54
+
55
+ socket.end();
56
+
57
+ return promise_wrapper.getPromise();
58
+ }
59
+
60
+ protected bindHandlers(): void {
61
+ this.handleSocketConnected = this.handleSocketConnected.bind(this);
62
+
63
+ super.bindHandlers();
64
+ }
65
+
66
+ protected coupleToSocket(socket: Socket): void {
67
+ socket.on('connect', this.handleSocketConnected);
68
+
69
+ super.coupleToSocket(socket);
70
+ }
71
+
72
+ protected handleSocketError(error: Error): void {
73
+ const connect_promise_wrapper = this.clearConnectPromiseWrapper();
74
+
75
+ if (connect_promise_wrapper !== undefined) {
76
+ connect_promise_wrapper.reject(error);
77
+ }
78
+
79
+ const disconnect_promise_wrapper = this.clearDisconnectPromiseWrapper();
80
+
81
+ if (disconnect_promise_wrapper !== undefined) {
82
+ disconnect_promise_wrapper.reject(error);
83
+ }
84
+
85
+ super.handleSocketError(error);
86
+ }
87
+
88
+ protected handleSocketEnd(): void {
89
+ const promise_wrapper = this.clearDisconnectPromiseWrapper();
90
+
91
+ if (promise_wrapper !== undefined) {
92
+ promise_wrapper.resolve();
93
+ }
94
+
95
+ this.logDisconnected();
96
+
97
+ super.handleSocketEnd();
98
+ }
99
+
100
+ private canConnect(): boolean {
101
+ const connection_status = this.getConnectionStatus();
102
+
103
+ return connection_status === ConnectionStatus.DISCONNECTED;
104
+ }
105
+
106
+ private canDisconnect(): boolean {
107
+ const connection_status = this.getConnectionStatus();
108
+
109
+ return connection_status === ConnectionStatus.CONNECTED;
110
+ }
111
+
112
+ private handleSocketConnected(): void {
113
+ this.setConnectionStatus(ConnectionStatus.CONNECTED);
114
+
115
+ const promise_wrapper = this.clearConnectPromiseWrapper();
116
+
117
+ if (promise_wrapper !== undefined) {
118
+ promise_wrapper.resolve();
119
+ }
120
+
121
+ this.sendHeartbeat();
122
+ this.logConnected();
123
+ }
124
+
125
+ private throwUnableToConnectError(): Promise<void> {
126
+ const connection_status = this.getConnectionStatus();
127
+
128
+ throw new GenericError(`Unable to connect (status: ${connection_status})`);
129
+ }
130
+
131
+ private throwUnableToDisconnectError(): Promise<void> {
132
+ const connection_status = this.getConnectionStatus();
133
+
134
+ throw new GenericError(
135
+ `Unable to disconnect (status: ${connection_status})`
136
+ );
137
+ }
138
+
139
+ private getSocketOptions(): SocketOptions {
140
+ const connection_parameters = this.getConnectionParameters();
141
+
142
+ return {
143
+ port: connection_parameters.port,
144
+ host: connection_parameters.hostname
145
+ };
146
+ }
147
+
148
+ private serializeConnectionParameters(): string {
149
+ const {hostname, port} = this.getConnectionParameters();
150
+
151
+ return `${hostname}:${port}`;
152
+ }
153
+
154
+ private getConnectionParameters(): ConnectionParameters {
155
+ return this.connection_parameters;
156
+ }
157
+
158
+ private logConnecting(): void {
159
+ this.logConnectionMessage('Connecting to ', '...');
160
+ }
161
+
162
+ private logConnected(): void {
163
+ this.logConnectionMessage('Connected to ', '.');
164
+ }
165
+
166
+ private logDisconnecting(): void {
167
+ this.logConnectionMessage('Disconnecting from ', '...');
168
+ }
169
+
170
+ private logDisconnected(): void {
171
+ this.logConnectionMessage('Disconnected from ', '.');
172
+ }
173
+
174
+ private logConnectionMessage(prefix: string, suffix: string): void {
175
+ const id = this.getId();
176
+ const logger = this.getLogger();
177
+ const serialized_parameters = this.serializeConnectionParameters();
178
+
179
+ logger.info(`[${id}] ${prefix}${serialized_parameters}${suffix}`);
180
+ }
181
+
182
+ private setConnectPromiseWrapper(
183
+ promise_wrapper: PromiseWrapper<void>
184
+ ): void {
185
+ this.connect_promise_wrapper = promise_wrapper;
186
+ }
187
+
188
+ private setDisconnectPromiseWrapper(
189
+ promise_wrapper: PromiseWrapper<void>
190
+ ): void {
191
+ this.disconnect_promise_wrapper = promise_wrapper;
192
+ }
193
+
194
+ private clearConnectPromiseWrapper(): PromiseWrapper<void> | void {
195
+ if (this.connect_promise_wrapper === undefined) {
196
+ return undefined;
197
+ }
198
+
199
+ const promise_wrapper = this.connect_promise_wrapper;
200
+
201
+ this.connect_promise_wrapper = undefined;
202
+
203
+ return promise_wrapper;
204
+ }
205
+
206
+ private clearDisconnectPromiseWrapper(): PromiseWrapper<void> | void {
207
+ if (this.disconnect_promise_wrapper === undefined) {
208
+ return undefined;
209
+ }
210
+
211
+ const promise_wrapper = this.disconnect_promise_wrapper;
212
+
213
+ this.disconnect_promise_wrapper = undefined;
214
+
215
+ return promise_wrapper;
216
+ }
217
+ }
218
+
219
+ export default OutgoingConnection;