@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,40 @@
|
|
|
1
|
+
import {InvalidError} from 'lib/errors';
|
|
2
|
+
|
|
3
|
+
import Day from 'type/day';
|
|
4
|
+
import MonthNames from 'constant/month-names';
|
|
5
|
+
|
|
6
|
+
const month_segment = MonthNames.join('|');
|
|
7
|
+
const DAY_REGEX = new RegExp(`^(${month_segment})-([0-9][0-9])-([0-9][0-9][0-9][0-9])$`);
|
|
8
|
+
|
|
9
|
+
function dayToDate(day: Day): Date {
|
|
10
|
+
const {key} = day;
|
|
11
|
+
const match = key.match(DAY_REGEX);
|
|
12
|
+
|
|
13
|
+
if (!match) {
|
|
14
|
+
throw new InvalidError(`Invalid day: ${key}`);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const month_name = match[1];
|
|
18
|
+
const numeric_day = parseInt(match[2]);
|
|
19
|
+
const numeric_year = parseInt(match[3]);
|
|
20
|
+
|
|
21
|
+
if (isNaN(numeric_day)) {
|
|
22
|
+
throw new InvalidError(`Invalid day: ${key}`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (isNaN(numeric_year)) {
|
|
26
|
+
throw new InvalidError(`Invalid day: ${key}`);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const month_index = MonthNames.indexOf(month_name);
|
|
30
|
+
|
|
31
|
+
if (month_index === -1) {
|
|
32
|
+
throw new InvalidError(`Invalid day: ${key}`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const numeric_month = month_index + 1;
|
|
36
|
+
|
|
37
|
+
return new Date(`${numeric_year}-${numeric_month}-${numeric_day}`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default dayToDate;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {NotFoundError} from 'lib/errors';
|
|
2
|
+
|
|
3
|
+
import Page from 'type/page';
|
|
4
|
+
import Block from 'type/block';
|
|
5
|
+
import parseIndexPath from 'server/utility/parse-index-path';
|
|
6
|
+
|
|
7
|
+
function getBlockAtIndexPath(page: Page, index_path: string): Block {
|
|
8
|
+
const parts = parseIndexPath(index_path);
|
|
9
|
+
|
|
10
|
+
let current_node: Block | undefined;
|
|
11
|
+
let siblings = page.blocks;
|
|
12
|
+
|
|
13
|
+
while (parts.length) {
|
|
14
|
+
const index = parts.shift() as number;
|
|
15
|
+
|
|
16
|
+
current_node = siblings[index];
|
|
17
|
+
|
|
18
|
+
if (current_node === undefined) {
|
|
19
|
+
throw new NotFoundError(`Unable to find block at index: ${index_path}`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
siblings = current_node.children || [];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (current_node === undefined) {
|
|
26
|
+
throw new NotFoundError(`Unable to find block at index: ${index_path}`);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return current_node;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default getBlockAtIndexPath;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import PermissionType from 'enum/permission-type';
|
|
2
|
+
import DefaultRole from 'enum/default-role';
|
|
3
|
+
import Block from 'type/block';
|
|
4
|
+
|
|
5
|
+
function getBlockPermissions(block: Block): Record<PermissionType, string> {
|
|
6
|
+
return {
|
|
7
|
+
[PermissionType.CREATE]: DefaultRole.CREATOR,
|
|
8
|
+
[PermissionType.READ]: DefaultRole.PUBLIC,
|
|
9
|
+
[PermissionType.UPDATE]: DefaultRole.CREATOR,
|
|
10
|
+
[PermissionType.DELETE]: DefaultRole.CREATOR,
|
|
11
|
+
...block.permissions
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default getBlockPermissions;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {StatusCode} from 'lib/http';
|
|
2
|
+
|
|
3
|
+
import CustomPageType from 'server/enum/custom-page-type';
|
|
4
|
+
import pathIsDate from 'server/utility/path-is-date';
|
|
5
|
+
import isIndexPath from 'server/utility/is-index-path';
|
|
6
|
+
|
|
7
|
+
function isDate(path: string): boolean {
|
|
8
|
+
return pathIsDate(path) && path.startsWith('/day/');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function isError(path: string): boolean {
|
|
12
|
+
const parsed_key = parseInt(path.slice(1));
|
|
13
|
+
|
|
14
|
+
if (isNaN(parsed_key)) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return parsed_key >= StatusCode.BAD_REQUEST;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function getCustomPageTypeForPath(path: string): CustomPageType {
|
|
22
|
+
if (isDate(path)) {
|
|
23
|
+
return CustomPageType.DATE;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (isError(path)) {
|
|
27
|
+
return CustomPageType.ERROR;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (isIndexPath(path)) {
|
|
31
|
+
return CustomPageType.INDEX;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return CustomPageType.BLANK;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export default getCustomPageTypeForPath;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Block from 'type/block';
|
|
2
|
+
import BlockMetadata from 'type/block-metadata';
|
|
3
|
+
import parseIndexPath from 'server/utility/parse-index-path';
|
|
4
|
+
|
|
5
|
+
function getElementIdForBlock(block: Block, metadata: BlockMetadata): string {
|
|
6
|
+
const {page_path, index_path} = metadata;
|
|
7
|
+
const normalized_page_path = page_path.replace(/\//g, '-');
|
|
8
|
+
const path_parts = parseIndexPath(index_path);
|
|
9
|
+
const index_component = path_parts.join('-');
|
|
10
|
+
const id = `block-${normalized_page_path}-${index_component}`;
|
|
11
|
+
|
|
12
|
+
return id.replace(/-+/g, '-');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default getElementIdForBlock;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {InvariantViolation} from 'lib/errors';
|
|
2
|
+
|
|
3
|
+
import BlockType from 'enum/block-type';
|
|
4
|
+
import Emoji from 'enum/emoji';
|
|
5
|
+
|
|
6
|
+
function getEmojiForBlockType(block_type: BlockType): Emoji {
|
|
7
|
+
switch (block_type) {
|
|
8
|
+
case BlockType.NOTE:
|
|
9
|
+
return Emoji.NOTEPAD;
|
|
10
|
+
|
|
11
|
+
case BlockType.IMAGE:
|
|
12
|
+
return Emoji.CAMERA;
|
|
13
|
+
|
|
14
|
+
case BlockType.AUDIO:
|
|
15
|
+
return Emoji.MICROPHONE;
|
|
16
|
+
|
|
17
|
+
case BlockType.TODO:
|
|
18
|
+
return Emoji.COMPLETED_CHECKMARK;
|
|
19
|
+
|
|
20
|
+
case BlockType.HEADER:
|
|
21
|
+
return Emoji.PLACARD;
|
|
22
|
+
|
|
23
|
+
case BlockType.FOLDER:
|
|
24
|
+
return Emoji.FOLDER;
|
|
25
|
+
|
|
26
|
+
case BlockType.MULTI_COLUMN:
|
|
27
|
+
return Emoji.BAR_CHART;
|
|
28
|
+
|
|
29
|
+
case BlockType.LINK:
|
|
30
|
+
return Emoji.LINK;
|
|
31
|
+
|
|
32
|
+
default:
|
|
33
|
+
throw new InvariantViolation(`
|
|
34
|
+
Unable to determine emoji for block type: ${block_type}
|
|
35
|
+
`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default getEmojiForBlockType;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import ToolType from 'enum/tool-type';
|
|
2
|
+
import Emoji from 'enum/emoji';
|
|
3
|
+
|
|
4
|
+
const ToolTypesToEmojis: Record<ToolType, Emoji> = {
|
|
5
|
+
[ToolType.LOCK]: Emoji.LOCKED,
|
|
6
|
+
[ToolType.HOME]: Emoji.HOUSE,
|
|
7
|
+
[ToolType.TODAY]: Emoji.SUNSHINE,
|
|
8
|
+
[ToolType.IMAGE]: Emoji.CAMERA,
|
|
9
|
+
[ToolType.AUDIO]: Emoji.MICROPHONE,
|
|
10
|
+
[ToolType.NOTE]: Emoji.NOTEPAD,
|
|
11
|
+
[ToolType.SETTINGS]: Emoji.GEAR,
|
|
12
|
+
[ToolType.FOLDER]: Emoji.FOLDER,
|
|
13
|
+
[ToolType.TODO]: Emoji.COMPLETED_CHECKMARK
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
function getEmojiForToolType(tool_type: ToolType): Emoji {
|
|
17
|
+
return ToolTypesToEmojis[tool_type];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export default getEmojiForToolType;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import createDate from 'server/utility/create-date';
|
|
2
|
+
|
|
3
|
+
function getEndOfMonth(date: Date): Date {
|
|
4
|
+
const new_date = createDate(date);
|
|
5
|
+
|
|
6
|
+
new_date.setUTCMonth(date.getUTCMonth() + 1);
|
|
7
|
+
new_date.setUTCDate(1);
|
|
8
|
+
new_date.setUTCDate(new_date.getUTCDate() - 1);
|
|
9
|
+
|
|
10
|
+
return new_date;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default getEndOfMonth;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import createDate from 'server/utility/create-date';
|
|
2
|
+
|
|
3
|
+
function getEndOfWeek(date: Date): Date {
|
|
4
|
+
const new_date = createDate(date);
|
|
5
|
+
const current_day = new_date.getUTCDay();
|
|
6
|
+
const delta = 6 - current_day
|
|
7
|
+
|
|
8
|
+
new_date.setUTCDate(new_date.getUTCDate() + delta);
|
|
9
|
+
|
|
10
|
+
return new_date;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default getEndOfWeek;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import Path from 'path';
|
|
2
|
+
|
|
3
|
+
import FolderBlock from 'type/block/folder';
|
|
4
|
+
import getPathForFolderBlock from 'server/utility/get-path-for-folder-block';
|
|
5
|
+
|
|
6
|
+
type GetPathInput = {
|
|
7
|
+
readonly base_path: string;
|
|
8
|
+
readonly public_directory: string;
|
|
9
|
+
readonly block: FolderBlock;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
function getFilepathForFolderBlock(input: GetPathInput): string {
|
|
13
|
+
const {base_path, public_directory, block} = input;
|
|
14
|
+
|
|
15
|
+
const path = getPathForFolderBlock({
|
|
16
|
+
base_path,
|
|
17
|
+
block
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
return Path.resolve(public_directory, `.${path}`);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default getFilepathForFolderBlock;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {InvariantViolation} from 'lib/errors';
|
|
2
|
+
|
|
3
|
+
import Color from 'enum/color';
|
|
4
|
+
|
|
5
|
+
const ColorsToHex: Record<Color, string> = {
|
|
6
|
+
[Color.BLUE]: '#09F',
|
|
7
|
+
[Color.YELLOW]: '#FC3',
|
|
8
|
+
[Color.FUSCHIA]: '#F36',
|
|
9
|
+
[Color.MAROON]: '#C06',
|
|
10
|
+
[Color.ORANGE]: '#F83',
|
|
11
|
+
[Color.PURPLE]: '#66C',
|
|
12
|
+
[Color.RED]: '#F00',
|
|
13
|
+
[Color.BLACK]: '#000',
|
|
14
|
+
[Color.WHITE]: '#FFF',
|
|
15
|
+
[Color.GREY]: '#777',
|
|
16
|
+
[Color.GREEN]: '#0C9'
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
function getHexForColor(color: Color): string {
|
|
20
|
+
const hex = ColorsToHex[color];
|
|
21
|
+
|
|
22
|
+
if (hex === undefined) {
|
|
23
|
+
throw new InvariantViolation(`
|
|
24
|
+
Unable to determine hex for color: ${color}
|
|
25
|
+
`);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return hex;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default getHexForColor;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {InvariantViolation} from 'lib/errors';
|
|
2
|
+
|
|
3
|
+
import Emoji from 'enum/emoji';
|
|
4
|
+
import TimePlaceVisibility from 'enum/time-place-visibility';
|
|
5
|
+
|
|
6
|
+
function getLabelForTimePlaceVisibility(visibility: TimePlaceVisibility): string {
|
|
7
|
+
switch (visibility) {
|
|
8
|
+
case TimePlaceVisibility.NONE:
|
|
9
|
+
return `${Emoji.NONE} none`;
|
|
10
|
+
case TimePlaceVisibility.TIME:
|
|
11
|
+
return `${Emoji.CLOCK} time`;
|
|
12
|
+
case TimePlaceVisibility.PLACE:
|
|
13
|
+
return `${Emoji.GRID_GLOBE} place`;
|
|
14
|
+
case TimePlaceVisibility.BOTH:
|
|
15
|
+
return `${Emoji.CLOCK}${Emoji.GRID_GLOBE} both`;
|
|
16
|
+
default:
|
|
17
|
+
throw new InvariantViolation(`
|
|
18
|
+
Unsupported time/place visibility: ${visibility}
|
|
19
|
+
`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default getLabelForTimePlaceVisibility;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {InvariantViolation} from 'lib/errors';
|
|
2
|
+
|
|
3
|
+
import MonthNames from 'constant/month-names';
|
|
4
|
+
|
|
5
|
+
function getMonthName(date: Date): string {
|
|
6
|
+
const month_index = date.getUTCMonth();
|
|
7
|
+
const month_name = MonthNames[month_index];
|
|
8
|
+
|
|
9
|
+
if (month_name === undefined) {
|
|
10
|
+
throw new InvariantViolation(`
|
|
11
|
+
Unable to determine month name for date: ${date.toString()}
|
|
12
|
+
`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return month_name;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default getMonthName;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import createDate from 'server/utility/create-date';
|
|
2
|
+
|
|
3
|
+
function getNextMonth(date: Date): Date {
|
|
4
|
+
const month = date.getUTCMonth();
|
|
5
|
+
const new_date = createDate(date);
|
|
6
|
+
|
|
7
|
+
new_date.setUTCMonth(month + 1);
|
|
8
|
+
|
|
9
|
+
return new_date;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default getNextMonth;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import getEndOfWeek from 'server/utility/get-end-of-week';
|
|
2
|
+
import getStartOfWeek from 'server/utility/get-start-of-week';
|
|
3
|
+
import addDays from 'server/utility/add-days';
|
|
4
|
+
|
|
5
|
+
function getNextWeek(date: Date): Date {
|
|
6
|
+
const end_of_week = getEndOfWeek(date);
|
|
7
|
+
const start_of_next_week = addDays(end_of_week, 1);
|
|
8
|
+
|
|
9
|
+
return getStartOfWeek(start_of_next_week);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default getNextWeek;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import createDate from 'server/utility/create-date';
|
|
2
|
+
|
|
3
|
+
function getNextYear(date: Date): Date {
|
|
4
|
+
const new_date = createDate(date);
|
|
5
|
+
|
|
6
|
+
new_date.setUTCFullYear(new_date.getUTCFullYear() + 1);
|
|
7
|
+
new_date.setUTCMonth(0);
|
|
8
|
+
new_date.setUTCDate(1);
|
|
9
|
+
|
|
10
|
+
return new_date;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default getNextYear;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import getMonthName from 'server/utility/get-month-name';
|
|
2
|
+
import getOrdinalOfWeekWithinMonth from 'server/utility/get-ordinal-of-week-within-month';
|
|
3
|
+
|
|
4
|
+
function getOrdinalLabelForWeek(week: Date): string {
|
|
5
|
+
const month = getMonthName(week);
|
|
6
|
+
const ordinal = getOrdinalOfWeekWithinMonth(week);
|
|
7
|
+
|
|
8
|
+
return `${ordinal} week of ${month}`;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default getOrdinalLabelForWeek;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import getShortOrdinal from 'server/utility/get-short-ordinal';
|
|
2
|
+
|
|
3
|
+
function getIndexOfWeekWithinMonth(date: Date): number {
|
|
4
|
+
const day_index = date.getUTCDate();
|
|
5
|
+
|
|
6
|
+
return Math.ceil((day_index - 1) / 7);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function getOrdinalOfWeekWithinMonth(date: Date): string {
|
|
10
|
+
const index = getIndexOfWeekWithinMonth(date);
|
|
11
|
+
|
|
12
|
+
return getShortOrdinal(index + 1);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default getOrdinalOfWeekWithinMonth;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {InvalidError} from 'lib/errors';
|
|
2
|
+
|
|
3
|
+
import parseIndexPath from 'server/utility/parse-index-path';
|
|
4
|
+
import createIndexPath from 'server/utility/create-index-path';
|
|
5
|
+
|
|
6
|
+
function getParentIndexPath(index_path: string): string {
|
|
7
|
+
const parts = parseIndexPath(index_path);
|
|
8
|
+
|
|
9
|
+
parts.pop();
|
|
10
|
+
|
|
11
|
+
if (parts.length === 0) {
|
|
12
|
+
throw new InvalidError(`Can't get parent of path: ${index_path}`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return createIndexPath(parts);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default getParentIndexPath;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import Path from 'path';
|
|
2
|
+
|
|
3
|
+
import FolderBlock from 'type/block/folder';
|
|
4
|
+
import createSlug from 'server/utility/create-slug';
|
|
5
|
+
|
|
6
|
+
type GetPathInput = {
|
|
7
|
+
readonly base_path: string;
|
|
8
|
+
readonly block: FolderBlock;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
function getPathForFolderBlock(input: GetPathInput): string {
|
|
12
|
+
const {base_path, block} = input;
|
|
13
|
+
|
|
14
|
+
const title = block.title;
|
|
15
|
+
|
|
16
|
+
if (title === '') {
|
|
17
|
+
return `${base_path}/...`;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const slug = createSlug(title);
|
|
21
|
+
|
|
22
|
+
return Path.resolve(base_path, `./${slug}`);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default getPathForFolderBlock;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {URL} from 'url';
|
|
2
|
+
|
|
3
|
+
import validateUrl from 'server/utility/validate-url';
|
|
4
|
+
|
|
5
|
+
function getPathFromUrl(raw_url: string): string {
|
|
6
|
+
validateUrl(raw_url);
|
|
7
|
+
|
|
8
|
+
const url = new URL(raw_url);
|
|
9
|
+
|
|
10
|
+
return url.pathname;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default getPathFromUrl;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import parseIndexPath from 'server/utility/parse-index-path';
|
|
2
|
+
import createIndexPath from 'server/utility/create-index-path';
|
|
3
|
+
|
|
4
|
+
function getPreviousIndexPath(index_path: string): string {
|
|
5
|
+
const parts = parseIndexPath(index_path);
|
|
6
|
+
const final_part = parts.pop();
|
|
7
|
+
|
|
8
|
+
if (final_part === undefined) {
|
|
9
|
+
return createIndexPath([0]);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (final_part === 0) {
|
|
13
|
+
if (parts.length === 0) {
|
|
14
|
+
return createIndexPath([0]);
|
|
15
|
+
} else {
|
|
16
|
+
return createIndexPath(parts);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const previous_part = final_part - 1;
|
|
21
|
+
|
|
22
|
+
parts.push(previous_part);
|
|
23
|
+
|
|
24
|
+
return createIndexPath(parts);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default getPreviousIndexPath;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import createDate from 'server/utility/create-date';
|
|
2
|
+
|
|
3
|
+
function getPreviousMonth(date: Date): Date {
|
|
4
|
+
const month = date.getUTCMonth();
|
|
5
|
+
const new_date = createDate(date);
|
|
6
|
+
|
|
7
|
+
new_date.setUTCMonth(month - 1);
|
|
8
|
+
|
|
9
|
+
return new_date;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export default getPreviousMonth;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import getStartOfWeek from 'server/utility/get-start-of-week';
|
|
2
|
+
import subtractDays from 'server/utility/subtract-days';
|
|
3
|
+
|
|
4
|
+
function getPreviousWeek(date: Date): Date {
|
|
5
|
+
const start_of_week = getStartOfWeek(date);
|
|
6
|
+
const end_of_previous_week = subtractDays(start_of_week, 1);
|
|
7
|
+
|
|
8
|
+
return getStartOfWeek(end_of_previous_week);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default getPreviousWeek;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import createDate from 'server/utility/create-date';
|
|
2
|
+
|
|
3
|
+
function getPreviousYear(date: Date): Date {
|
|
4
|
+
const new_date = createDate(date);
|
|
5
|
+
|
|
6
|
+
new_date.setUTCFullYear(new_date.getUTCFullYear() - 1);
|
|
7
|
+
new_date.setUTCMonth(0);
|
|
8
|
+
new_date.setUTCDate(1);
|
|
9
|
+
|
|
10
|
+
return new_date;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default getPreviousYear;
|