@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.
- package/LICENSE +673 -0
- package/README.md +5 -0
- package/bin/compile +63 -0
- package/bin/copy-static-files +13 -0
- package/bin/install +5 -0
- package/bin/precompile +55 -0
- package/bin/prepublish +7 -0
- package/bin/remap-paths +113 -0
- package/bin/test +9 -0
- package/config/tsconfig.json +37 -0
- package/package.json +33 -0
- package/src/bootstrap/start.ts +12 -0
- package/src/client/bootstrap.ts +5 -0
- package/src/client/client.ts +54 -0
- package/src/client/enum/key-code.ts +34 -0
- package/src/client/enum/page-type.ts +19 -0
- package/src/client/factory/page.ts +61 -0
- package/src/client/page/confirm-delete-block.ts +30 -0
- package/src/client/page/create-block.ts +6 -0
- package/src/client/page/day.ts +8 -0
- package/src/client/page/edit-block.ts +43 -0
- package/src/client/page/edit-custom.ts +16 -0
- package/src/client/page/home.ts +8 -0
- package/src/client/page/login.ts +8 -0
- package/src/client/page/logout.ts +8 -0
- package/src/client/page/month.ts +8 -0
- package/src/client/page/move-block.ts +8 -0
- package/src/client/page/select-block-type.ts +56 -0
- package/src/client/page/settings.ts +8 -0
- package/src/client/page/view-custom.ts +665 -0
- package/src/client/page/week.ts +8 -0
- package/src/client/page/year.ts +8 -0
- package/src/client/page.ts +128 -0
- package/src/client/shim/execute.ts +5 -0
- package/src/client/shim/logger.ts +44 -0
- package/src/client/utility/get-meta-value.ts +23 -0
- package/src/common/builder/block/background.ts +25 -0
- package/src/common/builder/block/folder.ts +43 -0
- package/src/common/builder/block/header.ts +15 -0
- package/src/common/builder/block/link.ts +32 -0
- package/src/common/builder/block/multicolumn.ts +16 -0
- package/src/common/builder/block/note.ts +13 -0
- package/src/common/builder/block/whitespace.ts +13 -0
- package/src/common/utility/get-parent-path.ts +29 -0
- package/src/constant/month-names.ts +16 -0
- package/src/enum/action-type.ts +11 -0
- package/src/enum/block-type.ts +18 -0
- package/src/enum/calendar-view-mode.ts +9 -0
- package/src/enum/color.ts +15 -0
- package/src/enum/default-role.ts +6 -0
- package/src/enum/directory-item-type.ts +6 -0
- package/src/enum/emoji.ts +94 -0
- package/src/enum/field-type.ts +8 -0
- package/src/enum/header-size.ts +7 -0
- package/src/enum/permission-type.ts +8 -0
- package/src/enum/time-place-visibility.ts +8 -0
- package/src/enum/tool-type.ts +14 -0
- package/src/index.ts +8 -0
- package/src/interface/hydration-callback.ts +7 -0
- package/src/interface/provider.ts +8 -0
- package/src/interface/repository.ts +12 -0
- package/src/lib/array/add.ts +10 -0
- package/src/lib/array/assert-is-empty.ts +23 -0
- package/src/lib/array/clone.ts +5 -0
- package/src/lib/array/difference.ts +8 -0
- package/src/lib/array/empty.ts +6 -0
- package/src/lib/array/equal.ts +24 -0
- package/src/lib/array/get-first-value.ts +5 -0
- package/src/lib/array/get-last-value.ts +5 -0
- package/src/lib/array/get-max-value.ts +5 -0
- package/src/lib/array/get-value-after.ts +23 -0
- package/src/lib/array/get-value-before.ts +23 -0
- package/src/lib/array/get-values-between.ts +18 -0
- package/src/lib/array/index.ts +5 -0
- package/src/lib/array/is-empty.ts +6 -0
- package/src/lib/array/remove.ts +19 -0
- package/src/lib/array/sum.ts +11 -0
- package/src/lib/array/unique.ts +13 -0
- package/src/lib/environment/bootstrap.ts +1 -0
- package/src/lib/environment/enum/environment-type.ts +8 -0
- package/src/lib/environment/enum/service-type.ts +5 -0
- package/src/lib/environment/index.ts +7 -0
- package/src/lib/environment/utility/get-environment-type.ts +28 -0
- package/src/lib/environment/utility/is-browser.ts +5 -0
- package/src/lib/environment/utility/is-development.ts +10 -0
- package/src/lib/environment/utility/is-production-or-staging.ts +8 -0
- package/src/lib/environment/utility/is-production.ts +10 -0
- package/src/lib/environment/utility/is-staging.ts +10 -0
- package/src/lib/errors/enum/error-type.ts +13 -0
- package/src/lib/errors/error/base.ts +40 -0
- package/src/lib/errors/error/conflict.ts +16 -0
- package/src/lib/errors/error/generic.ts +23 -0
- package/src/lib/errors/error/invalid.ts +14 -0
- package/src/lib/errors/error/invariant-violation.ts +5 -0
- package/src/lib/errors/error/not-allowed.ts +14 -0
- package/src/lib/errors/error/not-found.ts +16 -0
- package/src/lib/errors/error/not-implemented.ts +20 -0
- package/src/lib/errors/error/omitted.ts +14 -0
- package/src/lib/errors/error/timeout.ts +14 -0
- package/src/lib/errors/error/unauthorized.ts +14 -0
- package/src/lib/errors/index.ts +18 -0
- package/src/lib/errors/sugar/invariant.ts +7 -0
- package/src/lib/errors/type/coded-error.ts +7 -0
- package/src/lib/errors/type/error-data.ts +11 -0
- package/src/lib/errors/utility/create-error-for-error-type.ts +60 -0
- package/src/lib/errors/utility/create-error-from-ambiguous-json-data.ts +26 -0
- package/src/lib/errors/utility/error-matches.ts +28 -0
- package/src/lib/errors/utility/get-error-type-for-posix-error-code.ts +37 -0
- package/src/lib/errors/utility/get-error-type-for-status-code.ts +38 -0
- package/src/lib/errors/utility/get-message-for-error-type.ts +29 -0
- package/src/lib/errors/utility/matches-posix-error-code.ts +11 -0
- package/src/lib/errors/utility/wrap-error.ts +39 -0
- package/src/lib/event-emitter/index.ts +63 -0
- package/src/lib/execution-context/execution-context.ts +90 -0
- package/src/lib/execution-context/index.ts +8 -0
- package/src/lib/execution-context/type/session.ts +7 -0
- package/src/lib/feature/feature.ts +108 -0
- package/src/lib/feature/index.ts +3 -0
- package/src/lib/filesystem/bootstrap.ts +1 -0
- package/src/lib/filesystem/enum/file-extension.ts +19 -0
- package/src/lib/filesystem/index.ts +4 -0
- package/src/lib/filesystem/utility/exists.ts +21 -0
- package/src/lib/filesystem/utility/get-extension-for-filepath.ts +20 -0
- package/src/lib/filesystem/utility/strip-extension.ts +26 -0
- package/src/lib/grammar/index.ts +3 -0
- package/src/lib/grammar/noun-inflector.ts +104 -0
- package/src/lib/grammar/utility/get-words-from-identifier.ts +9 -0
- package/src/lib/grammar/verb-inflector.ts +344 -0
- package/src/lib/http/buffer-stream.ts +76 -0
- package/src/lib/http/enum/content-type.ts +19 -0
- package/src/lib/http/enum/cookie-attribute.ts +11 -0
- package/src/lib/http/enum/header.ts +29 -0
- package/src/lib/http/enum/method.ts +11 -0
- package/src/lib/http/enum/same-site-policy.ts +7 -0
- package/src/lib/http/enum/status-code.ts +9 -0
- package/src/lib/http/factory/body-parser.ts +55 -0
- package/src/lib/http/index.ts +24 -0
- package/src/lib/http/interface/client-request.ts +15 -0
- package/src/lib/http/interface/incoming-message.ts +24 -0
- package/src/lib/http/interface/network-library.ts +9 -0
- package/src/lib/http/interface/request-callback.ts +7 -0
- package/src/lib/http/isomorphic/request.ts +77 -0
- package/src/lib/http/isomorphic/response.ts +77 -0
- package/src/lib/http/isomorphic.ts +20 -0
- package/src/lib/http/parser/accept-header.ts +35 -0
- package/src/lib/http/parser/basic-auth-header.ts +48 -0
- package/src/lib/http/parser/body/json.ts +14 -0
- package/src/lib/http/parser/body/multipart.ts +89 -0
- package/src/lib/http/parser/body/url-encoded.ts +16 -0
- package/src/lib/http/parser/body.ts +44 -0
- package/src/lib/http/parser/cookie.ts +114 -0
- package/src/lib/http/parser/querystring.ts +92 -0
- package/src/lib/http/parser/url.ts +76 -0
- package/src/lib/http/request/incoming.ts +299 -0
- package/src/lib/http/request/outgoing.ts +276 -0
- package/src/lib/http/request.ts +26 -0
- package/src/lib/http/response/incoming.ts +243 -0
- package/src/lib/http/response/outgoing.ts +160 -0
- package/src/lib/http/response.ts +74 -0
- package/src/lib/http/serializer/basic-auth-header.ts +27 -0
- package/src/lib/http/serializer/cookie.ts +90 -0
- package/src/lib/http/serializer/query-data.ts +54 -0
- package/src/lib/http/transaction.ts +320 -0
- package/src/lib/http/type/basic-auth-credentials.ts +6 -0
- package/src/lib/http/type/header-map.ts +5 -0
- package/src/lib/http/type/log-attributes.ts +12 -0
- package/src/lib/http/type/path-parameters.ts +5 -0
- package/src/lib/http/type/query-data.ts +7 -0
- package/src/lib/http/type/query-value.ts +11 -0
- package/src/lib/http/type/request-options.ts +16 -0
- package/src/lib/http/type/transaction-data.ts +4 -0
- package/src/lib/http/utility/get-content-type-for-extension.ts +47 -0
- package/src/lib/http/utility/get-library-for-protocol.ts +25 -0
- package/src/lib/http/utility/get-status-code-for-error-type.ts +37 -0
- package/src/lib/http/utility/get-status-code-for-error.ts +13 -0
- package/src/lib/http/utility/is-client-error-status.ts +15 -0
- package/src/lib/http/utility/is-error-status.ts +9 -0
- package/src/lib/http/utility/is-server-error-status.ts +7 -0
- package/src/lib/http/utility/is-success-status.ts +7 -0
- package/src/lib/http/utility/proxy-request.ts +58 -0
- package/src/lib/http/utility/serialize-request-options.ts +9 -0
- package/src/lib/http/utility/slug-generator.ts +20 -0
- package/src/lib/key-generator/index.ts +3 -0
- package/src/lib/key-generator/key-generator.ts +7 -0
- package/src/lib/logger/enum/ansi-escape-code.ts +14 -0
- package/src/lib/logger/enum/log-level.ts +8 -0
- package/src/lib/logger/formatter.ts +59 -0
- package/src/lib/logger/index.ts +7 -0
- package/src/lib/logger/interface/error-reporter.ts +7 -0
- package/src/lib/logger/interface/logger.ts +13 -0
- package/src/lib/logger/logger.ts +239 -0
- package/src/lib/logger/type/error-parameters.ts +9 -0
- package/src/lib/logger/type/loggable-data.ts +5 -0
- package/src/lib/logger/type/loggable-value.ts +1 -0
- package/src/lib/metrics/dispatcher.ts +264 -0
- package/src/lib/metrics/enum/dispatch-mode.ts +6 -0
- package/src/lib/metrics/index.ts +2 -0
- package/src/lib/metrics/settings-hydrator.ts +51 -0
- package/src/lib/metrics/type/dispatcher-settings.ts +12 -0
- package/src/lib/metrics/type/tag-map.ts +5 -0
- package/src/lib/network/bootstrap.ts +1 -0
- package/src/lib/network/enum/connection-status.ts +14 -0
- package/src/lib/network/enum/http-status-code.ts +75 -0
- package/src/lib/network/enum/network-protocol.ts +10 -0
- package/src/lib/network/event-emitter.ts +63 -0
- package/src/lib/network/index.ts +7 -0
- package/src/lib/network/interface/socket.ts +42 -0
- package/src/lib/network/type/socket-options.ts +6 -0
- package/src/lib/network/utility/get-protocol-from-url.ts +15 -0
- package/src/lib/operation/index.ts +6 -0
- package/src/lib/operation/operation/auto-logging.ts +94 -0
- package/src/lib/operation/operation/silent.ts +17 -0
- package/src/lib/operation/operation.ts +80 -0
- package/src/lib/process/bootstrap.ts +1 -0
- package/src/lib/process/enum/posix-error-code.ts +138 -0
- package/src/lib/process/enum/process-signal.ts +68 -0
- package/src/lib/process/error.ts +6 -0
- package/src/lib/process/execute.ts +77 -0
- package/src/lib/process/index.ts +4 -0
- package/src/lib/process/type/command-options.ts +9 -0
- package/src/lib/process/utility/bind-process-lifespan-to.ts +10 -0
- package/src/lib/promise-wrapper/index.ts +3 -0
- package/src/lib/promise-wrapper/promise-wrapper.ts +51 -0
- package/src/lib/random/chance.ts +5 -0
- package/src/lib/random/element.ts +7 -0
- package/src/lib/random/elements.ts +12 -0
- package/src/lib/random/enum.ts +34 -0
- package/src/lib/random/enums.ts +11 -0
- package/src/lib/random/index.ts +3 -0
- package/src/lib/random/number.ts +8 -0
- package/src/lib/server/base.ts +194 -0
- package/src/lib/server/enum/server-event.ts +5 -0
- package/src/lib/server/enum/server-status.ts +10 -0
- package/src/lib/server/http/endpoint/ping.ts +21 -0
- package/src/lib/server/http/endpoint.ts +345 -0
- package/src/lib/server/http/interface/endpoint-constructor.ts +12 -0
- package/src/lib/server/http/interface/result-serializer.ts +5 -0
- package/src/lib/server/http/middleware.ts +18 -0
- package/src/lib/server/http/result-serializer/html.ts +92 -0
- package/src/lib/server/http/result-serializer/json.ts +23 -0
- package/src/lib/server/http/route.ts +104 -0
- package/src/lib/server/http/router.ts +125 -0
- package/src/lib/server/http/type/session-resolver.ts +8 -0
- package/src/lib/server/http/utility/create-server.ts +34 -0
- package/src/lib/server/http/utility/path-parser.ts +49 -0
- package/src/lib/server/http/utility/standardize-html-indentation.ts +54 -0
- package/src/lib/server/http/websocket-wrapper.ts +83 -0
- package/src/lib/server/http.ts +301 -0
- package/src/lib/server/index.ts +5 -0
- package/src/lib/server/tcp.ts +53 -0
- package/src/lib/server/type/server-options.ts +10 -0
- package/src/lib/string/calculate-length.ts +17 -0
- package/src/lib/string/capitalize.ts +8 -0
- package/src/lib/string/create-slug.ts +14 -0
- package/src/lib/string/enum/ansi-escape-code.ts +14 -0
- package/src/lib/string/enum/string-encoding.ts +9 -0
- package/src/lib/string/hyphenate.ts +5 -0
- package/src/lib/string/index.ts +3 -0
- package/src/lib/string/pad.ts +14 -0
- package/src/lib/string/trim-multiline.ts +21 -0
- package/src/lib/string/trim.ts +8 -0
- package/src/lib/tcp/channel.ts +13 -0
- package/src/lib/tcp/connection/incoming.ts +72 -0
- package/src/lib/tcp/connection/outgoing.ts +219 -0
- package/src/lib/tcp/connection.ts +360 -0
- package/src/lib/tcp/enum/connection-event.ts +12 -0
- package/src/lib/tcp/enum/message-type.ts +9 -0
- package/src/lib/tcp/index.ts +1 -0
- package/src/lib/tcp/type/connection-parameters.ts +6 -0
- package/src/lib/tcp/type/message/channel-close.ts +9 -0
- package/src/lib/tcp/type/message/channel-open.ts +9 -0
- package/src/lib/tcp/type/message.ts +10 -0
- package/src/lib/test/index.ts +2 -0
- package/src/lib/test/utility/build-config.ts +17 -0
- package/src/lib/test/utility/build-execution-context.ts +11 -0
- package/src/lib/time/bootstrap.ts +1 -0
- package/src/lib/time/enum/time-interval.ts +12 -0
- package/src/lib/time/index.ts +4 -0
- package/src/lib/time/utility/format-duration.ts +139 -0
- package/src/lib/time/utility/format-relative-duration.ts +22 -0
- package/src/lib/time/utility/sleep.ts +9 -0
- package/src/operation.ts +18 -0
- package/src/server/endpoint/abstract-page.ts +126 -0
- package/src/server/endpoint/action/create.ts +545 -0
- package/src/server/endpoint/action/get.ts +231 -0
- package/src/server/endpoint/base.ts +51 -0
- package/src/server/endpoint/day.ts +13 -0
- package/src/server/endpoint/generic-page.ts +14 -0
- package/src/server/endpoint/index.ts +11 -0
- package/src/server/endpoint/login.ts +45 -0
- package/src/server/endpoint/logout.ts +38 -0
- package/src/server/endpoint/month.ts +35 -0
- package/src/server/endpoint/robots.ts +18 -0
- package/src/server/endpoint/session/create.ts +62 -0
- package/src/server/endpoint/settings/get.ts +40 -0
- package/src/server/endpoint/settings/update.ts +44 -0
- package/src/server/endpoint/today.ts +15 -0
- package/src/server/endpoint/week.ts +34 -0
- package/src/server/endpoint/year.ts +34 -0
- package/src/server/enum/custom-page-type.ts +10 -0
- package/src/server/factory/block-result-serializer.ts +115 -0
- package/src/server/middleware/base.ts +6 -0
- package/src/server/middleware/error-handler.ts +177 -0
- package/src/server/middleware/static-file.ts +83 -0
- package/src/server/operation/add-block.ts +110 -0
- package/src/server/operation/create-session.ts +43 -0
- package/src/server/operation/delete-block.ts +96 -0
- package/src/server/operation/demote-block.ts +108 -0
- package/src/server/operation/destroy-session.ts +26 -0
- package/src/server/operation/load-account.ts +30 -0
- package/src/server/operation/load-block.ts +48 -0
- package/src/server/operation/load-directory-items.ts +75 -0
- package/src/server/operation/load-page.ts +368 -0
- package/src/server/operation/promote-block.ts +104 -0
- package/src/server/operation/save-page.ts +60 -0
- package/src/server/operation/update-account-settings.ts +52 -0
- package/src/server/operation/update-block.ts +124 -0
- package/src/server/repository/memory.ts +112 -0
- package/src/server/result-serializer/action.ts +939 -0
- package/src/server/result-serializer/base.ts +1267 -0
- package/src/server/result-serializer/block/audio.ts +33 -0
- package/src/server/result-serializer/block/background.ts +20 -0
- package/src/server/result-serializer/block/calendar.ts +148 -0
- package/src/server/result-serializer/block/directory.ts +57 -0
- package/src/server/result-serializer/block/ephemeral.ts +14 -0
- package/src/server/result-serializer/block/folder.ts +106 -0
- package/src/server/result-serializer/block/header.ts +31 -0
- package/src/server/result-serializer/block/image.ts +46 -0
- package/src/server/result-serializer/block/link.ts +40 -0
- package/src/server/result-serializer/block/list.ts +140 -0
- package/src/server/result-serializer/block/multi-column.ts +97 -0
- package/src/server/result-serializer/block/note.ts +44 -0
- package/src/server/result-serializer/block/todo.ts +78 -0
- package/src/server/result-serializer/block/whitespace.ts +15 -0
- package/src/server/result-serializer/block.ts +248 -0
- package/src/server/result-serializer/common/time-place-options.ts +33 -0
- package/src/server/result-serializer/login.ts +58 -0
- package/src/server/result-serializer/month.ts +170 -0
- package/src/server/result-serializer/page.ts +548 -0
- package/src/server/result-serializer/settings.ts +85 -0
- package/src/server/result-serializer/week.ts +195 -0
- package/src/server/result-serializer/year.ts +160 -0
- package/src/server/utility/accepts-content-type.ts +16 -0
- package/src/server/utility/accepts-html.ts +9 -0
- package/src/server/utility/accepts-json.ts +9 -0
- package/src/server/utility/add-days.ts +11 -0
- package/src/server/utility/create-date.ts +23 -0
- package/src/server/utility/create-index-path.ts +5 -0
- package/src/server/utility/create-slug.ts +9 -0
- package/src/server/utility/create-toast-path.ts +19 -0
- package/src/server/utility/date-less-than.ts +5 -0
- package/src/server/utility/date-occurs-before.ts +22 -0
- package/src/server/utility/date-to-key.ts +7 -0
- package/src/server/utility/date-to-label.ts +5 -0
- package/src/server/utility/date-to-path.ts +9 -0
- package/src/server/utility/dates-are-equal.ts +22 -0
- package/src/server/utility/dates-are-in-order.ts +9 -0
- package/src/server/utility/dates-are-on-the-same-day.ts +9 -0
- package/src/server/utility/dates-in-same-month.ts +8 -0
- package/src/server/utility/day-to-date.ts +40 -0
- package/src/server/utility/decrement-date.ts +11 -0
- package/src/server/utility/get-block-at-index-path.ts +32 -0
- package/src/server/utility/get-block-permissions.ts +15 -0
- package/src/server/utility/get-compact-label-for-date.ts +8 -0
- package/src/server/utility/get-custom-page-type-for-path.ts +37 -0
- package/src/server/utility/get-element-id-for-block.ts +15 -0
- package/src/server/utility/get-emoji-for-block-type.ts +39 -0
- package/src/server/utility/get-emoji-for-tool-type.ts +20 -0
- package/src/server/utility/get-end-of-month.ts +13 -0
- package/src/server/utility/get-end-of-week.ts +13 -0
- package/src/server/utility/get-filepath-for-folder-block.ts +23 -0
- package/src/server/utility/get-hex-for-color.ts +31 -0
- package/src/server/utility/get-label-for-time-place-visibility.ts +23 -0
- package/src/server/utility/get-month-name.ts +18 -0
- package/src/server/utility/get-next-day.ts +7 -0
- package/src/server/utility/get-next-month.ts +12 -0
- package/src/server/utility/get-next-week.ts +12 -0
- package/src/server/utility/get-next-year.ts +13 -0
- package/src/server/utility/get-ordinal-label-for-week.ts +11 -0
- package/src/server/utility/get-ordinal-of-week-within-month.ts +15 -0
- package/src/server/utility/get-padded-date.ts +11 -0
- package/src/server/utility/get-parent-index-path.ts +18 -0
- package/src/server/utility/get-path-for-folder-block.ts +25 -0
- package/src/server/utility/get-path-from-url.ts +13 -0
- package/src/server/utility/get-previous-index-path.ts +27 -0
- package/src/server/utility/get-previous-month.ts +12 -0
- package/src/server/utility/get-previous-week.ts +11 -0
- package/src/server/utility/get-previous-year.ts +13 -0
- package/src/server/utility/get-random-emoji-for-date.ts +109 -0
- package/src/server/utility/get-short-label-for-date.ts +11 -0
- package/src/server/utility/get-short-month-name.ts +9 -0
- package/src/server/utility/get-short-ordinal.ts +26 -0
- package/src/server/utility/get-siblings-and-index-for-index-path.ts +67 -0
- package/src/server/utility/get-start-of-month.ts +11 -0
- package/src/server/utility/get-start-of-week.ts +12 -0
- package/src/server/utility/get-start-of-year.ts +12 -0
- package/src/server/utility/get-weekday-name.ts +24 -0
- package/src/server/utility/increment-date.ts +15 -0
- package/src/server/utility/is-index-path.ts +5 -0
- package/src/server/utility/key-to-date.ts +25 -0
- package/src/server/utility/month-has-week-containing-date.ts +13 -0
- package/src/server/utility/month-to-date.ts +28 -0
- package/src/server/utility/month-to-path.ts +10 -0
- package/src/server/utility/months-are-equal.ts +8 -0
- package/src/server/utility/parse-index-path.ts +23 -0
- package/src/server/utility/path-is-date.ts +13 -0
- package/src/server/utility/path-to-date.ts +24 -0
- package/src/server/utility/subtract-days.ts +7 -0
- package/src/server/utility/validate-month.ts +10 -0
- package/src/server/utility/validate-page.ts +46 -0
- package/src/server/utility/validate-path.ts +9 -0
- package/src/server/utility/validate-url.ts +12 -0
- package/src/server/utility/week-greater-than.ts +10 -0
- package/src/server/utility/week-to-date.ts +8 -0
- package/src/server/utility/week-to-path.ts +12 -0
- package/src/server/utility/weeks-are-equal.ts +8 -0
- package/src/server/utility/year-to-date.ts +26 -0
- package/src/server/utility/year-to-path.ts +7 -0
- package/src/server/utility/years-are-equal.ts +8 -0
- package/src/server.ts +140 -0
- package/src/test.ts +195 -0
- package/src/type/account-settings.ts +9 -0
- package/src/type/account.ts +11 -0
- package/src/type/action/add-block.ts +74 -0
- package/src/type/action/complete-block.ts +10 -0
- package/src/type/action/delete-block.ts +11 -0
- package/src/type/action/demote-block.ts +9 -0
- package/src/type/action/edit-block.ts +11 -0
- package/src/type/action/promote-block.ts +9 -0
- package/src/type/action.ts +9 -0
- package/src/type/block/audio.ts +8 -0
- package/src/type/block/background.ts +10 -0
- package/src/type/block/directory.ts +18 -0
- package/src/type/block/ephemeral.ts +9 -0
- package/src/type/block/folder.ts +14 -0
- package/src/type/block/header.ts +11 -0
- package/src/type/block/image.ts +8 -0
- package/src/type/block/link.ts +12 -0
- package/src/type/block/list.ts +24 -0
- package/src/type/block/multi-column.ts +10 -0
- package/src/type/block/note.ts +9 -0
- package/src/type/block/todo.ts +10 -0
- package/src/type/block/whitespace.ts +9 -0
- package/src/type/block-metadata.ts +14 -0
- package/src/type/block.ts +18 -0
- package/src/type/day.ts +5 -0
- package/src/type/field-definition.ts +8 -0
- package/src/type/field-value.ts +5 -0
- package/src/type/file.ts +6 -0
- package/src/type/month.ts +5 -0
- package/src/type/page.ts +8 -0
- package/src/type/price.ts +11 -0
- package/src/type/resource.ts +5 -0
- package/src/type/runtime-config.ts +13 -0
- package/src/type/server-settings.ts +17 -0
- package/src/type/toast.ts +8 -0
- package/src/type/week.ts +5 -0
- package/src/type/year.ts +5 -0
- package/test/unit/index.ts +11 -0
- 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,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,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,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,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;
|