@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
package/src/server.ts ADDED
@@ -0,0 +1,140 @@
1
+ import Path from 'path';
2
+ import {mkdir} from 'fs/promises';
3
+
4
+ import {createServer, HttpServer} from 'lib/server';
5
+ import {NetworkProtocol} from 'lib/network';
6
+ import {IncomingRequest} from 'lib/http';
7
+ import {Session} from 'lib/execution-context';
8
+ import {getFirstValue, getLastValue} from 'lib/array';
9
+ import {NotImplementedError} from 'lib/errors';
10
+ import KeyGenerator from 'lib/key-generator';
11
+
12
+ import ServerSettings from 'type/server-settings';
13
+ import LoginEndpoint from 'server/endpoint/login';
14
+ import RobotsEndpoint from 'server/endpoint/robots';
15
+ import DefaultRole from 'enum/default-role';
16
+ import GetSettingsEndpoint from 'server/endpoint/settings/get';
17
+ import UpdateSettingsEndpoint from 'server/endpoint/settings/update';
18
+ import LogoutEndpoint from 'server/endpoint/logout';
19
+ import DayEndpoint from 'server/endpoint/day';
20
+ import MonthEndpoint from 'server/endpoint/month';
21
+ import YearEndpoint from 'server/endpoint/year';
22
+ import WeekEndpoint from 'server/endpoint/week';
23
+ import IndexEndpoint from 'server/endpoint/index';
24
+ import CreateActionEndpoint from 'server/endpoint/action/create';
25
+ import CreateSessionEndpoint from 'server/endpoint/session/create';
26
+ import GetActionEndpoint from 'server/endpoint/action/get';
27
+ import GenericPageEndpoint from 'server/endpoint/generic-page';
28
+ import TodayEndpoint from 'server/endpoint/today';
29
+ import StaticFileMiddleware from 'server/middleware/static-file';
30
+ import ErrorHandlerMiddleware from 'server/middleware/error-handler';
31
+ import MemoryRepository from 'server/repository/memory';
32
+
33
+ const DEFAULT_PORT = 443;
34
+ const DEFAULT_HOSTNAME = 'mmcadi.dev';
35
+
36
+ class Server extends HttpServer {
37
+ public constructor(settings: ServerSettings) {
38
+ const {key, cert} = settings;
39
+ const protocol = key && cert ? NetworkProtocol.HTTPS : NetworkProtocol.HTTP;
40
+
41
+ const server = createServer({
42
+ key,
43
+ cert,
44
+ protocol
45
+ });
46
+
47
+ const port = settings.port || DEFAULT_PORT;
48
+ const hostname = settings.hostname || DEFAULT_HOSTNAME;
49
+ const label = 'mmcadi';
50
+ const current_directory = process.cwd();
51
+ const default_directory = Path.resolve(current_directory, './public');
52
+ const public_directory = settings.public_directory || default_directory;
53
+
54
+ const repository = settings.repository || new MemoryRepository();
55
+ const providers = settings.providers || [];
56
+ const roles = settings.roles || [];
57
+
58
+ if (getFirstValue(roles) !== DefaultRole.PUBLIC) {
59
+ roles.unshift(DefaultRole.PUBLIC);
60
+ }
61
+
62
+ if (getLastValue(roles) !== DefaultRole.CREATOR) {
63
+ roles.push(DefaultRole.CREATOR);
64
+ }
65
+
66
+ const hydrate = settings.hydrate || function hydrate() {
67
+ throw new NotImplementedError();
68
+ };
69
+
70
+ const config = {
71
+ public_directory,
72
+ repository,
73
+ providers,
74
+ roles,
75
+ hydrate
76
+ };
77
+
78
+ const options = {
79
+ port,
80
+ label,
81
+ hostname,
82
+ config
83
+ };
84
+
85
+ super(options, server);
86
+
87
+ this.addEndpoint(RobotsEndpoint);
88
+ this.addEndpoint(LoginEndpoint);
89
+ this.addEndpoint(LogoutEndpoint);
90
+ this.addEndpoint(GetSettingsEndpoint);
91
+ this.addEndpoint(UpdateSettingsEndpoint);
92
+ this.addEndpoint(TodayEndpoint);
93
+ this.addEndpoint(CreateSessionEndpoint);
94
+ this.addEndpoint(DayEndpoint);
95
+ this.addEndpoint(MonthEndpoint);
96
+ this.addEndpoint(WeekEndpoint);
97
+ this.addEndpoint(YearEndpoint);
98
+ this.addEndpoint(IndexEndpoint);
99
+ this.addEndpoint(GetActionEndpoint);
100
+ this.addEndpoint(CreateActionEndpoint);
101
+ this.addEndpoint(GenericPageEndpoint);
102
+
103
+ this.prependMiddleware(new StaticFileMiddleware());
104
+ this.appendMiddleware(new ErrorHandlerMiddleware());
105
+
106
+ this.setSessionResolver(this.resolveSession.bind(this));
107
+ }
108
+
109
+ private async resolveSession(request: IncomingRequest): Promise<Session | undefined> {
110
+ const session_id = request.getSessionIdFromCookie();
111
+
112
+ if (session_id === undefined) {
113
+ return {
114
+ id: KeyGenerator.generateToken(),
115
+ account_id: null,
116
+ username: null
117
+ };
118
+ }
119
+
120
+ const execution_context = request.getExecutionContext();
121
+ const {repository} = execution_context.getConfig();
122
+
123
+ return repository.findSession(session_id);
124
+ }
125
+
126
+ public async start(): Promise<void> {
127
+ await this.createPublicDirectory();
128
+ await super.start();
129
+ }
130
+
131
+ private async createPublicDirectory(): Promise<void> {
132
+ const {public_directory} = this.getConfig();
133
+
134
+ await mkdir(public_directory, {
135
+ recursive: true
136
+ });
137
+ }
138
+ }
139
+
140
+ export default Server;
package/src/test.ts ADDED
@@ -0,0 +1,195 @@
1
+ import Path from 'path';
2
+ import FS from 'fs';
3
+
4
+ import {isProduction} from 'lib/environment';
5
+ import {InvariantViolation} from 'lib/errors';
6
+
7
+ import {
8
+ createServer,
9
+ header,
10
+ folder,
11
+ note,
12
+ link,
13
+ multicolumn,
14
+ background,
15
+ whitespace
16
+ } from 'index';
17
+
18
+ import ToolType from 'enum/tool-type';
19
+ import MemoryRepository from 'server/repository/memory';
20
+ import TimePlaceVisibility from 'enum/time-place-visibility';
21
+
22
+ function getEnvironmentVariable(key: string): string {
23
+ const value = process.env[key];
24
+
25
+ if (value === undefined) {
26
+ throw new InvariantViolation(`
27
+ Missing value for required env variable "${key}"
28
+ `);
29
+ }
30
+
31
+ if (typeof value !== 'string') {
32
+ throw new InvariantViolation(`
33
+ Invalid value for env variable "${key}": ${value} (expected string)
34
+ `);
35
+ }
36
+
37
+ return value;
38
+ }
39
+
40
+ let key: string | undefined = undefined;
41
+ let cert: string | undefined = undefined;
42
+ let port: number | undefined = undefined;
43
+
44
+ const public_directory = Path.resolve(process.cwd(), './public');
45
+
46
+ const repository = new MemoryRepository({
47
+ accounts: [
48
+ {
49
+ id: 'aaa',
50
+ username: '0x0',
51
+ password: 'pw',
52
+ role: 'creator',
53
+ settings: {
54
+ default_time_place_visibility: TimePlaceVisibility.NONE,
55
+ tool_types: [
56
+ ToolType.LOCK,
57
+ ToolType.SETTINGS,
58
+ ToolType.FOLDER,
59
+ ToolType.TODO,
60
+ ToolType.NOTE,
61
+ ToolType.AUDIO,
62
+ ToolType.IMAGE
63
+ ]
64
+ }
65
+ }
66
+ ],
67
+ sessions: []
68
+ });
69
+
70
+ if (isProduction()) {
71
+ const key_filepath = getEnvironmentVariable('KEY_FILEPATH');
72
+ const cert_filepath = getEnvironmentVariable('CERT_FILEPATH');
73
+
74
+ key = FS.readFileSync(key_filepath, 'ascii');
75
+ cert = FS.readFileSync(cert_filepath, 'ascii');
76
+ } else {
77
+ port = 4443;
78
+ }
79
+
80
+ const providers = [
81
+ {
82
+ path: '/saffron',
83
+ handler: async (path: string) => {
84
+ return [
85
+ header('saffron'),
86
+ background('yellow'),
87
+ note('*an online multiplayer role-playing card game.*'),
88
+ whitespace(8),
89
+ multicolumn(3, [
90
+ whitespace(1),
91
+ link({
92
+ label: 'enter world',
93
+ href: '/saffron',
94
+ color: 'white'
95
+ }),
96
+ whitespace(1)
97
+ ])
98
+ ];
99
+ }
100
+ },
101
+ {
102
+ path: '/controls',
103
+ handler: async (path: string) => {
104
+ return [
105
+ note('various internal controls for the 0xfc3.net web server.'),
106
+ folder({
107
+ emoji: '⚡',
108
+ title: 'restart server',
109
+ subtitle: 'restart the server using the latest working code version.',
110
+ color: 'yellow'
111
+ }),
112
+ folder({
113
+ emoji: '✅',
114
+ title: 'run tests',
115
+ subtitle: 'run the automated test suite.',
116
+ color: 'green'
117
+ })
118
+ ];
119
+ }
120
+ },
121
+ {
122
+ path: '/controls/run-tests',
123
+ handler: async (path: string) => {
124
+ return [
125
+ header('✅ run tests'),
126
+ note('run the automated test suite against the latest version of the code.'),
127
+ multicolumn(2, [
128
+ link({
129
+ label: '⮜ cancel',
130
+ href: '/controls',
131
+ color: 'grey'
132
+ }),
133
+ link({
134
+ label: '✅ start tests ⮞',
135
+ href: '/controls/run-tests/confirm',
136
+ color: 'green'
137
+ })
138
+ ])
139
+ ];
140
+ }
141
+ },
142
+ {
143
+ path: '/controls/restart-server',
144
+ handler: async (path: string) => {
145
+ return [
146
+ header('⚡ restart server'),
147
+ note('this will trigger a restart of the web server process using the latest version of the code.'),
148
+ note('are you sure?'),
149
+ multicolumn(2, [
150
+ link({
151
+ label: '⮜ cancel',
152
+ href: '/controls',
153
+ color: 'grey'
154
+ }),
155
+ link({
156
+ label: '⚡ restart ⮞',
157
+ href: '/controls/restart-server/confirm',
158
+ color: 'red'
159
+ })
160
+ ])
161
+ ];
162
+ }
163
+ },
164
+ {
165
+ path: '/controls/restart-server/confirm',
166
+ handler: async (path: string) => {
167
+ return [
168
+ note('restart scheduled.'),
169
+ link({
170
+ label: 'go back',
171
+ href: '/controls',
172
+ color: 'yellow'
173
+ })
174
+ ];
175
+ }
176
+ }
177
+ ];
178
+
179
+ const roles = [
180
+ 'adventurer',
181
+ 'outrider',
182
+ 'ancient_one'
183
+ ];
184
+
185
+ createServer({
186
+ key,
187
+ cert,
188
+ port,
189
+ providers,
190
+ roles,
191
+ public_directory,
192
+ repository
193
+ }).catch((error) => {
194
+ throw error;
195
+ });
@@ -0,0 +1,9 @@
1
+ import ToolType from 'enum/tool-type';
2
+ import TimePlaceVisibility from 'enum/time-place-visibility';
3
+
4
+ type AccountSettings = {
5
+ readonly tool_types: ToolType[];
6
+ readonly default_time_place_visibility: TimePlaceVisibility;
7
+ };
8
+
9
+ export default AccountSettings;
@@ -0,0 +1,11 @@
1
+ import AccountSettings from 'type/account-settings';
2
+
3
+ type Account = {
4
+ readonly id: string;
5
+ readonly username: string;
6
+ readonly password: string;
7
+ readonly settings: AccountSettings;
8
+ readonly role: string;
9
+ }
10
+
11
+ export default Account;
@@ -0,0 +1,74 @@
1
+ import Action from 'type/action';
2
+ import ActionType from 'enum/action-type';
3
+ import BlockType from 'enum/block-type';
4
+ import Color from 'enum/color';
5
+ import Emoji from 'enum/emoji';
6
+ import TimePlaceVisibility from 'enum/time-place-visibility';
7
+
8
+ interface BaseAddBlockAction extends Action {
9
+ readonly action_type: ActionType.ADD_BLOCK;
10
+ readonly block_type: BlockType;
11
+ readonly index_path: string;
12
+ readonly create_role: string;
13
+ readonly read_role: string;
14
+ readonly update_role: string;
15
+ readonly delete_role: string;
16
+ readonly time_place_visibility: TimePlaceVisibility;
17
+ }
18
+
19
+ export interface AddNoteBlockAction extends BaseAddBlockAction {
20
+ readonly block_type: BlockType.NOTE;
21
+ readonly text: string;
22
+ }
23
+
24
+ export interface AddLinkBlockAction extends BaseAddBlockAction {
25
+ readonly block_type: BlockType.LINK;
26
+ readonly href: string;
27
+ readonly label: string;
28
+ readonly color: Color;
29
+ }
30
+
31
+ export interface AddAudioBlockAction extends BaseAddBlockAction {
32
+ readonly block_type: BlockType.AUDIO;
33
+ }
34
+
35
+ export interface AddImageBlockAction extends BaseAddBlockAction {
36
+ readonly block_type: BlockType.IMAGE;
37
+ }
38
+
39
+ export interface AddHeaderBlockAction extends BaseAddBlockAction {
40
+ readonly block_type: BlockType.HEADER;
41
+ readonly title: string;
42
+ }
43
+
44
+ export interface AddTodoBlockAction extends BaseAddBlockAction {
45
+ readonly block_type: BlockType.TODO;
46
+ readonly title: string;
47
+ }
48
+
49
+ export interface AddBackgroundBlockAction extends BaseAddBlockAction {
50
+ readonly block_type: BlockType.BACKGROUND;
51
+ readonly color: Color;
52
+ }
53
+
54
+ export interface AddWhitespaceBlockAction extends BaseAddBlockAction {
55
+ readonly block_type: BlockType.WHITESPACE;
56
+ readonly line_count: number;
57
+ }
58
+
59
+ export interface AddFolderBlockAction extends BaseAddBlockAction {
60
+ readonly block_type: BlockType.FOLDER;
61
+ readonly title: string;
62
+ readonly subtitle: string;
63
+ readonly emoji: Emoji;
64
+ readonly color: Color;
65
+ }
66
+
67
+ export interface AddMultiColumnBlockAction extends BaseAddBlockAction {
68
+ readonly block_type: BlockType.MULTI_COLUMN;
69
+ readonly max_columns: number;
70
+ }
71
+
72
+ type AddBlockAction = AddNoteBlockAction | AddLinkBlockAction | AddAudioBlockAction | AddImageBlockAction | AddHeaderBlockAction | AddFolderBlockAction | AddMultiColumnBlockAction | AddTodoBlockAction | AddBackgroundBlockAction | AddWhitespaceBlockAction;
73
+
74
+ export default AddBlockAction;
@@ -0,0 +1,10 @@
1
+ import Action from 'type/action';
2
+ import ActionType from 'enum/action-type';
3
+
4
+ interface CompleteBlockAction extends Action {
5
+ readonly action_type: ActionType.COMPLETE_BLOCK;
6
+ readonly index_path: string;
7
+ }
8
+
9
+ export default CompleteBlockAction;
10
+
@@ -0,0 +1,11 @@
1
+ import Action from 'type/action';
2
+ import Block from 'type/block';
3
+ import ActionType from 'enum/action-type';
4
+
5
+ interface DeleteBlockAction extends Action {
6
+ readonly action_type: ActionType.DELETE_BLOCK;
7
+ readonly index_path: string;
8
+ readonly block: Block;
9
+ }
10
+
11
+ export default DeleteBlockAction;
@@ -0,0 +1,9 @@
1
+ import Action from 'type/action';
2
+ import ActionType from 'enum/action-type';
3
+
4
+ interface DemoteBlockAction extends Action {
5
+ readonly action_type: ActionType.DEMOTE_BLOCK;
6
+ readonly index_path: string;
7
+ }
8
+
9
+ export default DemoteBlockAction;
@@ -0,0 +1,11 @@
1
+ import Action from 'type/action';
2
+ import Block from 'type/block';
3
+ import ActionType from 'enum/action-type';
4
+
5
+ interface EditBlockAction extends Action {
6
+ readonly action_type: ActionType.EDIT_BLOCK;
7
+ readonly index_path: string;
8
+ readonly block: Block;
9
+ };
10
+
11
+ export default EditBlockAction;
@@ -0,0 +1,9 @@
1
+ import Action from 'type/action';
2
+ import ActionType from 'enum/action-type';
3
+
4
+ interface PromoteBlockAction extends Action {
5
+ readonly action_type: ActionType.PROMOTE_BLOCK;
6
+ readonly index_path: string;
7
+ }
8
+
9
+ export default PromoteBlockAction;
@@ -0,0 +1,9 @@
1
+ import ActionType from 'enum/action-type';
2
+
3
+ interface Action {
4
+ readonly path: string;
5
+ readonly action_type: ActionType;
6
+ readonly editing: boolean;
7
+ }
8
+
9
+ export default Action;
@@ -0,0 +1,8 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+
4
+ interface AudioBlock extends Block {
5
+ readonly block_type: BlockType.AUDIO;
6
+ }
7
+
8
+ export default AudioBlock;
@@ -0,0 +1,10 @@
1
+ import Block from 'type/block';
2
+ import Color from 'enum/color';
3
+ import BlockType from 'enum/block-type';
4
+
5
+ interface BackgroundBlock extends Block {
6
+ readonly block_type: BlockType.BACKGROUND;
7
+ readonly color: Color;
8
+ }
9
+
10
+ export default BackgroundBlock;
@@ -0,0 +1,18 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+ import DirectoryItemType from 'enum/directory-item-type';
4
+
5
+ export interface DirectoryItem {
6
+ readonly filename: string;
7
+ readonly filesize: number;
8
+ readonly created_at: number;
9
+ readonly item_type: DirectoryItemType;
10
+ }
11
+
12
+ interface DirectoryBlock extends Block {
13
+ readonly block_type: BlockType.DIRECTORY;
14
+ readonly path: string;
15
+ readonly items: DirectoryItem[];
16
+ }
17
+
18
+ export default DirectoryBlock;
@@ -0,0 +1,9 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+
4
+ interface EphemeralBlock extends Block {
5
+ readonly block_type: BlockType.EPHEMERAL;
6
+ readonly label: string;
7
+ }
8
+
9
+ export default EphemeralBlock;
@@ -0,0 +1,14 @@
1
+ import Block from 'type/block';
2
+ import Emoji from 'enum/emoji';
3
+ import Color from 'enum/color';
4
+ import BlockType from 'enum/block-type';
5
+
6
+ interface FolderBlock extends Block {
7
+ readonly block_type: BlockType.FOLDER;
8
+ readonly title: string;
9
+ readonly subtitle: string;
10
+ readonly emoji: Emoji;
11
+ readonly color: Color;
12
+ }
13
+
14
+ export default FolderBlock;
@@ -0,0 +1,11 @@
1
+ import Block from 'type/block';
2
+ import HeaderSize from 'enum/header-size';
3
+ import BlockType from 'enum/block-type';
4
+
5
+ interface HeaderBlock extends Block {
6
+ readonly block_type: BlockType.HEADER;
7
+ readonly title: string;
8
+ readonly size?: HeaderSize;
9
+ }
10
+
11
+ export default HeaderBlock;
@@ -0,0 +1,8 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+
4
+ interface ImageBlock extends Block {
5
+ readonly block_type: BlockType.IMAGE;
6
+ }
7
+
8
+ export default ImageBlock;
@@ -0,0 +1,12 @@
1
+ import Block from 'type/block';
2
+ import Color from 'enum/color';
3
+ import BlockType from 'enum/block-type';
4
+
5
+ interface LinkBlock extends Block {
6
+ readonly block_type: BlockType.LINK;
7
+ readonly label: string;
8
+ readonly href: string;
9
+ readonly color: Color;
10
+ }
11
+
12
+ export default LinkBlock;
@@ -0,0 +1,24 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+ import FieldDefinition from 'type/field-definition';
4
+ import Resource from 'type/resource';
5
+
6
+ export type ListDataSource = 'orders';
7
+
8
+ interface ListBlockWithData extends Block {
9
+ readonly block_type: BlockType.LIST;
10
+ readonly items: Resource[];
11
+ readonly fields: FieldDefinition[];
12
+ readonly data_source: undefined;
13
+ }
14
+
15
+ interface ListBlockWithDataSource extends Block {
16
+ readonly block_type: BlockType.LIST;
17
+ readonly items: undefined;
18
+ readonly fields: FieldDefinition[];
19
+ readonly data_source: ListDataSource;
20
+ }
21
+
22
+ type ListBlock = ListBlockWithData | ListBlockWithDataSource;
23
+
24
+ export default ListBlock;
@@ -0,0 +1,10 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+
4
+ interface MultiColumnBlock extends Block {
5
+ readonly block_type: BlockType.MULTI_COLUMN;
6
+ readonly max_columns: number;
7
+ readonly children: Block[];
8
+ }
9
+
10
+ export default MultiColumnBlock;
@@ -0,0 +1,9 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+
4
+ interface NoteBlock extends Block {
5
+ readonly block_type: BlockType.NOTE;
6
+ readonly text: string;
7
+ }
8
+
9
+ export default NoteBlock;
@@ -0,0 +1,10 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+
4
+ interface TodoBlock extends Block {
5
+ readonly block_type: BlockType.TODO;
6
+ readonly title: string;
7
+ readonly completed_at: number | null;
8
+ }
9
+
10
+ export default TodoBlock;
@@ -0,0 +1,9 @@
1
+ import Block from 'type/block';
2
+ import BlockType from 'enum/block-type';
3
+
4
+ interface WhitespaceBlock extends Block {
5
+ readonly block_type: BlockType.WHITESPACE;
6
+ readonly line_count: number;
7
+ }
8
+
9
+ export default WhitespaceBlock;
@@ -0,0 +1,14 @@
1
+ import Account from 'type/account';
2
+
3
+ type BlockMetadata = {
4
+ readonly page_path: string;
5
+ readonly editing: boolean;
6
+ readonly referrer_url: string | null;
7
+ readonly index_path: string;
8
+ readonly target_index_path: string | null;
9
+ readonly roles: string[];
10
+ readonly account: Account | null;
11
+ readonly creator_username: string;
12
+ }
13
+
14
+ export default BlockMetadata;