@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,77 @@
|
|
|
1
|
+
import ChildProcess from 'child_process';
|
|
2
|
+
|
|
3
|
+
import Logger from 'lib/logger';
|
|
4
|
+
import ProcessError from 'lib/process/error';
|
|
5
|
+
import PromiseWrapper from 'lib/promise-wrapper';
|
|
6
|
+
import CommandOptions from 'lib/process/type/command-options';
|
|
7
|
+
|
|
8
|
+
let LOGGER: Logger | undefined;
|
|
9
|
+
|
|
10
|
+
function getLogger(): Logger {
|
|
11
|
+
if (LOGGER === undefined) {
|
|
12
|
+
LOGGER = new Logger();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return LOGGER;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function execute(command: string, options?: CommandOptions): Promise<string> {
|
|
19
|
+
const promise_wrapper = new PromiseWrapper<string>();
|
|
20
|
+
|
|
21
|
+
options = {
|
|
22
|
+
...options
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const cwd = options.cwd || process.cwd();
|
|
26
|
+
const logger = getLogger();
|
|
27
|
+
|
|
28
|
+
if (!options.silent) {
|
|
29
|
+
logger.info(`${cwd} > ${command}`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function reject(error: string | Error): void {
|
|
33
|
+
// TODO: Interestingly, the error being passed in is not necessarily an
|
|
34
|
+
// instance of the base Error class... are there separate base error
|
|
35
|
+
// classes in play here? That sounds dangerous (given that we do
|
|
36
|
+
// instanceof Error checks in various places...). Needs investigation.
|
|
37
|
+
if (typeof error === 'string') {
|
|
38
|
+
error = new ProcessError(error);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
promise_wrapper.reject(error);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// TODO: Figure out what is the appropriate thing to do with stderr...
|
|
45
|
+
// Maybe for now just throw an exception if it is present?
|
|
46
|
+
ChildProcess.exec(
|
|
47
|
+
command,
|
|
48
|
+
options,
|
|
49
|
+
(error: Error | null, stdout: string, stderr: string) => {
|
|
50
|
+
if (error === null) {
|
|
51
|
+
promise_wrapper.resolve(stdout);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Sometimes the process will emit output on stdout, and then return
|
|
56
|
+
// a non-zero exit code (eg, `service status xxx` when the service isn't
|
|
57
|
+
// currently running). When that happens, return an error with stdout:
|
|
58
|
+
if (!stderr && stdout) {
|
|
59
|
+
return reject(stdout);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (error.message.includes('Command failed:') === false) {
|
|
63
|
+
return reject(error);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (stderr) {
|
|
67
|
+
return reject(stderr);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return reject(error);
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
return promise_wrapper.getPromise();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export default execute;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export {default as ProcessSignal} from 'lib/process/enum/process-signal';
|
|
2
|
+
export {default as PosixErrorCode} from 'lib/process/enum/posix-error-code';
|
|
3
|
+
export {default as bindProcessLifespanTo} from 'lib/process/utility/bind-process-lifespan-to';
|
|
4
|
+
export {default as execute} from 'lib/process/execute';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import Logger from 'lib/logger';
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
|
+
function bindProcessLifespanTo(promise: Promise<any>): void {
|
|
5
|
+
const logger = new Logger();
|
|
6
|
+
|
|
7
|
+
promise.then(logger.successAndExit).catch(logger.errorAndExit);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default bindProcessLifespanTo;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
interface Callback<T> {
|
|
2
|
+
(error: Error | undefined | null, result: T): void;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
class PromiseWrapper<T> {
|
|
6
|
+
// TODO: Remove this and just use sleep()
|
|
7
|
+
public static resolveAfterDelay(delay: number): Promise<void> {
|
|
8
|
+
const promise_wrapper = new PromiseWrapper<void>();
|
|
9
|
+
|
|
10
|
+
setTimeout(() => {
|
|
11
|
+
promise_wrapper.resolve();
|
|
12
|
+
}, delay);
|
|
13
|
+
|
|
14
|
+
return promise_wrapper.getPromise();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
private promise: Promise<T>;
|
|
18
|
+
private resolver!: (result: T) => void;
|
|
19
|
+
private rejector!: (error: Error) => void;
|
|
20
|
+
|
|
21
|
+
public constructor() {
|
|
22
|
+
this.promise = new Promise<T>((resolver, rejector) => {
|
|
23
|
+
this.resolver = resolver;
|
|
24
|
+
this.rejector = rejector;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public getPromise(): Promise<T> {
|
|
29
|
+
return this.promise;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public getCallback(): Callback<T> {
|
|
33
|
+
return (error: Error | undefined | null, result: T) => {
|
|
34
|
+
if (error) {
|
|
35
|
+
this.reject(error);
|
|
36
|
+
} else {
|
|
37
|
+
this.resolve(result);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public resolve(result?: T): void {
|
|
43
|
+
this.resolver(result as T);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public reject(error: Error): void {
|
|
47
|
+
this.rejector(error);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export default PromiseWrapper;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {clone} from 'lib/array';
|
|
2
|
+
|
|
3
|
+
function randomElements<T>(elements: T[]): T[] {
|
|
4
|
+
const count = Math.floor(Math.random() * elements.length);
|
|
5
|
+
const randomized_elements = clone(elements).sort(() => {
|
|
6
|
+
return Math.random() - 0.5;
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
return randomized_elements.slice(0, count);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default randomElements;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import randomElement from 'lib/random/element';
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
4
|
+
function randomEnum<T>(enum_values: object): T {
|
|
5
|
+
interface IndexableEnum {
|
|
6
|
+
[key: string]: T;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const keys = Object.keys(enum_values);
|
|
10
|
+
const key = randomElement(keys) as string;
|
|
11
|
+
const numeric_key = (key as unknown) as number;
|
|
12
|
+
|
|
13
|
+
// The way that Typescript transpiles enums with numeric-values into objects
|
|
14
|
+
// is dangerous. It creates reverse mappings between the values and the keys,
|
|
15
|
+
// whereas with a string-value enum, it does not. This is unintuitive and a
|
|
16
|
+
// potential footgun, so I'm opting to just raise a hard exception here.
|
|
17
|
+
if (isNaN(numeric_key) === false) {
|
|
18
|
+
throw new Error('Do not use randomEnum() on numeric-value enums');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const coerced_values = enum_values as IndexableEnum;
|
|
22
|
+
const value = coerced_values[key];
|
|
23
|
+
const numeric_value = (value as unknown) as number;
|
|
24
|
+
|
|
25
|
+
// Same note as above; here we're accounting for the opposite "lucky" case,
|
|
26
|
+
// where a string key was selected that points to a numeric value.
|
|
27
|
+
if (isNaN(numeric_value) === false) {
|
|
28
|
+
throw new Error('Do not use randomEnum() on numeric-value enums');
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export default randomEnum;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import randomElements from 'lib/random/elements';
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
4
|
+
function randomEnum<T>(enum_values: object): T[] {
|
|
5
|
+
const values = Object.values(enum_values);
|
|
6
|
+
const random_values = randomElements(values);
|
|
7
|
+
|
|
8
|
+
return random_values as T[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default randomEnum;
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import Net from 'net';
|
|
2
|
+
import Util from 'util';
|
|
3
|
+
import {EventEmitter} from 'events';
|
|
4
|
+
|
|
5
|
+
import RuntimeConfig from 'type/runtime-config';
|
|
6
|
+
|
|
7
|
+
import Logger from 'lib/logger';
|
|
8
|
+
|
|
9
|
+
import {GenericError} from 'lib/errors';
|
|
10
|
+
import {NetworkProtocol} from 'lib/network';
|
|
11
|
+
|
|
12
|
+
import ServerStatus from 'lib/server/enum/server-status';
|
|
13
|
+
import ServerOptions from 'lib/server/type/server-options';
|
|
14
|
+
|
|
15
|
+
abstract class Server extends EventEmitter {
|
|
16
|
+
private raw_server: Net.Server;
|
|
17
|
+
private options: ServerOptions;
|
|
18
|
+
private status: ServerStatus;
|
|
19
|
+
private logger: Logger | undefined;
|
|
20
|
+
|
|
21
|
+
public constructor(options: ServerOptions, raw_server: Net.Server) {
|
|
22
|
+
super();
|
|
23
|
+
|
|
24
|
+
this.raw_server = raw_server;
|
|
25
|
+
this.status = ServerStatus.NOT_STARTED;
|
|
26
|
+
this.options = options;
|
|
27
|
+
|
|
28
|
+
this.bindHandlersInternal();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public async start(): Promise<void> {
|
|
32
|
+
this.validateCanStart();
|
|
33
|
+
this.setStatus(ServerStatus.STARTING);
|
|
34
|
+
|
|
35
|
+
const raw_server = this.getRawServer();
|
|
36
|
+
const logger = this.getLogger();
|
|
37
|
+
const port = this.getPort();
|
|
38
|
+
const protocol = this.getProtocol();
|
|
39
|
+
const label = this.getLabel();
|
|
40
|
+
|
|
41
|
+
raw_server.listen(port);
|
|
42
|
+
logger.info(`${label} ${protocol} server listening on port ${port}`);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public async stop(): Promise<void> {
|
|
46
|
+
const logger = this.getLogger();
|
|
47
|
+
const label = this.getLabel();
|
|
48
|
+
const protocol = this.getProtocol();
|
|
49
|
+
|
|
50
|
+
if (this.isNotStarted() || this.isStopped()) {
|
|
51
|
+
return void logger.warn(`
|
|
52
|
+
${label} ${protocol} server was not running; skipping shutdown...
|
|
53
|
+
`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
logger.info(`Stopping ${label} ${protocol} server...`);
|
|
57
|
+
|
|
58
|
+
this.validateCanStop();
|
|
59
|
+
this.setStatus(ServerStatus.STOPPING);
|
|
60
|
+
|
|
61
|
+
const raw_server = this.getRawServer();
|
|
62
|
+
const close = Util.promisify(raw_server.close.bind(raw_server));
|
|
63
|
+
const promise = close();
|
|
64
|
+
|
|
65
|
+
await promise;
|
|
66
|
+
|
|
67
|
+
logger.info(`${label} ${protocol} server was stopped`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public setLogger(logger: Logger): void {
|
|
71
|
+
this.logger = logger;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public canStart(): boolean {
|
|
75
|
+
const status = this.getStatus();
|
|
76
|
+
|
|
77
|
+
return status === ServerStatus.NOT_STARTED;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public canStop(): boolean {
|
|
81
|
+
const status = this.getStatus();
|
|
82
|
+
|
|
83
|
+
switch (status) {
|
|
84
|
+
case ServerStatus.STARTING:
|
|
85
|
+
case ServerStatus.LISTENING:
|
|
86
|
+
return true;
|
|
87
|
+
default:
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
protected getConfig(): RuntimeConfig {
|
|
93
|
+
const {config} = this.getServerOptions();
|
|
94
|
+
|
|
95
|
+
return config;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
protected getPort(): number {
|
|
99
|
+
const {port} = this.getServerOptions();
|
|
100
|
+
|
|
101
|
+
return port;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
protected getLabel(): string {
|
|
105
|
+
const {label} = this.getServerOptions();
|
|
106
|
+
|
|
107
|
+
return label;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
protected getLogger(): Logger {
|
|
111
|
+
if (this.logger === undefined) {
|
|
112
|
+
this.logger = new Logger();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return this.logger;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
protected getRawServer(): Net.Server {
|
|
119
|
+
return this.raw_server;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
protected getServerOptions(): ServerOptions {
|
|
123
|
+
return this.options;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private bindHandlersInternal(): void {
|
|
127
|
+
const raw_server = this.getRawServer();
|
|
128
|
+
|
|
129
|
+
raw_server.on('listening', this.handleListening.bind(this));
|
|
130
|
+
raw_server.on('error', this.handleError.bind(this));
|
|
131
|
+
raw_server.on('close', this.handleClosed.bind(this));
|
|
132
|
+
|
|
133
|
+
this.bindHandlers();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private handleListening(): void {
|
|
137
|
+
this.setStatus(ServerStatus.LISTENING);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private handleError(error: Error): void {
|
|
141
|
+
const logger = this.getLogger();
|
|
142
|
+
|
|
143
|
+
logger.error(error);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private handleClosed(): void {
|
|
147
|
+
this.setStatus(ServerStatus.STOPPED);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
private validateCanStart(): void {
|
|
151
|
+
if (this.canStart()) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const status = this.getStatus();
|
|
156
|
+
|
|
157
|
+
throw new GenericError(`Unable to start server in ${status} status`);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
private validateCanStop(): void {
|
|
161
|
+
if (this.canStop()) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const status = this.getStatus();
|
|
166
|
+
|
|
167
|
+
throw new GenericError(`Unable to stop server in ${status} status`);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
private isNotStarted(): boolean {
|
|
171
|
+
const status = this.getStatus();
|
|
172
|
+
|
|
173
|
+
return status === ServerStatus.NOT_STARTED;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
private isStopped(): boolean {
|
|
177
|
+
const status = this.getStatus();
|
|
178
|
+
|
|
179
|
+
return status === ServerStatus.STOPPED;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
private getStatus(): ServerStatus {
|
|
183
|
+
return this.status;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private setStatus(status: ServerStatus): void {
|
|
187
|
+
this.status = status;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
protected abstract bindHandlers(): void;
|
|
191
|
+
protected abstract getProtocol(): NetworkProtocol;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export default Server;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {HttpMethod, ContentType} from 'lib/http';
|
|
2
|
+
|
|
3
|
+
import Endpoint from 'lib/server/http/endpoint';
|
|
4
|
+
|
|
5
|
+
interface PingResult {
|
|
6
|
+
status: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
class PingEndpoint extends Endpoint<unknown, PingResult> {
|
|
10
|
+
public path = '/ping';
|
|
11
|
+
public method = HttpMethod.GET;
|
|
12
|
+
public content_types = [ContentType.JSON];
|
|
13
|
+
|
|
14
|
+
protected process(): Promise<PingResult> {
|
|
15
|
+
return Promise.resolve({
|
|
16
|
+
status: 'OK'
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export default PingEndpoint;
|