From 5ca3d01ea11ad41bd8f04428416033a74fff1b5b Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Sat, 18 Mar 2023 10:32:26 +0100 Subject: [PATCH] :tada: Add malli based validation and coersion subsystem --- backend/dev/user.clj | 49 +- .../app/assets/swagger-ui-4.18.3.css | 3 + .../resources/app/assets/swagger-ui-4.18.3.js | 3 + .../app/templates/api-doc-entry.tmpl | 75 +- backend/resources/app/templates/api-doc.css | 76 +- backend/resources/app/templates/api-doc.tmpl | 62 +- .../app/templates/error-report.v3.tmpl | 100 +++ backend/resources/app/templates/openapi.tmpl | 28 + backend/src/app/config.clj | 1 + backend/src/app/http.clj | 2 +- backend/src/app/http/debug.clj | 10 +- backend/src/app/http/errors.clj | 51 +- backend/src/app/loggers/audit.clj | 4 +- backend/src/app/loggers/database.clj | 51 +- backend/src/app/media.clj | 24 + backend/src/app/rpc.clj | 54 +- backend/src/app/rpc/commands/audit.clj | 5 +- backend/src/app/rpc/commands/files.clj | 150 ++-- backend/src/app/rpc/commands/files_create.clj | 16 +- backend/src/app/rpc/commands/files_share.clj | 6 +- backend/src/app/rpc/commands/files_temp.clj | 9 +- .../src/app/rpc/commands/files_thumbnails.clj | 24 +- backend/src/app/rpc/commands/files_update.clj | 42 ++ backend/src/app/rpc/commands/profile.clj | 74 +- backend/src/app/rpc/doc.clj | 190 ++++- backend/src/app/rpc/permissions.clj | 11 + backend/src/app/rpc/rlimit.clj | 9 +- backend/src/app/util/fressian.clj | 6 +- backend/src/app/util/time.clj | 27 + backend/test/backend_tests/rpc_audit_test.clj | 7 +- backend/test/backend_tests/rpc_file_test.clj | 5 +- .../backend_tests/util_objects_map_test.clj | 91 ++- common/deps.edn | 2 + common/src/app/common/data.cljc | 51 +- common/src/app/common/data/macros.cljc | 29 + common/src/app/common/exceptions.cljc | 24 +- common/src/app/common/file_builder.cljc | 47 +- common/src/app/common/geom/align.cljc | 9 +- common/src/app/common/geom/matrix.cljc | 70 +- common/src/app/common/geom/point.cljc | 41 +- .../src/app/common/geom/shapes/modifiers.cljc | 6 +- common/src/app/common/pages/changes.cljc | 227 +++++- .../src/app/common/pages/changes_builder.cljc | 2 +- common/src/app/common/pages/changes_spec.cljc | 187 ----- common/src/app/common/pages/common.cljc | 18 +- common/src/app/common/pages/helpers.cljc | 9 +- common/src/app/common/schema.cljc | 505 ++++++++++++++ .../src/app/common/schema/desc_js_like.cljc | 285 ++++++++ common/src/app/common/schema/desc_native.cljc | 73 ++ common/src/app/common/schema/generators.cljc | 125 ++++ common/src/app/common/schema/openapi.cljc | 154 +++++ common/src/app/common/schema/registry.cljc | 20 + common/src/app/common/types/color.cljc | 148 ++-- common/src/app/common/types/container.cljc | 54 +- common/src/app/common/types/file.cljc | 66 +- .../app/common/types/file/media_object.cljc | 30 - common/src/app/common/types/grid.cljc | 59 ++ common/src/app/common/types/modifiers.cljc | 26 +- common/src/app/common/types/page.cljc | 65 +- common/src/app/common/types/page/flow.cljc | 24 - common/src/app/common/types/page/grid.cljc | 46 -- common/src/app/common/types/page/guide.cljc | 27 - common/src/app/common/types/shape.cljc | 444 ++++++------ common/src/app/common/types/shape/blur.cljc | 15 + common/src/app/common/types/shape/export.cljc | 17 +- .../app/common/types/shape/interactions.cljc | 537 +++++++++----- common/src/app/common/types/shape/layout.cljc | 233 ++++--- common/src/app/common/types/shape/path.cljc | 20 - common/src/app/common/types/shape/radius.cljc | 15 +- common/src/app/common/types/shape/shadow.cljc | 58 +- common/src/app/common/types/shape/text.cljc | 121 ++-- common/src/app/common/types/shape_tree.cljc | 9 +- common/src/app/common/types/typography.cljc | 57 +- common/test/common_tests/types_file_test.cljc | 1 + common/test/common_tests/types_test.cljc | 59 +- common/test/common_tests/uuid_test.cljc | 21 +- exporter/scripts/wait-and-start.sh | 2 + frontend/src/app/config.cljs | 14 +- frontend/src/app/main/data/comments.cljs | 141 ++-- frontend/src/app/main/data/dashboard.cljs | 139 ++-- frontend/src/app/main/data/fonts.cljs | 29 +- frontend/src/app/main/data/messages.cljs | 50 +- frontend/src/app/main/data/shortcuts.cljs | 32 +- frontend/src/app/main/data/users.cljs | 97 ++- frontend/src/app/main/data/viewer.cljs | 81 +-- frontend/src/app/main/data/workspace.cljs | 76 +- .../src/app/main/data/workspace/changes.cljs | 21 +- .../src/app/main/data/workspace/comments.cljs | 13 +- .../src/app/main/data/workspace/edition.cljs | 4 +- .../src/app/main/data/workspace/grid.cljs | 4 +- .../src/app/main/data/workspace/guides.cljs | 19 +- .../app/main/data/workspace/highlight.cljs | 6 +- .../app/main/data/workspace/interactions.cljs | 10 +- .../src/app/main/data/workspace/layout.cljs | 10 +- .../app/main/data/workspace/libraries.cljs | 115 +-- .../src/app/main/data/workspace/media.cljs | 83 ++- .../app/main/data/workspace/modifiers.cljs | 11 +- .../main/data/workspace/notifications.cljs | 44 +- .../app/main/data/workspace/path/changes.cljs | 8 +- .../app/main/data/workspace/path/common.cljs | 31 + .../app/main/data/workspace/path/drawing.cljs | 7 +- .../app/main/data/workspace/path/spec.cljs | 49 -- .../app/main/data/workspace/persistence.cljs | 19 +- .../app/main/data/workspace/selection.cljs | 15 +- .../src/app/main/data/workspace/shapes.cljs | 20 +- .../app/main/data/workspace/shortcuts.cljs | 22 +- .../app/main/data/workspace/svg_upload.cljs | 17 +- .../app/main/data/workspace/transforms.cljs | 38 +- .../src/app/main/data/workspace/undo.cljs | 21 +- .../src/app/main/data/workspace/viewport.cljs | 12 +- frontend/src/app/main/errors.cljs | 216 +++--- frontend/src/app/main/store.cljs | 2 +- frontend/src/app/main/ui.cljs | 1 - .../context_menu_a11y/context_menu_a11y.cljs | 2 +- .../app/main/ui/dashboard/project_menu.cljs | 34 +- frontend/src/app/main/ui/dashboard/team.cljs | 2 +- frontend/src/app/main/ui/hooks/resize.cljs | 7 +- .../app/main/ui/workspace/viewport/hooks.cljs | 5 +- .../ui/workspace/viewport/snap_points.cljs | 4 +- frontend/src/app/util/text_editor.cljs | 4 +- frontend/src/app/util/time.cljs | 10 +- frontend/src/app/worker.cljs | 29 +- .../state_components_sync_test.cljs | 654 +++++++++--------- .../frontend_tests/state_components_test.cljs | 212 +++--- .../frontend_tests/util_snap_data_test.cljs | 3 +- 125 files changed, 4984 insertions(+), 2762 deletions(-) create mode 100644 backend/resources/app/assets/swagger-ui-4.18.3.css create mode 100644 backend/resources/app/assets/swagger-ui-4.18.3.js create mode 100644 backend/resources/app/templates/error-report.v3.tmpl create mode 100644 backend/resources/app/templates/openapi.tmpl delete mode 100644 common/src/app/common/pages/changes_spec.cljc create mode 100644 common/src/app/common/schema.cljc create mode 100644 common/src/app/common/schema/desc_js_like.cljc create mode 100644 common/src/app/common/schema/desc_native.cljc create mode 100644 common/src/app/common/schema/generators.cljc create mode 100644 common/src/app/common/schema/openapi.cljc create mode 100644 common/src/app/common/schema/registry.cljc delete mode 100644 common/src/app/common/types/file/media_object.cljc create mode 100644 common/src/app/common/types/grid.cljc delete mode 100644 common/src/app/common/types/page/flow.cljc delete mode 100644 common/src/app/common/types/page/grid.cljc delete mode 100644 common/src/app/common/types/page/guide.cljc delete mode 100644 common/src/app/common/types/shape/path.cljc delete mode 100644 frontend/src/app/main/data/workspace/path/spec.cljs diff --git a/backend/dev/user.clj b/backend/dev/user.clj index c7d590235c..d86d4fc073 100644 --- a/backend/dev/user.clj +++ b/backend/dev/user.clj @@ -15,8 +15,19 @@ [app.common.spec :as us] [app.common.transit :as t] [app.common.uuid :as uuid] + [app.common.schema :as sm] + [app.common.schema.generators :as sg] + [app.common.schema.desc-native :as smdn] + [app.common.schema.desc-js-like :as smdj] [app.config :as cfg] [app.main :as main] + [malli.core :as m] + [malli.error :as me] + [malli.dev.pretty :as mdp] + [malli.transform :as mt] + [malli.util :as mu] + [malli.registry :as mr] + [malli.generator :as mg] [app.srepl.helpers] [app.srepl.main :as srepl] [app.util.blob :as blob] @@ -31,7 +42,7 @@ [clojure.spec.alpha :as s] [clojure.stacktrace :as trace] [clojure.test :as test] - [clojure.test.check.generators :as gen] + [clojure.test.check.generators :as tgen] [clojure.tools.namespace.repl :as repl] [clojure.walk :refer [macroexpand-all]] [criterium.core :as crit] @@ -130,3 +141,39 @@ (add-tap #(locking debug-tap (prn "tap debug:" %))) 1)) + + +(sm/def! ::test + [:map {:title "Foo"} + [:x :int] + [:y {:min 0} :double] + [:bar + [:map {:title "Bar"} + [:z :string] + [:v ::sm/uuid]]] + [:items + [:vector ::dt/instant]]]) + +(sm/def! ::test2 + [:multi {:title "Foo" :dispatch :type} + [:x + [:map {:title "FooX"} + [:type [:= :x]] + [:x :int]]] + [:y + [:map + [:type [:= :x]] + [:y [::sm/one-of #{:a :b :c}]]]] + [:z + [:map {:title "FooZ"} + [:z + [:multi {:title "Bar" :dispatch :type} + [:a + [:map + [:type [:= :a]] + [:a :int]]] + [:b + [:map + [:type [:= :b]] + [:b :int]]]]]]]]) + diff --git a/backend/resources/app/assets/swagger-ui-4.18.3.css b/backend/resources/app/assets/swagger-ui-4.18.3.css new file mode 100644 index 0000000000..d2ea0226ca --- /dev/null +++ b/backend/resources/app/assets/swagger-ui-4.18.3.css @@ -0,0 +1,3 @@ +.swagger-ui{color:#3b4151;font-family:sans-serif/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */}.swagger-ui html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.15}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure{margin:1em 40px}.swagger-ui hr{box-sizing:content-box;height:0;overflow:visible}.swagger-ui pre{font-family:monospace,monospace;font-size:1em}.swagger-ui a{-webkit-text-decoration-skip:objects;background-color:transparent}.swagger-ui abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.swagger-ui b,.swagger-ui strong{font-weight:inherit;font-weight:bolder}.swagger-ui code,.swagger-ui kbd,.swagger-ui samp{font-family:monospace,monospace;font-size:1em}.swagger-ui dfn{font-style:italic}.swagger-ui mark{background-color:#ff0;color:#000}.swagger-ui small{font-size:80%}.swagger-ui sub,.swagger-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.swagger-ui sub{bottom:-.25em}.swagger-ui sup{top:-.5em}.swagger-ui audio,.swagger-ui video{display:inline-block}.swagger-ui audio:not([controls]){display:none;height:0}.swagger-ui img{border-style:none}.swagger-ui svg:not(:root){overflow:hidden}.swagger-ui button,.swagger-ui input,.swagger-ui optgroup,.swagger-ui select,.swagger-ui textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}.swagger-ui button,.swagger-ui input{overflow:visible}.swagger-ui button,.swagger-ui select{text-transform:none}.swagger-ui [type=reset],.swagger-ui [type=submit],.swagger-ui button,.swagger-ui html [type=button]{-webkit-appearance:button}.swagger-ui [type=button]::-moz-focus-inner,.swagger-ui [type=reset]::-moz-focus-inner,.swagger-ui [type=submit]::-moz-focus-inner,.swagger-ui button::-moz-focus-inner{border-style:none;padding:0}.swagger-ui [type=button]:-moz-focusring,.swagger-ui [type=reset]:-moz-focusring,.swagger-ui [type=submit]:-moz-focusring,.swagger-ui button:-moz-focusring{outline:1px dotted ButtonText}.swagger-ui fieldset{padding:.35em .75em .625em}.swagger-ui legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.swagger-ui progress{display:inline-block;vertical-align:baseline}.swagger-ui textarea{overflow:auto}.swagger-ui [type=checkbox],.swagger-ui [type=radio]{box-sizing:border-box;padding:0}.swagger-ui [type=number]::-webkit-inner-spin-button,.swagger-ui [type=number]::-webkit-outer-spin-button{height:auto}.swagger-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.swagger-ui [type=search]::-webkit-search-cancel-button,.swagger-ui [type=search]::-webkit-search-decoration{-webkit-appearance:none}.swagger-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.swagger-ui details,.swagger-ui menu{display:block}.swagger-ui summary{display:list-item}.swagger-ui canvas{display:inline-block}.swagger-ui [hidden],.swagger-ui template{display:none}.swagger-ui .debug *{outline:1px solid gold}.swagger-ui .debug-white *{outline:1px solid #fff}.swagger-ui .debug-black *{outline:1px solid #000}.swagger-ui .debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.swagger-ui .debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.swagger-ui .debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.swagger-ui .debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}.swagger-ui .border-box,.swagger-ui a,.swagger-ui article,.swagger-ui body,.swagger-ui code,.swagger-ui dd,.swagger-ui div,.swagger-ui dl,.swagger-ui dt,.swagger-ui fieldset,.swagger-ui footer,.swagger-ui form,.swagger-ui h1,.swagger-ui h2,.swagger-ui h3,.swagger-ui h4,.swagger-ui h5,.swagger-ui h6,.swagger-ui header,.swagger-ui html,.swagger-ui input[type=email],.swagger-ui input[type=number],.swagger-ui input[type=password],.swagger-ui input[type=tel],.swagger-ui input[type=text],.swagger-ui input[type=url],.swagger-ui legend,.swagger-ui li,.swagger-ui main,.swagger-ui ol,.swagger-ui p,.swagger-ui pre,.swagger-ui section,.swagger-ui table,.swagger-ui td,.swagger-ui textarea,.swagger-ui th,.swagger-ui tr,.swagger-ui ul{box-sizing:border-box}.swagger-ui .aspect-ratio{height:0;position:relative}.swagger-ui .aspect-ratio--16x9{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1{padding-bottom:100%}.swagger-ui .aspect-ratio--object{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}@media screen and (min-width:30em){.swagger-ui .aspect-ratio-ns{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-ns{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-ns{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-ns{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-ns{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-ns{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-ns{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-ns{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-ns{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-ns{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-ns{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-ns{padding-bottom:100%}.swagger-ui .aspect-ratio--object-ns{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .aspect-ratio-m{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-m{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-m{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-m{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-m{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-m{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-m{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-m{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-m{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-m{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-m{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-m{padding-bottom:100%}.swagger-ui .aspect-ratio--object-m{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:60em){.swagger-ui .aspect-ratio-l{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-l{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-l{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-l{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-l{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-l{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-l{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-l{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-l{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-l{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-l{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-l{padding-bottom:100%}.swagger-ui .aspect-ratio--object-l{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}.swagger-ui img{max-width:100%}.swagger-ui .cover{background-size:cover!important}.swagger-ui .contain{background-size:contain!important}@media screen and (min-width:30em){.swagger-ui .cover-ns{background-size:cover!important}.swagger-ui .contain-ns{background-size:contain!important}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .cover-m{background-size:cover!important}.swagger-ui .contain-m{background-size:contain!important}}@media screen and (min-width:60em){.swagger-ui .cover-l{background-size:cover!important}.swagger-ui .contain-l{background-size:contain!important}}.swagger-ui .bg-center{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left{background-position:0;background-repeat:no-repeat}@media screen and (min-width:30em){.swagger-ui .bg-center-ns{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-ns{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-ns{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-ns{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-ns{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .bg-center-m{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-m{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-m{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-m{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-m{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:60em){.swagger-ui .bg-center-l{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-l{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-l{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-l{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-l{background-position:0;background-repeat:no-repeat}}.swagger-ui .outline{outline:1px solid}.swagger-ui .outline-transparent{outline:1px solid transparent}.swagger-ui .outline-0{outline:0}@media screen and (min-width:30em){.swagger-ui .outline-ns{outline:1px solid}.swagger-ui .outline-transparent-ns{outline:1px solid transparent}.swagger-ui .outline-0-ns{outline:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .outline-m{outline:1px solid}.swagger-ui .outline-transparent-m{outline:1px solid transparent}.swagger-ui .outline-0-m{outline:0}}@media screen and (min-width:60em){.swagger-ui .outline-l{outline:1px solid}.swagger-ui .outline-transparent-l{outline:1px solid transparent}.swagger-ui .outline-0-l{outline:0}}.swagger-ui .ba{border-style:solid;border-width:1px}.swagger-ui .bt{border-top-style:solid;border-top-width:1px}.swagger-ui .br{border-right-style:solid;border-right-width:1px}.swagger-ui .bb{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl{border-left-style:solid;border-left-width:1px}.swagger-ui .bn{border-style:none;border-width:0}@media screen and (min-width:30em){.swagger-ui .ba-ns{border-style:solid;border-width:1px}.swagger-ui .bt-ns{border-top-style:solid;border-top-width:1px}.swagger-ui .br-ns{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-ns{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-ns{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ba-m{border-style:solid;border-width:1px}.swagger-ui .bt-m{border-top-style:solid;border-top-width:1px}.swagger-ui .br-m{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-m{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-m{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.swagger-ui .ba-l{border-style:solid;border-width:1px}.swagger-ui .bt-l{border-top-style:solid;border-top-width:1px}.swagger-ui .br-l{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-l{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-l{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-l{border-style:none;border-width:0}}.swagger-ui .b--black{border-color:#000}.swagger-ui .b--near-black{border-color:#111}.swagger-ui .b--dark-gray{border-color:#333}.swagger-ui .b--mid-gray{border-color:#555}.swagger-ui .b--gray{border-color:#777}.swagger-ui .b--silver{border-color:#999}.swagger-ui .b--light-silver{border-color:#aaa}.swagger-ui .b--moon-gray{border-color:#ccc}.swagger-ui .b--light-gray{border-color:#eee}.swagger-ui .b--near-white{border-color:#f4f4f4}.swagger-ui .b--white{border-color:#fff}.swagger-ui .b--white-90{border-color:hsla(0,0%,100%,.9)}.swagger-ui .b--white-80{border-color:hsla(0,0%,100%,.8)}.swagger-ui .b--white-70{border-color:hsla(0,0%,100%,.7)}.swagger-ui .b--white-60{border-color:hsla(0,0%,100%,.6)}.swagger-ui .b--white-50{border-color:hsla(0,0%,100%,.5)}.swagger-ui .b--white-40{border-color:hsla(0,0%,100%,.4)}.swagger-ui .b--white-30{border-color:hsla(0,0%,100%,.3)}.swagger-ui .b--white-20{border-color:hsla(0,0%,100%,.2)}.swagger-ui .b--white-10{border-color:hsla(0,0%,100%,.1)}.swagger-ui .b--white-05{border-color:hsla(0,0%,100%,.05)}.swagger-ui .b--white-025{border-color:hsla(0,0%,100%,.025)}.swagger-ui .b--white-0125{border-color:hsla(0,0%,100%,.013)}.swagger-ui .b--black-90{border-color:rgba(0,0,0,.9)}.swagger-ui .b--black-80{border-color:rgba(0,0,0,.8)}.swagger-ui .b--black-70{border-color:rgba(0,0,0,.7)}.swagger-ui .b--black-60{border-color:rgba(0,0,0,.6)}.swagger-ui .b--black-50{border-color:rgba(0,0,0,.5)}.swagger-ui .b--black-40{border-color:rgba(0,0,0,.4)}.swagger-ui .b--black-30{border-color:rgba(0,0,0,.3)}.swagger-ui .b--black-20{border-color:rgba(0,0,0,.2)}.swagger-ui .b--black-10{border-color:rgba(0,0,0,.1)}.swagger-ui .b--black-05{border-color:rgba(0,0,0,.05)}.swagger-ui .b--black-025{border-color:rgba(0,0,0,.025)}.swagger-ui .b--black-0125{border-color:rgba(0,0,0,.013)}.swagger-ui .b--dark-red{border-color:#e7040f}.swagger-ui .b--red{border-color:#ff4136}.swagger-ui .b--light-red{border-color:#ff725c}.swagger-ui .b--orange{border-color:#ff6300}.swagger-ui .b--gold{border-color:#ffb700}.swagger-ui .b--yellow{border-color:gold}.swagger-ui .b--light-yellow{border-color:#fbf1a9}.swagger-ui .b--purple{border-color:#5e2ca5}.swagger-ui .b--light-purple{border-color:#a463f2}.swagger-ui .b--dark-pink{border-color:#d5008f}.swagger-ui .b--hot-pink{border-color:#ff41b4}.swagger-ui .b--pink{border-color:#ff80cc}.swagger-ui .b--light-pink{border-color:#ffa3d7}.swagger-ui .b--dark-green{border-color:#137752}.swagger-ui .b--green{border-color:#19a974}.swagger-ui .b--light-green{border-color:#9eebcf}.swagger-ui .b--navy{border-color:#001b44}.swagger-ui .b--dark-blue{border-color:#00449e}.swagger-ui .b--blue{border-color:#357edd}.swagger-ui .b--light-blue{border-color:#96ccff}.swagger-ui .b--lightest-blue{border-color:#cdecff}.swagger-ui .b--washed-blue{border-color:#f6fffe}.swagger-ui .b--washed-green{border-color:#e8fdf5}.swagger-ui .b--washed-yellow{border-color:#fffceb}.swagger-ui .b--washed-red{border-color:#ffdfdf}.swagger-ui .b--transparent{border-color:transparent}.swagger-ui .b--inherit{border-color:inherit}.swagger-ui .br0{border-radius:0}.swagger-ui .br1{border-radius:.125rem}.swagger-ui .br2{border-radius:.25rem}.swagger-ui .br3{border-radius:.5rem}.swagger-ui .br4{border-radius:1rem}.swagger-ui .br-100{border-radius:100%}.swagger-ui .br-pill{border-radius:9999px}.swagger-ui .br--bottom{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left{border-bottom-right-radius:0;border-top-right-radius:0}@media screen and (min-width:30em){.swagger-ui .br0-ns{border-radius:0}.swagger-ui .br1-ns{border-radius:.125rem}.swagger-ui .br2-ns{border-radius:.25rem}.swagger-ui .br3-ns{border-radius:.5rem}.swagger-ui .br4-ns{border-radius:1rem}.swagger-ui .br-100-ns{border-radius:100%}.swagger-ui .br-pill-ns{border-radius:9999px}.swagger-ui .br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-ns{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-ns{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .br0-m{border-radius:0}.swagger-ui .br1-m{border-radius:.125rem}.swagger-ui .br2-m{border-radius:.25rem}.swagger-ui .br3-m{border-radius:.5rem}.swagger-ui .br4-m{border-radius:1rem}.swagger-ui .br-100-m{border-radius:100%}.swagger-ui .br-pill-m{border-radius:9999px}.swagger-ui .br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-m{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-m{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:60em){.swagger-ui .br0-l{border-radius:0}.swagger-ui .br1-l{border-radius:.125rem}.swagger-ui .br2-l{border-radius:.25rem}.swagger-ui .br3-l{border-radius:.5rem}.swagger-ui .br4-l{border-radius:1rem}.swagger-ui .br-100-l{border-radius:100%}.swagger-ui .br-pill-l{border-radius:9999px}.swagger-ui .br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-l{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-l{border-bottom-right-radius:0;border-top-right-radius:0}}.swagger-ui .b--dotted{border-style:dotted}.swagger-ui .b--dashed{border-style:dashed}.swagger-ui .b--solid{border-style:solid}.swagger-ui .b--none{border-style:none}@media screen and (min-width:30em){.swagger-ui .b--dotted-ns{border-style:dotted}.swagger-ui .b--dashed-ns{border-style:dashed}.swagger-ui .b--solid-ns{border-style:solid}.swagger-ui .b--none-ns{border-style:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .b--dotted-m{border-style:dotted}.swagger-ui .b--dashed-m{border-style:dashed}.swagger-ui .b--solid-m{border-style:solid}.swagger-ui .b--none-m{border-style:none}}@media screen and (min-width:60em){.swagger-ui .b--dotted-l{border-style:dotted}.swagger-ui .b--dashed-l{border-style:dashed}.swagger-ui .b--solid-l{border-style:solid}.swagger-ui .b--none-l{border-style:none}}.swagger-ui .bw0{border-width:0}.swagger-ui .bw1{border-width:.125rem}.swagger-ui .bw2{border-width:.25rem}.swagger-ui .bw3{border-width:.5rem}.swagger-ui .bw4{border-width:1rem}.swagger-ui .bw5{border-width:2rem}.swagger-ui .bt-0{border-top-width:0}.swagger-ui .br-0{border-right-width:0}.swagger-ui .bb-0{border-bottom-width:0}.swagger-ui .bl-0{border-left-width:0}@media screen and (min-width:30em){.swagger-ui .bw0-ns{border-width:0}.swagger-ui .bw1-ns{border-width:.125rem}.swagger-ui .bw2-ns{border-width:.25rem}.swagger-ui .bw3-ns{border-width:.5rem}.swagger-ui .bw4-ns{border-width:1rem}.swagger-ui .bw5-ns{border-width:2rem}.swagger-ui .bt-0-ns{border-top-width:0}.swagger-ui .br-0-ns{border-right-width:0}.swagger-ui .bb-0-ns{border-bottom-width:0}.swagger-ui .bl-0-ns{border-left-width:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .bw0-m{border-width:0}.swagger-ui .bw1-m{border-width:.125rem}.swagger-ui .bw2-m{border-width:.25rem}.swagger-ui .bw3-m{border-width:.5rem}.swagger-ui .bw4-m{border-width:1rem}.swagger-ui .bw5-m{border-width:2rem}.swagger-ui .bt-0-m{border-top-width:0}.swagger-ui .br-0-m{border-right-width:0}.swagger-ui .bb-0-m{border-bottom-width:0}.swagger-ui .bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.swagger-ui .bw0-l{border-width:0}.swagger-ui .bw1-l{border-width:.125rem}.swagger-ui .bw2-l{border-width:.25rem}.swagger-ui .bw3-l{border-width:.5rem}.swagger-ui .bw4-l{border-width:1rem}.swagger-ui .bw5-l{border-width:2rem}.swagger-ui .bt-0-l{border-top-width:0}.swagger-ui .br-0-l{border-right-width:0}.swagger-ui .bb-0-l{border-bottom-width:0}.swagger-ui .bl-0-l{border-left-width:0}}.swagger-ui .shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}@media screen and (min-width:30em){.swagger-ui .shadow-1-ns{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-ns{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-ns{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-ns{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-ns{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:60em){.swagger-ui .shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}.swagger-ui .pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.swagger-ui .top-0{top:0}.swagger-ui .right-0{right:0}.swagger-ui .bottom-0{bottom:0}.swagger-ui .left-0{left:0}.swagger-ui .top-1{top:1rem}.swagger-ui .right-1{right:1rem}.swagger-ui .bottom-1{bottom:1rem}.swagger-ui .left-1{left:1rem}.swagger-ui .top-2{top:2rem}.swagger-ui .right-2{right:2rem}.swagger-ui .bottom-2{bottom:2rem}.swagger-ui .left-2{left:2rem}.swagger-ui .top--1{top:-1rem}.swagger-ui .right--1{right:-1rem}.swagger-ui .bottom--1{bottom:-1rem}.swagger-ui .left--1{left:-1rem}.swagger-ui .top--2{top:-2rem}.swagger-ui .right--2{right:-2rem}.swagger-ui .bottom--2{bottom:-2rem}.swagger-ui .left--2{left:-2rem}.swagger-ui .absolute--fill{bottom:0;left:0;right:0;top:0}@media screen and (min-width:30em){.swagger-ui .top-0-ns{top:0}.swagger-ui .left-0-ns{left:0}.swagger-ui .right-0-ns{right:0}.swagger-ui .bottom-0-ns{bottom:0}.swagger-ui .top-1-ns{top:1rem}.swagger-ui .left-1-ns{left:1rem}.swagger-ui .right-1-ns{right:1rem}.swagger-ui .bottom-1-ns{bottom:1rem}.swagger-ui .top-2-ns{top:2rem}.swagger-ui .left-2-ns{left:2rem}.swagger-ui .right-2-ns{right:2rem}.swagger-ui .bottom-2-ns{bottom:2rem}.swagger-ui .top--1-ns{top:-1rem}.swagger-ui .right--1-ns{right:-1rem}.swagger-ui .bottom--1-ns{bottom:-1rem}.swagger-ui .left--1-ns{left:-1rem}.swagger-ui .top--2-ns{top:-2rem}.swagger-ui .right--2-ns{right:-2rem}.swagger-ui .bottom--2-ns{bottom:-2rem}.swagger-ui .left--2-ns{left:-2rem}.swagger-ui .absolute--fill-ns{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .top-0-m{top:0}.swagger-ui .left-0-m{left:0}.swagger-ui .right-0-m{right:0}.swagger-ui .bottom-0-m{bottom:0}.swagger-ui .top-1-m{top:1rem}.swagger-ui .left-1-m{left:1rem}.swagger-ui .right-1-m{right:1rem}.swagger-ui .bottom-1-m{bottom:1rem}.swagger-ui .top-2-m{top:2rem}.swagger-ui .left-2-m{left:2rem}.swagger-ui .right-2-m{right:2rem}.swagger-ui .bottom-2-m{bottom:2rem}.swagger-ui .top--1-m{top:-1rem}.swagger-ui .right--1-m{right:-1rem}.swagger-ui .bottom--1-m{bottom:-1rem}.swagger-ui .left--1-m{left:-1rem}.swagger-ui .top--2-m{top:-2rem}.swagger-ui .right--2-m{right:-2rem}.swagger-ui .bottom--2-m{bottom:-2rem}.swagger-ui .left--2-m{left:-2rem}.swagger-ui .absolute--fill-m{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:60em){.swagger-ui .top-0-l{top:0}.swagger-ui .left-0-l{left:0}.swagger-ui .right-0-l{right:0}.swagger-ui .bottom-0-l{bottom:0}.swagger-ui .top-1-l{top:1rem}.swagger-ui .left-1-l{left:1rem}.swagger-ui .right-1-l{right:1rem}.swagger-ui .bottom-1-l{bottom:1rem}.swagger-ui .top-2-l{top:2rem}.swagger-ui .left-2-l{left:2rem}.swagger-ui .right-2-l{right:2rem}.swagger-ui .bottom-2-l{bottom:2rem}.swagger-ui .top--1-l{top:-1rem}.swagger-ui .right--1-l{right:-1rem}.swagger-ui .bottom--1-l{bottom:-1rem}.swagger-ui .left--1-l{left:-1rem}.swagger-ui .top--2-l{top:-2rem}.swagger-ui .right--2-l{right:-2rem}.swagger-ui .bottom--2-l{bottom:-2rem}.swagger-ui .left--2-l{left:-2rem}.swagger-ui .absolute--fill-l{bottom:0;left:0;right:0;top:0}}.swagger-ui .cf:after,.swagger-ui .cf:before{content:" ";display:table}.swagger-ui .cf:after{clear:both}.swagger-ui .cf{zoom:1}.swagger-ui .cl{clear:left}.swagger-ui .cr{clear:right}.swagger-ui .cb{clear:both}.swagger-ui .cn{clear:none}@media screen and (min-width:30em){.swagger-ui .cl-ns{clear:left}.swagger-ui .cr-ns{clear:right}.swagger-ui .cb-ns{clear:both}.swagger-ui .cn-ns{clear:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .cl-m{clear:left}.swagger-ui .cr-m{clear:right}.swagger-ui .cb-m{clear:both}.swagger-ui .cn-m{clear:none}}@media screen and (min-width:60em){.swagger-ui .cl-l{clear:left}.swagger-ui .cr-l{clear:right}.swagger-ui .cb-l{clear:both}.swagger-ui .cn-l{clear:none}}.swagger-ui .flex{display:flex}.swagger-ui .inline-flex{display:inline-flex}.swagger-ui .flex-auto{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none{flex:none}.swagger-ui .flex-column{flex-direction:column}.swagger-ui .flex-row{flex-direction:row}.swagger-ui .flex-wrap{flex-wrap:wrap}.swagger-ui .flex-nowrap{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse{flex-direction:column-reverse}.swagger-ui .flex-row-reverse{flex-direction:row-reverse}.swagger-ui .items-start{align-items:flex-start}.swagger-ui .items-end{align-items:flex-end}.swagger-ui .items-center{align-items:center}.swagger-ui .items-baseline{align-items:baseline}.swagger-ui .items-stretch{align-items:stretch}.swagger-ui .self-start{align-self:flex-start}.swagger-ui .self-end{align-self:flex-end}.swagger-ui .self-center{align-self:center}.swagger-ui .self-baseline{align-self:baseline}.swagger-ui .self-stretch{align-self:stretch}.swagger-ui .justify-start{justify-content:flex-start}.swagger-ui .justify-end{justify-content:flex-end}.swagger-ui .justify-center{justify-content:center}.swagger-ui .justify-between{justify-content:space-between}.swagger-ui .justify-around{justify-content:space-around}.swagger-ui .content-start{align-content:flex-start}.swagger-ui .content-end{align-content:flex-end}.swagger-ui .content-center{align-content:center}.swagger-ui .content-between{align-content:space-between}.swagger-ui .content-around{align-content:space-around}.swagger-ui .content-stretch{align-content:stretch}.swagger-ui .order-0{order:0}.swagger-ui .order-1{order:1}.swagger-ui .order-2{order:2}.swagger-ui .order-3{order:3}.swagger-ui .order-4{order:4}.swagger-ui .order-5{order:5}.swagger-ui .order-6{order:6}.swagger-ui .order-7{order:7}.swagger-ui .order-8{order:8}.swagger-ui .order-last{order:99999}.swagger-ui .flex-grow-0{flex-grow:0}.swagger-ui .flex-grow-1{flex-grow:1}.swagger-ui .flex-shrink-0{flex-shrink:0}.swagger-ui .flex-shrink-1{flex-shrink:1}@media screen and (min-width:30em){.swagger-ui .flex-ns{display:flex}.swagger-ui .inline-flex-ns{display:inline-flex}.swagger-ui .flex-auto-ns{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-ns{flex:none}.swagger-ui .flex-column-ns{flex-direction:column}.swagger-ui .flex-row-ns{flex-direction:row}.swagger-ui .flex-wrap-ns{flex-wrap:wrap}.swagger-ui .flex-nowrap-ns{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-ns{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-ns{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-ns{flex-direction:row-reverse}.swagger-ui .items-start-ns{align-items:flex-start}.swagger-ui .items-end-ns{align-items:flex-end}.swagger-ui .items-center-ns{align-items:center}.swagger-ui .items-baseline-ns{align-items:baseline}.swagger-ui .items-stretch-ns{align-items:stretch}.swagger-ui .self-start-ns{align-self:flex-start}.swagger-ui .self-end-ns{align-self:flex-end}.swagger-ui .self-center-ns{align-self:center}.swagger-ui .self-baseline-ns{align-self:baseline}.swagger-ui .self-stretch-ns{align-self:stretch}.swagger-ui .justify-start-ns{justify-content:flex-start}.swagger-ui .justify-end-ns{justify-content:flex-end}.swagger-ui .justify-center-ns{justify-content:center}.swagger-ui .justify-between-ns{justify-content:space-between}.swagger-ui .justify-around-ns{justify-content:space-around}.swagger-ui .content-start-ns{align-content:flex-start}.swagger-ui .content-end-ns{align-content:flex-end}.swagger-ui .content-center-ns{align-content:center}.swagger-ui .content-between-ns{align-content:space-between}.swagger-ui .content-around-ns{align-content:space-around}.swagger-ui .content-stretch-ns{align-content:stretch}.swagger-ui .order-0-ns{order:0}.swagger-ui .order-1-ns{order:1}.swagger-ui .order-2-ns{order:2}.swagger-ui .order-3-ns{order:3}.swagger-ui .order-4-ns{order:4}.swagger-ui .order-5-ns{order:5}.swagger-ui .order-6-ns{order:6}.swagger-ui .order-7-ns{order:7}.swagger-ui .order-8-ns{order:8}.swagger-ui .order-last-ns{order:99999}.swagger-ui .flex-grow-0-ns{flex-grow:0}.swagger-ui .flex-grow-1-ns{flex-grow:1}.swagger-ui .flex-shrink-0-ns{flex-shrink:0}.swagger-ui .flex-shrink-1-ns{flex-shrink:1}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .flex-m{display:flex}.swagger-ui .inline-flex-m{display:inline-flex}.swagger-ui .flex-auto-m{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-m{flex:none}.swagger-ui .flex-column-m{flex-direction:column}.swagger-ui .flex-row-m{flex-direction:row}.swagger-ui .flex-wrap-m{flex-wrap:wrap}.swagger-ui .flex-nowrap-m{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-m{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-m{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-m{flex-direction:row-reverse}.swagger-ui .items-start-m{align-items:flex-start}.swagger-ui .items-end-m{align-items:flex-end}.swagger-ui .items-center-m{align-items:center}.swagger-ui .items-baseline-m{align-items:baseline}.swagger-ui .items-stretch-m{align-items:stretch}.swagger-ui .self-start-m{align-self:flex-start}.swagger-ui .self-end-m{align-self:flex-end}.swagger-ui .self-center-m{align-self:center}.swagger-ui .self-baseline-m{align-self:baseline}.swagger-ui .self-stretch-m{align-self:stretch}.swagger-ui .justify-start-m{justify-content:flex-start}.swagger-ui .justify-end-m{justify-content:flex-end}.swagger-ui .justify-center-m{justify-content:center}.swagger-ui .justify-between-m{justify-content:space-between}.swagger-ui .justify-around-m{justify-content:space-around}.swagger-ui .content-start-m{align-content:flex-start}.swagger-ui .content-end-m{align-content:flex-end}.swagger-ui .content-center-m{align-content:center}.swagger-ui .content-between-m{align-content:space-between}.swagger-ui .content-around-m{align-content:space-around}.swagger-ui .content-stretch-m{align-content:stretch}.swagger-ui .order-0-m{order:0}.swagger-ui .order-1-m{order:1}.swagger-ui .order-2-m{order:2}.swagger-ui .order-3-m{order:3}.swagger-ui .order-4-m{order:4}.swagger-ui .order-5-m{order:5}.swagger-ui .order-6-m{order:6}.swagger-ui .order-7-m{order:7}.swagger-ui .order-8-m{order:8}.swagger-ui .order-last-m{order:99999}.swagger-ui .flex-grow-0-m{flex-grow:0}.swagger-ui .flex-grow-1-m{flex-grow:1}.swagger-ui .flex-shrink-0-m{flex-shrink:0}.swagger-ui .flex-shrink-1-m{flex-shrink:1}}@media screen and (min-width:60em){.swagger-ui .flex-l{display:flex}.swagger-ui .inline-flex-l{display:inline-flex}.swagger-ui .flex-auto-l{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-l{flex:none}.swagger-ui .flex-column-l{flex-direction:column}.swagger-ui .flex-row-l{flex-direction:row}.swagger-ui .flex-wrap-l{flex-wrap:wrap}.swagger-ui .flex-nowrap-l{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-l{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-l{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-l{flex-direction:row-reverse}.swagger-ui .items-start-l{align-items:flex-start}.swagger-ui .items-end-l{align-items:flex-end}.swagger-ui .items-center-l{align-items:center}.swagger-ui .items-baseline-l{align-items:baseline}.swagger-ui .items-stretch-l{align-items:stretch}.swagger-ui .self-start-l{align-self:flex-start}.swagger-ui .self-end-l{align-self:flex-end}.swagger-ui .self-center-l{align-self:center}.swagger-ui .self-baseline-l{align-self:baseline}.swagger-ui .self-stretch-l{align-self:stretch}.swagger-ui .justify-start-l{justify-content:flex-start}.swagger-ui .justify-end-l{justify-content:flex-end}.swagger-ui .justify-center-l{justify-content:center}.swagger-ui .justify-between-l{justify-content:space-between}.swagger-ui .justify-around-l{justify-content:space-around}.swagger-ui .content-start-l{align-content:flex-start}.swagger-ui .content-end-l{align-content:flex-end}.swagger-ui .content-center-l{align-content:center}.swagger-ui .content-between-l{align-content:space-between}.swagger-ui .content-around-l{align-content:space-around}.swagger-ui .content-stretch-l{align-content:stretch}.swagger-ui .order-0-l{order:0}.swagger-ui .order-1-l{order:1}.swagger-ui .order-2-l{order:2}.swagger-ui .order-3-l{order:3}.swagger-ui .order-4-l{order:4}.swagger-ui .order-5-l{order:5}.swagger-ui .order-6-l{order:6}.swagger-ui .order-7-l{order:7}.swagger-ui .order-8-l{order:8}.swagger-ui .order-last-l{order:99999}.swagger-ui .flex-grow-0-l{flex-grow:0}.swagger-ui .flex-grow-1-l{flex-grow:1}.swagger-ui .flex-shrink-0-l{flex-shrink:0}.swagger-ui .flex-shrink-1-l{flex-shrink:1}}.swagger-ui .dn{display:none}.swagger-ui .di{display:inline}.swagger-ui .db{display:block}.swagger-ui .dib{display:inline-block}.swagger-ui .dit{display:inline-table}.swagger-ui .dt{display:table}.swagger-ui .dtc{display:table-cell}.swagger-ui .dt-row{display:table-row}.swagger-ui .dt-row-group{display:table-row-group}.swagger-ui .dt-column{display:table-column}.swagger-ui .dt-column-group{display:table-column-group}.swagger-ui .dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.swagger-ui .dn-ns{display:none}.swagger-ui .di-ns{display:inline}.swagger-ui .db-ns{display:block}.swagger-ui .dib-ns{display:inline-block}.swagger-ui .dit-ns{display:inline-table}.swagger-ui .dt-ns{display:table}.swagger-ui .dtc-ns{display:table-cell}.swagger-ui .dt-row-ns{display:table-row}.swagger-ui .dt-row-group-ns{display:table-row-group}.swagger-ui .dt-column-ns{display:table-column}.swagger-ui .dt-column-group-ns{display:table-column-group}.swagger-ui .dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .dn-m{display:none}.swagger-ui .di-m{display:inline}.swagger-ui .db-m{display:block}.swagger-ui .dib-m{display:inline-block}.swagger-ui .dit-m{display:inline-table}.swagger-ui .dt-m{display:table}.swagger-ui .dtc-m{display:table-cell}.swagger-ui .dt-row-m{display:table-row}.swagger-ui .dt-row-group-m{display:table-row-group}.swagger-ui .dt-column-m{display:table-column}.swagger-ui .dt-column-group-m{display:table-column-group}.swagger-ui .dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.swagger-ui .dn-l{display:none}.swagger-ui .di-l{display:inline}.swagger-ui .db-l{display:block}.swagger-ui .dib-l{display:inline-block}.swagger-ui .dit-l{display:inline-table}.swagger-ui .dt-l{display:table}.swagger-ui .dtc-l{display:table-cell}.swagger-ui .dt-row-l{display:table-row}.swagger-ui .dt-row-group-l{display:table-row-group}.swagger-ui .dt-column-l{display:table-column}.swagger-ui .dt-column-group-l{display:table-column-group}.swagger-ui .dt--fixed-l{table-layout:fixed;width:100%}}.swagger-ui .fl{_display:inline;float:left}.swagger-ui .fr{_display:inline;float:right}.swagger-ui .fn{float:none}@media screen and (min-width:30em){.swagger-ui .fl-ns{_display:inline;float:left}.swagger-ui .fr-ns{_display:inline;float:right}.swagger-ui .fn-ns{float:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .fl-m{_display:inline;float:left}.swagger-ui .fr-m{_display:inline;float:right}.swagger-ui .fn-m{float:none}}@media screen and (min-width:60em){.swagger-ui .fl-l{_display:inline;float:left}.swagger-ui .fr-l{_display:inline;float:right}.swagger-ui .fn-l{float:none}}.swagger-ui .sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.swagger-ui .serif{font-family:georgia,serif}.swagger-ui .system-sans-serif{font-family:sans-serif}.swagger-ui .system-serif{font-family:serif}.swagger-ui .code,.swagger-ui code{font-family:Consolas,monaco,monospace}.swagger-ui .courier{font-family:Courier Next,courier,monospace}.swagger-ui .helvetica{font-family:helvetica neue,helvetica,sans-serif}.swagger-ui .avenir{font-family:avenir next,avenir,sans-serif}.swagger-ui .athelas{font-family:athelas,georgia,serif}.swagger-ui .georgia{font-family:georgia,serif}.swagger-ui .times{font-family:times,serif}.swagger-ui .bodoni{font-family:Bodoni MT,serif}.swagger-ui .calisto{font-family:Calisto MT,serif}.swagger-ui .garamond{font-family:garamond,serif}.swagger-ui .baskerville{font-family:baskerville,serif}.swagger-ui .i{font-style:italic}.swagger-ui .fs-normal{font-style:normal}@media screen and (min-width:30em){.swagger-ui .i-ns{font-style:italic}.swagger-ui .fs-normal-ns{font-style:normal}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .i-m{font-style:italic}.swagger-ui .fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.swagger-ui .i-l{font-style:italic}.swagger-ui .fs-normal-l{font-style:normal}}.swagger-ui .normal{font-weight:400}.swagger-ui .b{font-weight:700}.swagger-ui .fw1{font-weight:100}.swagger-ui .fw2{font-weight:200}.swagger-ui .fw3{font-weight:300}.swagger-ui .fw4{font-weight:400}.swagger-ui .fw5{font-weight:500}.swagger-ui .fw6{font-weight:600}.swagger-ui .fw7{font-weight:700}.swagger-ui .fw8{font-weight:800}.swagger-ui .fw9{font-weight:900}@media screen and (min-width:30em){.swagger-ui .normal-ns{font-weight:400}.swagger-ui .b-ns{font-weight:700}.swagger-ui .fw1-ns{font-weight:100}.swagger-ui .fw2-ns{font-weight:200}.swagger-ui .fw3-ns{font-weight:300}.swagger-ui .fw4-ns{font-weight:400}.swagger-ui .fw5-ns{font-weight:500}.swagger-ui .fw6-ns{font-weight:600}.swagger-ui .fw7-ns{font-weight:700}.swagger-ui .fw8-ns{font-weight:800}.swagger-ui .fw9-ns{font-weight:900}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .normal-m{font-weight:400}.swagger-ui .b-m{font-weight:700}.swagger-ui .fw1-m{font-weight:100}.swagger-ui .fw2-m{font-weight:200}.swagger-ui .fw3-m{font-weight:300}.swagger-ui .fw4-m{font-weight:400}.swagger-ui .fw5-m{font-weight:500}.swagger-ui .fw6-m{font-weight:600}.swagger-ui .fw7-m{font-weight:700}.swagger-ui .fw8-m{font-weight:800}.swagger-ui .fw9-m{font-weight:900}}@media screen and (min-width:60em){.swagger-ui .normal-l{font-weight:400}.swagger-ui .b-l{font-weight:700}.swagger-ui .fw1-l{font-weight:100}.swagger-ui .fw2-l{font-weight:200}.swagger-ui .fw3-l{font-weight:300}.swagger-ui .fw4-l{font-weight:400}.swagger-ui .fw5-l{font-weight:500}.swagger-ui .fw6-l{font-weight:600}.swagger-ui .fw7-l{font-weight:700}.swagger-ui .fw8-l{font-weight:800}.swagger-ui .fw9-l{font-weight:900}}.swagger-ui .input-reset{-webkit-appearance:none;-moz-appearance:none}.swagger-ui .button-reset::-moz-focus-inner,.swagger-ui .input-reset::-moz-focus-inner{border:0;padding:0}.swagger-ui .h1{height:1rem}.swagger-ui .h2{height:2rem}.swagger-ui .h3{height:4rem}.swagger-ui .h4{height:8rem}.swagger-ui .h5{height:16rem}.swagger-ui .h-25{height:25%}.swagger-ui .h-50{height:50%}.swagger-ui .h-75{height:75%}.swagger-ui .h-100{height:100%}.swagger-ui .min-h-100{min-height:100%}.swagger-ui .vh-25{height:25vh}.swagger-ui .vh-50{height:50vh}.swagger-ui .vh-75{height:75vh}.swagger-ui .vh-100{height:100vh}.swagger-ui .min-vh-100{min-height:100vh}.swagger-ui .h-auto{height:auto}.swagger-ui .h-inherit{height:inherit}@media screen and (min-width:30em){.swagger-ui .h1-ns{height:1rem}.swagger-ui .h2-ns{height:2rem}.swagger-ui .h3-ns{height:4rem}.swagger-ui .h4-ns{height:8rem}.swagger-ui .h5-ns{height:16rem}.swagger-ui .h-25-ns{height:25%}.swagger-ui .h-50-ns{height:50%}.swagger-ui .h-75-ns{height:75%}.swagger-ui .h-100-ns{height:100%}.swagger-ui .min-h-100-ns{min-height:100%}.swagger-ui .vh-25-ns{height:25vh}.swagger-ui .vh-50-ns{height:50vh}.swagger-ui .vh-75-ns{height:75vh}.swagger-ui .vh-100-ns{height:100vh}.swagger-ui .min-vh-100-ns{min-height:100vh}.swagger-ui .h-auto-ns{height:auto}.swagger-ui .h-inherit-ns{height:inherit}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .h1-m{height:1rem}.swagger-ui .h2-m{height:2rem}.swagger-ui .h3-m{height:4rem}.swagger-ui .h4-m{height:8rem}.swagger-ui .h5-m{height:16rem}.swagger-ui .h-25-m{height:25%}.swagger-ui .h-50-m{height:50%}.swagger-ui .h-75-m{height:75%}.swagger-ui .h-100-m{height:100%}.swagger-ui .min-h-100-m{min-height:100%}.swagger-ui .vh-25-m{height:25vh}.swagger-ui .vh-50-m{height:50vh}.swagger-ui .vh-75-m{height:75vh}.swagger-ui .vh-100-m{height:100vh}.swagger-ui .min-vh-100-m{min-height:100vh}.swagger-ui .h-auto-m{height:auto}.swagger-ui .h-inherit-m{height:inherit}}@media screen and (min-width:60em){.swagger-ui .h1-l{height:1rem}.swagger-ui .h2-l{height:2rem}.swagger-ui .h3-l{height:4rem}.swagger-ui .h4-l{height:8rem}.swagger-ui .h5-l{height:16rem}.swagger-ui .h-25-l{height:25%}.swagger-ui .h-50-l{height:50%}.swagger-ui .h-75-l{height:75%}.swagger-ui .h-100-l{height:100%}.swagger-ui .min-h-100-l{min-height:100%}.swagger-ui .vh-25-l{height:25vh}.swagger-ui .vh-50-l{height:50vh}.swagger-ui .vh-75-l{height:75vh}.swagger-ui .vh-100-l{height:100vh}.swagger-ui .min-vh-100-l{min-height:100vh}.swagger-ui .h-auto-l{height:auto}.swagger-ui .h-inherit-l{height:inherit}}.swagger-ui .tracked{letter-spacing:.1em}.swagger-ui .tracked-tight{letter-spacing:-.05em}.swagger-ui .tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.swagger-ui .tracked-ns{letter-spacing:.1em}.swagger-ui .tracked-tight-ns{letter-spacing:-.05em}.swagger-ui .tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .tracked-m{letter-spacing:.1em}.swagger-ui .tracked-tight-m{letter-spacing:-.05em}.swagger-ui .tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.swagger-ui .tracked-l{letter-spacing:.1em}.swagger-ui .tracked-tight-l{letter-spacing:-.05em}.swagger-ui .tracked-mega-l{letter-spacing:.25em}}.swagger-ui .lh-solid{line-height:1}.swagger-ui .lh-title{line-height:1.25}.swagger-ui .lh-copy{line-height:1.5}@media screen and (min-width:30em){.swagger-ui .lh-solid-ns{line-height:1}.swagger-ui .lh-title-ns{line-height:1.25}.swagger-ui .lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .lh-solid-m{line-height:1}.swagger-ui .lh-title-m{line-height:1.25}.swagger-ui .lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.swagger-ui .lh-solid-l{line-height:1}.swagger-ui .lh-title-l{line-height:1.25}.swagger-ui .lh-copy-l{line-height:1.5}}.swagger-ui .link{-webkit-text-decoration:none;text-decoration:none}.swagger-ui .link,.swagger-ui .link:active,.swagger-ui .link:focus,.swagger-ui .link:hover,.swagger-ui .link:link,.swagger-ui .link:visited{transition:color .15s ease-in}.swagger-ui .link:focus{outline:1px dotted currentColor}.swagger-ui .list{list-style-type:none}.swagger-ui .mw-100{max-width:100%}.swagger-ui .mw1{max-width:1rem}.swagger-ui .mw2{max-width:2rem}.swagger-ui .mw3{max-width:4rem}.swagger-ui .mw4{max-width:8rem}.swagger-ui .mw5{max-width:16rem}.swagger-ui .mw6{max-width:32rem}.swagger-ui .mw7{max-width:48rem}.swagger-ui .mw8{max-width:64rem}.swagger-ui .mw9{max-width:96rem}.swagger-ui .mw-none{max-width:none}@media screen and (min-width:30em){.swagger-ui .mw-100-ns{max-width:100%}.swagger-ui .mw1-ns{max-width:1rem}.swagger-ui .mw2-ns{max-width:2rem}.swagger-ui .mw3-ns{max-width:4rem}.swagger-ui .mw4-ns{max-width:8rem}.swagger-ui .mw5-ns{max-width:16rem}.swagger-ui .mw6-ns{max-width:32rem}.swagger-ui .mw7-ns{max-width:48rem}.swagger-ui .mw8-ns{max-width:64rem}.swagger-ui .mw9-ns{max-width:96rem}.swagger-ui .mw-none-ns{max-width:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .mw-100-m{max-width:100%}.swagger-ui .mw1-m{max-width:1rem}.swagger-ui .mw2-m{max-width:2rem}.swagger-ui .mw3-m{max-width:4rem}.swagger-ui .mw4-m{max-width:8rem}.swagger-ui .mw5-m{max-width:16rem}.swagger-ui .mw6-m{max-width:32rem}.swagger-ui .mw7-m{max-width:48rem}.swagger-ui .mw8-m{max-width:64rem}.swagger-ui .mw9-m{max-width:96rem}.swagger-ui .mw-none-m{max-width:none}}@media screen and (min-width:60em){.swagger-ui .mw-100-l{max-width:100%}.swagger-ui .mw1-l{max-width:1rem}.swagger-ui .mw2-l{max-width:2rem}.swagger-ui .mw3-l{max-width:4rem}.swagger-ui .mw4-l{max-width:8rem}.swagger-ui .mw5-l{max-width:16rem}.swagger-ui .mw6-l{max-width:32rem}.swagger-ui .mw7-l{max-width:48rem}.swagger-ui .mw8-l{max-width:64rem}.swagger-ui .mw9-l{max-width:96rem}.swagger-ui .mw-none-l{max-width:none}}.swagger-ui .w1{width:1rem}.swagger-ui .w2{width:2rem}.swagger-ui .w3{width:4rem}.swagger-ui .w4{width:8rem}.swagger-ui .w5{width:16rem}.swagger-ui .w-10{width:10%}.swagger-ui .w-20{width:20%}.swagger-ui .w-25{width:25%}.swagger-ui .w-30{width:30%}.swagger-ui .w-33{width:33%}.swagger-ui .w-34{width:34%}.swagger-ui .w-40{width:40%}.swagger-ui .w-50{width:50%}.swagger-ui .w-60{width:60%}.swagger-ui .w-70{width:70%}.swagger-ui .w-75{width:75%}.swagger-ui .w-80{width:80%}.swagger-ui .w-90{width:90%}.swagger-ui .w-100{width:100%}.swagger-ui .w-third{width:33.3333333333%}.swagger-ui .w-two-thirds{width:66.6666666667%}.swagger-ui .w-auto{width:auto}@media screen and (min-width:30em){.swagger-ui .w1-ns{width:1rem}.swagger-ui .w2-ns{width:2rem}.swagger-ui .w3-ns{width:4rem}.swagger-ui .w4-ns{width:8rem}.swagger-ui .w5-ns{width:16rem}.swagger-ui .w-10-ns{width:10%}.swagger-ui .w-20-ns{width:20%}.swagger-ui .w-25-ns{width:25%}.swagger-ui .w-30-ns{width:30%}.swagger-ui .w-33-ns{width:33%}.swagger-ui .w-34-ns{width:34%}.swagger-ui .w-40-ns{width:40%}.swagger-ui .w-50-ns{width:50%}.swagger-ui .w-60-ns{width:60%}.swagger-ui .w-70-ns{width:70%}.swagger-ui .w-75-ns{width:75%}.swagger-ui .w-80-ns{width:80%}.swagger-ui .w-90-ns{width:90%}.swagger-ui .w-100-ns{width:100%}.swagger-ui .w-third-ns{width:33.3333333333%}.swagger-ui .w-two-thirds-ns{width:66.6666666667%}.swagger-ui .w-auto-ns{width:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .w1-m{width:1rem}.swagger-ui .w2-m{width:2rem}.swagger-ui .w3-m{width:4rem}.swagger-ui .w4-m{width:8rem}.swagger-ui .w5-m{width:16rem}.swagger-ui .w-10-m{width:10%}.swagger-ui .w-20-m{width:20%}.swagger-ui .w-25-m{width:25%}.swagger-ui .w-30-m{width:30%}.swagger-ui .w-33-m{width:33%}.swagger-ui .w-34-m{width:34%}.swagger-ui .w-40-m{width:40%}.swagger-ui .w-50-m{width:50%}.swagger-ui .w-60-m{width:60%}.swagger-ui .w-70-m{width:70%}.swagger-ui .w-75-m{width:75%}.swagger-ui .w-80-m{width:80%}.swagger-ui .w-90-m{width:90%}.swagger-ui .w-100-m{width:100%}.swagger-ui .w-third-m{width:33.3333333333%}.swagger-ui .w-two-thirds-m{width:66.6666666667%}.swagger-ui .w-auto-m{width:auto}}@media screen and (min-width:60em){.swagger-ui .w1-l{width:1rem}.swagger-ui .w2-l{width:2rem}.swagger-ui .w3-l{width:4rem}.swagger-ui .w4-l{width:8rem}.swagger-ui .w5-l{width:16rem}.swagger-ui .w-10-l{width:10%}.swagger-ui .w-20-l{width:20%}.swagger-ui .w-25-l{width:25%}.swagger-ui .w-30-l{width:30%}.swagger-ui .w-33-l{width:33%}.swagger-ui .w-34-l{width:34%}.swagger-ui .w-40-l{width:40%}.swagger-ui .w-50-l{width:50%}.swagger-ui .w-60-l{width:60%}.swagger-ui .w-70-l{width:70%}.swagger-ui .w-75-l{width:75%}.swagger-ui .w-80-l{width:80%}.swagger-ui .w-90-l{width:90%}.swagger-ui .w-100-l{width:100%}.swagger-ui .w-third-l{width:33.3333333333%}.swagger-ui .w-two-thirds-l{width:66.6666666667%}.swagger-ui .w-auto-l{width:auto}}.swagger-ui .overflow-visible{overflow:visible}.swagger-ui .overflow-hidden{overflow:hidden}.swagger-ui .overflow-scroll{overflow:scroll}.swagger-ui .overflow-auto{overflow:auto}.swagger-ui .overflow-x-visible{overflow-x:visible}.swagger-ui .overflow-x-hidden{overflow-x:hidden}.swagger-ui .overflow-x-scroll{overflow-x:scroll}.swagger-ui .overflow-x-auto{overflow-x:auto}.swagger-ui .overflow-y-visible{overflow-y:visible}.swagger-ui .overflow-y-hidden{overflow-y:hidden}.swagger-ui .overflow-y-scroll{overflow-y:scroll}.swagger-ui .overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.swagger-ui .overflow-visible-ns{overflow:visible}.swagger-ui .overflow-hidden-ns{overflow:hidden}.swagger-ui .overflow-scroll-ns{overflow:scroll}.swagger-ui .overflow-auto-ns{overflow:auto}.swagger-ui .overflow-x-visible-ns{overflow-x:visible}.swagger-ui .overflow-x-hidden-ns{overflow-x:hidden}.swagger-ui .overflow-x-scroll-ns{overflow-x:scroll}.swagger-ui .overflow-x-auto-ns{overflow-x:auto}.swagger-ui .overflow-y-visible-ns{overflow-y:visible}.swagger-ui .overflow-y-hidden-ns{overflow-y:hidden}.swagger-ui .overflow-y-scroll-ns{overflow-y:scroll}.swagger-ui .overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .overflow-visible-m{overflow:visible}.swagger-ui .overflow-hidden-m{overflow:hidden}.swagger-ui .overflow-scroll-m{overflow:scroll}.swagger-ui .overflow-auto-m{overflow:auto}.swagger-ui .overflow-x-visible-m{overflow-x:visible}.swagger-ui .overflow-x-hidden-m{overflow-x:hidden}.swagger-ui .overflow-x-scroll-m{overflow-x:scroll}.swagger-ui .overflow-x-auto-m{overflow-x:auto}.swagger-ui .overflow-y-visible-m{overflow-y:visible}.swagger-ui .overflow-y-hidden-m{overflow-y:hidden}.swagger-ui .overflow-y-scroll-m{overflow-y:scroll}.swagger-ui .overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.swagger-ui .overflow-visible-l{overflow:visible}.swagger-ui .overflow-hidden-l{overflow:hidden}.swagger-ui .overflow-scroll-l{overflow:scroll}.swagger-ui .overflow-auto-l{overflow:auto}.swagger-ui .overflow-x-visible-l{overflow-x:visible}.swagger-ui .overflow-x-hidden-l{overflow-x:hidden}.swagger-ui .overflow-x-scroll-l{overflow-x:scroll}.swagger-ui .overflow-x-auto-l{overflow-x:auto}.swagger-ui .overflow-y-visible-l{overflow-y:visible}.swagger-ui .overflow-y-hidden-l{overflow-y:hidden}.swagger-ui .overflow-y-scroll-l{overflow-y:scroll}.swagger-ui .overflow-y-auto-l{overflow-y:auto}}.swagger-ui .static{position:static}.swagger-ui .relative{position:relative}.swagger-ui .absolute{position:absolute}.swagger-ui .fixed{position:fixed}@media screen and (min-width:30em){.swagger-ui .static-ns{position:static}.swagger-ui .relative-ns{position:relative}.swagger-ui .absolute-ns{position:absolute}.swagger-ui .fixed-ns{position:fixed}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .static-m{position:static}.swagger-ui .relative-m{position:relative}.swagger-ui .absolute-m{position:absolute}.swagger-ui .fixed-m{position:fixed}}@media screen and (min-width:60em){.swagger-ui .static-l{position:static}.swagger-ui .relative-l{position:relative}.swagger-ui .absolute-l{position:absolute}.swagger-ui .fixed-l{position:fixed}}.swagger-ui .o-100{opacity:1}.swagger-ui .o-90{opacity:.9}.swagger-ui .o-80{opacity:.8}.swagger-ui .o-70{opacity:.7}.swagger-ui .o-60{opacity:.6}.swagger-ui .o-50{opacity:.5}.swagger-ui .o-40{opacity:.4}.swagger-ui .o-30{opacity:.3}.swagger-ui .o-20{opacity:.2}.swagger-ui .o-10{opacity:.1}.swagger-ui .o-05{opacity:.05}.swagger-ui .o-025{opacity:.025}.swagger-ui .o-0{opacity:0}.swagger-ui .rotate-45{transform:rotate(45deg)}.swagger-ui .rotate-90{transform:rotate(90deg)}.swagger-ui .rotate-135{transform:rotate(135deg)}.swagger-ui .rotate-180{transform:rotate(180deg)}.swagger-ui .rotate-225{transform:rotate(225deg)}.swagger-ui .rotate-270{transform:rotate(270deg)}.swagger-ui .rotate-315{transform:rotate(315deg)}@media screen and (min-width:30em){.swagger-ui .rotate-45-ns{transform:rotate(45deg)}.swagger-ui .rotate-90-ns{transform:rotate(90deg)}.swagger-ui .rotate-135-ns{transform:rotate(135deg)}.swagger-ui .rotate-180-ns{transform:rotate(180deg)}.swagger-ui .rotate-225-ns{transform:rotate(225deg)}.swagger-ui .rotate-270-ns{transform:rotate(270deg)}.swagger-ui .rotate-315-ns{transform:rotate(315deg)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .rotate-45-m{transform:rotate(45deg)}.swagger-ui .rotate-90-m{transform:rotate(90deg)}.swagger-ui .rotate-135-m{transform:rotate(135deg)}.swagger-ui .rotate-180-m{transform:rotate(180deg)}.swagger-ui .rotate-225-m{transform:rotate(225deg)}.swagger-ui .rotate-270-m{transform:rotate(270deg)}.swagger-ui .rotate-315-m{transform:rotate(315deg)}}@media screen and (min-width:60em){.swagger-ui .rotate-45-l{transform:rotate(45deg)}.swagger-ui .rotate-90-l{transform:rotate(90deg)}.swagger-ui .rotate-135-l{transform:rotate(135deg)}.swagger-ui .rotate-180-l{transform:rotate(180deg)}.swagger-ui .rotate-225-l{transform:rotate(225deg)}.swagger-ui .rotate-270-l{transform:rotate(270deg)}.swagger-ui .rotate-315-l{transform:rotate(315deg)}}.swagger-ui .black-90{color:rgba(0,0,0,.9)}.swagger-ui .black-80{color:rgba(0,0,0,.8)}.swagger-ui .black-70{color:rgba(0,0,0,.7)}.swagger-ui .black-60{color:rgba(0,0,0,.6)}.swagger-ui .black-50{color:rgba(0,0,0,.5)}.swagger-ui .black-40{color:rgba(0,0,0,.4)}.swagger-ui .black-30{color:rgba(0,0,0,.3)}.swagger-ui .black-20{color:rgba(0,0,0,.2)}.swagger-ui .black-10{color:rgba(0,0,0,.1)}.swagger-ui .black-05{color:rgba(0,0,0,.05)}.swagger-ui .white-90{color:hsla(0,0%,100%,.9)}.swagger-ui .white-80{color:hsla(0,0%,100%,.8)}.swagger-ui .white-70{color:hsla(0,0%,100%,.7)}.swagger-ui .white-60{color:hsla(0,0%,100%,.6)}.swagger-ui .white-50{color:hsla(0,0%,100%,.5)}.swagger-ui .white-40{color:hsla(0,0%,100%,.4)}.swagger-ui .white-30{color:hsla(0,0%,100%,.3)}.swagger-ui .white-20{color:hsla(0,0%,100%,.2)}.swagger-ui .white-10{color:hsla(0,0%,100%,.1)}.swagger-ui .black{color:#000}.swagger-ui .near-black{color:#111}.swagger-ui .dark-gray{color:#333}.swagger-ui .mid-gray{color:#555}.swagger-ui .gray{color:#777}.swagger-ui .silver{color:#999}.swagger-ui .light-silver{color:#aaa}.swagger-ui .moon-gray{color:#ccc}.swagger-ui .light-gray{color:#eee}.swagger-ui .near-white{color:#f4f4f4}.swagger-ui .white{color:#fff}.swagger-ui .dark-red{color:#e7040f}.swagger-ui .red{color:#ff4136}.swagger-ui .light-red{color:#ff725c}.swagger-ui .orange{color:#ff6300}.swagger-ui .gold{color:#ffb700}.swagger-ui .yellow{color:gold}.swagger-ui .light-yellow{color:#fbf1a9}.swagger-ui .purple{color:#5e2ca5}.swagger-ui .light-purple{color:#a463f2}.swagger-ui .dark-pink{color:#d5008f}.swagger-ui .hot-pink{color:#ff41b4}.swagger-ui .pink{color:#ff80cc}.swagger-ui .light-pink{color:#ffa3d7}.swagger-ui .dark-green{color:#137752}.swagger-ui .green{color:#19a974}.swagger-ui .light-green{color:#9eebcf}.swagger-ui .navy{color:#001b44}.swagger-ui .dark-blue{color:#00449e}.swagger-ui .blue{color:#357edd}.swagger-ui .light-blue{color:#96ccff}.swagger-ui .lightest-blue{color:#cdecff}.swagger-ui .washed-blue{color:#f6fffe}.swagger-ui .washed-green{color:#e8fdf5}.swagger-ui .washed-yellow{color:#fffceb}.swagger-ui .washed-red{color:#ffdfdf}.swagger-ui .color-inherit{color:inherit}.swagger-ui .bg-black-90{background-color:rgba(0,0,0,.9)}.swagger-ui .bg-black-80{background-color:rgba(0,0,0,.8)}.swagger-ui .bg-black-70{background-color:rgba(0,0,0,.7)}.swagger-ui .bg-black-60{background-color:rgba(0,0,0,.6)}.swagger-ui .bg-black-50{background-color:rgba(0,0,0,.5)}.swagger-ui .bg-black-40{background-color:rgba(0,0,0,.4)}.swagger-ui .bg-black-30{background-color:rgba(0,0,0,.3)}.swagger-ui .bg-black-20{background-color:rgba(0,0,0,.2)}.swagger-ui .bg-black-10{background-color:rgba(0,0,0,.1)}.swagger-ui .bg-black-05{background-color:rgba(0,0,0,.05)}.swagger-ui .bg-white-90{background-color:hsla(0,0%,100%,.9)}.swagger-ui .bg-white-80{background-color:hsla(0,0%,100%,.8)}.swagger-ui .bg-white-70{background-color:hsla(0,0%,100%,.7)}.swagger-ui .bg-white-60{background-color:hsla(0,0%,100%,.6)}.swagger-ui .bg-white-50{background-color:hsla(0,0%,100%,.5)}.swagger-ui .bg-white-40{background-color:hsla(0,0%,100%,.4)}.swagger-ui .bg-white-30{background-color:hsla(0,0%,100%,.3)}.swagger-ui .bg-white-20{background-color:hsla(0,0%,100%,.2)}.swagger-ui .bg-white-10{background-color:hsla(0,0%,100%,.1)}.swagger-ui .bg-black{background-color:#000}.swagger-ui .bg-near-black{background-color:#111}.swagger-ui .bg-dark-gray{background-color:#333}.swagger-ui .bg-mid-gray{background-color:#555}.swagger-ui .bg-gray{background-color:#777}.swagger-ui .bg-silver{background-color:#999}.swagger-ui .bg-light-silver{background-color:#aaa}.swagger-ui .bg-moon-gray{background-color:#ccc}.swagger-ui .bg-light-gray{background-color:#eee}.swagger-ui .bg-near-white{background-color:#f4f4f4}.swagger-ui .bg-white{background-color:#fff}.swagger-ui .bg-transparent{background-color:transparent}.swagger-ui .bg-dark-red{background-color:#e7040f}.swagger-ui .bg-red{background-color:#ff4136}.swagger-ui .bg-light-red{background-color:#ff725c}.swagger-ui .bg-orange{background-color:#ff6300}.swagger-ui .bg-gold{background-color:#ffb700}.swagger-ui .bg-yellow{background-color:gold}.swagger-ui .bg-light-yellow{background-color:#fbf1a9}.swagger-ui .bg-purple{background-color:#5e2ca5}.swagger-ui .bg-light-purple{background-color:#a463f2}.swagger-ui .bg-dark-pink{background-color:#d5008f}.swagger-ui .bg-hot-pink{background-color:#ff41b4}.swagger-ui .bg-pink{background-color:#ff80cc}.swagger-ui .bg-light-pink{background-color:#ffa3d7}.swagger-ui .bg-dark-green{background-color:#137752}.swagger-ui .bg-green{background-color:#19a974}.swagger-ui .bg-light-green{background-color:#9eebcf}.swagger-ui .bg-navy{background-color:#001b44}.swagger-ui .bg-dark-blue{background-color:#00449e}.swagger-ui .bg-blue{background-color:#357edd}.swagger-ui .bg-light-blue{background-color:#96ccff}.swagger-ui .bg-lightest-blue{background-color:#cdecff}.swagger-ui .bg-washed-blue{background-color:#f6fffe}.swagger-ui .bg-washed-green{background-color:#e8fdf5}.swagger-ui .bg-washed-yellow{background-color:#fffceb}.swagger-ui .bg-washed-red{background-color:#ffdfdf}.swagger-ui .bg-inherit{background-color:inherit}.swagger-ui .hover-black:focus,.swagger-ui .hover-black:hover{color:#000}.swagger-ui .hover-near-black:focus,.swagger-ui .hover-near-black:hover{color:#111}.swagger-ui .hover-dark-gray:focus,.swagger-ui .hover-dark-gray:hover{color:#333}.swagger-ui .hover-mid-gray:focus,.swagger-ui .hover-mid-gray:hover{color:#555}.swagger-ui .hover-gray:focus,.swagger-ui .hover-gray:hover{color:#777}.swagger-ui .hover-silver:focus,.swagger-ui .hover-silver:hover{color:#999}.swagger-ui .hover-light-silver:focus,.swagger-ui .hover-light-silver:hover{color:#aaa}.swagger-ui .hover-moon-gray:focus,.swagger-ui .hover-moon-gray:hover{color:#ccc}.swagger-ui .hover-light-gray:focus,.swagger-ui .hover-light-gray:hover{color:#eee}.swagger-ui .hover-near-white:focus,.swagger-ui .hover-near-white:hover{color:#f4f4f4}.swagger-ui .hover-white:focus,.swagger-ui .hover-white:hover{color:#fff}.swagger-ui .hover-black-90:focus,.swagger-ui .hover-black-90:hover{color:rgba(0,0,0,.9)}.swagger-ui .hover-black-80:focus,.swagger-ui .hover-black-80:hover{color:rgba(0,0,0,.8)}.swagger-ui .hover-black-70:focus,.swagger-ui .hover-black-70:hover{color:rgba(0,0,0,.7)}.swagger-ui .hover-black-60:focus,.swagger-ui .hover-black-60:hover{color:rgba(0,0,0,.6)}.swagger-ui .hover-black-50:focus,.swagger-ui .hover-black-50:hover{color:rgba(0,0,0,.5)}.swagger-ui .hover-black-40:focus,.swagger-ui .hover-black-40:hover{color:rgba(0,0,0,.4)}.swagger-ui .hover-black-30:focus,.swagger-ui .hover-black-30:hover{color:rgba(0,0,0,.3)}.swagger-ui .hover-black-20:focus,.swagger-ui .hover-black-20:hover{color:rgba(0,0,0,.2)}.swagger-ui .hover-black-10:focus,.swagger-ui .hover-black-10:hover{color:rgba(0,0,0,.1)}.swagger-ui .hover-white-90:focus,.swagger-ui .hover-white-90:hover{color:hsla(0,0%,100%,.9)}.swagger-ui .hover-white-80:focus,.swagger-ui .hover-white-80:hover{color:hsla(0,0%,100%,.8)}.swagger-ui .hover-white-70:focus,.swagger-ui .hover-white-70:hover{color:hsla(0,0%,100%,.7)}.swagger-ui .hover-white-60:focus,.swagger-ui .hover-white-60:hover{color:hsla(0,0%,100%,.6)}.swagger-ui .hover-white-50:focus,.swagger-ui .hover-white-50:hover{color:hsla(0,0%,100%,.5)}.swagger-ui .hover-white-40:focus,.swagger-ui .hover-white-40:hover{color:hsla(0,0%,100%,.4)}.swagger-ui .hover-white-30:focus,.swagger-ui .hover-white-30:hover{color:hsla(0,0%,100%,.3)}.swagger-ui .hover-white-20:focus,.swagger-ui .hover-white-20:hover{color:hsla(0,0%,100%,.2)}.swagger-ui .hover-white-10:focus,.swagger-ui .hover-white-10:hover{color:hsla(0,0%,100%,.1)}.swagger-ui .hover-inherit:focus,.swagger-ui .hover-inherit:hover{color:inherit}.swagger-ui .hover-bg-black:focus,.swagger-ui .hover-bg-black:hover{background-color:#000}.swagger-ui .hover-bg-near-black:focus,.swagger-ui .hover-bg-near-black:hover{background-color:#111}.swagger-ui .hover-bg-dark-gray:focus,.swagger-ui .hover-bg-dark-gray:hover{background-color:#333}.swagger-ui .hover-bg-mid-gray:focus,.swagger-ui .hover-bg-mid-gray:hover{background-color:#555}.swagger-ui .hover-bg-gray:focus,.swagger-ui .hover-bg-gray:hover{background-color:#777}.swagger-ui .hover-bg-silver:focus,.swagger-ui .hover-bg-silver:hover{background-color:#999}.swagger-ui .hover-bg-light-silver:focus,.swagger-ui .hover-bg-light-silver:hover{background-color:#aaa}.swagger-ui .hover-bg-moon-gray:focus,.swagger-ui .hover-bg-moon-gray:hover{background-color:#ccc}.swagger-ui .hover-bg-light-gray:focus,.swagger-ui .hover-bg-light-gray:hover{background-color:#eee}.swagger-ui .hover-bg-near-white:focus,.swagger-ui .hover-bg-near-white:hover{background-color:#f4f4f4}.swagger-ui .hover-bg-white:focus,.swagger-ui .hover-bg-white:hover{background-color:#fff}.swagger-ui .hover-bg-transparent:focus,.swagger-ui .hover-bg-transparent:hover{background-color:transparent}.swagger-ui .hover-bg-black-90:focus,.swagger-ui .hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.swagger-ui .hover-bg-black-80:focus,.swagger-ui .hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.swagger-ui .hover-bg-black-70:focus,.swagger-ui .hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.swagger-ui .hover-bg-black-60:focus,.swagger-ui .hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.swagger-ui .hover-bg-black-50:focus,.swagger-ui .hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.swagger-ui .hover-bg-black-40:focus,.swagger-ui .hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.swagger-ui .hover-bg-black-30:focus,.swagger-ui .hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.swagger-ui .hover-bg-black-20:focus,.swagger-ui .hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.swagger-ui .hover-bg-black-10:focus,.swagger-ui .hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.swagger-ui .hover-bg-white-90:focus,.swagger-ui .hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.swagger-ui .hover-bg-white-80:focus,.swagger-ui .hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.swagger-ui .hover-bg-white-70:focus,.swagger-ui .hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.swagger-ui .hover-bg-white-60:focus,.swagger-ui .hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.swagger-ui .hover-bg-white-50:focus,.swagger-ui .hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.swagger-ui .hover-bg-white-40:focus,.swagger-ui .hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.swagger-ui .hover-bg-white-30:focus,.swagger-ui .hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.swagger-ui .hover-bg-white-20:focus,.swagger-ui .hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.swagger-ui .hover-bg-white-10:focus,.swagger-ui .hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.swagger-ui .hover-dark-red:focus,.swagger-ui .hover-dark-red:hover{color:#e7040f}.swagger-ui .hover-red:focus,.swagger-ui .hover-red:hover{color:#ff4136}.swagger-ui .hover-light-red:focus,.swagger-ui .hover-light-red:hover{color:#ff725c}.swagger-ui .hover-orange:focus,.swagger-ui .hover-orange:hover{color:#ff6300}.swagger-ui .hover-gold:focus,.swagger-ui .hover-gold:hover{color:#ffb700}.swagger-ui .hover-yellow:focus,.swagger-ui .hover-yellow:hover{color:gold}.swagger-ui .hover-light-yellow:focus,.swagger-ui .hover-light-yellow:hover{color:#fbf1a9}.swagger-ui .hover-purple:focus,.swagger-ui .hover-purple:hover{color:#5e2ca5}.swagger-ui .hover-light-purple:focus,.swagger-ui .hover-light-purple:hover{color:#a463f2}.swagger-ui .hover-dark-pink:focus,.swagger-ui .hover-dark-pink:hover{color:#d5008f}.swagger-ui .hover-hot-pink:focus,.swagger-ui .hover-hot-pink:hover{color:#ff41b4}.swagger-ui .hover-pink:focus,.swagger-ui .hover-pink:hover{color:#ff80cc}.swagger-ui .hover-light-pink:focus,.swagger-ui .hover-light-pink:hover{color:#ffa3d7}.swagger-ui .hover-dark-green:focus,.swagger-ui .hover-dark-green:hover{color:#137752}.swagger-ui .hover-green:focus,.swagger-ui .hover-green:hover{color:#19a974}.swagger-ui .hover-light-green:focus,.swagger-ui .hover-light-green:hover{color:#9eebcf}.swagger-ui .hover-navy:focus,.swagger-ui .hover-navy:hover{color:#001b44}.swagger-ui .hover-dark-blue:focus,.swagger-ui .hover-dark-blue:hover{color:#00449e}.swagger-ui .hover-blue:focus,.swagger-ui .hover-blue:hover{color:#357edd}.swagger-ui .hover-light-blue:focus,.swagger-ui .hover-light-blue:hover{color:#96ccff}.swagger-ui .hover-lightest-blue:focus,.swagger-ui .hover-lightest-blue:hover{color:#cdecff}.swagger-ui .hover-washed-blue:focus,.swagger-ui .hover-washed-blue:hover{color:#f6fffe}.swagger-ui .hover-washed-green:focus,.swagger-ui .hover-washed-green:hover{color:#e8fdf5}.swagger-ui .hover-washed-yellow:focus,.swagger-ui .hover-washed-yellow:hover{color:#fffceb}.swagger-ui .hover-washed-red:focus,.swagger-ui .hover-washed-red:hover{color:#ffdfdf}.swagger-ui .hover-bg-dark-red:focus,.swagger-ui .hover-bg-dark-red:hover{background-color:#e7040f}.swagger-ui .hover-bg-red:focus,.swagger-ui .hover-bg-red:hover{background-color:#ff4136}.swagger-ui .hover-bg-light-red:focus,.swagger-ui .hover-bg-light-red:hover{background-color:#ff725c}.swagger-ui .hover-bg-orange:focus,.swagger-ui .hover-bg-orange:hover{background-color:#ff6300}.swagger-ui .hover-bg-gold:focus,.swagger-ui .hover-bg-gold:hover{background-color:#ffb700}.swagger-ui .hover-bg-yellow:focus,.swagger-ui .hover-bg-yellow:hover{background-color:gold}.swagger-ui .hover-bg-light-yellow:focus,.swagger-ui .hover-bg-light-yellow:hover{background-color:#fbf1a9}.swagger-ui .hover-bg-purple:focus,.swagger-ui .hover-bg-purple:hover{background-color:#5e2ca5}.swagger-ui .hover-bg-light-purple:focus,.swagger-ui .hover-bg-light-purple:hover{background-color:#a463f2}.swagger-ui .hover-bg-dark-pink:focus,.swagger-ui .hover-bg-dark-pink:hover{background-color:#d5008f}.swagger-ui .hover-bg-hot-pink:focus,.swagger-ui .hover-bg-hot-pink:hover{background-color:#ff41b4}.swagger-ui .hover-bg-pink:focus,.swagger-ui .hover-bg-pink:hover{background-color:#ff80cc}.swagger-ui .hover-bg-light-pink:focus,.swagger-ui .hover-bg-light-pink:hover{background-color:#ffa3d7}.swagger-ui .hover-bg-dark-green:focus,.swagger-ui .hover-bg-dark-green:hover{background-color:#137752}.swagger-ui .hover-bg-green:focus,.swagger-ui .hover-bg-green:hover{background-color:#19a974}.swagger-ui .hover-bg-light-green:focus,.swagger-ui .hover-bg-light-green:hover{background-color:#9eebcf}.swagger-ui .hover-bg-navy:focus,.swagger-ui .hover-bg-navy:hover{background-color:#001b44}.swagger-ui .hover-bg-dark-blue:focus,.swagger-ui .hover-bg-dark-blue:hover{background-color:#00449e}.swagger-ui .hover-bg-blue:focus,.swagger-ui .hover-bg-blue:hover{background-color:#357edd}.swagger-ui .hover-bg-light-blue:focus,.swagger-ui .hover-bg-light-blue:hover{background-color:#96ccff}.swagger-ui .hover-bg-lightest-blue:focus,.swagger-ui .hover-bg-lightest-blue:hover{background-color:#cdecff}.swagger-ui .hover-bg-washed-blue:focus,.swagger-ui .hover-bg-washed-blue:hover{background-color:#f6fffe}.swagger-ui .hover-bg-washed-green:focus,.swagger-ui .hover-bg-washed-green:hover{background-color:#e8fdf5}.swagger-ui .hover-bg-washed-yellow:focus,.swagger-ui .hover-bg-washed-yellow:hover{background-color:#fffceb}.swagger-ui .hover-bg-washed-red:focus,.swagger-ui .hover-bg-washed-red:hover{background-color:#ffdfdf}.swagger-ui .hover-bg-inherit:focus,.swagger-ui .hover-bg-inherit:hover{background-color:inherit}.swagger-ui .pa0{padding:0}.swagger-ui .pa1{padding:.25rem}.swagger-ui .pa2{padding:.5rem}.swagger-ui .pa3{padding:1rem}.swagger-ui .pa4{padding:2rem}.swagger-ui .pa5{padding:4rem}.swagger-ui .pa6{padding:8rem}.swagger-ui .pa7{padding:16rem}.swagger-ui .pl0{padding-left:0}.swagger-ui .pl1{padding-left:.25rem}.swagger-ui .pl2{padding-left:.5rem}.swagger-ui .pl3{padding-left:1rem}.swagger-ui .pl4{padding-left:2rem}.swagger-ui .pl5{padding-left:4rem}.swagger-ui .pl6{padding-left:8rem}.swagger-ui .pl7{padding-left:16rem}.swagger-ui .pr0{padding-right:0}.swagger-ui .pr1{padding-right:.25rem}.swagger-ui .pr2{padding-right:.5rem}.swagger-ui .pr3{padding-right:1rem}.swagger-ui .pr4{padding-right:2rem}.swagger-ui .pr5{padding-right:4rem}.swagger-ui .pr6{padding-right:8rem}.swagger-ui .pr7{padding-right:16rem}.swagger-ui .pb0{padding-bottom:0}.swagger-ui .pb1{padding-bottom:.25rem}.swagger-ui .pb2{padding-bottom:.5rem}.swagger-ui .pb3{padding-bottom:1rem}.swagger-ui .pb4{padding-bottom:2rem}.swagger-ui .pb5{padding-bottom:4rem}.swagger-ui .pb6{padding-bottom:8rem}.swagger-ui .pb7{padding-bottom:16rem}.swagger-ui .pt0{padding-top:0}.swagger-ui .pt1{padding-top:.25rem}.swagger-ui .pt2{padding-top:.5rem}.swagger-ui .pt3{padding-top:1rem}.swagger-ui .pt4{padding-top:2rem}.swagger-ui .pt5{padding-top:4rem}.swagger-ui .pt6{padding-top:8rem}.swagger-ui .pt7{padding-top:16rem}.swagger-ui .pv0{padding-bottom:0;padding-top:0}.swagger-ui .pv1{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0{padding-left:0;padding-right:0}.swagger-ui .ph1{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0{margin:0}.swagger-ui .ma1{margin:.25rem}.swagger-ui .ma2{margin:.5rem}.swagger-ui .ma3{margin:1rem}.swagger-ui .ma4{margin:2rem}.swagger-ui .ma5{margin:4rem}.swagger-ui .ma6{margin:8rem}.swagger-ui .ma7{margin:16rem}.swagger-ui .ml0{margin-left:0}.swagger-ui .ml1{margin-left:.25rem}.swagger-ui .ml2{margin-left:.5rem}.swagger-ui .ml3{margin-left:1rem}.swagger-ui .ml4{margin-left:2rem}.swagger-ui .ml5{margin-left:4rem}.swagger-ui .ml6{margin-left:8rem}.swagger-ui .ml7{margin-left:16rem}.swagger-ui .mr0{margin-right:0}.swagger-ui .mr1{margin-right:.25rem}.swagger-ui .mr2{margin-right:.5rem}.swagger-ui .mr3{margin-right:1rem}.swagger-ui .mr4{margin-right:2rem}.swagger-ui .mr5{margin-right:4rem}.swagger-ui .mr6{margin-right:8rem}.swagger-ui .mr7{margin-right:16rem}.swagger-ui .mb0{margin-bottom:0}.swagger-ui .mb1{margin-bottom:.25rem}.swagger-ui .mb2{margin-bottom:.5rem}.swagger-ui .mb3{margin-bottom:1rem}.swagger-ui .mb4{margin-bottom:2rem}.swagger-ui .mb5{margin-bottom:4rem}.swagger-ui .mb6{margin-bottom:8rem}.swagger-ui .mb7{margin-bottom:16rem}.swagger-ui .mt0{margin-top:0}.swagger-ui .mt1{margin-top:.25rem}.swagger-ui .mt2{margin-top:.5rem}.swagger-ui .mt3{margin-top:1rem}.swagger-ui .mt4{margin-top:2rem}.swagger-ui .mt5{margin-top:4rem}.swagger-ui .mt6{margin-top:8rem}.swagger-ui .mt7{margin-top:16rem}.swagger-ui .mv0{margin-bottom:0;margin-top:0}.swagger-ui .mv1{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0{margin-left:0;margin-right:0}.swagger-ui .mh1{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.swagger-ui .pa0-ns{padding:0}.swagger-ui .pa1-ns{padding:.25rem}.swagger-ui .pa2-ns{padding:.5rem}.swagger-ui .pa3-ns{padding:1rem}.swagger-ui .pa4-ns{padding:2rem}.swagger-ui .pa5-ns{padding:4rem}.swagger-ui .pa6-ns{padding:8rem}.swagger-ui .pa7-ns{padding:16rem}.swagger-ui .pl0-ns{padding-left:0}.swagger-ui .pl1-ns{padding-left:.25rem}.swagger-ui .pl2-ns{padding-left:.5rem}.swagger-ui .pl3-ns{padding-left:1rem}.swagger-ui .pl4-ns{padding-left:2rem}.swagger-ui .pl5-ns{padding-left:4rem}.swagger-ui .pl6-ns{padding-left:8rem}.swagger-ui .pl7-ns{padding-left:16rem}.swagger-ui .pr0-ns{padding-right:0}.swagger-ui .pr1-ns{padding-right:.25rem}.swagger-ui .pr2-ns{padding-right:.5rem}.swagger-ui .pr3-ns{padding-right:1rem}.swagger-ui .pr4-ns{padding-right:2rem}.swagger-ui .pr5-ns{padding-right:4rem}.swagger-ui .pr6-ns{padding-right:8rem}.swagger-ui .pr7-ns{padding-right:16rem}.swagger-ui .pb0-ns{padding-bottom:0}.swagger-ui .pb1-ns{padding-bottom:.25rem}.swagger-ui .pb2-ns{padding-bottom:.5rem}.swagger-ui .pb3-ns{padding-bottom:1rem}.swagger-ui .pb4-ns{padding-bottom:2rem}.swagger-ui .pb5-ns{padding-bottom:4rem}.swagger-ui .pb6-ns{padding-bottom:8rem}.swagger-ui .pb7-ns{padding-bottom:16rem}.swagger-ui .pt0-ns{padding-top:0}.swagger-ui .pt1-ns{padding-top:.25rem}.swagger-ui .pt2-ns{padding-top:.5rem}.swagger-ui .pt3-ns{padding-top:1rem}.swagger-ui .pt4-ns{padding-top:2rem}.swagger-ui .pt5-ns{padding-top:4rem}.swagger-ui .pt6-ns{padding-top:8rem}.swagger-ui .pt7-ns{padding-top:16rem}.swagger-ui .pv0-ns{padding-bottom:0;padding-top:0}.swagger-ui .pv1-ns{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-ns{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-ns{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-ns{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-ns{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-ns{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-ns{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-ns{padding-left:0;padding-right:0}.swagger-ui .ph1-ns{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-ns{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-ns{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-ns{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-ns{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-ns{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-ns{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-ns{margin:0}.swagger-ui .ma1-ns{margin:.25rem}.swagger-ui .ma2-ns{margin:.5rem}.swagger-ui .ma3-ns{margin:1rem}.swagger-ui .ma4-ns{margin:2rem}.swagger-ui .ma5-ns{margin:4rem}.swagger-ui .ma6-ns{margin:8rem}.swagger-ui .ma7-ns{margin:16rem}.swagger-ui .ml0-ns{margin-left:0}.swagger-ui .ml1-ns{margin-left:.25rem}.swagger-ui .ml2-ns{margin-left:.5rem}.swagger-ui .ml3-ns{margin-left:1rem}.swagger-ui .ml4-ns{margin-left:2rem}.swagger-ui .ml5-ns{margin-left:4rem}.swagger-ui .ml6-ns{margin-left:8rem}.swagger-ui .ml7-ns{margin-left:16rem}.swagger-ui .mr0-ns{margin-right:0}.swagger-ui .mr1-ns{margin-right:.25rem}.swagger-ui .mr2-ns{margin-right:.5rem}.swagger-ui .mr3-ns{margin-right:1rem}.swagger-ui .mr4-ns{margin-right:2rem}.swagger-ui .mr5-ns{margin-right:4rem}.swagger-ui .mr6-ns{margin-right:8rem}.swagger-ui .mr7-ns{margin-right:16rem}.swagger-ui .mb0-ns{margin-bottom:0}.swagger-ui .mb1-ns{margin-bottom:.25rem}.swagger-ui .mb2-ns{margin-bottom:.5rem}.swagger-ui .mb3-ns{margin-bottom:1rem}.swagger-ui .mb4-ns{margin-bottom:2rem}.swagger-ui .mb5-ns{margin-bottom:4rem}.swagger-ui .mb6-ns{margin-bottom:8rem}.swagger-ui .mb7-ns{margin-bottom:16rem}.swagger-ui .mt0-ns{margin-top:0}.swagger-ui .mt1-ns{margin-top:.25rem}.swagger-ui .mt2-ns{margin-top:.5rem}.swagger-ui .mt3-ns{margin-top:1rem}.swagger-ui .mt4-ns{margin-top:2rem}.swagger-ui .mt5-ns{margin-top:4rem}.swagger-ui .mt6-ns{margin-top:8rem}.swagger-ui .mt7-ns{margin-top:16rem}.swagger-ui .mv0-ns{margin-bottom:0;margin-top:0}.swagger-ui .mv1-ns{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-ns{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-ns{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-ns{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-ns{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-ns{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-ns{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-ns{margin-left:0;margin-right:0}.swagger-ui .mh1-ns{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-ns{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-ns{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-ns{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-ns{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-ns{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .pa0-m{padding:0}.swagger-ui .pa1-m{padding:.25rem}.swagger-ui .pa2-m{padding:.5rem}.swagger-ui .pa3-m{padding:1rem}.swagger-ui .pa4-m{padding:2rem}.swagger-ui .pa5-m{padding:4rem}.swagger-ui .pa6-m{padding:8rem}.swagger-ui .pa7-m{padding:16rem}.swagger-ui .pl0-m{padding-left:0}.swagger-ui .pl1-m{padding-left:.25rem}.swagger-ui .pl2-m{padding-left:.5rem}.swagger-ui .pl3-m{padding-left:1rem}.swagger-ui .pl4-m{padding-left:2rem}.swagger-ui .pl5-m{padding-left:4rem}.swagger-ui .pl6-m{padding-left:8rem}.swagger-ui .pl7-m{padding-left:16rem}.swagger-ui .pr0-m{padding-right:0}.swagger-ui .pr1-m{padding-right:.25rem}.swagger-ui .pr2-m{padding-right:.5rem}.swagger-ui .pr3-m{padding-right:1rem}.swagger-ui .pr4-m{padding-right:2rem}.swagger-ui .pr5-m{padding-right:4rem}.swagger-ui .pr6-m{padding-right:8rem}.swagger-ui .pr7-m{padding-right:16rem}.swagger-ui .pb0-m{padding-bottom:0}.swagger-ui .pb1-m{padding-bottom:.25rem}.swagger-ui .pb2-m{padding-bottom:.5rem}.swagger-ui .pb3-m{padding-bottom:1rem}.swagger-ui .pb4-m{padding-bottom:2rem}.swagger-ui .pb5-m{padding-bottom:4rem}.swagger-ui .pb6-m{padding-bottom:8rem}.swagger-ui .pb7-m{padding-bottom:16rem}.swagger-ui .pt0-m{padding-top:0}.swagger-ui .pt1-m{padding-top:.25rem}.swagger-ui .pt2-m{padding-top:.5rem}.swagger-ui .pt3-m{padding-top:1rem}.swagger-ui .pt4-m{padding-top:2rem}.swagger-ui .pt5-m{padding-top:4rem}.swagger-ui .pt6-m{padding-top:8rem}.swagger-ui .pt7-m{padding-top:16rem}.swagger-ui .pv0-m{padding-bottom:0;padding-top:0}.swagger-ui .pv1-m{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-m{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-m{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-m{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-m{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-m{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-m{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-m{padding-left:0;padding-right:0}.swagger-ui .ph1-m{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-m{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-m{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-m{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-m{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-m{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-m{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-m{margin:0}.swagger-ui .ma1-m{margin:.25rem}.swagger-ui .ma2-m{margin:.5rem}.swagger-ui .ma3-m{margin:1rem}.swagger-ui .ma4-m{margin:2rem}.swagger-ui .ma5-m{margin:4rem}.swagger-ui .ma6-m{margin:8rem}.swagger-ui .ma7-m{margin:16rem}.swagger-ui .ml0-m{margin-left:0}.swagger-ui .ml1-m{margin-left:.25rem}.swagger-ui .ml2-m{margin-left:.5rem}.swagger-ui .ml3-m{margin-left:1rem}.swagger-ui .ml4-m{margin-left:2rem}.swagger-ui .ml5-m{margin-left:4rem}.swagger-ui .ml6-m{margin-left:8rem}.swagger-ui .ml7-m{margin-left:16rem}.swagger-ui .mr0-m{margin-right:0}.swagger-ui .mr1-m{margin-right:.25rem}.swagger-ui .mr2-m{margin-right:.5rem}.swagger-ui .mr3-m{margin-right:1rem}.swagger-ui .mr4-m{margin-right:2rem}.swagger-ui .mr5-m{margin-right:4rem}.swagger-ui .mr6-m{margin-right:8rem}.swagger-ui .mr7-m{margin-right:16rem}.swagger-ui .mb0-m{margin-bottom:0}.swagger-ui .mb1-m{margin-bottom:.25rem}.swagger-ui .mb2-m{margin-bottom:.5rem}.swagger-ui .mb3-m{margin-bottom:1rem}.swagger-ui .mb4-m{margin-bottom:2rem}.swagger-ui .mb5-m{margin-bottom:4rem}.swagger-ui .mb6-m{margin-bottom:8rem}.swagger-ui .mb7-m{margin-bottom:16rem}.swagger-ui .mt0-m{margin-top:0}.swagger-ui .mt1-m{margin-top:.25rem}.swagger-ui .mt2-m{margin-top:.5rem}.swagger-ui .mt3-m{margin-top:1rem}.swagger-ui .mt4-m{margin-top:2rem}.swagger-ui .mt5-m{margin-top:4rem}.swagger-ui .mt6-m{margin-top:8rem}.swagger-ui .mt7-m{margin-top:16rem}.swagger-ui .mv0-m{margin-bottom:0;margin-top:0}.swagger-ui .mv1-m{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-m{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-m{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-m{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-m{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-m{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-m{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-m{margin-left:0;margin-right:0}.swagger-ui .mh1-m{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-m{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-m{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-m{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-m{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-m{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.swagger-ui .pa0-l{padding:0}.swagger-ui .pa1-l{padding:.25rem}.swagger-ui .pa2-l{padding:.5rem}.swagger-ui .pa3-l{padding:1rem}.swagger-ui .pa4-l{padding:2rem}.swagger-ui .pa5-l{padding:4rem}.swagger-ui .pa6-l{padding:8rem}.swagger-ui .pa7-l{padding:16rem}.swagger-ui .pl0-l{padding-left:0}.swagger-ui .pl1-l{padding-left:.25rem}.swagger-ui .pl2-l{padding-left:.5rem}.swagger-ui .pl3-l{padding-left:1rem}.swagger-ui .pl4-l{padding-left:2rem}.swagger-ui .pl5-l{padding-left:4rem}.swagger-ui .pl6-l{padding-left:8rem}.swagger-ui .pl7-l{padding-left:16rem}.swagger-ui .pr0-l{padding-right:0}.swagger-ui .pr1-l{padding-right:.25rem}.swagger-ui .pr2-l{padding-right:.5rem}.swagger-ui .pr3-l{padding-right:1rem}.swagger-ui .pr4-l{padding-right:2rem}.swagger-ui .pr5-l{padding-right:4rem}.swagger-ui .pr6-l{padding-right:8rem}.swagger-ui .pr7-l{padding-right:16rem}.swagger-ui .pb0-l{padding-bottom:0}.swagger-ui .pb1-l{padding-bottom:.25rem}.swagger-ui .pb2-l{padding-bottom:.5rem}.swagger-ui .pb3-l{padding-bottom:1rem}.swagger-ui .pb4-l{padding-bottom:2rem}.swagger-ui .pb5-l{padding-bottom:4rem}.swagger-ui .pb6-l{padding-bottom:8rem}.swagger-ui .pb7-l{padding-bottom:16rem}.swagger-ui .pt0-l{padding-top:0}.swagger-ui .pt1-l{padding-top:.25rem}.swagger-ui .pt2-l{padding-top:.5rem}.swagger-ui .pt3-l{padding-top:1rem}.swagger-ui .pt4-l{padding-top:2rem}.swagger-ui .pt5-l{padding-top:4rem}.swagger-ui .pt6-l{padding-top:8rem}.swagger-ui .pt7-l{padding-top:16rem}.swagger-ui .pv0-l{padding-bottom:0;padding-top:0}.swagger-ui .pv1-l{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-l{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-l{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-l{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-l{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-l{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-l{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-l{padding-left:0;padding-right:0}.swagger-ui .ph1-l{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-l{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-l{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-l{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-l{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-l{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-l{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-l{margin:0}.swagger-ui .ma1-l{margin:.25rem}.swagger-ui .ma2-l{margin:.5rem}.swagger-ui .ma3-l{margin:1rem}.swagger-ui .ma4-l{margin:2rem}.swagger-ui .ma5-l{margin:4rem}.swagger-ui .ma6-l{margin:8rem}.swagger-ui .ma7-l{margin:16rem}.swagger-ui .ml0-l{margin-left:0}.swagger-ui .ml1-l{margin-left:.25rem}.swagger-ui .ml2-l{margin-left:.5rem}.swagger-ui .ml3-l{margin-left:1rem}.swagger-ui .ml4-l{margin-left:2rem}.swagger-ui .ml5-l{margin-left:4rem}.swagger-ui .ml6-l{margin-left:8rem}.swagger-ui .ml7-l{margin-left:16rem}.swagger-ui .mr0-l{margin-right:0}.swagger-ui .mr1-l{margin-right:.25rem}.swagger-ui .mr2-l{margin-right:.5rem}.swagger-ui .mr3-l{margin-right:1rem}.swagger-ui .mr4-l{margin-right:2rem}.swagger-ui .mr5-l{margin-right:4rem}.swagger-ui .mr6-l{margin-right:8rem}.swagger-ui .mr7-l{margin-right:16rem}.swagger-ui .mb0-l{margin-bottom:0}.swagger-ui .mb1-l{margin-bottom:.25rem}.swagger-ui .mb2-l{margin-bottom:.5rem}.swagger-ui .mb3-l{margin-bottom:1rem}.swagger-ui .mb4-l{margin-bottom:2rem}.swagger-ui .mb5-l{margin-bottom:4rem}.swagger-ui .mb6-l{margin-bottom:8rem}.swagger-ui .mb7-l{margin-bottom:16rem}.swagger-ui .mt0-l{margin-top:0}.swagger-ui .mt1-l{margin-top:.25rem}.swagger-ui .mt2-l{margin-top:.5rem}.swagger-ui .mt3-l{margin-top:1rem}.swagger-ui .mt4-l{margin-top:2rem}.swagger-ui .mt5-l{margin-top:4rem}.swagger-ui .mt6-l{margin-top:8rem}.swagger-ui .mt7-l{margin-top:16rem}.swagger-ui .mv0-l{margin-bottom:0;margin-top:0}.swagger-ui .mv1-l{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-l{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-l{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-l{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-l{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-l{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-l{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-l{margin-left:0;margin-right:0}.swagger-ui .mh1-l{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-l{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-l{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-l{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-l{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-l{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-l{margin-left:16rem;margin-right:16rem}}.swagger-ui .na1{margin:-.25rem}.swagger-ui .na2{margin:-.5rem}.swagger-ui .na3{margin:-1rem}.swagger-ui .na4{margin:-2rem}.swagger-ui .na5{margin:-4rem}.swagger-ui .na6{margin:-8rem}.swagger-ui .na7{margin:-16rem}.swagger-ui .nl1{margin-left:-.25rem}.swagger-ui .nl2{margin-left:-.5rem}.swagger-ui .nl3{margin-left:-1rem}.swagger-ui .nl4{margin-left:-2rem}.swagger-ui .nl5{margin-left:-4rem}.swagger-ui .nl6{margin-left:-8rem}.swagger-ui .nl7{margin-left:-16rem}.swagger-ui .nr1{margin-right:-.25rem}.swagger-ui .nr2{margin-right:-.5rem}.swagger-ui .nr3{margin-right:-1rem}.swagger-ui .nr4{margin-right:-2rem}.swagger-ui .nr5{margin-right:-4rem}.swagger-ui .nr6{margin-right:-8rem}.swagger-ui .nr7{margin-right:-16rem}.swagger-ui .nb1{margin-bottom:-.25rem}.swagger-ui .nb2{margin-bottom:-.5rem}.swagger-ui .nb3{margin-bottom:-1rem}.swagger-ui .nb4{margin-bottom:-2rem}.swagger-ui .nb5{margin-bottom:-4rem}.swagger-ui .nb6{margin-bottom:-8rem}.swagger-ui .nb7{margin-bottom:-16rem}.swagger-ui .nt1{margin-top:-.25rem}.swagger-ui .nt2{margin-top:-.5rem}.swagger-ui .nt3{margin-top:-1rem}.swagger-ui .nt4{margin-top:-2rem}.swagger-ui .nt5{margin-top:-4rem}.swagger-ui .nt6{margin-top:-8rem}.swagger-ui .nt7{margin-top:-16rem}@media screen and (min-width:30em){.swagger-ui .na1-ns{margin:-.25rem}.swagger-ui .na2-ns{margin:-.5rem}.swagger-ui .na3-ns{margin:-1rem}.swagger-ui .na4-ns{margin:-2rem}.swagger-ui .na5-ns{margin:-4rem}.swagger-ui .na6-ns{margin:-8rem}.swagger-ui .na7-ns{margin:-16rem}.swagger-ui .nl1-ns{margin-left:-.25rem}.swagger-ui .nl2-ns{margin-left:-.5rem}.swagger-ui .nl3-ns{margin-left:-1rem}.swagger-ui .nl4-ns{margin-left:-2rem}.swagger-ui .nl5-ns{margin-left:-4rem}.swagger-ui .nl6-ns{margin-left:-8rem}.swagger-ui .nl7-ns{margin-left:-16rem}.swagger-ui .nr1-ns{margin-right:-.25rem}.swagger-ui .nr2-ns{margin-right:-.5rem}.swagger-ui .nr3-ns{margin-right:-1rem}.swagger-ui .nr4-ns{margin-right:-2rem}.swagger-ui .nr5-ns{margin-right:-4rem}.swagger-ui .nr6-ns{margin-right:-8rem}.swagger-ui .nr7-ns{margin-right:-16rem}.swagger-ui .nb1-ns{margin-bottom:-.25rem}.swagger-ui .nb2-ns{margin-bottom:-.5rem}.swagger-ui .nb3-ns{margin-bottom:-1rem}.swagger-ui .nb4-ns{margin-bottom:-2rem}.swagger-ui .nb5-ns{margin-bottom:-4rem}.swagger-ui .nb6-ns{margin-bottom:-8rem}.swagger-ui .nb7-ns{margin-bottom:-16rem}.swagger-ui .nt1-ns{margin-top:-.25rem}.swagger-ui .nt2-ns{margin-top:-.5rem}.swagger-ui .nt3-ns{margin-top:-1rem}.swagger-ui .nt4-ns{margin-top:-2rem}.swagger-ui .nt5-ns{margin-top:-4rem}.swagger-ui .nt6-ns{margin-top:-8rem}.swagger-ui .nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .na1-m{margin:-.25rem}.swagger-ui .na2-m{margin:-.5rem}.swagger-ui .na3-m{margin:-1rem}.swagger-ui .na4-m{margin:-2rem}.swagger-ui .na5-m{margin:-4rem}.swagger-ui .na6-m{margin:-8rem}.swagger-ui .na7-m{margin:-16rem}.swagger-ui .nl1-m{margin-left:-.25rem}.swagger-ui .nl2-m{margin-left:-.5rem}.swagger-ui .nl3-m{margin-left:-1rem}.swagger-ui .nl4-m{margin-left:-2rem}.swagger-ui .nl5-m{margin-left:-4rem}.swagger-ui .nl6-m{margin-left:-8rem}.swagger-ui .nl7-m{margin-left:-16rem}.swagger-ui .nr1-m{margin-right:-.25rem}.swagger-ui .nr2-m{margin-right:-.5rem}.swagger-ui .nr3-m{margin-right:-1rem}.swagger-ui .nr4-m{margin-right:-2rem}.swagger-ui .nr5-m{margin-right:-4rem}.swagger-ui .nr6-m{margin-right:-8rem}.swagger-ui .nr7-m{margin-right:-16rem}.swagger-ui .nb1-m{margin-bottom:-.25rem}.swagger-ui .nb2-m{margin-bottom:-.5rem}.swagger-ui .nb3-m{margin-bottom:-1rem}.swagger-ui .nb4-m{margin-bottom:-2rem}.swagger-ui .nb5-m{margin-bottom:-4rem}.swagger-ui .nb6-m{margin-bottom:-8rem}.swagger-ui .nb7-m{margin-bottom:-16rem}.swagger-ui .nt1-m{margin-top:-.25rem}.swagger-ui .nt2-m{margin-top:-.5rem}.swagger-ui .nt3-m{margin-top:-1rem}.swagger-ui .nt4-m{margin-top:-2rem}.swagger-ui .nt5-m{margin-top:-4rem}.swagger-ui .nt6-m{margin-top:-8rem}.swagger-ui .nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.swagger-ui .na1-l{margin:-.25rem}.swagger-ui .na2-l{margin:-.5rem}.swagger-ui .na3-l{margin:-1rem}.swagger-ui .na4-l{margin:-2rem}.swagger-ui .na5-l{margin:-4rem}.swagger-ui .na6-l{margin:-8rem}.swagger-ui .na7-l{margin:-16rem}.swagger-ui .nl1-l{margin-left:-.25rem}.swagger-ui .nl2-l{margin-left:-.5rem}.swagger-ui .nl3-l{margin-left:-1rem}.swagger-ui .nl4-l{margin-left:-2rem}.swagger-ui .nl5-l{margin-left:-4rem}.swagger-ui .nl6-l{margin-left:-8rem}.swagger-ui .nl7-l{margin-left:-16rem}.swagger-ui .nr1-l{margin-right:-.25rem}.swagger-ui .nr2-l{margin-right:-.5rem}.swagger-ui .nr3-l{margin-right:-1rem}.swagger-ui .nr4-l{margin-right:-2rem}.swagger-ui .nr5-l{margin-right:-4rem}.swagger-ui .nr6-l{margin-right:-8rem}.swagger-ui .nr7-l{margin-right:-16rem}.swagger-ui .nb1-l{margin-bottom:-.25rem}.swagger-ui .nb2-l{margin-bottom:-.5rem}.swagger-ui .nb3-l{margin-bottom:-1rem}.swagger-ui .nb4-l{margin-bottom:-2rem}.swagger-ui .nb5-l{margin-bottom:-4rem}.swagger-ui .nb6-l{margin-bottom:-8rem}.swagger-ui .nb7-l{margin-bottom:-16rem}.swagger-ui .nt1-l{margin-top:-.25rem}.swagger-ui .nt2-l{margin-top:-.5rem}.swagger-ui .nt3-l{margin-top:-1rem}.swagger-ui .nt4-l{margin-top:-2rem}.swagger-ui .nt5-l{margin-top:-4rem}.swagger-ui .nt6-l{margin-top:-8rem}.swagger-ui .nt7-l{margin-top:-16rem}}.swagger-ui .collapse{border-collapse:collapse;border-spacing:0}.swagger-ui .striped--light-silver:nth-child(odd){background-color:#aaa}.swagger-ui .striped--moon-gray:nth-child(odd){background-color:#ccc}.swagger-ui .striped--light-gray:nth-child(odd){background-color:#eee}.swagger-ui .striped--near-white:nth-child(odd){background-color:#f4f4f4}.swagger-ui .stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.swagger-ui .stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.swagger-ui .strike{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline{-webkit-text-decoration:none;text-decoration:none}@media screen and (min-width:30em){.swagger-ui .strike-ns{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-ns{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-ns{-webkit-text-decoration:none;text-decoration:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .strike-m{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-m{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-m{-webkit-text-decoration:none;text-decoration:none}}@media screen and (min-width:60em){.swagger-ui .strike-l{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-l{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-l{-webkit-text-decoration:none;text-decoration:none}}.swagger-ui .tl{text-align:left}.swagger-ui .tr{text-align:right}.swagger-ui .tc{text-align:center}.swagger-ui .tj{text-align:justify}@media screen and (min-width:30em){.swagger-ui .tl-ns{text-align:left}.swagger-ui .tr-ns{text-align:right}.swagger-ui .tc-ns{text-align:center}.swagger-ui .tj-ns{text-align:justify}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .tl-m{text-align:left}.swagger-ui .tr-m{text-align:right}.swagger-ui .tc-m{text-align:center}.swagger-ui .tj-m{text-align:justify}}@media screen and (min-width:60em){.swagger-ui .tl-l{text-align:left}.swagger-ui .tr-l{text-align:right}.swagger-ui .tc-l{text-align:center}.swagger-ui .tj-l{text-align:justify}}.swagger-ui .ttc{text-transform:capitalize}.swagger-ui .ttl{text-transform:lowercase}.swagger-ui .ttu{text-transform:uppercase}.swagger-ui .ttn{text-transform:none}@media screen and (min-width:30em){.swagger-ui .ttc-ns{text-transform:capitalize}.swagger-ui .ttl-ns{text-transform:lowercase}.swagger-ui .ttu-ns{text-transform:uppercase}.swagger-ui .ttn-ns{text-transform:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ttc-m{text-transform:capitalize}.swagger-ui .ttl-m{text-transform:lowercase}.swagger-ui .ttu-m{text-transform:uppercase}.swagger-ui .ttn-m{text-transform:none}}@media screen and (min-width:60em){.swagger-ui .ttc-l{text-transform:capitalize}.swagger-ui .ttl-l{text-transform:lowercase}.swagger-ui .ttu-l{text-transform:uppercase}.swagger-ui .ttn-l{text-transform:none}}.swagger-ui .f-6,.swagger-ui .f-headline{font-size:6rem}.swagger-ui .f-5,.swagger-ui .f-subheadline{font-size:5rem}.swagger-ui .f1{font-size:3rem}.swagger-ui .f2{font-size:2.25rem}.swagger-ui .f3{font-size:1.5rem}.swagger-ui .f4{font-size:1.25rem}.swagger-ui .f5{font-size:1rem}.swagger-ui .f6{font-size:.875rem}.swagger-ui .f7{font-size:.75rem}@media screen and (min-width:30em){.swagger-ui .f-6-ns,.swagger-ui .f-headline-ns{font-size:6rem}.swagger-ui .f-5-ns,.swagger-ui .f-subheadline-ns{font-size:5rem}.swagger-ui .f1-ns{font-size:3rem}.swagger-ui .f2-ns{font-size:2.25rem}.swagger-ui .f3-ns{font-size:1.5rem}.swagger-ui .f4-ns{font-size:1.25rem}.swagger-ui .f5-ns{font-size:1rem}.swagger-ui .f6-ns{font-size:.875rem}.swagger-ui .f7-ns{font-size:.75rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .f-6-m,.swagger-ui .f-headline-m{font-size:6rem}.swagger-ui .f-5-m,.swagger-ui .f-subheadline-m{font-size:5rem}.swagger-ui .f1-m{font-size:3rem}.swagger-ui .f2-m{font-size:2.25rem}.swagger-ui .f3-m{font-size:1.5rem}.swagger-ui .f4-m{font-size:1.25rem}.swagger-ui .f5-m{font-size:1rem}.swagger-ui .f6-m{font-size:.875rem}.swagger-ui .f7-m{font-size:.75rem}}@media screen and (min-width:60em){.swagger-ui .f-6-l,.swagger-ui .f-headline-l{font-size:6rem}.swagger-ui .f-5-l,.swagger-ui .f-subheadline-l{font-size:5rem}.swagger-ui .f1-l{font-size:3rem}.swagger-ui .f2-l{font-size:2.25rem}.swagger-ui .f3-l{font-size:1.5rem}.swagger-ui .f4-l{font-size:1.25rem}.swagger-ui .f5-l{font-size:1rem}.swagger-ui .f6-l{font-size:.875rem}.swagger-ui .f7-l{font-size:.75rem}}.swagger-ui .measure{max-width:30em}.swagger-ui .measure-wide{max-width:34em}.swagger-ui .measure-narrow{max-width:20em}.swagger-ui .indent{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (min-width:30em){.swagger-ui .measure-ns{max-width:30em}.swagger-ui .measure-wide-ns{max-width:34em}.swagger-ui .measure-narrow-ns{max-width:20em}.swagger-ui .indent-ns{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-ns{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-ns{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .measure-m{max-width:30em}.swagger-ui .measure-wide-m{max-width:34em}.swagger-ui .measure-narrow-m{max-width:20em}.swagger-ui .indent-m{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-m{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-m{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:60em){.swagger-ui .measure-l{max-width:30em}.swagger-ui .measure-wide-l{max-width:34em}.swagger-ui .measure-narrow-l{max-width:20em}.swagger-ui .indent-l{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-l{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.swagger-ui .overflow-container{overflow-y:scroll}.swagger-ui .center{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto{margin-right:auto}.swagger-ui .ml-auto{margin-left:auto}@media screen and (min-width:30em){.swagger-ui .center-ns{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-ns{margin-right:auto}.swagger-ui .ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .center-m{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-m{margin-right:auto}.swagger-ui .ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.swagger-ui .center-l{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-l{margin-right:auto}.swagger-ui .ml-auto-l{margin-left:auto}}.swagger-ui .clip{position:fixed!important;_position:absolute!important}.swagger-ui .clip{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}@media screen and (min-width:30em){.swagger-ui .clip-ns{position:fixed!important;_position:absolute!important}.swagger-ui .clip-ns{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .clip-m{position:fixed!important;_position:absolute!important}.swagger-ui .clip-m{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}@media screen and (min-width:60em){.swagger-ui .clip-l{position:fixed!important;_position:absolute!important}.swagger-ui .clip-l{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}.swagger-ui .ws-normal{white-space:normal}.swagger-ui .nowrap{white-space:nowrap}.swagger-ui .pre{white-space:pre}@media screen and (min-width:30em){.swagger-ui .ws-normal-ns{white-space:normal}.swagger-ui .nowrap-ns{white-space:nowrap}.swagger-ui .pre-ns{white-space:pre}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ws-normal-m{white-space:normal}.swagger-ui .nowrap-m{white-space:nowrap}.swagger-ui .pre-m{white-space:pre}}@media screen and (min-width:60em){.swagger-ui .ws-normal-l{white-space:normal}.swagger-ui .nowrap-l{white-space:nowrap}.swagger-ui .pre-l{white-space:pre}}.swagger-ui .v-base{vertical-align:baseline}.swagger-ui .v-mid{vertical-align:middle}.swagger-ui .v-top{vertical-align:top}.swagger-ui .v-btm{vertical-align:bottom}@media screen and (min-width:30em){.swagger-ui .v-base-ns{vertical-align:baseline}.swagger-ui .v-mid-ns{vertical-align:middle}.swagger-ui .v-top-ns{vertical-align:top}.swagger-ui .v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .v-base-m{vertical-align:baseline}.swagger-ui .v-mid-m{vertical-align:middle}.swagger-ui .v-top-m{vertical-align:top}.swagger-ui .v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.swagger-ui .v-base-l{vertical-align:baseline}.swagger-ui .v-mid-l{vertical-align:middle}.swagger-ui .v-top-l{vertical-align:top}.swagger-ui .v-btm-l{vertical-align:bottom}}.swagger-ui .dim{opacity:1;transition:opacity .15s ease-in}.swagger-ui .dim:focus,.swagger-ui .dim:hover{opacity:.5;transition:opacity .15s ease-in}.swagger-ui .dim:active{opacity:.8;transition:opacity .15s ease-out}.swagger-ui .glow{transition:opacity .15s ease-in}.swagger-ui .glow:focus,.swagger-ui .glow:hover{opacity:1;transition:opacity .15s ease-in}.swagger-ui .hide-child .child{opacity:0;transition:opacity .15s ease-in}.swagger-ui .hide-child:active .child,.swagger-ui .hide-child:focus .child,.swagger-ui .hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.swagger-ui .underline-hover:focus,.swagger-ui .underline-hover:hover{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-out}.swagger-ui .grow:focus,.swagger-ui .grow:hover{transform:scale(1.05)}.swagger-ui .grow:active{transform:scale(.9)}.swagger-ui .grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-in-out}.swagger-ui .grow-large:focus,.swagger-ui .grow-large:hover{transform:scale(1.2)}.swagger-ui .grow-large:active{transform:scale(.95)}.swagger-ui .pointer:hover{cursor:pointer}.swagger-ui .shadow-hover{cursor:pointer;position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.swagger-ui .shadow-hover:after{border-radius:inherit;box-shadow:0 0 16px 2px rgba(0,0,0,.2);content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .5s cubic-bezier(.165,.84,.44,1);width:100%;z-index:-1}.swagger-ui .shadow-hover:focus:after,.swagger-ui .shadow-hover:hover:after{opacity:1}.swagger-ui .bg-animate,.swagger-ui .bg-animate:focus,.swagger-ui .bg-animate:hover{transition:background-color .15s ease-in-out}.swagger-ui .z-0{z-index:0}.swagger-ui .z-1{z-index:1}.swagger-ui .z-2{z-index:2}.swagger-ui .z-3{z-index:3}.swagger-ui .z-4{z-index:4}.swagger-ui .z-5{z-index:5}.swagger-ui .z-999{z-index:999}.swagger-ui .z-9999{z-index:9999}.swagger-ui .z-max{z-index:2147483647}.swagger-ui .z-inherit{z-index:inherit}.swagger-ui .z-initial,.swagger-ui .z-unset{z-index:auto}.swagger-ui .nested-copy-line-height ol,.swagger-ui .nested-copy-line-height p,.swagger-ui .nested-copy-line-height ul{line-height:1.5}.swagger-ui .nested-headline-line-height h1,.swagger-ui .nested-headline-line-height h2,.swagger-ui .nested-headline-line-height h3,.swagger-ui .nested-headline-line-height h4,.swagger-ui .nested-headline-line-height h5,.swagger-ui .nested-headline-line-height h6{line-height:1.25}.swagger-ui .nested-list-reset ol,.swagger-ui .nested-list-reset ul{list-style-type:none;margin-left:0;padding-left:0}.swagger-ui .nested-copy-indent p+p{margin-bottom:0;margin-top:0;text-indent:.1em}.swagger-ui .nested-copy-seperator p+p{margin-top:1.5em}.swagger-ui .nested-img img{display:block;max-width:100%;width:100%}.swagger-ui .nested-links a{color:#357edd;transition:color .15s ease-in}.swagger-ui .nested-links a:focus,.swagger-ui .nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.swagger-ui .wrapper{box-sizing:border-box;margin:0 auto;max-width:1460px;padding:0 20px;width:100%}.swagger-ui .opblock-tag-section{display:flex;flex-direction:column}.swagger-ui .try-out.btn-group{display:flex;flex:.1 2 auto;padding:0}.swagger-ui .try-out__btn{margin-left:1.25rem}.swagger-ui .opblock-tag{align-items:center;border-bottom:1px solid rgba(59,65,81,.3);cursor:pointer;display:flex;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui .opblock-tag:hover{background:rgba(0,0,0,.02)}.swagger-ui .opblock-tag{color:#3b4151;font-family:sans-serif;font-size:24px;margin:0 0 5px}.swagger-ui .opblock-tag.no-desc span{flex:1}.swagger-ui .opblock-tag svg{transition:all .4s}.swagger-ui .opblock-tag small{color:#3b4151;flex:2;font-family:sans-serif;font-size:14px;font-weight:400;padding:0 10px}.swagger-ui .opblock-tag>div{flex:1 1 150px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.swagger-ui .opblock-tag small,.swagger-ui .opblock-tag>div{flex:1}}.swagger-ui .opblock-tag .info__externaldocs{text-align:right}.swagger-ui .parameter__type{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;padding:5px 0}.swagger-ui .parameter-controls{margin-top:.75em}.swagger-ui .examples__title{display:block;font-size:1.1em;font-weight:700;margin-bottom:.75em}.swagger-ui .examples__section{margin-top:1.5em}.swagger-ui .examples__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .examples-select{display:inline-block;margin-bottom:.75em}.swagger-ui .examples-select .examples-select-element{width:100%}.swagger-ui .examples-select__section-label{font-size:.9rem;font-weight:700;margin-right:.5rem}.swagger-ui .example__section{margin-top:1.5em}.swagger-ui .example__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .view-line-link{cursor:pointer;margin:0 5px;position:relative;top:3px;transition:all .5s;width:20px}.swagger-ui .opblock{border:1px solid #000;border-radius:4px;box-shadow:0 0 3px rgba(0,0,0,.19);margin:0 0 15px}.swagger-ui .opblock .tab-header{display:flex;flex:1}.swagger-ui .opblock .tab-header .tab-item{cursor:pointer;padding:0 40px}.swagger-ui .opblock .tab-header .tab-item:first-of-type{padding:0 40px 0 0}.swagger-ui .opblock .tab-header .tab-item.active h4 span{position:relative}.swagger-ui .opblock .tab-header .tab-item.active h4 span:after{background:gray;bottom:-15px;content:"";height:4px;left:50%;position:absolute;transform:translateX(-50%);width:120%}.swagger-ui .opblock.is-open .opblock-summary{border-bottom:1px solid #000}.swagger-ui .opblock .opblock-section-header{align-items:center;background:hsla(0,0%,100%,.8);box-shadow:0 1px 2px rgba(0,0,0,.1);display:flex;min-height:50px;padding:8px 20px}.swagger-ui .opblock .opblock-section-header>label{align-items:center;color:#3b4151;display:flex;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 0 auto}.swagger-ui .opblock .opblock-section-header>label>span{padding:0 10px 0 0}.swagger-ui .opblock .opblock-section-header h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock .opblock-summary-method{background:#000;border-radius:3px;color:#fff;font-family:sans-serif;font-size:14px;font-weight:700;min-width:80px;padding:6px 0;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1)}.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{align-items:center;color:#3b4151;display:flex;font-family:monospace;font-size:16px;font-weight:600;padding:0 10px;word-break:break-word}@media(max-width:768px){.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{font-size:12px}}.swagger-ui .opblock .opblock-summary-path{flex-shrink:0;max-width:calc(100% - 110px - 15rem)}@media(max-width:640px){.swagger-ui .opblock .opblock-summary-path{flex-shrink:1;max-width:100%}}.swagger-ui .opblock .opblock-summary-path__deprecated{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .opblock .opblock-summary-operation-id{font-size:14px}.swagger-ui .opblock .opblock-summary-description{color:#3b4151;flex:1 1 auto;font-family:sans-serif;font-size:13px;word-break:break-word}.swagger-ui .opblock .opblock-summary{align-items:center;cursor:pointer;display:flex;padding:5px}.swagger-ui .opblock .opblock-summary .view-line-link{cursor:pointer;margin:0;position:relative;top:2px;transition:all .5s;width:0}.swagger-ui .opblock .opblock-summary:hover .view-line-link{margin:0 5px;width:18px}.swagger-ui .opblock .opblock-summary:hover .view-line-link.copy-to-clipboard{width:24px}.swagger-ui .opblock.opblock-post{background:rgba(73,204,144,.1);border-color:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary-method{background:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary{border-color:#49cc90}.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span:after{background:#49cc90}.swagger-ui .opblock.opblock-put{background:rgba(252,161,48,.1);border-color:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary-method{background:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary{border-color:#fca130}.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span:after{background:#fca130}.swagger-ui .opblock.opblock-delete{background:rgba(249,62,62,.1);border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary{border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span:after{background:#f93e3e}.swagger-ui .opblock.opblock-get{background:rgba(97,175,254,.1);border-color:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary-method{background:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary{border-color:#61affe}.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span:after{background:#61affe}.swagger-ui .opblock.opblock-patch{background:rgba(80,227,194,.1);border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary{border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span:after{background:#50e3c2}.swagger-ui .opblock.opblock-head{background:rgba(144,18,254,.1);border-color:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary-method{background:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary{border-color:#9012fe}.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span:after{background:#9012fe}.swagger-ui .opblock.opblock-options{background:rgba(13,90,167,.1);border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary-method{background:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary{border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span:after{background:#0d5aa7}.swagger-ui .opblock.opblock-deprecated{background:hsla(0,0%,92%,.1);border-color:#ebebeb;opacity:.6}.swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#ebebeb}.swagger-ui .opblock.opblock-deprecated .opblock-summary{border-color:#ebebeb}.swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span:after{background:#ebebeb}.swagger-ui .opblock .opblock-schemes{padding:8px 20px}.swagger-ui .opblock .opblock-schemes .schemes-title{padding:0 10px 0 0}.swagger-ui .filter .operation-filter-input{border:2px solid #d8dde7;margin:20px 0;padding:10px;width:100%}.swagger-ui .download-url-wrapper .failed,.swagger-ui .filter .failed{color:red}.swagger-ui .download-url-wrapper .loading,.swagger-ui .filter .loading{color:#aaa}.swagger-ui .model-example{margin-top:1em}.swagger-ui .tab{display:flex;list-style:none;padding:0}.swagger-ui .tab li{color:#3b4151;cursor:pointer;font-family:sans-serif;font-size:12px;min-width:60px;padding:0}.swagger-ui .tab li:first-of-type{padding-left:0;padding-right:12px;position:relative}.swagger-ui .tab li:first-of-type:after{background:rgba(0,0,0,.2);content:"";height:100%;position:absolute;right:6px;top:0;width:1px}.swagger-ui .tab li.active{font-weight:700}.swagger-ui .tab li button.tablinks{background:none;border:0;color:inherit;font-family:inherit;font-weight:inherit;padding:0}.swagger-ui .opblock-description-wrapper,.swagger-ui .opblock-external-docs-wrapper,.swagger-ui .opblock-title_normal{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px;padding:15px 20px}.swagger-ui .opblock-description-wrapper h4,.swagger-ui .opblock-external-docs-wrapper h4,.swagger-ui .opblock-title_normal h4{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .opblock-description-wrapper p,.swagger-ui .opblock-external-docs-wrapper p,.swagger-ui .opblock-title_normal p{color:#3b4151;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock-external-docs-wrapper h4{padding-left:0}.swagger-ui .execute-wrapper{padding:20px;text-align:right}.swagger-ui .execute-wrapper .btn{padding:8px 40px;width:100%}.swagger-ui .body-param-options{display:flex;flex-direction:column}.swagger-ui .body-param-options .body-param-edit{padding:10px 0}.swagger-ui .body-param-options label{padding:8px 0}.swagger-ui .body-param-options label select{margin:3px 0 0}.swagger-ui .responses-inner{padding:20px}.swagger-ui .responses-inner h4,.swagger-ui .responses-inner h5{color:#3b4151;font-family:sans-serif;font-size:12px;margin:10px 0 5px}.swagger-ui .responses-inner .curl{white-space:normal}.swagger-ui .response-col_status{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .response-col_status .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links{color:#3b4151;font-family:sans-serif;font-size:14px;max-width:40em;padding-left:2em}.swagger-ui .response-col_links .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links .operation-link{margin-bottom:1.5em}.swagger-ui .response-col_links .operation-link .description{margin-bottom:.5em}.swagger-ui .opblock-body .opblock-loading-animation{display:block;margin:3em auto}.swagger-ui .opblock-body pre.microlight{word-wrap:break-word;background:#333;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;-webkit-hyphens:auto;hyphens:auto;margin:0;padding:10px;white-space:pre-wrap;word-break:break-all;word-break:break-word}.swagger-ui .opblock-body pre.microlight .headerline{display:block}.swagger-ui .highlight-code{position:relative}.swagger-ui .highlight-code>.microlight{max-height:400px;min-height:6em;overflow-y:auto}.swagger-ui .highlight-code>.microlight code{white-space:pre-wrap!important}.swagger-ui .highlight-code>.microlight code{word-break:break-all}.swagger-ui .curl-command{position:relative}.swagger-ui .download-contents{align-items:center;background:#7d8293;border-radius:4px;bottom:10px;color:#fff;cursor:pointer;display:flex;font-family:sans-serif;font-size:14px;font-weight:600;height:30px;justify-content:center;padding:5px;position:absolute;right:10px;text-align:center}.swagger-ui .scheme-container{background:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.15);margin:0 0 20px;padding:30px 0}.swagger-ui .scheme-container .schemes{align-items:flex-end;display:flex}.swagger-ui .scheme-container .schemes>label{color:#3b4151;display:flex;flex-direction:column;font-family:sans-serif;font-size:12px;font-weight:700;margin:-20px 15px 0 0}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{align-items:center;display:flex;flex-direction:column;justify-content:center;margin-top:1em;min-height:1px;padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading:after{color:#3b4151;content:"loading";font-family:sans-serif;font-size:10px;font-weight:700;left:50%;position:absolute;text-transform:uppercase;top:50%;transform:translate(-50%,-50%)}.swagger-ui .loading-container .loading:before{animation:rotation 1s linear infinite,opacity .5s;-webkit-backface-visibility:hidden;backface-visibility:hidden;border:2px solid rgba(85,85,85,.1);border-radius:100%;border-top-color:rgba(0,0,0,.6);content:"";display:block;height:60px;left:50%;margin:-30px;opacity:1;position:absolute;top:50%;width:60px}@keyframes rotation{to{transform:rotate(1turn)}}.swagger-ui .response-controls{display:flex;padding-top:1em}.swagger-ui .response-control-media-type{margin-right:1em}.swagger-ui .response-control-media-type--accept-controller select{border-color:green}.swagger-ui .response-control-media-type__accept-message{color:green;font-size:.7em}.swagger-ui .response-control-examples__title,.swagger-ui .response-control-media-type__title{display:block;font-size:.7em;margin-bottom:.2em}@keyframes blinker{50%{opacity:0}}.swagger-ui .hidden{display:none}.swagger-ui .no-margin{border:none;height:auto;margin:0;padding:0}.swagger-ui .float-right{float:right}.swagger-ui .svg-assets{height:0;position:absolute;width:0}.swagger-ui section h3{color:#3b4151;font-family:sans-serif}.swagger-ui a.nostyle{display:inline}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:inherit;cursor:pointer;text-decoration:inherit}.swagger-ui .fallback{color:#aaa;padding:1em}.swagger-ui .version-pragma{height:100%;padding:5em 0}.swagger-ui .version-pragma__message{display:flex;font-size:1.2em;height:100%;justify-content:center;line-height:1.5em;padding:0 .6em;text-align:center}.swagger-ui .version-pragma__message>div{flex:1;max-width:55ch}.swagger-ui .version-pragma__message code{background-color:#dedede;padding:4px 4px 2px;white-space:pre}.swagger-ui .opblock-link{font-weight:400}.swagger-ui .opblock-link.shown{font-weight:700}.swagger-ui span.token-string{color:#555}.swagger-ui span.token-not-formatted{color:#555;font-weight:700}.swagger-ui .btn{background:transparent;border:2px solid gray;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.1);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 23px;transition:all .3s}.swagger-ui .btn.btn-sm{font-size:12px;padding:4px 23px}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{box-shadow:0 0 5px rgba(0,0,0,.3)}.swagger-ui .btn.cancel{background-color:transparent;border-color:#ff6060;color:#ff6060;font-family:sans-serif}.swagger-ui .btn.authorize{background-color:transparent;border-color:#49cc90;color:#49cc90;display:inline;line-height:1}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{background-color:#4990e2;border-color:#4990e2;color:#fff}.swagger-ui .btn-group{display:flex;padding:30px}.swagger-ui .btn-group .btn{flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{background:none;border:none;padding:0 0 0 10px}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .model-box-control,.swagger-ui .models-control,.swagger-ui .opblock-summary-control{all:inherit;border-bottom:0;cursor:pointer;flex:1;padding:0}.swagger-ui .model-box-control:focus,.swagger-ui .models-control:focus,.swagger-ui .opblock-summary-control:focus{outline:auto}.swagger-ui .expand-methods,.swagger-ui .expand-operation{background:none;border:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{height:20px;width:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#404040}.swagger-ui .expand-methods svg{fill:#707070;transition:all .3s}.swagger-ui button{cursor:pointer}.swagger-ui button.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .copy-to-clipboard{align-items:center;background:#7d8293;border:none;border-radius:4px;bottom:10px;display:flex;height:30px;justify-content:center;position:absolute;right:100px;width:30px}.swagger-ui .copy-to-clipboard button{background:url("data:image/svg+xml;charset=utf-8,") 50% no-repeat;border:none;flex-grow:1;flex-shrink:1;height:25px}.swagger-ui .curl-command .copy-to-clipboard{bottom:5px;height:20px;right:10px;width:20px}.swagger-ui .curl-command .copy-to-clipboard button{height:18px}.swagger-ui .opblock .opblock-summary .view-line-link.copy-to-clipboard{height:26px;position:static}.swagger-ui select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f7f7f7 url("data:image/svg+xml;charset=utf-8,") right 10px center no-repeat;background-size:20px;border:2px solid #41444e;border-radius:4px;box-shadow:0 1px 2px 0 rgba(0,0,0,.25);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 40px 5px 10px}.swagger-ui select[multiple]{background:#f7f7f7;margin:5px 0;padding:5px}.swagger-ui select.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .opblock-body select{min-width:230px}@media(max-width:768px){.swagger-ui .opblock-body select{min-width:180px}}@media(max-width:640px){.swagger-ui .opblock-body select{min-width:100%;width:100%}}.swagger-ui label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 5px}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{line-height:1}@media(max-width:768px){.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{max-width:175px}}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text],.swagger-ui textarea{background:#fff;border:1px solid #d9d9d9;border-radius:4px;margin:5px 0;min-width:100px;padding:8px 10px}.swagger-ui input[type=email].invalid,.swagger-ui input[type=file].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;transition:opacity .5s}.swagger-ui .checkbox label{display:flex}.swagger-ui .checkbox p{font-weight:400!important;margin:0!important}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:600}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url("data:image/svg+xml;charset=utf-8,") 50% no-repeat}.swagger-ui .dialog-ux{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;box-shadow:0 10px 30px 0 rgba(0,0,0,.2);left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{align-items:center;border-bottom:1px solid #ebebeb;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;transform:rotate(90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .model-toggle.collapsed{transform:rotate(0deg)}.swagger-ui .model-toggle:after{background:url("data:image/svg+xml;charset=utf-8,") 50% no-repeat;background-size:100%;content:"";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;padding:.1em .5em;position:absolute;top:-1.8em;visibility:hidden;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui .model .external-docs,.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui table.model tr.external-docs td:first-child{font-weight:700}.swagger-ui table.model tr .renderedMarkdown p:first-child{margin-top:0}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{align-items:center;color:#606060;cursor:pointer;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px;width:100%}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameters-col_description .markdown p{margin:0}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required:after{color:rgba(255,0,0,.6);content:"required";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_description .markdown p{margin:0}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{align-items:center;display:flex}.swagger-ui .topbar a{color:#fff;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;-webkit-text-decoration:none;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:flex;flex:3;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{align-items:center;color:#f0f0f0;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;box-shadow:none;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info pre{font-size:14px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{font-weight:300!important}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:flex;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:flex;flex:1;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-left:10px;margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{align-items:center;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;margin:0}@keyframes scaleUp{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block} + +/*# sourceMappingURL=swagger-ui.css.map*/ \ No newline at end of file diff --git a/backend/resources/app/assets/swagger-ui-4.18.3.js b/backend/resources/app/assets/swagger-ui-4.18.3.js new file mode 100644 index 0000000000..c4fc703836 --- /dev/null +++ b/backend/resources/app/assets/swagger-ui-4.18.3.js @@ -0,0 +1,3 @@ +/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,(()=>(()=>{var e={17967:(e,t)=>{"use strict";t.N=void 0;var n=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,o=/&(newline|tab);/gi,a=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,i=/^.+(:|:)/gim,s=[".","/"];t.N=function(e){var t,l=(t=e||"",t.replace(r,(function(e,t){return String.fromCharCode(t)}))).replace(o,"").replace(a,"").trim();if(!l)return"about:blank";if(function(e){return s.indexOf(e[0])>-1}(l))return l;var u=l.match(i);if(!u)return l;var c=u[0];return n.test(c)?"about:blank":l}},53795:(e,t,n)=>{"use strict";n.d(t,{Z:()=>T});var r=n(23101),o=n.n(r),a=n(61125),i=n.n(a),s=n(11882),l=n.n(s),u=n(97606),c=n.n(u),p=n(67294),f=n(43393);function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function d(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=function(e,t){return function(n){if("string"==typeof n)return(0,f.is)(t[n],e[n]);if(Array.isArray(n))return(0,f.is)(x(t,n),x(e,n));throw new TypeError("Invalid key: expected Array or string: "+n)}}(t,n),o=e||Object.keys(function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return!_(this.updateOnProps,this.props,e,"updateOnProps")||!_(this.updateOnStates,this.state,t,"updateOnStates")}}],r&&d(n.prototype,r),o&&d(n,o),t}(p.Component);var A=n(23930),C=n.n(A),k=n(45697),O=n.n(k);const j=e=>{const t=e.replace(/~1/g,"/").replace(/~0/g,"~");try{return decodeURIComponent(t)}catch{return t}};class T extends S{constructor(){super(...arguments),i()(this,"getModelName",(e=>-1!==l()(e).call(e,"#/definitions/")?j(e.replace(/^.*#\/definitions\//,"")):-1!==l()(e).call(e,"#/components/schemas/")?j(e.replace(/^.*#\/components\/schemas\//,"")):void 0)),i()(this,"getRefSchema",(e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)}))}render(){let{getComponent:e,getConfigs:t,specSelectors:r,schema:a,required:i,name:s,isRef:l,specPath:u,displayName:c,includeReadOnly:f,includeWriteOnly:h}=this.props;const d=e("ObjectModel"),m=e("ArrayModel"),g=e("PrimitiveModel");let y="object",v=a&&a.get("$$ref");if(!s&&v&&(s=this.getModelName(v)),!a&&v&&(a=this.getRefSchema(s)),!a)return p.createElement("span",{className:"model model-title"},p.createElement("span",{className:"model-title__text"},c||s),p.createElement("img",{src:n(2517),height:"20px",width:"20px"}));const b=r.isOAS3()&&a.get("deprecated");switch(l=void 0!==l?l:!!v,y=a&&a.get("type")||y,y){case"object":return p.createElement(d,o()({className:"object"},this.props,{specPath:u,getConfigs:t,schema:a,name:s,deprecated:b,isRef:l,includeReadOnly:f,includeWriteOnly:h}));case"array":return p.createElement(m,o()({className:"array"},this.props,{getConfigs:t,schema:a,name:s,deprecated:b,required:i,includeReadOnly:f,includeWriteOnly:h}));default:return p.createElement(g,o()({},this.props,{getComponent:e,getConfigs:t,schema:a,name:s,deprecated:b,required:i}))}}}i()(T,"propTypes",{schema:c()(C()).isRequired,getComponent:O().func.isRequired,getConfigs:O().func.isRequired,specSelectors:O().object.isRequired,name:O().string,displayName:O().string,isRef:O().bool,required:O().bool,expandDepth:O().number,depth:O().number,specPath:C().list.isRequired,includeReadOnly:O().bool,includeWriteOnly:O().bool})},5623:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(61125),o=n.n(r),a=n(28222),i=n.n(a),s=n(67294),l=n(84564),u=n.n(l),c=n(90242),p=n(27504);class f extends s.Component{constructor(e,t){super(e,t),o()(this,"getDefinitionUrl",(()=>{let{specSelectors:e}=this.props;return new(u())(e.url(),p.Z.location).toString()}));let{getConfigs:n}=e,{validatorUrl:r}=n();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===r?"https://validator.swagger.io/validator":r}}UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:n}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===n?"https://validator.swagger.io/validator":n})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),n=(0,c.Nm)(this.state.validatorUrl);return"object"==typeof t&&i()(t).length?null:this.state.url&&(0,c.hW)(this.state.validatorUrl)&&(0,c.hW)(this.state.url)?s.createElement("span",{className:"float-right"},s.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:`${n}/debug?url=${encodeURIComponent(this.state.url)}`},s.createElement(h,{src:`${n}?url=${encodeURIComponent(this.state.url)}`,alt:"Online validator badge"}))):null}}class h extends s.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?s.createElement("img",{alt:"Error"}):this.state.loaded?s.createElement("img",{src:this.props.src,alt:this.props.alt}):null}}},94994:(e,t,n)=>{"use strict";n.d(t,{Z:()=>ye,s:()=>ve});var r=n(67294),o=n(89927);function a(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n=0;n--)!0===t(e[n])&&e.splice(n,1)}function s(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var l=function(){function e(e){void 0===e&&(e={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=e.tagName||"",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||""}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr("class",e)},e.prototype.addClass=function(e){for(var t,n=this.getClass(),r=this.whitespaceRegex,o=n?n.split(r):[],i=e.split(r);t=i.shift();)-1===a(o,t)&&o.push(t);return this.getAttrs().class=o.join(" "),this},e.prototype.removeClass=function(e){for(var t,n=this.getClass(),r=this.whitespaceRegex,o=n?n.split(r):[],i=e.split(r);o.length&&(t=i.shift());){var s=a(o,t);-1!==s&&o.splice(s,1)}return this.getAttrs().class=o.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(e){return-1!==(" "+this.getClass()+" ").indexOf(" "+e+" ")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return["<",e,t=t?" "+t:"",">",this.getInnerHtml(),""].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+'="'+e[n]+'"');return t.join(" ")},e}();var u=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||""}return e.prototype.build=function(e){return new l({tagName:"a",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},n=this.createCssClass(e);return n&&(t.class=n),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length=s)return l.host.length==t?(l.host.substr(0,t-o)+n).substr(0,s+r):i(c,s).substr(0,s+r);var p="";if(l.path&&(p+="/"+l.path),l.query&&(p+="?"+l.query),p){if((c+p).length>=s)return(c+p).length==t?(c+p).substr(0,t):(c+i(p,s-c.length)).substr(0,s+r);c+=p}if(l.fragment){var f="#"+l.fragment;if((c+f).length>=s)return(c+f).length==t?(c+f).substr(0,t):(c+i(f,s-c.length)).substr(0,s+r);c+=f}if(l.scheme&&l.host){var h=l.scheme+"://";if((c+h).length0&&(d=c.substr(-1*Math.floor(s/2))),(c.substr(0,Math.ceil(s/2))+n+d).substr(0,s+r)}(e,n):"middle"===r?function(e,t,n){if(e.length<=t)return e;var r,o;null==n?(n="…",r=8,o=3):(r=n.length,o=n.length);var a=t-o,i="";return a>0&&(i=e.substr(-1*Math.floor(a/2))),(e.substr(0,Math.ceil(a/2))+n+i).substr(0,a+r)}(e,n):function(e,t,n){return function(e,t,n){var r;return e.length>t&&(null==n?(n="…",r=3):r=n.length,e=e.substring(0,t-r)+n),e}(e,t,n)}(e,n)},e}(),c=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),p=function(e,t){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},p(e,t)};function f(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var h=function(){return h=Object.assign||function(e){for(var t,n=1,r=arguments.length;n-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),n=t&&t[0].toLowerCase();return"javascript:"!==n&&"vbscript:"!==n},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf("."))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&(!this.hasFullProtocolRegex.test(t)&&!this.hasWordCharAfterProtocolRegex.test(e))},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+k+"]"),e.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,e}(),V=(d=new RegExp("[/?#](?:["+I+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^✓]*["+I+"\\-+&@#/%=~_()|'$*\\[\\]{}✓])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,D(2),")","|","(","(//)?",/(?:www\.)/.source,D(6),")","|","(","(//)?",D(10)+"\\.",B.source,"(?![-"+T+"])",")",")","(?::[0-9]+)?","(?:"+d.source+")?"].join(""),"gi")),W=new RegExp("["+I+"]"),H=function(e){function t(t){var n=e.call(this,t)||this;return n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.matcherRegex=V,n.wordCharRegExp=W,n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return f(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,r=this.stripPrefix,o=this.stripTrailingSlash,a=this.decodePercentEncoding,i=this.tagBuilder,s=[],l=function(){var n=t[0],l=t[1],c=t[4],p=t[5],f=t[9],h=t.index,d=p||f,m=e.charAt(h-1);if(!$.isValid(n,l))return"continue";if(h>0&&"@"===m)return"continue";if(h>0&&d&&u.wordCharRegExp.test(m))return"continue";if(/\?$/.test(n)&&(n=n.substr(0,n.length-1)),u.matchHasUnbalancedClosingParen(n))n=n.substr(0,n.length-1);else{var g=u.matchHasInvalidCharAfterTld(n,l);g>-1&&(n=n.substr(0,g))}var y=["http://","https://"].find((function(e){return!!l&&-1!==l.indexOf(e)}));if(y){var v=n.indexOf(y);n=n.substr(v),l=l.substr(v),h+=v}var w=l?"scheme":c?"www":"tld",E=!!l;s.push(new b({tagBuilder:i,matchedText:n,offset:h,urlMatchType:w,url:n,protocolUrlMatch:E,protocolRelativeMatch:!!d,stripPrefix:r,stripTrailingSlash:o,decodePercentEncoding:a}))},u=this;null!==(t=n.exec(e));)l();return s},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,n=e.charAt(e.length-1);if(")"===n)t="(";else if("]"===n)t="[";else{if("}"!==n)return!1;t="{"}for(var r=0,o=0,a=e.length-1;o-1&&a-i<=140){var o=e.slice(i,a),s=new g({tagBuilder:t,matchedText:o,offset:i,serviceName:n,hashtag:o.slice(1)});r.push(s)}}},t}(w),G=["twitter","facebook","instagram","tiktok"],Z=new RegExp("".concat(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source,"|").concat(/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source),"g"),Y=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=Z,t}return f(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,r=this.tagBuilder,o=[];null!==(t=n.exec(e));){var a=t[0],i=a.replace(/[^0-9,;#]/g,""),s=!(!t[1]&&!t[2]),l=0==t.index?"":e.substr(t.index-1,1),u=e.substr(t.index+a.length,1),c=!l.match(/\d/)&&!u.match(/\d/);this.testMatch(t[3])&&this.testMatch(a)&&c&&o.push(new v({tagBuilder:r,matchedText:a,offset:t.index,number:i,plusSign:s}))}return o},t.prototype.testMatch=function(e){return _.test(e)},t}(w),Q=new RegExp("@[_".concat(I,"]{1,50}(?![_").concat(I,"])"),"g"),X=new RegExp("@[_.".concat(I,"]{1,30}(?![_").concat(I,"])"),"g"),ee=new RegExp("@[-_.".concat(I,"]{1,50}(?![-_").concat(I,"])"),"g"),te=new RegExp("@[_.".concat(I,"]{1,23}[_").concat(I,"](?![_").concat(I,"])"),"g"),ne=new RegExp("[^"+I+"]"),re=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName="twitter",n.matcherRegexes={twitter:Q,instagram:X,soundcloud:ee,tiktok:te},n.nonWordCharRegex=ne,n.serviceName=t.serviceName,n}return f(t,e),t.prototype.parseMatches=function(e){var t,n=this.serviceName,r=this.matcherRegexes[this.serviceName],o=this.nonWordCharRegex,a=this.tagBuilder,i=[];if(!r)return i;for(;null!==(t=r.exec(e));){var s=t.index,l=e.charAt(s-1);if(0===s||o.test(l)){var u=t[0].replace(/\.+$/g,""),c=u.slice(1);i.push(new y({tagBuilder:a,matchedText:u,offset:s,serviceName:n,mention:c}))}}return i},t}(w);function oe(e,t){for(var n,r=t.onOpenTag,o=t.onCloseTag,a=t.onText,i=t.onComment,l=t.onDoctype,u=new ae,c=0,p=e.length,f=0,d=0,m=u;c"===e?(m=new ae(h(h({},m),{name:H()})),W()):E.test(e)||x.test(e)||":"===e||$()}function w(e){">"===e?$():E.test(e)?f=3:$()}function _(e){S.test(e)||("/"===e?f=12:">"===e?W():"<"===e?V():"="===e||A.test(e)||C.test(e)?$():f=5)}function k(e){S.test(e)?f=6:"/"===e?f=12:"="===e?f=7:">"===e?W():"<"===e?V():A.test(e)&&$()}function O(e){S.test(e)||("/"===e?f=12:"="===e?f=7:">"===e?W():"<"===e?V():A.test(e)?$():f=5)}function j(e){S.test(e)||('"'===e?f=8:"'"===e?f=9:/[>=`]/.test(e)?$():"<"===e?V():f=10)}function T(e){'"'===e&&(f=11)}function I(e){"'"===e&&(f=11)}function N(e){S.test(e)?f=4:">"===e?W():"<"===e&&V()}function P(e){S.test(e)?f=4:"/"===e?f=12:">"===e?W():"<"===e?V():(f=4,c--)}function R(e){">"===e?(m=new ae(h(h({},m),{isClosing:!0})),W()):f=4}function M(t){"--"===e.substr(c,2)?(c+=2,m=new ae(h(h({},m),{type:"comment"})),f=14):"DOCTYPE"===e.substr(c,7).toUpperCase()?(c+=7,m=new ae(h(h({},m),{type:"doctype"})),f=20):$()}function D(e){"-"===e?f=15:">"===e?$():f=16}function L(e){"-"===e?f=18:">"===e?$():f=16}function B(e){"-"===e&&(f=17)}function F(e){f="-"===e?18:16}function U(e){">"===e?W():"!"===e?f=19:"-"===e||(f=16)}function z(e){"-"===e?f=17:">"===e?W():f=16}function q(e){">"===e?W():"<"===e&&V()}function $(){f=0,m=u}function V(){f=1,m=new ae({idx:c})}function W(){var t=e.slice(d,m.idx);t&&a(t,d),"comment"===m.type?i(m.idx):"doctype"===m.type?l(m.idx):(m.isOpening&&r(m.name,m.idx),m.isClosing&&o(m.name,m.idx)),$(),d=c+1}function H(){var t=m.idx+(m.isClosing?2:1);return e.slice(t,c).toLowerCase()}d=0&&r++},onText:function(e,n){if(0===r){var a=function(e,t){if(!t.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var n,r=[],o=0;n=t.exec(e);)r.push(e.substring(o,n.index)),r.push(n[0]),o=n.index+n[0].length;return r.push(e.substring(o)),r}(e,/( | |<|<|>|>|"|"|')/gi),i=n;a.forEach((function(e,n){if(n%2==0){var r=t.parseText(e,i);o.push.apply(o,r)}i+=e.length}))}},onCloseTag:function(e){n.indexOf(e)>=0&&(r=Math.max(r-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;to?t:t+1;e.splice(i,1);continue}if(e[t+1].getOffset()/g,">"));for(var t=this.parse(e),n=[],r=0,o=0,a=t.length;o/i.test(e)}function ue(){var e=[],t=new ie({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case"url":e.push({text:t.matchedText,url:t.getUrl()});break;case"email":e.push({text:t.matchedText,url:"mailto:"+t.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:e,autolinker:t}}function ce(e){var t,n,r,o,a,i,s,l,u,c,p,f,h,d,m=e.tokens,g=null;for(n=0,r=m.length;n=0;t--)if("link_close"!==(a=o[t]).type){if("htmltag"===a.type&&(d=a.content,/^\s]/i.test(d)&&p>0&&p--,le(a.content)&&p++),!(p>0)&&"text"===a.type&&se.test(a.content)){if(g||(f=(g=ue()).links,h=g.autolinker),i=a.content,f.length=0,h.link(i),!f.length)continue;for(s=[],c=a.level,l=0;l({useUnsafeMarkdown:!1})};const ye=ge;function ve(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t,r=t?[]:["style","class"];return t&&!ve.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),ve.hasWarnedAboutDeprecation=!0),he().sanitize(e,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:n,FORBID_ATTR:r})}ve.hasWarnedAboutDeprecation=!1},45308:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var r,o=n(86),a=n.n(o),i=n(8712),s=n.n(i),l=n(90242),u=n(27621);const c=n(95102),p={},f=p;a()(r=s()(c).call(c)).call(r,(function(e){if("./index.js"===e)return;let t=c(e);p[(0,l.Zl)(e)]=t.default?t.default:t})),p.SafeRender=u.default},55812:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AUTHORIZE:()=>f,AUTHORIZE_OAUTH2:()=>m,CONFIGURE_AUTH:()=>y,LOGOUT:()=>h,PRE_AUTHORIZE_OAUTH2:()=>d,RESTORE_AUTHORIZATION:()=>v,SHOW_AUTH_POPUP:()=>p,VALIDATE:()=>g,authPopup:()=>M,authorize:()=>w,authorizeAccessCodeWithBasicAuthentication:()=>T,authorizeAccessCodeWithFormParams:()=>j,authorizeApplication:()=>O,authorizeOauth2:()=>A,authorizeOauth2WithPersistOption:()=>C,authorizePassword:()=>k,authorizeRequest:()=>I,authorizeWithPersistOption:()=>E,configureAuth:()=>N,logout:()=>x,logoutWithPersistOption:()=>_,persistAuthorizationIfNeeded:()=>R,preAuthorizeImplicit:()=>S,restoreAuthorization:()=>P,showDefinitions:()=>b});var r=n(35627),o=n.n(r),a=n(76986),i=n.n(a),s=n(84564),l=n.n(s),u=n(27504),c=n(90242);const p="show_popup",f="authorize",h="logout",d="pre_authorize_oauth2",m="authorize_oauth2",g="validate",y="configure_auth",v="restore_authorization";function b(e){return{type:p,payload:e}}function w(e){return{type:f,payload:e}}const E=e=>t=>{let{authActions:n}=t;n.authorize(e),n.persistAuthorizationIfNeeded()};function x(e){return{type:h,payload:e}}const _=e=>t=>{let{authActions:n}=t;n.logout(e),n.persistAuthorizationIfNeeded()},S=e=>t=>{let{authActions:n,errActions:r}=t,{auth:a,token:i,isValid:s}=e,{schema:l,name:c}=a,p=l.get("flow");delete u.Z.swaggerUIRedirectOauth2,"accessCode"===p||s||r.newAuthErr({authId:c,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),i.error?r.newAuthErr({authId:c,source:"auth",level:"error",message:o()(i)}):n.authorizeOauth2WithPersistOption({auth:a,token:i})};function A(e){return{type:m,payload:e}}const C=e=>t=>{let{authActions:n}=t;n.authorizeOauth2(e),n.persistAuthorizationIfNeeded()},k=e=>t=>{let{authActions:n}=t,{schema:r,name:o,username:a,password:s,passwordType:l,clientId:u,clientSecret:p}=e,f={grant_type:"password",scope:e.scopes.join(" "),username:a,password:s},h={};switch(l){case"request-body":!function(e,t,n){t&&i()(e,{client_id:t});n&&i()(e,{client_secret:n})}(f,u,p);break;case"basic":h.Authorization="Basic "+(0,c.r3)(u+":"+p);break;default:console.warn(`Warning: invalid passwordType ${l} was passed, not including client id and secret`)}return n.authorizeRequest({body:(0,c.GZ)(f),url:r.get("tokenUrl"),name:o,headers:h,query:{},auth:e})};const O=e=>t=>{let{authActions:n}=t,{schema:r,scopes:o,name:a,clientId:i,clientSecret:s}=e,l={Authorization:"Basic "+(0,c.r3)(i+":"+s)},u={grant_type:"client_credentials",scope:o.join(" ")};return n.authorizeRequest({body:(0,c.GZ)(u),name:a,url:r.get("tokenUrl"),auth:e,headers:l})},j=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:r}=e,{schema:o,name:a,clientId:i,clientSecret:s,codeVerifier:l}=t,u={grant_type:"authorization_code",code:t.code,client_id:i,client_secret:s,redirect_uri:n,code_verifier:l};return r.authorizeRequest({body:(0,c.GZ)(u),name:a,url:o.get("tokenUrl"),auth:t})}},T=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:r}=e,{schema:o,name:a,clientId:i,clientSecret:s,codeVerifier:l}=t,u={Authorization:"Basic "+(0,c.r3)(i+":"+s)},p={grant_type:"authorization_code",code:t.code,client_id:i,redirect_uri:n,code_verifier:l};return r.authorizeRequest({body:(0,c.GZ)(p),name:a,url:o.get("tokenUrl"),auth:t,headers:u})}},I=e=>t=>{let n,{fn:r,getConfigs:a,authActions:s,errActions:u,oas3Selectors:c,specSelectors:p,authSelectors:f}=t,{body:h,query:d={},headers:m={},name:g,url:y,auth:v}=e,{additionalQueryStringParams:b}=f.getConfigs()||{};if(p.isOAS3()){let e=c.serverEffectiveValue(c.selectedServer());n=l()(y,e,!0)}else n=l()(y,p.url(),!0);"object"==typeof b&&(n.query=i()({},n.query,b));const w=n.toString();let E=i()({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},m);r.fetch({url:w,method:"post",headers:E,query:d,body:h,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),n=t&&(t.error||""),r=t&&(t.parseError||"");e.ok?n||r?u.newAuthErr({authId:g,level:"error",source:"auth",message:o()(t)}):s.authorizeOauth2WithPersistOption({auth:v,token:t}):u.newAuthErr({authId:g,level:"error",source:"auth",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const n=e.response.data;try{const e="string"==typeof n?JSON.parse(n):n;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}u.newAuthErr({authId:g,level:"error",source:"auth",message:t})}))};function N(e){return{type:y,payload:e}}function P(e){return{type:v,payload:e}}const R=()=>e=>{let{authSelectors:t,getConfigs:n}=e;if(n().persistAuthorization){const e=t.authorized();localStorage.setItem("authorized",o()(e.toJS()))}},M=(e,t)=>()=>{u.Z.swaggerUIRedirectOauth2=t,u.Z.open(e)}},93705:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u,preauthorizeApiKey:()=>p,preauthorizeBasic:()=>c});var r=n(11189),o=n.n(r),a=n(43962),i=n(55812),s=n(60035),l=n(48302);function u(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=o()(p).call(p,null,e),this.rootInjects.preauthorizeBasic=o()(c).call(c,null,e)},statePlugins:{auth:{reducers:a.default,actions:i,selectors:s},spec:{wrapActions:l}}}}function c(e,t,n,r){const{authActions:{authorize:o},specSelectors:{specJson:a,isOAS3:i}}=e,s=i()?["components","securitySchemes"]:["securityDefinitions"],l=a().getIn([...s,t]);return l?o({[t]:{value:{username:n,password:r},schema:l.toJS()}}):null}function p(e,t,n){const{authActions:{authorize:r},specSelectors:{specJson:o,isOAS3:a}}=e,i=a()?["components","securitySchemes"]:["securityDefinitions"],s=o().getIn([...i,t]);return s?r({[t]:{value:n,schema:s.toJS()}}):null}},43962:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(86),o=n.n(r),a=n(76986),i=n.n(a),s=n(43393),l=n(90242),u=n(55812);const c={[u.SHOW_AUTH_POPUP]:(e,t)=>{let{payload:n}=t;return e.set("showDefinitions",n)},[u.AUTHORIZE]:(e,t)=>{var n;let{payload:r}=t,a=(0,s.fromJS)(r),i=e.get("authorized")||(0,s.Map)();return o()(n=a.entrySeq()).call(n,(t=>{let[n,r]=t;if(!(0,l.Wl)(r.getIn))return e.set("authorized",i);let o=r.getIn(["schema","type"]);if("apiKey"===o||"http"===o)i=i.set(n,r);else if("basic"===o){let e=r.getIn(["value","username"]),t=r.getIn(["value","password"]);i=i.setIn([n,"value"],{username:e,header:"Basic "+(0,l.r3)(e+":"+t)}),i=i.setIn([n,"schema"],r.get("schema"))}})),e.set("authorized",i)},[u.AUTHORIZE_OAUTH2]:(e,t)=>{let n,{payload:r}=t,{auth:o,token:a}=r;o.token=i()({},a),n=(0,s.fromJS)(o);let l=e.get("authorized")||(0,s.Map)();return l=l.set(n.get("name"),n),e.set("authorized",l)},[u.LOGOUT]:(e,t)=>{let{payload:n}=t,r=e.get("authorized").withMutations((e=>{o()(n).call(n,(t=>{e.delete(t)}))}));return e.set("authorized",r)},[u.CONFIGURE_AUTH]:(e,t)=>{let{payload:n}=t;return e.set("configs",n)},[u.RESTORE_AUTHORIZATION]:(e,t)=>{let{payload:n}=t;return e.set("authorized",(0,s.fromJS)(n.authorized))}}},60035:(e,t,n)=>{"use strict";n.r(t),n.d(t,{authorized:()=>x,definitionsForRequirements:()=>E,definitionsToAuthorize:()=>b,getConfigs:()=>S,getDefinitionsByNames:()=>w,isAuthorized:()=>_,shownDefinitions:()=>v});var r=n(86),o=n.n(r),a=n(51679),i=n.n(a),s=n(14418),l=n.n(s),u=n(11882),c=n.n(u),p=n(97606),f=n.n(p),h=n(28222),d=n.n(h),m=n(20573),g=n(43393);const y=e=>e,v=(0,m.P1)(y,(e=>e.get("showDefinitions"))),b=(0,m.P1)(y,(()=>e=>{var t;let{specSelectors:n}=e,r=n.securityDefinitions()||(0,g.Map)({}),a=(0,g.List)();return o()(t=r.entrySeq()).call(t,(e=>{let[t,n]=e,r=(0,g.Map)();r=r.set(t,n),a=a.push(r)})),a})),w=(e,t)=>e=>{var n;let{specSelectors:r}=e;console.warn("WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.");let a=r.securityDefinitions(),i=(0,g.List)();return o()(n=t.valueSeq()).call(n,(e=>{var t;let n=(0,g.Map)();o()(t=e.entrySeq()).call(t,(e=>{let t,[r,i]=e,s=a.get(r);var l;"oauth2"===s.get("type")&&i.size&&(t=s.get("scopes"),o()(l=t.keySeq()).call(l,(e=>{i.contains(e)||(t=t.delete(e))})),s=s.set("allowedScopes",t));n=n.set(r,s)})),i=i.push(n)})),i},E=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,g.List)();return e=>{let{authSelectors:n}=e;const r=n.definitionsToAuthorize()||(0,g.List)();let a=(0,g.List)();return o()(r).call(r,(e=>{let n=i()(t).call(t,(t=>t.get(e.keySeq().first())));n&&(o()(e).call(e,((t,r)=>{if("oauth2"===t.get("type")){const i=n.get(r);let s=t.get("scopes");var a;if(g.List.isList(i)&&g.Map.isMap(s))o()(a=s.keySeq()).call(a,(e=>{i.contains(e)||(s=s.delete(e))})),e=e.set(r,t.set("scopes",s))}})),a=a.push(e))})),a}},x=(0,m.P1)(y,(e=>e.get("authorized")||(0,g.Map)())),_=(e,t)=>e=>{var n;let{authSelectors:r}=e,o=r.authorized();return g.List.isList(t)?!!l()(n=t.toJS()).call(n,(e=>{var t,n;return-1===c()(t=f()(n=d()(e)).call(n,(e=>!!o.get(e)))).call(t,!1)})).length:null},S=(0,m.P1)(y,(e=>e.get("configs")))},48302:(e,t,n)=>{"use strict";n.r(t),n.d(t,{execute:()=>r});const r=(e,t)=>{let{authSelectors:n,specSelectors:r}=t;return t=>{let{path:o,method:a,operation:i,extras:s}=t,l={authorized:n.authorized()&&n.authorized().toJS(),definitions:r.securityDefinitions()&&r.securityDefinitions().toJS(),specSecurity:r.security()&&r.security().toJS()};return e({path:o,method:a,operation:i,securities:l,...s})}}},70714:(e,t,n)=>{"use strict";n.r(t),n.d(t,{TOGGLE_CONFIGS:()=>o,UPDATE_CONFIGS:()=>r,loaded:()=>s,toggle:()=>i,update:()=>a});const r="configs_update",o="configs_toggle";function a(e,t){return{type:r,payload:{[e]:t}}}function i(e){return{type:o,payload:e}}const s=()=>e=>{let{getConfigs:t,authActions:n}=e;if(t().persistAuthorization){const e=localStorage.getItem("authorized");e&&n.restoreAuthorization({authorized:JSON.parse(e)})}}},92256:(e,t,n)=>{"use strict";n.r(t),n.d(t,{parseYamlConfig:()=>o});var r=n(1272);const o=(e,t)=>{try{return r.ZP.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},46709:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(92256),o=n(70714),a=n(22698),i=n(69018),s=n(37743);const l={getLocalConfig:()=>(0,r.parseYamlConfig)('---\nurl: "https://petstore.swagger.io/v2/swagger.json"\ndom_id: "#swagger-ui"\nvalidatorUrl: "https://validator.swagger.io/validator"\n')};function u(){return{statePlugins:{spec:{actions:a,selectors:l},configs:{reducers:s.default,actions:o,selectors:i}}}}},37743:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(43393),o=n(70714);const a={[o.UPDATE_CONFIGS]:(e,t)=>e.merge((0,r.fromJS)(t.payload)),[o.TOGGLE_CONFIGS]:(e,t)=>{const n=t.payload,r=e.get(n);return e.set(n,!r)}}},69018:(e,t,n)=>{"use strict";n.r(t),n.d(t,{get:()=>a});var r=n(58309),o=n.n(r);const a=(e,t)=>e.getIn(o()(t)?t:[t])},22698:(e,t,n)=>{"use strict";n.r(t),n.d(t,{downloadConfig:()=>o,getConfigByUrl:()=>a});var r=n(92256);const o=e=>t=>{const{fn:{fetch:n}}=t;return n(e)},a=(e,t)=>n=>{let{specActions:o}=n;if(e)return o.downloadConfig(e).then(a,a);function a(n){n instanceof Error||n.status>=400?(o.updateLoadingStatus("failedConfig"),o.updateLoadingStatus("failedConfig"),o.updateUrl(""),console.error(n.statusText+" "+e.url),t(null)):t((0,r.parseYamlConfig)(n.text))}}},31970:(e,t,n)=>{"use strict";n.r(t),n.d(t,{setHash:()=>r});const r=e=>e?history.pushState(null,null,`#${e}`):window.location.hash=""},34980:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(41599),o=n(60877),a=n(34584);function i(){return[r.default,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const n=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(n)}}}},wrapComponents:{operation:o.default,OperationTag:a.default}}]}},41599:(e,t,n)=>{"use strict";n.r(t),n.d(t,{clearScrollTo:()=>S,default:()=>A,parseDeepLinkHash:()=>E,readyToScroll:()=>x,scrollTo:()=>w,scrollToElement:()=>_,show:()=>b});var r=n(58309),o=n.n(r),a=n(24278),i=n.n(a),s=n(97606),l=n.n(s),u=n(11882),c=n.n(u),p=n(31970),f=n(45172),h=n.n(f),d=n(90242),m=n(43393),g=n.n(m);const y="layout_scroll_to",v="layout_clear_scroll",b=(e,t)=>{let{getConfigs:n,layoutSelectors:r}=t;return function(){for(var t=arguments.length,a=new Array(t),i=0;i({type:y,payload:o()(e)?e:[e]}),E=e=>t=>{let{layoutActions:n,layoutSelectors:r,getConfigs:o}=t;if(o().deepLinking&&e){var a;let t=i()(e).call(e,1);"!"===t[0]&&(t=i()(t).call(t,1)),"/"===t[0]&&(t=i()(t).call(t,1));const o=l()(a=t.split("/")).call(a,(e=>e||"")),s=r.isShownKeyFromUrlHashArray(o),[u,p="",f=""]=s;if("operations"===u){const e=r.isShownKeyFromUrlHashArray([p]);c()(p).call(p,"_")>-1&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),n.show(l()(e).call(e,(e=>e.replace(/_/g," "))),!0)),n.show(e,!0)}(c()(p).call(p,"_")>-1||c()(f).call(f,"_")>-1)&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),n.show(l()(s).call(s,(e=>e.replace(/_/g," "))),!0)),n.show(s,!0),n.scrollTo(s)}},x=(e,t)=>n=>{const r=n.layoutSelectors.getScrollToKey();g().is(r,(0,m.fromJS)(e))&&(n.layoutActions.scrollToElement(t),n.layoutActions.clearScrollTo())},_=(e,t)=>n=>{try{t=t||n.fn.getScrollParent(e),h().createScroller(t).to(e)}catch(e){console.error(e)}},S=()=>({type:v});const A={fn:{getScrollParent:function(e,t){const n=document.documentElement;let r=getComputedStyle(e);const o="absolute"===r.position,a=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if("fixed"===r.position)return n;for(let t=e;t=t.parentElement;)if(r=getComputedStyle(t),(!o||"static"!==r.position)&&a.test(r.overflow+r.overflowY+r.overflowX))return t;return n}},statePlugins:{layout:{actions:{scrollToElement:_,scrollTo:w,clearScrollTo:S,readyToScroll:x,parseDeepLinkHash:E},selectors:{getScrollToKey:e=>e.get("scrollToKey"),isShownKeyFromUrlHashArray(e,t){const[n,r]=t;return r?["operations",n,r]:n?["operations-tag",n]:[]},urlHashArrayFromIsShownKey(e,t){let[n,r,o]=t;return"operations"==n?[r,o]:"operations-tag"==n?[r]:[]}},reducers:{[y]:(e,t)=>e.set("scrollToKey",g().fromJS(t.payload)),[v]:e=>e.delete("scrollToKey")},wrapActions:{show:b}}}}},34584:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),a=n(67294);const i=(e,t)=>class extends a.Component{constructor(){super(...arguments),o()(this,"onLoad",(e=>{const{tag:n}=this.props,r=["operations-tag",n];t.layoutActions.readyToScroll(r,e)}))}render(){return a.createElement("span",{ref:this.onLoad},a.createElement(e,this.props))}}},60877:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),a=n(67294);n(23930);const i=(e,t)=>class extends a.Component{constructor(){super(...arguments),o()(this,"onLoad",(e=>{const{operation:n}=this.props,{tag:r,operationId:o}=n.toObject();let{isShownKey:a}=n.toObject();a=a||["operations",r,o],t.layoutActions.readyToScroll(a,e)}))}render(){return a.createElement("span",{ref:this.onLoad},a.createElement(e,this.props))}}},48011:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>d});var r=n(76986),o=n.n(r),a=n(63460),i=n.n(a),s=n(11882),l=n.n(s),u=n(35627),c=n.n(u),p=n(20573),f=n(43393),h=n(27504);function d(e){let{fn:t}=e;return{statePlugins:{spec:{actions:{download:e=>n=>{let{errActions:r,specSelectors:a,specActions:s,getConfigs:l}=n,{fetch:u}=t;const c=l();function p(t){if(t instanceof Error||t.status>=400)return s.updateLoadingStatus("failed"),r.newThrownErr(o()(new Error((t.message||t.statusText)+" "+e),{source:"fetch"})),void(!t.status&&t instanceof Error&&function(){try{let t;if("URL"in h.Z?t=new(i())(e):(t=document.createElement("a"),t.href=e),"https:"!==t.protocol&&"https:"===h.Z.location.protocol){const e=o()(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:"fetch"});return void r.newThrownErr(e)}if(t.origin!==h.Z.location.origin){const e=o()(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${h.Z.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:"fetch"});r.newThrownErr(e)}}catch(e){return}}());s.updateLoadingStatus("success"),s.updateSpec(t.text),a.url()!==e&&s.updateUrl(e)}e=e||a.url(),s.updateLoadingStatus("loading"),r.clear({source:"fetch"}),u({url:e,loadSpec:!0,requestInterceptor:c.requestInterceptor||(e=>e),responseInterceptor:c.responseInterceptor||(e=>e),credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(p,p)},updateLoadingStatus:e=>{let t=[null,"loading","failed","success","failedConfig"];return-1===l()(t).call(t,e)&&console.error(`Error: ${e} is not one of ${c()(t)}`),{type:"spec_update_loading_status",payload:e}}},reducers:{spec_update_loading_status:(e,t)=>"string"==typeof t.payload?e.set("loadingStatus",t.payload):e},selectors:{loadingStatus:(0,p.P1)((e=>e||(0,f.Map)()),(e=>e.get("loadingStatus")||null))}}}}}},34966:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CLEAR:()=>u,CLEAR_BY:()=>c,NEW_AUTH_ERR:()=>l,NEW_SPEC_ERR:()=>i,NEW_SPEC_ERR_BATCH:()=>s,NEW_THROWN_ERR:()=>o,NEW_THROWN_ERR_BATCH:()=>a,clear:()=>g,clearBy:()=>y,newAuthErr:()=>m,newSpecErr:()=>h,newSpecErrBatch:()=>d,newThrownErr:()=>p,newThrownErrBatch:()=>f});var r=n(7710);const o="err_new_thrown_err",a="err_new_thrown_err_batch",i="err_new_spec_err",s="err_new_spec_err_batch",l="err_new_auth_err",u="err_clear",c="err_clear_by";function p(e){return{type:o,payload:(0,r.serializeError)(e)}}function f(e){return{type:a,payload:e}}function h(e){return{type:i,payload:e}}function d(e){return{type:s,payload:e}}function m(e){return{type:l,payload:e}}function g(){return{type:u,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function y(){return{type:c,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0}}},56982:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(14418),o=n.n(r),a=n(97606),i=n.n(a),s=n(54061),l=n.n(s);const u=[n(2392),n(21835)];function c(e){var t;let n={jsSpec:{}},r=l()(u,((e,t)=>{try{let r=t.transform(e,n);return o()(r).call(r,(e=>!!e))}catch(t){return console.error("Transformer error:",t),e}}),e);return i()(t=o()(r).call(r,(e=>!!e))).call(t,(e=>(!e.get("line")&&e.get("path"),e)))}},2392:(e,t,n)=>{"use strict";n.r(t),n.d(t,{transform:()=>p});var r=n(97606),o=n.n(r),a=n(11882),i=n.n(a),s=n(24278),l=n.n(s),u=n(24282),c=n.n(u);function p(e){return o()(e).call(e,(e=>{var t;let n="is not of a type(s)",r=i()(t=e.get("message")).call(t,n);if(r>-1){var o,a;let t=l()(o=e.get("message")).call(o,r+n.length).split(",");return e.set("message",l()(a=e.get("message")).call(a,0,r)+function(e){return c()(e).call(e,((e,t,n,r)=>n===r.length-1&&r.length>1?e+"or "+t:r[n+1]&&r.length>2?e+t+", ":r[n+1]?e+t+" ":e+t),"should be a")}(t))}return e}))}},21835:(e,t,n)=>{"use strict";n.r(t),n.d(t,{transform:()=>r});n(97606),n(11882),n(27361),n(43393);function r(e,t){let{jsSpec:n}=t;return e}},77793:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(93527),o=n(34966),a=n(87667);function i(e){return{statePlugins:{err:{reducers:(0,r.default)(e),actions:o,selectors:a}}}}},93527:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>y});var r=n(76986),o=n.n(r),a=n(97606),i=n.n(a),s=n(39022),l=n.n(s),u=n(14418),c=n.n(u),p=n(2250),f=n.n(p),h=n(34966),d=n(43393),m=n(56982);let g={line:0,level:"error",message:"Unknown error"};function y(){return{[h.NEW_THROWN_ERR]:(e,t)=>{let{payload:n}=t,r=o()(g,n,{type:"thrown"});return e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)))).update("errors",(e=>(0,m.default)(e)))},[h.NEW_THROWN_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=i()(n).call(n,(e=>(0,d.fromJS)(o()(g,e,{type:"thrown"})))),e.update("errors",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(n))})).update("errors",(e=>(0,m.default)(e)))},[h.NEW_SPEC_ERR]:(e,t)=>{let{payload:n}=t,r=(0,d.fromJS)(n);return r=r.set("type","spec"),e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)).sortBy((e=>e.get("line"))))).update("errors",(e=>(0,m.default)(e)))},[h.NEW_SPEC_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=i()(n).call(n,(e=>(0,d.fromJS)(o()(g,e,{type:"spec"})))),e.update("errors",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(n))})).update("errors",(e=>(0,m.default)(e)))},[h.NEW_AUTH_ERR]:(e,t)=>{let{payload:n}=t,r=(0,d.fromJS)(o()({},n));return r=r.set("type","auth"),e.update("errors",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)))).update("errors",(e=>(0,m.default)(e)))},[h.CLEAR]:(e,t)=>{var n;let{payload:r}=t;if(!r||!e.get("errors"))return e;let o=c()(n=e.get("errors")).call(n,(e=>{var t;return f()(t=e.keySeq()).call(t,(t=>{const n=e.get(t),o=r[t];return!o||n!==o}))}));return e.merge({errors:o})},[h.CLEAR_BY]:(e,t)=>{var n;let{payload:r}=t;if(!r||"function"!=typeof r)return e;let o=c()(n=e.get("errors")).call(n,(e=>r(e)));return e.merge({errors:o})}}}},87667:(e,t,n)=>{"use strict";n.r(t),n.d(t,{allErrors:()=>a,lastError:()=>i});var r=n(43393),o=n(20573);const a=(0,o.P1)((e=>e),(e=>e.get("errors",(0,r.List)()))),i=(0,o.P1)(a,(e=>e.last()))},49978:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4309);function o(){return{fn:{opsFilter:r.default}}}},4309:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(14418),o=n.n(r),a=n(11882),i=n.n(a);function s(e,t){return o()(e).call(e,((e,n)=>-1!==i()(n).call(n,t)))}},25474:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SHOW:()=>s,UPDATE_FILTER:()=>a,UPDATE_LAYOUT:()=>o,UPDATE_MODE:()=>i,changeMode:()=>p,show:()=>c,updateFilter:()=>u,updateLayout:()=>l});var r=n(90242);const o="layout_update_layout",a="layout_update_filter",i="layout_update_mode",s="layout_show";function l(e){return{type:o,payload:e}}function u(e){return{type:a,payload:e}}function c(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=(0,r.AF)(e),{type:s,payload:{thing:e,shown:t}}}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e=(0,r.AF)(e),{type:i,payload:{thing:e,mode:t}}}},26821:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(5672),o=n(25474),a=n(4400),i=n(28989);function s(){return{statePlugins:{layout:{reducers:r.default,actions:o,selectors:a},spec:{wrapSelectors:i}}}}},5672:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(39022),o=n.n(r),a=n(43393),i=n(25474);const s={[i.UPDATE_LAYOUT]:(e,t)=>e.set("layout",t.payload),[i.UPDATE_FILTER]:(e,t)=>e.set("filter",t.payload),[i.SHOW]:(e,t)=>{const n=t.payload.shown,r=(0,a.fromJS)(t.payload.thing);return e.update("shown",(0,a.fromJS)({}),(e=>e.set(r,n)))},[i.UPDATE_MODE]:(e,t)=>{var n;let r=t.payload.thing,a=t.payload.mode;return e.setIn(o()(n=["modes"]).call(n,r),(a||"")+"")}}},4400:(e,t,n)=>{"use strict";n.r(t),n.d(t,{current:()=>i,currentFilter:()=>s,isShown:()=>l,showSummary:()=>c,whatMode:()=>u});var r=n(20573),o=n(90242),a=n(43393);const i=e=>e.get("layout"),s=e=>e.get("filter"),l=(e,t,n)=>(t=(0,o.AF)(t),e.get("shown",(0,a.fromJS)({})).get((0,a.fromJS)(t),n)),u=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return t=(0,o.AF)(t),e.getIn(["modes",...t],n)},c=(0,r.P1)((e=>e),(e=>!l(e,"editor")))},28989:(e,t,n)=>{"use strict";n.r(t),n.d(t,{taggedOperations:()=>a});var r=n(24278),o=n.n(r);const a=(e,t)=>function(n){for(var r=arguments.length,a=new Array(r>1?r-1:0),i=1;i=0&&(s=o()(s).call(s,0,f)),s}},9150:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(11189),o=n.n(r);function a(e){let{configs:t}=e;const n={debug:0,info:1,log:2,warn:3,error:4},r=e=>n[e]||-1;let{logLevel:a}=t,i=r(a);function s(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=i&&console[e](...n)}return s.warn=o()(s).call(s,null,"warn"),s.error=o()(s).call(s,null,"error"),s.info=o()(s).call(s,null,"info"),s.debug=o()(s).call(s,null,"debug"),{rootInjects:{log:s}}}},67002:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>f,CLEAR_REQUEST_BODY_VALUE:()=>h,SET_REQUEST_BODY_VALIDATE_ERROR:()=>p,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>s,UPDATE_REQUEST_BODY_INCLUSION:()=>i,UPDATE_REQUEST_BODY_VALUE:()=>o,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>a,UPDATE_REQUEST_CONTENT_TYPE:()=>l,UPDATE_RESPONSE_CONTENT_TYPE:()=>u,UPDATE_SELECTED_SERVER:()=>r,UPDATE_SERVER_VARIABLE_VALUE:()=>c,clearRequestBodyValidateError:()=>_,clearRequestBodyValue:()=>A,initRequestBodyValidateError:()=>S,setActiveExamplesMember:()=>v,setRequestBodyInclusion:()=>y,setRequestBodyValidateError:()=>x,setRequestBodyValue:()=>m,setRequestContentType:()=>b,setResponseContentType:()=>w,setRetainRequestBodyValueFlag:()=>g,setSelectedServer:()=>d,setServerVariableValue:()=>E});const r="oas3_set_servers",o="oas3_set_request_body_value",a="oas3_set_request_body_retain_flag",i="oas3_set_request_body_inclusion",s="oas3_set_active_examples_member",l="oas3_set_request_content_type",u="oas3_set_response_content_type",c="oas3_set_server_variable_value",p="oas3_set_request_body_validate_error",f="oas3_clear_request_body_validate_error",h="oas3_clear_request_body_value";function d(e,t){return{type:r,payload:{selectedServerUrl:e,namespace:t}}}function m(e){let{value:t,pathMethod:n}=e;return{type:o,payload:{value:t,pathMethod:n}}}const g=e=>{let{value:t,pathMethod:n}=e;return{type:a,payload:{value:t,pathMethod:n}}};function y(e){let{value:t,pathMethod:n,name:r}=e;return{type:i,payload:{value:t,pathMethod:n,name:r}}}function v(e){let{name:t,pathMethod:n,contextType:r,contextName:o}=e;return{type:s,payload:{name:t,pathMethod:n,contextType:r,contextName:o}}}function b(e){let{value:t,pathMethod:n}=e;return{type:l,payload:{value:t,pathMethod:n}}}function w(e){let{value:t,path:n,method:r}=e;return{type:u,payload:{value:t,path:n,method:r}}}function E(e){let{server:t,namespace:n,key:r,val:o}=e;return{type:c,payload:{server:t,namespace:n,key:r,val:o}}}const x=e=>{let{path:t,method:n,validationErrors:r}=e;return{type:p,payload:{path:t,method:n,validationErrors:r}}},_=e=>{let{path:t,method:n}=e;return{type:f,payload:{path:t,method:n}}},S=e=>{let{pathMethod:t}=e;return{type:f,payload:{path:t[0],method:t[1]}}},A=e=>{let{pathMethod:t}=e;return{type:h,payload:{pathMethod:t}}}},73723:(e,t,n)=>{"use strict";n.r(t),n.d(t,{definitionsToAuthorize:()=>f});var r=n(86),o=n.n(r),a=n(14418),i=n.n(a),s=n(24282),l=n.n(s),u=n(20573),c=n(43393),p=n(7779);const f=(h=(0,u.P1)((e=>e),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{var n;let r=(0,c.List)();return t?(o()(n=t.entrySeq()).call(n,(e=>{let[t,n]=e;const a=n.get("type");var s;if("oauth2"===a&&o()(s=n.get("flows").entrySeq()).call(s,(e=>{let[o,a]=e,s=(0,c.fromJS)({flow:o,authorizationUrl:a.get("authorizationUrl"),tokenUrl:a.get("tokenUrl"),scopes:a.get("scopes"),type:n.get("type"),description:n.get("description")});r=r.push(new c.Map({[t]:i()(s).call(s,(e=>void 0!==e))}))})),"http"!==a&&"apiKey"!==a||(r=r.push(new c.Map({[t]:n}))),"openIdConnect"===a&&n.get("openIdConnectData")){let e=n.get("openIdConnectData"),a=e.get("grant_types_supported")||["authorization_code","implicit"];o()(a).call(a,(o=>{var a;let s=e.get("scopes_supported")&&l()(a=e.get("scopes_supported")).call(a,((e,t)=>e.set(t,"")),new c.Map),u=(0,c.fromJS)({flow:o,authorizationUrl:e.get("authorization_endpoint"),tokenUrl:e.get("token_endpoint"),scopes:s,type:"oauth2",openIdConnectUrl:n.get("openIdConnectUrl")});r=r.push(new c.Map({[t]:i()(u).call(u,(e=>void 0!==e))}))}))}})),r):r})),(e,t)=>function(){const n=t.getSystem().specSelectors.specJson();for(var r=arguments.length,o=new Array(r),a=0;a{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(23101),o=n.n(r),a=n(97606),i=n.n(a),s=n(67294),l=(n(23930),n(43393));const u=e=>{var t;let{callbacks:n,getComponent:r,specPath:a}=e;const u=r("OperationContainer",!0);if(!n)return s.createElement("span",null,"No callbacks");let c=i()(t=n.entrySeq()).call(t,(t=>{var n;let[r,c]=t;return s.createElement("div",{key:r},s.createElement("h2",null,r),i()(n=c.entrySeq()).call(n,(t=>{var n;let[c,p]=t;return"$$ref"===c?null:s.createElement("div",{key:c},i()(n=p.entrySeq()).call(n,(t=>{let[n,i]=t;if("$$ref"===n)return null;let p=(0,l.fromJS)({operation:i});return s.createElement(u,o()({},e,{op:p,key:n,tag:"",method:n,path:c,specPath:a.push(r,c,n),allowTryItOut:!1}))})))})))}));return s.createElement("div",null,c)}},86775:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var r=n(61125),o=n.n(r),a=n(76986),i=n.n(a),s=n(14418),l=n.n(s),u=n(97606),c=n.n(u),p=n(67294);class f extends p.Component{constructor(e,t){super(e,t),o()(this,"onChange",(e=>{let{onChange:t}=this.props,{value:n,name:r}=e.target,o=i()({},this.state.value);r?o[r]=n:o=n,this.setState({value:o},(()=>t(this.state)))}));let{name:n,schema:r}=this.props,a=this.getValue();this.state={name:n,schema:r,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,"value"])}render(){var e;let{schema:t,getComponent:n,errSelectors:r,name:o}=this.props;const a=n("Input"),i=n("Row"),s=n("Col"),u=n("authError"),f=n("Markdown",!0),h=n("JumpToPath",!0),d=(t.get("scheme")||"").toLowerCase();let m=this.getValue(),g=l()(e=r.allErrors()).call(e,(e=>e.get("authId")===o));if("basic"===d){var y;let e=m?m.get("username"):null;return p.createElement("div",null,p.createElement("h4",null,p.createElement("code",null,o||t.get("name")),"  (http, Basic)",p.createElement(h,{path:["securityDefinitions",o]})),e&&p.createElement("h6",null,"Authorized"),p.createElement(i,null,p.createElement(f,{source:t.get("description")})),p.createElement(i,null,p.createElement("label",null,"Username:"),e?p.createElement("code",null," ",e," "):p.createElement(s,null,p.createElement(a,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),p.createElement(i,null,p.createElement("label",null,"Password:"),e?p.createElement("code",null," ****** "):p.createElement(s,null,p.createElement(a,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),c()(y=g.valueSeq()).call(y,((e,t)=>p.createElement(u,{error:e,key:t}))))}var v;return"bearer"===d?p.createElement("div",null,p.createElement("h4",null,p.createElement("code",null,o||t.get("name")),"  (http, Bearer)",p.createElement(h,{path:["securityDefinitions",o]})),m&&p.createElement("h6",null,"Authorized"),p.createElement(i,null,p.createElement(f,{source:t.get("description")})),p.createElement(i,null,p.createElement("label",null,"Value:"),m?p.createElement("code",null," ****** "):p.createElement(s,null,p.createElement(a,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),c()(v=g.valueSeq()).call(v,((e,t)=>p.createElement(u,{error:e,key:t})))):p.createElement("div",null,p.createElement("em",null,p.createElement("b",null,o)," HTTP authentication: unsupported scheme ",`'${d}'`))}}},76467:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(33427),o=n(42458),a=n(15757),i=n(56617),s=n(9928),l=n(45327),u=n(86775),c=n(96796);const p={Callbacks:r.default,HttpAuth:u.default,RequestBody:o.default,Servers:i.default,ServersContainer:s.default,RequestBodyEditor:l.default,OperationServers:c.default,operationLink:a.default}},15757:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(35627),o=n.n(r),a=n(97606),i=n.n(a),s=n(67294);n(23930);class l extends s.Component{render(){const{link:e,name:t,getComponent:n}=this.props,r=n("Markdown",!0);let a=e.get("operationId")||e.get("operationRef"),l=e.get("parameters")&&e.get("parameters").toJS(),u=e.get("description");return s.createElement("div",{className:"operation-link"},s.createElement("div",{className:"description"},s.createElement("b",null,s.createElement("code",null,t)),u?s.createElement(r,{source:u}):null),s.createElement("pre",null,"Operation `",a,"`",s.createElement("br",null),s.createElement("br",null),"Parameters ",function(e,t){var n;if("string"!=typeof t)return"";return i()(n=t.split("\n")).call(n,((t,n)=>n>0?Array(e+1).join(" ")+t:t)).join("\n")}(0,o()(l,null,2))||"{}",s.createElement("br",null)))}}const u=l},96796:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),a=n(67294);n(23930);class i extends a.Component{constructor(){super(...arguments),o()(this,"setSelectedServer",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${n}`)})),o()(this,"setServerVariableValue",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${n}`})})),o()(this,"getSelectedServer",(()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)})),o()(this,"getServerVariable",((e,t)=>{const{path:n,method:r}=this.props;return this.props.getServerVariable({namespace:`${n}:${r}`,server:e},t)})),o()(this,"getEffectiveServerValue",(e=>{const{path:t,method:n}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${n}`})}))}render(){const{operationServers:e,pathServers:t,getComponent:n}=this.props;if(!e&&!t)return null;const r=n("Servers"),o=e||t,i=e?"operation":"path";return a.createElement("div",{className:"opblock-section operation-servers"},a.createElement("div",{className:"opblock-section-header"},a.createElement("div",{className:"tab-header"},a.createElement("h4",{className:"opblock-title"},"Servers"))),a.createElement("div",{className:"opblock-description-wrapper"},a.createElement("h4",{className:"message"},"These ",i,"-level options override the global server options."),a.createElement(r,{servers:o,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}},45327:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(61125),o=n.n(r),a=n(67294),i=n(94184),s=n.n(i),l=n(90242);const u=Function.prototype;class c extends a.PureComponent{constructor(e,t){super(e,t),o()(this,"applyDefaultValue",(e=>{const{onChange:t,defaultValue:n}=e||this.props;return this.setState({value:n}),t(n)})),o()(this,"onChange",(e=>{this.props.onChange((0,l.Pz)(e))})),o()(this,"onDomChange",(e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))})),this.state={value:(0,l.Pz)(e.value)||e.defaultValue},e.onChange(e.value)}UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:(0,l.Pz)(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:n}=this.state,r=t.size>0;const o=e("TextArea");return a.createElement("div",{className:"body-param"},a.createElement(o,{className:s()("body-param__text",{invalid:r}),title:t.size?t.join(", "):"",value:n,onChange:this.onDomChange}))}}o()(c,"defaultProps",{onChange:u,userHasEditedBody:!1})},42458:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>g,getDefaultRequestBodyValue:()=>m});var r=n(97606),o=n.n(r),a=n(11882),i=n.n(a),s=n(58118),l=n.n(s),u=n(58309),c=n.n(u),p=n(67294),f=(n(23930),n(43393)),h=n(90242),d=n(2518);const m=(e,t,n)=>{const r=e.getIn(["content",t]),o=r.get("schema").toJS(),a=void 0!==r.get("examples"),i=r.get("example"),s=a?r.getIn(["examples",n,"value"]):i,l=(0,h.xi)(o,t,{includeWriteOnly:!0},s);return(0,h.Pz)(l)},g=e=>{let{userHasEditedBody:t,requestBody:n,requestBodyValue:r,requestBodyInclusionSetting:a,requestBodyErrors:s,getComponent:u,getConfigs:g,specSelectors:y,fn:v,contentType:b,isExecute:w,specPath:E,onChange:x,onChangeIncludeEmpty:_,activeExamplesKey:S,updateActiveExamplesKey:A,setRetainRequestBodyValueFlag:C}=e;const k=e=>{x(e.target.files[0])},O=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return"no value"===a.get(e,"no value")&&(t.shouldDispatchInit=!0),t},j=u("Markdown",!0),T=u("modelExample"),I=u("RequestBodyEditor"),N=u("highlightCode"),P=u("ExamplesSelectValueRetainer"),R=u("Example"),M=u("ParameterIncludeEmpty"),{showCommonExtensions:D}=g(),L=n&&n.get("description")||null,B=n&&n.get("content")||new f.OrderedMap;b=b||B.keySeq().first()||"";const F=B.get(b,(0,f.OrderedMap)()),U=F.get("schema",(0,f.OrderedMap)()),z=F.get("examples",null),q=null==z?void 0:o()(z).call(z,((e,t)=>{var r;const o=null===(r=e)||void 0===r?void 0:r.get("value",null);return o&&(e=e.set("value",m(n,b,t),o)),e}));if(s=f.List.isList(s)?s:(0,f.List)(),!F.size)return null;const $="object"===F.getIn(["schema","type"]),V="binary"===F.getIn(["schema","format"]),W="base64"===F.getIn(["schema","format"]);if("application/octet-stream"===b||0===i()(b).call(b,"image/")||0===i()(b).call(b,"audio/")||0===i()(b).call(b,"video/")||V||W){const e=u("Input");return w?p.createElement(e,{type:"file",onChange:k}):p.createElement("i",null,"Example values are not available for ",p.createElement("code",null,b)," media types.")}if($&&("application/x-www-form-urlencoded"===b||0===i()(b).call(b,"multipart/"))&&U.get("properties",(0,f.OrderedMap)()).size>0){var H;const e=u("JsonSchemaForm"),t=u("ParameterExt"),n=U.get("properties",(0,f.OrderedMap)());return r=f.Map.isMap(r)?r:(0,f.OrderedMap)(),p.createElement("div",{className:"table-container"},L&&p.createElement(j,{source:L}),p.createElement("table",null,p.createElement("tbody",null,f.Map.isMap(n)&&o()(H=n.entrySeq()).call(H,(n=>{var i,d;let[m,g]=n;if(g.get("readOnly"))return;let y=D?(0,h.po)(g):null;const b=l()(i=U.get("required",(0,f.List)())).call(i,m),E=g.get("type"),S=g.get("format"),A=g.get("description"),C=r.getIn([m,"value"]),k=r.getIn([m,"errors"])||s,T=a.get(m)||!1,I=g.has("default")||g.has("example")||g.hasIn(["items","example"])||g.hasIn(["items","default"]),N=g.has("enum")&&(1===g.get("enum").size||b),P=I||N;let R="";"array"!==E||P||(R=[]),("object"===E||P)&&(R=(0,h.xi)(g,!1,{includeWriteOnly:!0})),"string"!=typeof R&&"object"===E&&(R=(0,h.Pz)(R)),"string"==typeof R&&"array"===E&&(R=JSON.parse(R));const L="string"===E&&("binary"===S||"base64"===S);return p.createElement("tr",{key:m,className:"parameters","data-property-name":m},p.createElement("td",{className:"parameters-col_name"},p.createElement("div",{className:b?"parameter__name required":"parameter__name"},m,b?p.createElement("span",null," *"):null),p.createElement("div",{className:"parameter__type"},E,S&&p.createElement("span",{className:"prop-format"},"($",S,")"),D&&y.size?o()(d=y.entrySeq()).call(d,(e=>{let[n,r]=e;return p.createElement(t,{key:`${n}-${r}`,xKey:n,xVal:r})})):null),p.createElement("div",{className:"parameter__deprecated"},g.get("deprecated")?"deprecated":null)),p.createElement("td",{className:"parameters-col_description"},p.createElement(j,{source:A}),w?p.createElement("div",null,p.createElement(e,{fn:v,dispatchInitialValue:!L,schema:g,description:m,getComponent:u,value:void 0===C?R:C,required:b,errors:k,onChange:e=>{x(e,[m])}}),b?null:p.createElement(M,{onChange:e=>_(m,e),isIncluded:T,isIncludedOptions:O(m),isDisabled:c()(C)?0!==C.length:!(0,h.O2)(C)})):null))})))))}const J=m(n,b,S);let K=null;return(0,d.O)(J)&&(K="json"),p.createElement("div",null,L&&p.createElement(j,{source:L}),q?p.createElement(P,{userHasEditedBody:t,examples:q,currentKey:S,currentUserInputValue:r,onSelect:e=>{A(e)},updateValue:x,defaultToFirstExample:!0,getComponent:u,setRetainRequestBodyValueFlag:C}):null,w?p.createElement("div",null,p.createElement(I,{value:r,errors:s,defaultValue:J,onChange:x,getComponent:u})):p.createElement(T,{getComponent:u,getConfigs:g,specSelectors:y,expandDepth:1,isExecute:w,schema:F.get("schema"),specPath:E.push("content",b),example:p.createElement(N,{className:"body-param__example",getConfigs:g,language:K,value:(0,h.Pz)(r)||J}),includeWriteOnly:!0}),q?p.createElement(R,{example:q.get(S),getComponent:u,getConfigs:g}):null)}},9928:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);class o extends r.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:n,getComponent:o}=this.props,a=e.servers(),i=o("Servers");return a&&a.size?r.createElement("div",null,r.createElement("span",{className:"servers-title"},"Servers"),r.createElement(i,{servers:a,currentServer:t.selectedServer(),setSelectedServer:n.setSelectedServer,setServerVariableValue:n.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}},56617:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(61125),o=n.n(r),a=n(51679),i=n.n(a),s=n(97606),l=n.n(s),u=n(67294),c=n(43393);n(23930);class p extends u.Component{constructor(){super(...arguments),o()(this,"onServerChange",(e=>{this.setServer(e.target.value)})),o()(this,"onServerVariableValueChange",(e=>{let{setServerVariableValue:t,currentServer:n}=this.props,r=e.target.getAttribute("data-variable"),o=e.target.value;"function"==typeof t&&t({server:n,key:r,val:o})})),o()(this,"setServer",(e=>{let{setSelectedServer:t}=this.props;t(e)}))}componentDidMount(){var e;let{servers:t,currentServer:n}=this.props;n||this.setServer(null===(e=t.first())||void 0===e?void 0:e.get("url"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:n,getServerVariable:r}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){var o;let a=i()(t).call(t,(t=>t.get("url")===e.currentServer)),s=i()(o=this.props.servers).call(o,(e=>e.get("url")===this.props.currentServer))||(0,c.OrderedMap)();if(!a)return this.setServer(t.first().get("url"));let u=s.get("variables")||(0,c.OrderedMap)(),p=(i()(u).call(u,(e=>e.get("default")))||(0,c.OrderedMap)()).get("default"),f=a.get("variables")||(0,c.OrderedMap)(),h=(i()(f).call(f,(e=>e.get("default")))||(0,c.OrderedMap)()).get("default");l()(f).call(f,((t,o)=>{r(e.currentServer,o)&&p===h||n({server:e.currentServer,key:o,val:t.get("default")||""})}))}}render(){var e,t;let{servers:n,currentServer:r,getServerVariable:o,getEffectiveServerValue:a}=this.props,s=(i()(n).call(n,(e=>e.get("url")===r))||(0,c.OrderedMap)()).get("variables")||(0,c.OrderedMap)(),p=0!==s.size;return u.createElement("div",{className:"servers"},u.createElement("label",{htmlFor:"servers"},u.createElement("select",{onChange:this.onServerChange,value:r},l()(e=n.valueSeq()).call(e,(e=>u.createElement("option",{value:e.get("url"),key:e.get("url")},e.get("url"),e.get("description")&&` - ${e.get("description")}`))).toArray())),p?u.createElement("div",null,u.createElement("div",{className:"computed-url"},"Computed URL:",u.createElement("code",null,a(r))),u.createElement("h4",null,"Server variables"),u.createElement("table",null,u.createElement("tbody",null,l()(t=s.entrySeq()).call(t,(e=>{var t;let[n,a]=e;return u.createElement("tr",{key:n},u.createElement("td",null,n),u.createElement("td",null,a.get("enum")?u.createElement("select",{"data-variable":n,onChange:this.onServerVariableValueChange},l()(t=a.get("enum")).call(t,(e=>u.createElement("option",{selected:e===o(r,n),key:e,value:e},e)))):u.createElement("input",{type:"text",value:o(r,n)||"",onChange:this.onServerVariableValueChange,"data-variable":n})))}))))):null)}}},7779:(e,t,n)=>{"use strict";n.r(t),n.d(t,{OAS3ComponentWrapFactory:()=>c,isOAS3:()=>l,isSwagger2:()=>u});var r=n(23101),o=n.n(r),a=n(27043),i=n.n(a),s=n(67294);function l(e){const t=e.get("openapi");return"string"==typeof t&&(i()(t).call(t,"3.0.")&&t.length>4)}function u(e){const t=e.get("swagger");return"string"==typeof t&&i()(t).call(t,"2.0")}function c(e){return(t,n)=>r=>{if(n&&n.specSelectors&&n.specSelectors.specJson){return l(n.specSelectors.specJson())?s.createElement(e,o()({},r,n,{Ori:t})):s.createElement(t,r)}return console.warn("OAS3 wrapper: couldn't get spec"),null}}},97451:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(92044),o=n(73723),a=n(91741),i=n(76467),s=n(37761),l=n(67002),u=n(5065),c=n(62109);function p(){return{components:i.default,wrapComponents:s.default,statePlugins:{spec:{wrapSelectors:r,selectors:a},auth:{wrapSelectors:o},oas3:{actions:l,reducers:c.default,selectors:u}}}}},62109:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(8712),o=n.n(r),a=n(86),i=n.n(a),s=n(24282),l=n.n(s),u=n(43393),c=n(67002);const p={[c.UPDATE_SELECTED_SERVER]:(e,t)=>{let{payload:{selectedServerUrl:n,namespace:r}}=t;const o=r?[r,"selectedServer"]:["selectedServer"];return e.setIn(o,n)},[c.UPDATE_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[a,s]=r;if(!u.Map.isMap(n))return e.setIn(["requestData",a,s,"bodyValue"],n);let l,c=e.getIn(["requestData",a,s,"bodyValue"])||(0,u.Map)();u.Map.isMap(c)||(c=(0,u.Map)());const[...p]=o()(n).call(n);return i()(p).call(p,(e=>{let t=n.getIn([e]);c.has(e)&&u.Map.isMap(t)||(l=c.setIn([e,"value"],t))})),e.setIn(["requestData",a,s,"bodyValue"],l)},[c.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[o,a]=r;return e.setIn(["requestData",o,a,"retainBodyValue"],n)},[c.UPDATE_REQUEST_BODY_INCLUSION]:(e,t)=>{let{payload:{value:n,pathMethod:r,name:o}}=t,[a,i]=r;return e.setIn(["requestData",a,i,"bodyInclusion",o],n)},[c.UPDATE_ACTIVE_EXAMPLES_MEMBER]:(e,t)=>{let{payload:{name:n,pathMethod:r,contextType:o,contextName:a}}=t,[i,s]=r;return e.setIn(["examples",i,s,o,a,"activeExample"],n)},[c.UPDATE_REQUEST_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[o,a]=r;return e.setIn(["requestData",o,a,"requestContentType"],n)},[c.UPDATE_RESPONSE_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,path:r,method:o}}=t;return e.setIn(["requestData",r,o,"responseContentType"],n)},[c.UPDATE_SERVER_VARIABLE_VALUE]:(e,t)=>{let{payload:{server:n,namespace:r,key:o,val:a}}=t;const i=r?[r,"serverVariableValues",n,o]:["serverVariableValues",n,o];return e.setIn(i,a)},[c.SET_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:r,validationErrors:o}}=t,a=[];if(a.push("Required field is not provided"),o.missingBodyValue)return e.setIn(["requestData",n,r,"errors"],(0,u.fromJS)(a));if(o.missingRequiredKeys&&o.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=o;return e.updateIn(["requestData",n,r,"bodyValue"],(0,u.fromJS)({}),(e=>l()(t).call(t,((e,t)=>e.setIn([t,"errors"],(0,u.fromJS)(a))),e)))}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),e},[c.CLEAR_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:r}}=t;const a=e.getIn(["requestData",n,r,"bodyValue"]);if(!u.Map.isMap(a))return e.setIn(["requestData",n,r,"errors"],(0,u.fromJS)([]));const[...i]=o()(a).call(a);return i?e.updateIn(["requestData",n,r,"bodyValue"],(0,u.fromJS)({}),(e=>l()(i).call(i,((e,t)=>e.setIn([t,"errors"],(0,u.fromJS)([]))),e))):e},[c.CLEAR_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{pathMethod:n}}=t,[r,o]=n;const a=e.getIn(["requestData",r,o,"bodyValue"]);return a?u.Map.isMap(a)?e.setIn(["requestData",r,o,"bodyValue"],(0,u.Map)()):e.setIn(["requestData",r,o,"bodyValue"],""):e}}},5065:(e,t,n)=>{"use strict";n.r(t),n.d(t,{activeExamplesMember:()=>_,hasUserEditedBody:()=>w,requestBodyErrors:()=>x,requestBodyInclusionSetting:()=>E,requestBodyValue:()=>y,requestContentType:()=>S,responseContentType:()=>A,selectDefaultRequestBodyValue:()=>b,selectedServer:()=>g,serverEffectiveValue:()=>O,serverVariableValue:()=>C,serverVariables:()=>k,shouldRetainRequestBodyValue:()=>v,validateBeforeExecute:()=>j,validateShallowRequired:()=>I});var r=n(97606),o=n.n(r),a=n(86),i=n.n(a),s=n(28222),l=n.n(s),u=n(11882),c=n.n(u),p=n(43393),f=n(7779),h=n(42458),d=n(90242);const m=e=>function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o{const o=n.getSystem().specSelectors.specJson();if((0,f.isOAS3)(o)){const o=e(t,...r);return"function"==typeof o?o(n):o}return null}};const g=m(((e,t)=>{const n=t?[t,"selectedServer"]:["selectedServer"];return e.getIn(n)||""})),y=m(((e,t,n)=>e.getIn(["requestData",t,n,"bodyValue"])||null)),v=m(((e,t,n)=>e.getIn(["requestData",t,n,"retainBodyValue"])||!1)),b=(e,t,n)=>e=>{const{oas3Selectors:r,specSelectors:o}=e.getSystem(),a=o.specJson();if((0,f.isOAS3)(a)){const e=r.requestContentType(t,n);if(e)return(0,h.getDefaultRequestBodyValue)(o.specResolvedSubtree(["paths",t,n,"requestBody"]),e,r.activeExamplesMember(t,n,"requestBody","requestBody"))}return null},w=m(((e,t,n)=>e=>{const{oas3Selectors:r,specSelectors:o}=e.getSystem();let a=!1;const i=r.requestContentType(t,n);let s=r.requestBodyValue(t,n);const l=o.specResolvedSubtree(["paths",t,n,"requestBody"]);if(!l)return!1;if(p.Map.isMap(s)&&(s=(0,d.Pz)(s.mapEntries((e=>p.Map.isMap(e[1])?[e[0],e[1].get("value")]:e)).toJS())),p.List.isList(s)&&(s=(0,d.Pz)(s)),i){const e=(0,h.getDefaultRequestBodyValue)(l,i,r.activeExamplesMember(t,n,"requestBody","requestBody"));a=!!s&&s!==e}return a})),E=m(((e,t,n)=>e.getIn(["requestData",t,n,"bodyInclusion"])||(0,p.Map)())),x=m(((e,t,n)=>e.getIn(["requestData",t,n,"errors"])||null)),_=m(((e,t,n,r,o)=>e.getIn(["examples",t,n,r,o,"activeExample"])||null)),S=m(((e,t,n)=>e.getIn(["requestData",t,n,"requestContentType"])||null)),A=m(((e,t,n)=>e.getIn(["requestData",t,n,"responseContentType"])||null)),C=m(((e,t,n)=>{let r;if("string"!=typeof t){const{server:e,namespace:o}=t;r=o?[o,"serverVariableValues",e,n]:["serverVariableValues",e,n]}else{r=["serverVariableValues",t,n]}return e.getIn(r)||null})),k=m(((e,t)=>{let n;if("string"!=typeof t){const{server:e,namespace:r}=t;n=r?[r,"serverVariableValues",e]:["serverVariableValues",e]}else{n=["serverVariableValues",t]}return e.getIn(n)||(0,p.OrderedMap)()})),O=m(((e,t)=>{var n,r;if("string"!=typeof t){const{server:o,namespace:a}=t;r=o,n=a?e.getIn([a,"serverVariableValues",r]):e.getIn(["serverVariableValues",r])}else r=t,n=e.getIn(["serverVariableValues",r]);n=n||(0,p.OrderedMap)();let a=r;return o()(n).call(n,((e,t)=>{a=a.replace(new RegExp(`{${t}}`,"g"),e)})),a})),j=(T=(e,t)=>((e,t)=>(t=t||[],!!e.getIn(["requestData",...t,"bodyValue"])))(e,t),function(){for(var e=arguments.length,t=new Array(e),n=0;n{const n=e.getSystem().specSelectors.specJson();let r=[...t][1]||[];return!n.getIn(["paths",...r,"requestBody","required"])||T(...t)}});var T;const I=(e,t)=>{var n;let{oas3RequiredRequestBodyContentType:r,oas3RequestContentType:o,oas3RequestBodyValue:a}=t,s=[];if(!p.Map.isMap(a))return s;let u=[];return i()(n=l()(r.requestContentType)).call(n,(e=>{if(e===o){let t=r.requestContentType[e];i()(t).call(t,(e=>{c()(u).call(u,e)<0&&u.push(e)}))}})),i()(u).call(u,(e=>{a.getIn([e,"value"])||s.push(e)})),s}},91741:(e,t,n)=>{"use strict";n.r(t),n.d(t,{isSwagger2:()=>p,servers:()=>u});var r=n(20573),o=n(43393),a=n(7779);const i=e=>e||(0,o.Map)(),s=(0,r.P1)(i,(e=>e.get("json",(0,o.Map)()))),l=(0,r.P1)(i,(e=>e.get("resolved",(0,o.Map)()))),u=(c=(0,r.P1)((e=>{let t=l(e);return t.count()<1&&(t=s(e)),t}),(e=>e.getIn(["servers"])||(0,o.Map)())),()=>function(e){const t=e.getSystem().specSelectors.specJson();if((0,a.isOAS3)(t)){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o()=>{const e=t.getSystem().specSelectors.specJson();return(0,a.isSwagger2)(e)}},92044:(e,t,n)=>{"use strict";n.r(t),n.d(t,{basePath:()=>y,consumes:()=>v,definitions:()=>h,hasHost:()=>d,host:()=>g,isOAS3:()=>x,isSwagger2:()=>_,produces:()=>b,schemes:()=>w,securityDefinitions:()=>m,servers:()=>E});var r=n(20573),o=n(33881),a=n(43393),i=n(7779);function s(e){return(t,n)=>function(){const r=n.getSystem().specSelectors.specJson();return(0,i.isOAS3)(r)?e(...arguments):t(...arguments)}}const l=e=>e||(0,a.Map)(),u=s((0,r.P1)((()=>null))),c=(0,r.P1)(l,(e=>e.get("json",(0,a.Map)()))),p=(0,r.P1)(l,(e=>e.get("resolved",(0,a.Map)()))),f=e=>{let t=p(e);return t.count()<1&&(t=c(e)),t},h=s((0,r.P1)(f,(e=>{const t=e.getIn(["components","schemas"]);return a.Map.isMap(t)?t:(0,a.Map)()}))),d=s((e=>f(e).hasIn(["servers",0]))),m=s((0,r.P1)(o.specJsonWithResolvedSubtrees,(e=>e.getIn(["components","securitySchemes"])||null))),g=u,y=u,v=u,b=u,w=u,E=s((0,r.P1)(f,(e=>e.getIn(["servers"])||(0,a.Map)()))),x=(e,t)=>()=>{const e=t.getSystem().specSelectors.specJson();return(0,i.isOAS3)(a.Map.isMap(e)?e:(0,a.Map)())},_=(e,t)=>()=>{const e=t.getSystem().specSelectors.specJson();return(0,i.isSwagger2)(a.Map.isMap(e)?e:(0,a.Map)())}},70356:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:o,getComponent:a,errSelectors:i,authorized:s,onAuthChange:l,name:u}=n,c=a("HttpAuth");return"http"===o.get("type")?r.createElement(c,{key:u,schema:o,name:u,errSelectors:i,authorized:s,getComponent:a,onChange:l}):r.createElement(t,n)}))},37761:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(22460),o=n(70356),a=n(69487),i=n(50058),s=n(53499),l=n(90287);const u={Markdown:r.default,AuthItem:o.default,JsonSchema_string:l.default,VersionStamp:a.default,model:s.default,onlineValidatorBadge:i.default}},90287:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:o,getComponent:a,errors:i,onChange:s}=n,l=o&&o.get?o.get("format"):null,u=o&&o.get?o.get("type"):null,c=a("Input");return u&&"string"===u&&l&&("binary"===l||"base64"===l)?r.createElement(c,{type:"file",className:i.length?"invalid":"",title:i.length?i:"",onChange:e=>{s(e.target.files[0])},disabled:t.isDisabled}):r.createElement(t,n)}))},22460:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Markdown:()=>f,default:()=>h});var r=n(81607),o=n.n(r),a=n(67294),i=n(94184),s=n.n(i),l=n(89927),u=n(7779),c=n(94994);const p=new l._("commonmark");p.block.ruler.enable(["table"]),p.set({linkTarget:"_blank"});const f=e=>{let{source:t,className:n="",getConfigs:r}=e;if("string"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=r(),i=p.render(t),l=(0,c.s)(i,{useUnsafeMarkdown:e});let u;return"string"==typeof l&&(u=o()(l).call(l)),a.createElement("div",{dangerouslySetInnerHTML:{__html:u},className:s()(n,"renderedMarkdown")})}return null};f.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const h=(0,u.OAS3ComponentWrapFactory)(f)},53499:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(23101),o=n.n(r),a=n(67294),i=n(7779),s=n(53795);class l extends a.Component{render(){let{getConfigs:e,schema:t}=this.props,n=["model-box"],r=null;return!0===t.get("deprecated")&&(n.push("deprecated"),r=a.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),a.createElement("div",{className:n.join(" ")},r,a.createElement(s.Z,o()({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}const u=(0,i.OAS3ComponentWrapFactory)(l)},50058:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(7779),o=n(5623);const a=(0,r.OAS3ComponentWrapFactory)(o.Z)},69487:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{const{Ori:t}=e;return r.createElement("span",null,r.createElement(t,e),r.createElement("small",{className:"version-stamp"},r.createElement("pre",{className:"version"},"OAS3")))}))},28560:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(87198),o=n.n(r);let a=!1;function i(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return a=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const n=t.getConfigs().onComplete;return a&&"function"==typeof n&&(o()(n,0),a=!1),e(...arguments)}}}}}}},92135:(e,t,n)=>{"use strict";n.r(t),n.d(t,{requestSnippetGenerator_curl_bash:()=>A,requestSnippetGenerator_curl_cmd:()=>C,requestSnippetGenerator_curl_powershell:()=>S});var r=n(11882),o=n.n(r),a=n(81607),i=n.n(a),s=n(35627),l=n.n(s),u=n(97606),c=n.n(u),p=n(12196),f=n.n(p),h=n(74386),d=n.n(h),m=n(58118),g=n.n(m),y=n(27504),v=n(43393);const b=e=>{var t;const n="_**[]";return o()(e).call(e,n)<0?e:i()(t=e.split(n)[0]).call(t)},w=e=>"-d "===e||/^[_\/-]/g.test(e)?e:"'"+e.replace(/'/g,"'\\''")+"'",E=e=>"-d "===(e=e.replace(/\^/g,"^^").replace(/\\"/g,'\\\\"').replace(/"/g,'""').replace(/\n/g,"^\n"))?e.replace(/-d /g,"-d ^\n"):/^[_\/-]/g.test(e)?e:'"'+e+'"',x=e=>"-d "===e?e:/\n/.test(e)?'@"\n'+e.replace(/"/g,'\\"').replace(/`/g,"``").replace(/\$/,"`$")+'\n"@':/^[_\/-]/g.test(e)?e:"'"+e.replace(/"/g,'""').replace(/'/g,"''")+"'";const _=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",o=!1,a="";const i=function(){for(var e=arguments.length,n=new Array(e),r=0;ra+=` ${n}`,p=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return a+=f()(" ").call(" ",e)};let h=e.get("headers");if(a+="curl"+r,e.has("curlOptions")&&i(...e.get("curlOptions")),i("-X",e.get("method")),u(),p(),s(`${e.get("url")}`),h&&h.size)for(let t of d()(m=e.get("headers")).call(m)){var m;u(),p();let[e,n]=t;s("-H",`${e}: ${n}`),o=o||/^content-type$/i.test(e)&&/^multipart\/form-data$/i.test(n)}const w=e.get("body");var E;if(w)if(o&&g()(E=["POST","PUT","PATCH"]).call(E,e.get("method")))for(let[e,t]of w.entrySeq()){let n=b(e);u(),p(),s("-F"),t instanceof y.Z.File?i(`${n}=@${t.name}${t.type?`;type=${t.type}`:""}`):i(`${n}=${t}`)}else if(w instanceof y.Z.File)u(),p(),s(`--data-binary '@${w.name}'`);else{u(),p(),s("-d ");let t=w;v.Map.isMap(t)?s(function(e){let t=[];for(let[n,r]of e.get("body").entrySeq()){let e=b(n);r instanceof y.Z.File?t.push(` "${e}": {\n "name": "${r.name}"${r.type?`,\n "type": "${r.type}"`:""}\n }`):t.push(` "${e}": ${l()(r,null,2).replace(/(\r\n|\r|\n)/g,"\n ")}`)}return`{\n${t.join(",\n")}\n}`}(e)):("string"!=typeof t&&(t=l()(t)),s(t))}else w||"POST"!==e.get("method")||(u(),p(),s("-d ''"));return a},S=e=>_(e,x,"`\n",".exe"),A=e=>_(e,w,"\\\n"),C=e=>_(e,E,"^\n")},86575:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(92135),o=n(4669),a=n(84206);const i=()=>({components:{RequestSnippets:a.default},fn:r,statePlugins:{requestSnippets:{selectors:o}}})},84206:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>w});var r=n(14418),o=n.n(r),a=n(25110),i=n.n(a),s=n(86),l=n.n(s),u=n(97606),c=n.n(u),p=n(67294),f=n(27361),h=n.n(f),d=n(23560),m=n.n(d),g=n(74855),y=n(33424);const v={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(250, 250, 250)",paddingBottom:"0",paddingTop:"0",border:"1px solid rgb(51, 51, 51)",borderRadius:"4px 4px 0 0",boxShadow:"none",borderBottom:"none"},b={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(51, 51, 51)",boxShadow:"none",border:"1px solid rgb(51, 51, 51)",paddingBottom:"0",paddingTop:"0",borderRadius:"4px 4px 0 0",marginTop:"-5px",marginRight:"-5px",marginLeft:"-5px",zIndex:"9999",borderBottom:"none"},w=e=>{var t,n;let{request:r,requestSnippetsSelectors:a,getConfigs:s}=e;const u=m()(s)?s():null,f=!1!==h()(u,"syntaxHighlight")&&h()(u,"syntaxHighlight.activated",!0),d=(0,p.useRef)(null),[w,E]=(0,p.useState)(null===(t=a.getSnippetGenerators())||void 0===t?void 0:t.keySeq().first()),[x,_]=(0,p.useState)(null==a?void 0:a.getDefaultExpanded());(0,p.useEffect)((()=>{}),[]),(0,p.useEffect)((()=>{var e;const t=o()(e=i()(d.current.childNodes)).call(e,(e=>{var t;return!!e.nodeType&&(null===(t=e.classList)||void 0===t?void 0:t.contains("curl-command"))}));return l()(t).call(t,(e=>e.addEventListener("mousewheel",j,{passive:!1}))),()=>{l()(t).call(t,(e=>e.removeEventListener("mousewheel",j)))}}),[r]);const S=a.getSnippetGenerators(),A=S.get(w),C=A.get("fn")(r),k=()=>{_(!x)},O=e=>e===w?b:v,j=e=>{const{target:t,deltaY:n}=e,{scrollHeight:r,offsetHeight:o,scrollTop:a}=t;r>o&&(0===a&&n<0||o+a>=r&&n>0)&&e.preventDefault()},T=f?p.createElement(y.d3,{language:A.get("syntax"),className:"curl microlight",style:(0,y.C2)(h()(u,"syntaxHighlight.theme"))},C):p.createElement("textarea",{readOnly:!0,className:"curl",value:C});return p.createElement("div",{className:"request-snippets",ref:d},p.createElement("div",{style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"center",marginBottom:"15px"}},p.createElement("h4",{onClick:()=>k(),style:{cursor:"pointer"}},"Snippets"),p.createElement("button",{onClick:()=>k(),style:{border:"none",background:"none"},title:x?"Collapse operation":"Expand operation"},p.createElement("svg",{className:"arrow",width:"10",height:"10"},p.createElement("use",{href:x?"#large-arrow-down":"#large-arrow",xlinkHref:x?"#large-arrow-down":"#large-arrow"})))),x&&p.createElement("div",{className:"curl-command"},p.createElement("div",{style:{paddingLeft:"15px",paddingRight:"10px",width:"100%",display:"flex"}},c()(n=S.entrySeq()).call(n,(e=>{let[t,n]=e;return p.createElement("div",{style:O(t),className:"btn",key:t,onClick:()=>(e=>{w!==e&&E(e)})(t)},p.createElement("h4",{style:t===w?{color:"white"}:{}},n.get("title")))}))),p.createElement("div",{className:"copy-to-clipboard"},p.createElement(g.CopyToClipboard,{text:C},p.createElement("button",null))),p.createElement("div",null,T)))}},4669:(e,t,n)=>{"use strict";n.r(t),n.d(t,{getActiveLanguage:()=>d,getDefaultExpanded:()=>m,getGenerators:()=>f,getSnippetGenerators:()=>h});var r=n(14418),o=n.n(r),a=n(58118),i=n.n(a),s=n(97606),l=n.n(s),u=n(20573),c=n(43393);const p=e=>e||(0,c.Map)(),f=(0,u.P1)(p,(e=>{const t=e.get("languages"),n=e.get("generators",(0,c.Map)());return!t||t.isEmpty()?n:o()(n).call(n,((e,n)=>i()(t).call(t,n)))})),h=e=>t=>{var n,r;let{fn:a}=t;return o()(n=l()(r=f(e)).call(r,((e,t)=>{const n=(e=>a[`requestSnippetGenerator_${e}`])(t);return"function"!=typeof n?null:e.set("fn",n)}))).call(n,(e=>e))},d=(0,u.P1)(p,(e=>e.get("activeLanguage"))),m=(0,u.P1)(p,(e=>e.get("defaultExpanded")))},36195:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ErrorBoundary:()=>i,default:()=>s});var r=n(67294),o=n(56189),a=n(29403);class i extends r.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:n}=this.props;if(this.state.hasError){const n=e("Fallback");return r.createElement(n,{name:t})}return n}}i.defaultProps={targetName:"this component",getComponent:()=>a.default,fn:{componentDidCatch:o.componentDidCatch},children:null};const s=i},29403:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{name:t}=e;return r.createElement("div",{className:"fallback"},"😱 ",r.createElement("i",null,"Could not render ","t"===t?"this component":t,", see the console."))}},56189:(e,t,n)=>{"use strict";n.r(t),n.d(t,{componentDidCatch:()=>i,withErrorBoundary:()=>s});var r=n(23101),o=n.n(r),a=n(67294);const i=console.error,s=e=>t=>{const{getComponent:n,fn:r}=e(),i=n("ErrorBoundary"),s=r.getDisplayName(t);class l extends a.Component{render(){return a.createElement(i,{targetName:s,getComponent:n,fn:r},a.createElement(t,o()({},this.props,this.context)))}}var u;return l.displayName=`WithErrorBoundary(${s})`,(u=t).prototype&&u.prototype.isReactComponent&&(l.prototype.mapStateToProps=t.prototype.mapStateToProps),l}},27621:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=n(47475),o=n.n(r),a=n(7287),i=n.n(a),s=n(36195),l=n(29403),u=n(56189);const c=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{var r;let{getSystem:a}=n;const c=t?e:["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper",...e],p=i()(c,o()(r=Array(c.length)).call(r,((e,t)=>{let{fn:n}=t;return n.withErrorBoundary(e)})));return{fn:{componentDidCatch:u.componentDidCatch,withErrorBoundary:(0,u.withErrorBoundary)(a)},components:{ErrorBoundary:s.default,Fallback:l.default},wrapComponents:p}}}},57050:(e,t,n)=>{"use strict";n.r(t),n.d(t,{createXMLExample:()=>z,inferSchema:()=>U,memoizedCreateXMLExample:()=>V,memoizedSampleFromSchema:()=>W,sampleFromSchema:()=>q,sampleFromSchemaGeneric:()=>F});var r=n(11882),o=n.n(r),a=n(86),i=n.n(a),s=n(58309),l=n.n(s),u=n(58118),c=n.n(u),p=n(92039),f=n.n(p),h=n(24278),d=n.n(h),m=n(51679),g=n.n(m),y=n(39022),v=n.n(y),b=n(97606),w=n.n(b),E=n(35627),x=n.n(E),_=n(53479),S=n.n(_),A=n(14419),C=n.n(A),k=n(41609),O=n.n(k),j=n(90242),T=n(60314);const I={string:e=>e.pattern?(e=>{try{return new(C())(e).gen()}catch(e){return"string"}})(e.pattern):"string",string_email:()=>"user@example.com","string_date-time":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>"3fa85f64-5717-4562-b3fc-2c963f66afa6",string_hostname:()=>"example.com",string_ipv4:()=>"198.51.100.42",string_ipv6:()=>"2001:0db8:5b96:0000:0000:426f:8e17:642a",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>"boolean"!=typeof e.default||e.default},N=e=>{e=(0,j.mz)(e);let{type:t,format:n}=e,r=I[`${t}_${n}`]||I[t];return(0,j.Wl)(r)?r(e):"Unknown Type: "+e.type},P=e=>(0,j.XV)(e,"$$ref",(e=>"string"==typeof e&&o()(e).call(e,"#")>-1)),R=["maxProperties","minProperties"],M=["minItems","maxItems"],D=["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],L=["minLength","maxLength"],B=function(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var a;(i()(n=["example","default","enum","xml","type",...R,...M,...D,...L]).call(n,(n=>(n=>{void 0===t[n]&&void 0!==e[n]&&(t[n]=e[n])})(n))),void 0!==e.required&&l()(e.required))&&(void 0!==t.required&&t.required.length||(t.required=[]),i()(a=e.required).call(a,(e=>{var n;c()(n=t.required).call(n,e)||t.required.push(e)})));if(e.properties){t.properties||(t.properties={});let n=(0,j.mz)(e.properties);for(let a in n){var s;if(Object.prototype.hasOwnProperty.call(n,a))if(!n[a]||!n[a].deprecated)if(!n[a]||!n[a].readOnly||r.includeReadOnly)if(!n[a]||!n[a].writeOnly||r.includeWriteOnly)if(!t.properties[a])t.properties[a]=n[a],!e.required&&l()(e.required)&&-1!==o()(s=e.required).call(s,a)&&(t.required?t.required.push(a):t.required=[a])}}return e.items&&(t.items||(t.items={}),t.items=B(e.items,t.items,r)),t},F=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&(0,j.Wl)(e.toJS)&&(e=e.toJS());let a=void 0!==n||e&&void 0!==e.example||e&&void 0!==e.default;const s=!a&&e&&e.oneOf&&e.oneOf.length>0,u=!a&&e&&e.anyOf&&e.anyOf.length>0;if(!a&&(s||u)){const n=(0,j.mz)(s?e.oneOf[0]:e.anyOf[0]);if(B(n,e,t),!e.xml&&n.xml&&(e.xml=n.xml),void 0!==e.example&&void 0!==n.example)a=!0;else if(n.properties){e.properties||(e.properties={});let r=(0,j.mz)(n.properties);for(let a in r){var p;if(Object.prototype.hasOwnProperty.call(r,a))if(!r[a]||!r[a].deprecated)if(!r[a]||!r[a].readOnly||t.includeReadOnly)if(!r[a]||!r[a].writeOnly||t.includeWriteOnly)if(!e.properties[a])e.properties[a]=r[a],!n.required&&l()(n.required)&&-1!==o()(p=n.required).call(p,a)&&(e.required?e.required.push(a):e.required=[a])}}}const h={};let{xml:m,type:y,example:b,properties:E,additionalProperties:x,items:_}=e||{},{includeReadOnly:S,includeWriteOnly:A}=t;m=m||{};let C,{name:k,prefix:T,namespace:I}=m,L={};if(r&&(k=k||"notagname",C=(T?T+":":"")+k,I)){h[T?"xmlns:"+T:"xmlns"]=I}r&&(L[C]=[]);const U=t=>f()(t).call(t,(t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!y&&(E||x||U(R)?y="object":_||U(M)?y="array":U(D)?(y="number",e.type="number"):a||e.enum||(y="string",e.type="string"));const z=t=>{var n,r,o,a,i;null!==(null===(n=e)||void 0===n?void 0:n.maxItems)&&void 0!==(null===(r=e)||void 0===r?void 0:r.maxItems)&&(t=d()(t).call(t,0,null===(i=e)||void 0===i?void 0:i.maxItems));if(null!==(null===(o=e)||void 0===o?void 0:o.minItems)&&void 0!==(null===(a=e)||void 0===a?void 0:a.minItems)){let n=0;for(;t.length<(null===(s=e)||void 0===s?void 0:s.minItems);){var s;t.push(t[n++%t.length])}}return t},q=(0,j.mz)(E);let $,V=0;const W=()=>e&&null!==e.maxProperties&&void 0!==e.maxProperties&&V>=e.maxProperties,H=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!W()&&(!(t=>{var n;return!(e&&e.required&&e.required.length&&c()(n=e.required).call(n,t))})(t)||e.maxProperties-V-(()=>{if(!e||!e.required)return 0;let t=0;var n,o;return r?i()(n=e.required).call(n,(e=>t+=void 0===L[e]?0:1)):i()(o=e.required).call(o,(e=>{var n;return t+=void 0===(null===(n=L[C])||void 0===n?void 0:g()(n).call(n,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if($=r?function(n){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&q[n]){if(q[n].xml=q[n].xml||{},q[n].xml.attribute){const e=l()(q[n].enum)?q[n].enum[0]:void 0,t=q[n].example,r=q[n].default;return void(h[q[n].xml.name||n]=void 0!==t?t:void 0!==r?r:void 0!==e?e:N(q[n]))}q[n].xml.name=q[n].xml.name||n}else q[n]||!1===x||(q[n]={xml:{name:n}});let a=F(e&&q[n]||void 0,t,o,r);var i;H(n)&&(V++,l()(a)?L[C]=v()(i=L[C]).call(i,a):L[C].push(a))}:(n,o)=>{if(H(n)){if(Object.prototype.hasOwnProperty.call(e,"discriminator")&&e.discriminator&&Object.prototype.hasOwnProperty.call(e.discriminator,"mapping")&&e.discriminator.mapping&&Object.prototype.hasOwnProperty.call(e,"$$ref")&&e.$$ref&&e.discriminator.propertyName===n){for(let t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){L[n]=t;break}}else L[n]=F(q[n],t,o,r);V++}},a){let o;if(o=P(void 0!==n?n:void 0!==b?b:e.default),!r){if("number"==typeof o&&"string"===y)return`${o}`;if("string"!=typeof o||"string"===y)return o;try{return JSON.parse(o)}catch(e){return o}}if(e||(y=l()(o)?"array":typeof o),"array"===y){if(!l()(o)){if("string"==typeof o)return o;o=[o]}const n=e?e.items:void 0;n&&(n.xml=n.xml||m||{},n.xml.name=n.xml.name||m.name);let a=w()(o).call(o,(e=>F(n,t,e,r)));return a=z(a),m.wrapped?(L[C]=a,O()(h)||L[C].push({_attr:h})):L=a,L}if("object"===y){if("string"==typeof o)return o;for(let t in o)Object.prototype.hasOwnProperty.call(o,t)&&(e&&q[t]&&q[t].readOnly&&!S||e&&q[t]&&q[t].writeOnly&&!A||(e&&q[t]&&q[t].xml&&q[t].xml.attribute?h[q[t].xml.name||t]=o[t]:$(t,o[t])));return O()(h)||L[C].push({_attr:h}),L}return L[C]=O()(h)?o:[{_attr:h},o],L}if("object"===y){for(let e in q)Object.prototype.hasOwnProperty.call(q,e)&&(q[e]&&q[e].deprecated||q[e]&&q[e].readOnly&&!S||q[e]&&q[e].writeOnly&&!A||$(e));if(r&&h&&L[C].push({_attr:h}),W())return L;if(!0===x)r?L[C].push({additionalProp:"Anything can be here"}):L.additionalProp1={},V++;else if(x){const n=(0,j.mz)(x),o=F(n,t,void 0,r);if(r&&n.xml&&n.xml.name&&"notagname"!==n.xml.name)L[C].push(o);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&VF(B(_,e,t),t,void 0,r)));else if(l()(_.oneOf)){var G;n=w()(G=_.oneOf).call(G,(e=>F(B(_,e,t),t,void 0,r)))}else{if(!(!r||r&&m.wrapped))return F(_,t,void 0,r);n=[F(_,t,void 0,r)]}return n=z(n),r&&m.wrapped?(L[C]=n,O()(h)||L[C].push({_attr:h}),L):n}let Z;if(e&&l()(e.enum))Z=(0,j.AF)(e.enum)[0];else{if(!e)return;if(Z=N(e),"number"==typeof Z){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,Z=t);let n=e.maximum;null!=n&&(e.exclusiveMaximum&&n--,Z=n)}if("string"==typeof Z&&(null!==e.maxLength&&void 0!==e.maxLength&&(Z=d()(Z).call(Z,0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;Z.length(e.schema&&(e=e.schema),e.properties&&(e.type="object"),e),z=(e,t,n)=>{const r=F(e,t,n,!0);if(r)return"string"==typeof r?r:S()(r,{declaration:!0,indent:"\t"})},q=(e,t,n)=>F(e,t,n,!1),$=(e,t,n)=>[e,x()(t),x()(n)],V=(0,T.Z)(z,$),W=(0,T.Z)(q,$)},8883:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(57050);function o(){return{fn:r}}},51228:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CLEAR_REQUEST:()=>Q,CLEAR_RESPONSE:()=>Y,CLEAR_VALIDATE_PARAMS:()=>X,LOG_REQUEST:()=>Z,SET_MUTATED_REQUEST:()=>G,SET_REQUEST:()=>K,SET_RESPONSE:()=>J,SET_SCHEME:()=>re,UPDATE_EMPTY_PARAM_INCLUSION:()=>W,UPDATE_JSON:()=>$,UPDATE_OPERATION_META_VALUE:()=>ee,UPDATE_PARAM:()=>V,UPDATE_RESOLVED:()=>te,UPDATE_RESOLVED_SUBTREE:()=>ne,UPDATE_SPEC:()=>z,UPDATE_URL:()=>q,VALIDATE_PARAMS:()=>H,changeConsumesValue:()=>xe,changeParam:()=>me,changeParamByIdentity:()=>ge,changeProducesValue:()=>_e,clearRequest:()=>Ie,clearResponse:()=>Te,clearValidateParams:()=>Ee,execute:()=>je,executeRequest:()=>Oe,invalidateResolvedSubtreeCache:()=>ve,logRequest:()=>ke,parseToJson:()=>ue,requestResolvedSubtree:()=>de,resolveSpec:()=>pe,setMutatedRequest:()=>Ce,setRequest:()=>Ae,setResponse:()=>Se,setScheme:()=>Ne,updateEmptyParamInclusion:()=>we,updateJsonSpec:()=>le,updateResolved:()=>ie,updateResolvedSubtree:()=>ye,updateSpec:()=>ae,updateUrl:()=>se,validateParams:()=>be});var r=n(58309),o=n.n(r),a=n(97606),i=n.n(a),s=n(96718),l=n.n(s),u=n(24282),c=n.n(u),p=n(2250),f=n.n(p),h=n(6226),d=n.n(h),m=n(14418),g=n.n(m),y=n(3665),v=n.n(y),b=n(11882),w=n.n(b),E=n(86),x=n.n(E),_=n(28222),S=n.n(_),A=n(76986),C=n.n(A),k=n(70586),O=n.n(k),j=n(1272),T=n(43393),I=n(84564),N=n.n(I),P=n(7710),R=n(47037),M=n.n(R),D=n(23279),L=n.n(D),B=n(36968),F=n.n(B),U=n(90242);const z="spec_update_spec",q="spec_update_url",$="spec_update_json",V="spec_update_param",W="spec_update_empty_param_inclusion",H="spec_validate_param",J="spec_set_response",K="spec_set_request",G="spec_set_mutated_request",Z="spec_log_request",Y="spec_clear_response",Q="spec_clear_request",X="spec_clear_validate_param",ee="spec_update_operation_meta_value",te="spec_update_resolved",ne="spec_update_resolved_subtree",re="set_scheme",oe=e=>M()(e)?e:"";function ae(e){const t=oe(e).replace(/\t/g," ");if("string"==typeof e)return{type:z,payload:t}}function ie(e){return{type:te,payload:e}}function se(e){return{type:q,payload:e}}function le(e){return{type:$,payload:e}}const ue=e=>t=>{let{specActions:n,specSelectors:r,errActions:o}=t,{specStr:a}=r,i=null;try{e=e||a(),o.clear({source:"parser"}),i=j.ZP.load(e,{schema:j.A8})}catch(e){return console.error(e),o.newSpecErr({source:"parser",level:"error",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&"object"==typeof i?n.updateJsonSpec(i):{}};let ce=!1;const pe=(e,t)=>n=>{let{specActions:r,specSelectors:a,errActions:s,fn:{fetch:u,resolve:c,AST:p={}},getConfigs:f}=n;ce||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),ce=!0);const{modelPropertyMacro:h,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}=f();void 0===e&&(e=a.specJson()),void 0===t&&(t=a.url());let y=p.getLineNumberForPath?p.getLineNumberForPath:()=>{},v=a.specStr();return c({fetch:u,spec:e,baseDoc:t,modelPropertyMacro:h,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}).then((e=>{let{spec:t,errors:n}=e;if(s.clear({type:"thrown"}),o()(n)&&n.length>0){let e=i()(n).call(n,(e=>(console.error(e),e.line=e.fullPath?y(v,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",l()(e,"message",{enumerable:!0,value:e.message}),e)));s.newThrownErrBatch(e)}return r.updateResolved(t)}))};let fe=[];const he=L()((async()=>{const e=fe.system;if(!e)return void console.error("debResolveSubtrees: don't have a system to operate on, aborting.");const{errActions:t,errSelectors:n,fn:{resolveSubtree:r,fetch:a,AST:s={}},specSelectors:u,specActions:p}=e;if(!r)return void console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.");let h=s.getLineNumberForPath?s.getLineNumberForPath:()=>{};const m=u.specStr(),{modelPropertyMacro:y,parameterMacro:b,requestInterceptor:w,responseInterceptor:E}=e.getConfigs();try{var x=await c()(fe).call(fe,(async(e,s)=>{const{resultMap:c,specWithCurrentSubtrees:p}=await e,{errors:x,spec:_}=await r(p,s,{baseDoc:u.url(),modelPropertyMacro:y,parameterMacro:b,requestInterceptor:w,responseInterceptor:E});if(n.allErrors().size&&t.clearBy((e=>{var t;return"thrown"!==e.get("type")||"resolver"!==e.get("source")||!f()(t=e.get("fullPath")).call(t,((e,t)=>e===s[t]||void 0===s[t]))})),o()(x)&&x.length>0){let e=i()(x).call(x,(e=>(e.line=e.fullPath?h(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",l()(e,"message",{enumerable:!0,value:e.message}),e)));t.newThrownErrBatch(e)}var S,A;_&&u.isOAS3()&&"components"===s[0]&&"securitySchemes"===s[1]&&await d().all(i()(S=g()(A=v()(_)).call(A,(e=>"openIdConnect"===e.type))).call(S,(async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:w,responseInterceptor:E};try{const n=await a(t);n instanceof Error||n.status>=400?console.error(n.statusText+" "+t.url):e.openIdConnectData=JSON.parse(n.text)}catch(e){console.error(e)}})));return F()(c,s,_),F()(p,s,_),{resultMap:c,specWithCurrentSubtrees:p}}),d().resolve({resultMap:(u.specResolvedSubtree([])||(0,T.Map)()).toJS(),specWithCurrentSubtrees:u.specJson().toJS()}));delete fe.system,fe=[]}catch(e){console.error(e)}p.updateResolvedSubtree([],x.resultMap)}),35),de=e=>t=>{var n;w()(n=i()(fe).call(fe,(e=>e.join("@@")))).call(n,e.join("@@"))>-1||(fe.push(e),fe.system=t,he())};function me(e,t,n,r,o){return{type:V,payload:{path:e,value:r,paramName:t,paramIn:n,isXml:o}}}function ge(e,t,n,r){return{type:V,payload:{path:e,param:t,value:n,isXml:r}}}const ye=(e,t)=>({type:ne,payload:{path:e,value:t}}),ve=()=>({type:ne,payload:{path:[],value:(0,T.Map)()}}),be=(e,t)=>({type:H,payload:{pathMethod:e,isOAS3:t}}),we=(e,t,n,r)=>({type:W,payload:{pathMethod:e,paramName:t,paramIn:n,includeEmptyValue:r}});function Ee(e){return{type:X,payload:{pathMethod:e}}}function xe(e,t){return{type:ee,payload:{path:e,value:t,key:"consumes_value"}}}function _e(e,t){return{type:ee,payload:{path:e,value:t,key:"produces_value"}}}const Se=(e,t,n)=>({payload:{path:e,method:t,res:n},type:J}),Ae=(e,t,n)=>({payload:{path:e,method:t,req:n},type:K}),Ce=(e,t,n)=>({payload:{path:e,method:t,req:n},type:G}),ke=e=>({payload:e,type:Z}),Oe=e=>t=>{let{fn:n,specActions:r,specSelectors:a,getConfigs:s,oas3Selectors:l}=t,{pathName:u,method:c,operation:p}=e,{requestInterceptor:f,responseInterceptor:h}=s(),d=p.toJS();var m,y;p&&p.get("parameters")&&x()(m=g()(y=p.get("parameters")).call(y,(e=>e&&!0===e.get("allowEmptyValue")))).call(m,(t=>{if(a.parameterInclusionSettingFor([u,c],t.get("name"),t.get("in"))){e.parameters=e.parameters||{};const n=(0,U.cz)(t,e.parameters);(!n||n&&0===n.size)&&(e.parameters[t.get("name")]="")}}));if(e.contextUrl=N()(a.url()).toString(),d&&d.operationId?e.operationId=d.operationId:d&&u&&c&&(e.operationId=n.opId(d,u,c)),a.isOAS3()){const t=`${u}:${c}`;e.server=l.selectedServer(t)||l.selectedServer();const n=l.serverVariables({server:e.server,namespace:t}).toJS(),r=l.serverVariables({server:e.server}).toJS();e.serverVariables=S()(n).length?n:r,e.requestContentType=l.requestContentType(u,c),e.responseContentType=l.responseContentType(u,c)||"*/*";const a=l.requestBodyValue(u,c),s=l.requestBodyInclusionSetting(u,c);var v;if(a&&a.toJS)e.requestBody=g()(v=i()(a).call(a,(e=>T.Map.isMap(e)?e.get("value"):e))).call(v,((e,t)=>(o()(e)?0!==e.length:!(0,U.O2)(e))||s.get(t))).toJS();else e.requestBody=a}let b=C()({},e);b=n.buildRequest(b),r.setRequest(e.pathName,e.method,b);e.requestInterceptor=async t=>{let n=await f.apply(void 0,[t]),o=C()({},n);return r.setMutatedRequest(e.pathName,e.method,o),n},e.responseInterceptor=h;const w=O()();return n.execute(e).then((t=>{t.duration=O()()-w,r.setResponse(e.pathName,e.method,t)})).catch((t=>{"Failed to fetch"===t.message&&(t.name="",t.message='**Failed to fetch.** \n**Possible Reasons:** \n - CORS \n - Network Failure \n - URL scheme must be "http" or "https" for CORS request.'),r.setResponse(e.pathName,e.method,{error:!0,err:(0,P.serializeError)(t)})}))},je=function(){let{path:e,method:t,...n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{let{fn:{fetch:o},specSelectors:a,specActions:i}=r,s=a.specJsonWithResolvedSubtrees().toJS(),l=a.operationScheme(e,t),{requestContentType:u,responseContentType:c}=a.contentTypeValues([e,t]).toJS(),p=/xml/i.test(u),f=a.parameterValues([e,t],p).toJS();return i.executeRequest({...n,fetch:o,spec:s,pathName:e,method:t,parameters:f,requestContentType:u,scheme:l,responseContentType:c})}};function Te(e,t){return{type:Y,payload:{path:e,method:t}}}function Ie(e,t){return{type:Q,payload:{path:e,method:t}}}function Ne(e,t,n){return{type:re,payload:{scheme:e,path:t,method:n}}}},37038:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(20032),o=n(51228),a=n(33881),i=n(77508);function s(){return{statePlugins:{spec:{wrapActions:i,reducers:r.default,actions:o,selectors:a}}}}},20032:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>d});var r=n(24282),o=n.n(r),a=n(97606),i=n.n(a),s=n(76986),l=n.n(s),u=n(43393),c=n(90242),p=n(27504),f=n(33881),h=n(51228);const d={[h.UPDATE_SPEC]:(e,t)=>"string"==typeof t.payload?e.set("spec",t.payload):e,[h.UPDATE_URL]:(e,t)=>e.set("url",t.payload+""),[h.UPDATE_JSON]:(e,t)=>e.set("json",(0,c.oG)(t.payload)),[h.UPDATE_RESOLVED]:(e,t)=>e.setIn(["resolved"],(0,c.oG)(t.payload)),[h.UPDATE_RESOLVED_SUBTREE]:(e,t)=>{const{value:n,path:r}=t.payload;return e.setIn(["resolvedSubtrees",...r],(0,c.oG)(n))},[h.UPDATE_PARAM]:(e,t)=>{let{payload:n}=t,{path:r,paramName:o,paramIn:a,param:i,value:s,isXml:l}=n,u=i?(0,c.V9)(i):`${a}.${o}`;const p=l?"value_xml":"value";return e.setIn(["meta","paths",...r,"parameters",u,p],s)},[h.UPDATE_EMPTY_PARAM_INCLUSION]:(e,t)=>{let{payload:n}=t,{pathMethod:r,paramName:o,paramIn:a,includeEmptyValue:i}=n;if(!o||!a)return console.warn("Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey."),e;const s=`${a}.${o}`;return e.setIn(["meta","paths",...r,"parameter_inclusions",s],i)},[h.VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n,isOAS3:r}}=t;const a=(0,f.specJsonWithResolvedSubtrees)(e).getIn(["paths",...n]),i=(0,f.parameterValues)(e,n).toJS();return e.updateIn(["meta","paths",...n,"parameters"],(0,u.fromJS)({}),(t=>{var s;return o()(s=a.get("parameters",(0,u.List)())).call(s,((t,o)=>{const a=(0,c.cz)(o,i),s=(0,f.parameterInclusionSettingFor)(e,n,o.get("name"),o.get("in")),l=(0,c.Ik)(o,a,{bypassRequiredCheck:s,isOAS3:r});return t.setIn([(0,c.V9)(o),"errors"],(0,u.fromJS)(l))}),t)}))},[h.CLEAR_VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n}}=t;return e.updateIn(["meta","paths",...n,"parameters"],(0,u.fromJS)([]),(e=>i()(e).call(e,(e=>e.set("errors",(0,u.fromJS)([]))))))},[h.SET_RESPONSE]:(e,t)=>{let n,{payload:{res:r,path:o,method:a}}=t;n=r.error?l()({error:!0,name:r.err.name,message:r.err.message,statusCode:r.err.statusCode},r.err.response):r,n.headers=n.headers||{};let i=e.setIn(["responses",o,a],(0,c.oG)(n));return p.Z.Blob&&r.data instanceof p.Z.Blob&&(i=i.setIn(["responses",o,a,"text"],r.data)),i},[h.SET_REQUEST]:(e,t)=>{let{payload:{req:n,path:r,method:o}}=t;return e.setIn(["requests",r,o],(0,c.oG)(n))},[h.SET_MUTATED_REQUEST]:(e,t)=>{let{payload:{req:n,path:r,method:o}}=t;return e.setIn(["mutatedRequests",r,o],(0,c.oG)(n))},[h.UPDATE_OPERATION_META_VALUE]:(e,t)=>{let{payload:{path:n,value:r,key:o}}=t,a=["paths",...n],i=["meta","paths",...n];return e.getIn(["json",...a])||e.getIn(["resolved",...a])||e.getIn(["resolvedSubtrees",...a])?e.setIn([...i,o],(0,u.fromJS)(r)):e},[h.CLEAR_RESPONSE]:(e,t)=>{let{payload:{path:n,method:r}}=t;return e.deleteIn(["responses",n,r])},[h.CLEAR_REQUEST]:(e,t)=>{let{payload:{path:n,method:r}}=t;return e.deleteIn(["requests",n,r])},[h.SET_SCHEME]:(e,t)=>{let{payload:{scheme:n,path:r,method:o}}=t;return r&&o?e.setIn(["scheme",r,o],n):r||o?void 0:e.setIn(["scheme","_defaultScheme"],n)}}},33881:(e,t,n)=>{"use strict";n.r(t),n.d(t,{allowTryItOutFor:()=>pe,basePath:()=>Y,canExecuteScheme:()=>Ce,consumes:()=>W,consumesOptionsFor:()=>Se,contentTypeValues:()=>Ee,currentProducesFor:()=>xe,definitions:()=>Z,externalDocs:()=>U,findDefinition:()=>G,getOAS3RequiredRequestBodyContentType:()=>je,getParameter:()=>ge,hasHost:()=>ye,host:()=>Q,info:()=>F,isMediaTypeSchemaPropertiesEqual:()=>Te,isOAS3:()=>B,lastError:()=>O,mutatedRequestFor:()=>ce,mutatedRequests:()=>se,operationScheme:()=>Ae,operationWithMeta:()=>me,operations:()=>V,operationsWithRootInherited:()=>ee,operationsWithTags:()=>re,parameterInclusionSettingFor:()=>he,parameterValues:()=>ve,parameterWithMeta:()=>de,parameterWithMetaByIdentity:()=>fe,parametersIncludeIn:()=>be,parametersIncludeType:()=>we,paths:()=>$,produces:()=>H,producesOptionsFor:()=>_e,requestFor:()=>ue,requests:()=>ie,responseFor:()=>le,responses:()=>ae,schemes:()=>X,security:()=>J,securityDefinitions:()=>K,semver:()=>q,spec:()=>L,specJson:()=>N,specJsonWithResolvedSubtrees:()=>D,specResolved:()=>P,specResolvedSubtree:()=>R,specSource:()=>I,specStr:()=>T,tagDetails:()=>ne,taggedOperations:()=>oe,tags:()=>te,url:()=>j,validateBeforeExecute:()=>Oe,validationErrors:()=>ke,version:()=>z});var r=n(24278),o=n.n(r),a=n(86),i=n.n(a),s=n(11882),l=n.n(s),u=n(97606),c=n.n(u),p=n(14418),f=n.n(p),h=n(51679),d=n.n(h),m=n(24282),g=n.n(m),y=n(2578),v=n.n(y),b=n(92039),w=n.n(b),E=n(58309),x=n.n(E),_=n(20573),S=n(90242),A=n(43393);const C=["get","put","post","delete","options","head","patch","trace"],k=e=>e||(0,A.Map)(),O=(0,_.P1)(k,(e=>e.get("lastError"))),j=(0,_.P1)(k,(e=>e.get("url"))),T=(0,_.P1)(k,(e=>e.get("spec")||"")),I=(0,_.P1)(k,(e=>e.get("specSource")||"not-editor")),N=(0,_.P1)(k,(e=>e.get("json",(0,A.Map)()))),P=(0,_.P1)(k,(e=>e.get("resolved",(0,A.Map)()))),R=(e,t)=>e.getIn(["resolvedSubtrees",...t],void 0),M=(e,t)=>A.Map.isMap(e)&&A.Map.isMap(t)?t.get("$$ref")?t:(0,A.OrderedMap)().mergeWith(M,e,t):t,D=(0,_.P1)(k,(e=>(0,A.OrderedMap)().mergeWith(M,e.get("json"),e.get("resolvedSubtrees")))),L=e=>N(e),B=(0,_.P1)(L,(()=>!1)),F=(0,_.P1)(L,(e=>Ie(e&&e.get("info")))),U=(0,_.P1)(L,(e=>Ie(e&&e.get("externalDocs")))),z=(0,_.P1)(F,(e=>e&&e.get("version"))),q=(0,_.P1)(z,(e=>{var t;return o()(t=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e)).call(t,1)})),$=(0,_.P1)(D,(e=>e.get("paths"))),V=(0,_.P1)($,(e=>{if(!e||e.size<1)return(0,A.List)();let t=(0,A.List)();return e&&i()(e)?(i()(e).call(e,((e,n)=>{if(!e||!i()(e))return{};i()(e).call(e,((e,r)=>{l()(C).call(C,r)<0||(t=t.push((0,A.fromJS)({path:n,method:r,operation:e,id:`${r}-${n}`})))}))})),t):(0,A.List)()})),W=(0,_.P1)(L,(e=>(0,A.Set)(e.get("consumes")))),H=(0,_.P1)(L,(e=>(0,A.Set)(e.get("produces")))),J=(0,_.P1)(L,(e=>e.get("security",(0,A.List)()))),K=(0,_.P1)(L,(e=>e.get("securityDefinitions"))),G=(e,t)=>{const n=e.getIn(["resolvedSubtrees","definitions",t],null),r=e.getIn(["json","definitions",t],null);return n||r||null},Z=(0,_.P1)(L,(e=>{const t=e.get("definitions");return A.Map.isMap(t)?t:(0,A.Map)()})),Y=(0,_.P1)(L,(e=>e.get("basePath"))),Q=(0,_.P1)(L,(e=>e.get("host"))),X=(0,_.P1)(L,(e=>e.get("schemes",(0,A.Map)()))),ee=(0,_.P1)(V,W,H,((e,t,n)=>c()(e).call(e,(e=>e.update("operation",(e=>{if(e){if(!A.Map.isMap(e))return;return e.withMutations((e=>(e.get("consumes")||e.update("consumes",(e=>(0,A.Set)(e).merge(t))),e.get("produces")||e.update("produces",(e=>(0,A.Set)(e).merge(n))),e)))}return(0,A.Map)()})))))),te=(0,_.P1)(L,(e=>{const t=e.get("tags",(0,A.List)());return A.List.isList(t)?f()(t).call(t,(e=>A.Map.isMap(e))):(0,A.List)()})),ne=(e,t)=>{var n;let r=te(e)||(0,A.List)();return d()(n=f()(r).call(r,A.Map.isMap)).call(n,(e=>e.get("name")===t),(0,A.Map)())},re=(0,_.P1)(ee,te,((e,t)=>g()(e).call(e,((e,t)=>{let n=(0,A.Set)(t.getIn(["operation","tags"]));return n.count()<1?e.update("default",(0,A.List)(),(e=>e.push(t))):g()(n).call(n,((e,n)=>e.update(n,(0,A.List)(),(e=>e.push(t)))),e)}),g()(t).call(t,((e,t)=>e.set(t.get("name"),(0,A.List)())),(0,A.OrderedMap)())))),oe=e=>t=>{var n;let{getConfigs:r}=t,{tagsSorter:o,operationsSorter:a}=r();return c()(n=re(e).sortBy(((e,t)=>t),((e,t)=>{let n="function"==typeof o?o:S.wh.tagsSorter[o];return n?n(e,t):null}))).call(n,((t,n)=>{let r="function"==typeof a?a:S.wh.operationsSorter[a],o=r?v()(t).call(t,r):t;return(0,A.Map)({tagDetails:ne(e,n),operations:o})}))},ae=(0,_.P1)(k,(e=>e.get("responses",(0,A.Map)()))),ie=(0,_.P1)(k,(e=>e.get("requests",(0,A.Map)()))),se=(0,_.P1)(k,(e=>e.get("mutatedRequests",(0,A.Map)()))),le=(e,t,n)=>ae(e).getIn([t,n],null),ue=(e,t,n)=>ie(e).getIn([t,n],null),ce=(e,t,n)=>se(e).getIn([t,n],null),pe=()=>!0,fe=(e,t,n)=>{const r=D(e).getIn(["paths",...t,"parameters"],(0,A.OrderedMap)()),o=e.getIn(["meta","paths",...t,"parameters"],(0,A.OrderedMap)()),a=c()(r).call(r,(e=>{const t=o.get(`${n.get("in")}.${n.get("name")}`),r=o.get(`${n.get("in")}.${n.get("name")}.hash-${n.hashCode()}`);return(0,A.OrderedMap)().merge(e,t,r)}));return d()(a).call(a,(e=>e.get("in")===n.get("in")&&e.get("name")===n.get("name")),(0,A.OrderedMap)())},he=(e,t,n,r)=>{const o=`${r}.${n}`;return e.getIn(["meta","paths",...t,"parameter_inclusions",o],!1)},de=(e,t,n,r)=>{const o=D(e).getIn(["paths",...t,"parameters"],(0,A.OrderedMap)()),a=d()(o).call(o,(e=>e.get("in")===r&&e.get("name")===n),(0,A.OrderedMap)());return fe(e,t,a)},me=(e,t,n)=>{var r;const o=D(e).getIn(["paths",t,n],(0,A.OrderedMap)()),a=e.getIn(["meta","paths",t,n],(0,A.OrderedMap)()),i=c()(r=o.get("parameters",(0,A.List)())).call(r,(r=>fe(e,[t,n],r)));return(0,A.OrderedMap)().merge(o,a).set("parameters",i)};function ge(e,t,n,r){t=t||[];let o=e.getIn(["meta","paths",...t,"parameters"],(0,A.fromJS)([]));return d()(o).call(o,(e=>A.Map.isMap(e)&&e.get("name")===n&&e.get("in")===r))||(0,A.Map)()}const ye=(0,_.P1)(L,(e=>{const t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}));function ve(e,t,n){t=t||[];let r=me(e,...t).get("parameters",(0,A.List)());return g()(r).call(r,((e,t)=>{let r=n&&"body"===t.get("in")?t.get("value_xml"):t.get("value");return e.set((0,S.V9)(t,{allowHashes:!1}),r)}),(0,A.fromJS)({}))}function be(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(A.List.isList(e))return w()(e).call(e,(e=>A.Map.isMap(e)&&e.get("in")===t))}function we(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(A.List.isList(e))return w()(e).call(e,(e=>A.Map.isMap(e)&&e.get("type")===t))}function Ee(e,t){t=t||[];let n=D(e).getIn(["paths",...t],(0,A.fromJS)({})),r=e.getIn(["meta","paths",...t],(0,A.fromJS)({})),o=xe(e,t);const a=n.get("parameters")||new A.List,i=r.get("consumes_value")?r.get("consumes_value"):we(a,"file")?"multipart/form-data":we(a,"formData")?"application/x-www-form-urlencoded":void 0;return(0,A.fromJS)({requestContentType:i,responseContentType:o})}function xe(e,t){t=t||[];const n=D(e).getIn(["paths",...t],null);if(null===n)return;const r=e.getIn(["meta","paths",...t,"produces_value"],null),o=n.getIn(["produces",0],null);return r||o||"application/json"}function _e(e,t){t=t||[];const n=D(e),r=n.getIn(["paths",...t],null);if(null===r)return;const[o]=t,a=r.get("produces",null),i=n.getIn(["paths",o,"produces"],null),s=n.getIn(["produces"],null);return a||i||s}function Se(e,t){t=t||[];const n=D(e),r=n.getIn(["paths",...t],null);if(null===r)return;const[o]=t,a=r.get("consumes",null),i=n.getIn(["paths",o,"consumes"],null),s=n.getIn(["consumes"],null);return a||i||s}const Ae=(e,t,n)=>{let r=e.get("url").match(/^([a-z][a-z0-9+\-.]*):/),o=x()(r)?r[1]:null;return e.getIn(["scheme",t,n])||e.getIn(["scheme","_defaultScheme"])||o||""},Ce=(e,t,n)=>{var r;return l()(r=["http","https"]).call(r,Ae(e,t,n))>-1},ke=(e,t)=>{t=t||[];let n=e.getIn(["meta","paths",...t,"parameters"],(0,A.fromJS)([]));const r=[];return i()(n).call(n,(e=>{let t=e.get("errors");t&&t.count()&&i()(t).call(t,(e=>r.push(e)))})),r},Oe=(e,t)=>0===ke(e,t).length,je=(e,t)=>{var n;let r={requestBody:!1,requestContentType:{}},o=e.getIn(["resolvedSubtrees","paths",...t,"requestBody"],(0,A.fromJS)([]));return o.size<1||(o.getIn(["required"])&&(r.requestBody=o.getIn(["required"])),i()(n=o.getIn(["content"]).entrySeq()).call(n,(e=>{const t=e[0];if(e[1].getIn(["schema","required"])){const n=e[1].getIn(["schema","required"]).toJS();r.requestContentType[t]=n}}))),r},Te=(e,t,n,r)=>{if((n||r)&&n===r)return!0;let o=e.getIn(["resolvedSubtrees","paths",...t,"requestBody","content"],(0,A.fromJS)([]));if(o.size<2||!n||!r)return!1;let a=o.getIn([n,"schema","properties"],(0,A.fromJS)([])),i=o.getIn([r,"schema","properties"],(0,A.fromJS)([]));return!!a.equals(i)};function Ie(e){return A.Map.isMap(e)?e:new A.Map}},77508:(e,t,n)=>{"use strict";n.r(t),n.d(t,{executeRequest:()=>p,updateJsonSpec:()=>c,updateSpec:()=>u,validateParams:()=>f});var r=n(28222),o=n.n(r),a=n(86),i=n.n(a),s=n(27361),l=n.n(s);const u=(e,t)=>{let{specActions:n}=t;return function(){e(...arguments),n.parseToJson(...arguments)}},c=(e,t)=>{let{specActions:n}=t;return function(){for(var t=arguments.length,r=new Array(t),a=0;a{l()(u,[e]).$ref&&n.requestResolvedSubtree(["paths",e])})),n.requestResolvedSubtree(["components","securitySchemes"])}},p=(e,t)=>{let{specActions:n}=t;return t=>(n.logRequest(t),e(t))},f=(e,t)=>{let{specSelectors:n}=t;return t=>e(t,n.isOAS3())}},34852:(e,t,n)=>{"use strict";n.r(t),n.d(t,{loaded:()=>r});const r=(e,t)=>function(){e(...arguments);const n=t.getConfigs().withCredentials;void 0!==n&&(t.fn.fetch.withCredentials="string"==typeof n?"true"===n:!!n)}},74370:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>on});var r={};n.r(r),n.d(r,{JsonPatchError:()=>G,_areEquals:()=>ae,applyOperation:()=>ee,applyPatch:()=>te,applyReducer:()=>ne,deepClone:()=>Z,getValueByPointer:()=>X,validate:()=>oe,validator:()=>re});var o={};n.r(o),n.d(o,{compare:()=>he,generate:()=>pe,observe:()=>ce,unobserve:()=>ue});var a={};n.r(a),n.d(a,{cookie:()=>Ft,header:()=>Bt,path:()=>Mt,query:()=>Dt});var i=n(58826),s=n.n(i);const l="application/json, application/yaml";function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{requestInterceptor:n,responseInterceptor:r}=t,o=e.withCredentials?"include":"same-origin";return t=>e({url:t,loadSpec:!0,requestInterceptor:n,responseInterceptor:r,headers:{Accept:l},credentials:o}).then((e=>e.body))}n(31905);var c=n(80129),p=n.n(c),f=n(1272);const h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,{FormData:d,Blob:m,File:g}=h,y=e=>":/?#[]@!$&'()*+,;=".indexOf(e)>-1,v=e=>/^[a-z0-9\-._~]+$/i.test(e);function b(e){let{escape:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return"number"==typeof e&&(e=e.toString()),"string"==typeof e&&e.length&&t?n?JSON.parse(e):[...e].map((e=>{if(v(e))return e;if(y(e)&&"unsafe"===t)return e;const n=new TextEncoder;return Array.from(n.encode(e)).map((e=>`0${e.toString(16).toUpperCase()}`.slice(-2))).map((e=>`%${e}`)).join("")})).join(""):e}function w(e){const{value:t}=e;return Array.isArray(t)?function(e){let{key:t,value:n,style:r,explode:o,escape:a}=e;const i=e=>b(e,{escape:a});if("simple"===r)return n.map((e=>i(e))).join(",");if("label"===r)return`.${n.map((e=>i(e))).join(".")}`;if("matrix"===r)return n.map((e=>i(e))).reduce(((e,n)=>!e||o?`${e||""};${t}=${n}`:`${e},${n}`),"");if("form"===r){const e=o?`&${t}=`:",";return n.map((e=>i(e))).join(e)}if("spaceDelimited"===r){const e=o?`${t}=`:"";return n.map((e=>i(e))).join(` ${e}`)}if("pipeDelimited"===r){const e=o?`${t}=`:"";return n.map((e=>i(e))).join(`|${e}`)}return}(e):"object"==typeof t?function(e){let{key:t,value:n,style:r,explode:o,escape:a}=e;const i=e=>b(e,{escape:a}),s=Object.keys(n);if("simple"===r)return s.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e},`:""}${t}${o?"=":","}${r}`}),"");if("label"===r)return s.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e}.`:"."}${t}${o?"=":"."}${r}`}),"");if("matrix"===r&&o)return s.reduce(((e,t)=>`${e?`${e};`:";"}${t}=${i(n[t])}`),"");if("matrix"===r)return s.reduce(((e,r)=>{const o=i(n[r]);return`${e?`${e},`:`;${t}=`}${r},${o}`}),"");if("form"===r)return s.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e}${o?"&":","}`:""}${t}${o?"=":","}${r}`}),"");return}(e):function(e){let{key:t,value:n,style:r,escape:o}=e;const a=e=>b(e,{escape:o});if("simple"===r)return a(n);if("label"===r)return`.${a(n)}`;if("matrix"===r)return`;${t}=${a(n)}`;if("form"===r)return a(n);if("deepObject"===r)return a(n,{},!0);return}(e)}const E=(e,t)=>{t.body=e},x={serializeRes:A,mergeInQueryOrForm:R};async function _(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"object"==typeof e&&(t=e,e=t.url),t.headers=t.headers||{},x.mergeInQueryOrForm(t),t.headers&&Object.keys(t.headers).forEach((e=>{const n=t.headers[e];"string"==typeof n&&(t.headers[e]=n.replace(/\n+/g," "))})),t.requestInterceptor&&(t=await t.requestInterceptor(t)||t);const n=t.headers["content-type"]||t.headers["Content-Type"];let r;/multipart\/form-data/i.test(n)&&t.body instanceof d&&(delete t.headers["content-type"],delete t.headers["Content-Type"]);try{r=await(t.userFetch||fetch)(t.url,t),r=await x.serializeRes(r,e,t),t.responseInterceptor&&(r=await t.responseInterceptor(r)||r)}catch(e){if(!r)throw e;const t=new Error(r.statusText||`response status is ${r.status}`);throw t.status=r.status,t.statusCode=r.status,t.responseError=e,t}if(!r.ok){const e=new Error(r.statusText||`response status is ${r.status}`);throw e.status=r.status,e.statusCode=r.status,e.response=r,e}return r}const S=function(){return/(json|xml|yaml|text)\b/.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")};function A(e,t){let{loadSpec:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r={ok:e.ok,url:e.url||t,status:e.status,statusText:e.statusText,headers:C(e.headers)},o=r.headers["content-type"],a=n||S(o);return(a?e.text:e.blob||e.buffer).call(e).then((e=>{if(r.text=e,r.data=e,a)try{const t=function(e,t){return t&&(0===t.indexOf("application/json")||t.indexOf("+json")>0)?JSON.parse(e):f.ZP.load(e)}(e,o);r.body=t,r.obj=t}catch(e){r.parseError=e}return r}))}function C(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return"function"!=typeof e.entries?{}:Array.from(e.entries()).reduce(((e,t)=>{let[n,r]=t;return e[n]=function(e){return e.includes(", ")?e.split(", "):e}(r),e}),{})}function k(e,t){return t||"undefined"==typeof navigator||(t=navigator),t&&"ReactNative"===t.product?!(!e||"object"!=typeof e||"string"!=typeof e.uri):void 0!==g&&e instanceof g||(void 0!==m&&e instanceof m||(!!ArrayBuffer.isView(e)||null!==e&&"object"==typeof e&&"function"==typeof e.pipe))}function O(e,t){return Array.isArray(e)&&e.some((e=>k(e,t)))}const j={form:",",spaceDelimited:"%20",pipeDelimited:"|"},T={csv:",",ssv:"%20",tsv:"%09",pipes:"|"};function I(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{collectionFormat:r,allowEmptyValue:o,serializationOption:a,encoding:i}=t,s="object"!=typeof t||Array.isArray(t)?t:t.value,l=n?e=>e.toString():e=>encodeURIComponent(e),u=l(e);if(void 0===s&&o)return[[u,""]];if(k(s)||O(s))return[[u,s]];if(a)return N(e,s,n,a);if(i){if([typeof i.style,typeof i.explode,typeof i.allowReserved].some((e=>"undefined"!==e))){const{style:t,explode:r,allowReserved:o}=i;return N(e,s,n,{style:t,explode:r,allowReserved:o})}if(i.contentType){if("application/json"===i.contentType){return[[u,l("string"==typeof s?s:JSON.stringify(s))]]}return[[u,l(s.toString())]]}return"object"!=typeof s?[[u,l(s)]]:Array.isArray(s)&&s.every((e=>"object"!=typeof e))?[[u,s.map(l).join(",")]]:[[u,l(JSON.stringify(s))]]}return"object"!=typeof s?[[u,l(s)]]:Array.isArray(s)?"multi"===r?[[u,s.map(l)]]:[[u,s.map(l).join(T[r||"csv"])]]:[[u,""]]}function N(e,t,n,r){const o=r.style||"form",a=void 0===r.explode?"form"===o:r.explode,i=!n&&(r&&r.allowReserved?"unsafe":"reserved"),s=e=>b(e,{escape:i}),l=n?e=>e:e=>b(e,{escape:i});return"object"!=typeof t?[[l(e),s(t)]]:Array.isArray(t)?a?[[l(e),t.map(s)]]:[[l(e),t.map(s).join(j[o])]]:"deepObject"===o?Object.keys(t).map((n=>[l(`${e}[${n}]`),s(t[n])])):a?Object.keys(t).map((e=>[l(e),s(t[e])])):[[l(e),Object.keys(t).map((e=>[`${l(e)},${s(t[e])}`])).join(",")]]}function P(e){const t=Object.keys(e).reduce(((t,n)=>{for(const[r,o]of I(n,e[n]))t[r]=o;return t}),{});return p().stringify(t,{encode:!1,indices:!1})||""}function R(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{url:t="",query:n,form:r}=e;if(r){const t=Object.keys(r).some((e=>{const{value:t}=r[e];return k(t)||O(t)})),n=e.headers["content-type"]||e.headers["Content-Type"];if(t||/multipart\/form-data/i.test(n)){const t=(o=e.form,Object.entries(o).reduce(((e,t)=>{let[n,r]=t;for(const[t,o]of I(n,r,!0))if(Array.isArray(o))for(const n of o)if(ArrayBuffer.isView(n)){const r=new m([n]);e.append(t,r)}else e.append(t,n);else if(ArrayBuffer.isView(o)){const n=new m([o]);e.append(t,n)}else e.append(t,o);return e}),new d));E(t,e)}else e.body=P(r);delete e.form}var o;if(n){const[r,o]=t.split("?");let a="";if(o){const e=p().parse(o);Object.keys(n).forEach((t=>delete e[t])),a=p().stringify(e,{encode:!0})}const i=function(){for(var e=arguments.length,t=new Array(e),n=0;ne)).join("&");return r?`?${r}`:""}(a,P(n));e.url=r+i,delete e.query}return e}const M=e=>{const{baseDoc:t,url:n}=e;return t||n||""},D=e=>{const{fetch:t,http:n}=e;return t||n||_};var L,B=(L=function(e,t){return L=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},L(e,t)},function(e,t){function n(){this.constructor=e}L(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),F=Object.prototype.hasOwnProperty;function U(e,t){return F.call(e,t)}function z(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n=48&&t<=57))return!1;n++}return!0}function V(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function W(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function H(e){if(void 0===e)return!0;if(e)if(Array.isArray(e)){for(var t=0,n=e.length;t0&&"constructor"==s[u-1]))throw new TypeError("JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(n&&void 0===p&&(void 0===l[f]?p=s.slice(0,u).join("/"):u==c-1&&(p=t.path),void 0!==p&&h(t,0,e,p)),u++,Array.isArray(l)){if("-"===f)f=l.length;else{if(n&&!$(f))throw new G("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",a,t,e);$(f)&&(f=~~f)}if(u>=c){if(n&&"add"===t.op&&f>l.length)throw new G("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",a,t,e);if(!1===(i=Q[t.op].call(t,l,f,e)).test)throw new G("Test operation failed","TEST_OPERATION_FAILED",a,t,e);return i}}else if(u>=c){if(!1===(i=Y[t.op].call(t,l,f,e)).test)throw new G("Test operation failed","TEST_OPERATION_FAILED",a,t,e);return i}if(l=l[f],n&&u0)throw new G('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,n);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new G("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new G("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,n);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&H(e.value))throw new G("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",t,e,n);if(n)if("add"==e.op){var o=e.path.split("/").length,a=r.split("/").length;if(o!==a+1&&o!==a)throw new G("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",t,e,n)}else if("replace"===e.op||"remove"===e.op||"_get"===e.op){if(e.path!==r)throw new G("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",t,e,n)}else if("move"===e.op||"copy"===e.op){var i=oe([{op:"_get",path:e.from,value:void 0}],n);if(i&&"OPERATION_PATH_UNRESOLVABLE"===i.name)throw new G("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",t,e,n)}}function oe(e,t,n){try{if(!Array.isArray(e))throw new G("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(t)te(q(t),q(e),n||!0);else{n=n||re;for(var r=0;r0&&(e.patches=[],e.callback&&e.callback(r)),r}function fe(e,t,n,r,o){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var a=z(t),i=z(e),s=!1,l=i.length-1;l>=0;l--){var u=e[p=i[l]];if(!U(t,p)||void 0===t[p]&&void 0!==u&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(o&&n.push({op:"test",path:r+"/"+V(p),value:q(u)}),n.push({op:"remove",path:r+"/"+V(p)}),s=!0):(o&&n.push({op:"test",path:r,value:e}),n.push({op:"replace",path:r,value:t}),!0);else{var c=t[p];"object"==typeof u&&null!=u&&"object"==typeof c&&null!=c&&Array.isArray(u)===Array.isArray(c)?fe(u,c,n,r+"/"+V(p),o):u!==c&&(!0,o&&n.push({op:"test",path:r+"/"+V(p),value:q(u)}),n.push({op:"replace",path:r+"/"+V(p),value:q(c)}))}}if(s||a.length!=i.length)for(l=0;lvoid 0!==t&&e?e[t]:e),e)},applyPatch:function(e,t,n){if(n=n||{},"merge"===(t=s()(s()({},t),{},{path:t.path&&ye(t.path)})).op){const n=Ie(e,t.path);Object.assign(n,t.value),te(e,[ve(t.path,n)])}else if("mergeDeep"===t.op){const n=Ie(e,t.path),r=me()(n,t.value);e=te(e,[ve(t.path,r)]).newDocument}else if("add"===t.op&&""===t.path&&Ae(t.value)){te(e,Object.keys(t.value).reduce(((e,n)=>(e.push({op:"add",path:`/${ye(n)}`,value:t.value[n]}),e)),[]))}else if("replace"===t.op&&""===t.path){let{value:r}=t;n.allowMetaPatches&&t.meta&&je(t)&&(Array.isArray(t.value)||Ae(t.value))&&(r=s()(s()({},r),t.meta)),e=r}else if(te(e,[t]),n.allowMetaPatches&&t.meta&&je(t)&&(Array.isArray(t.value)||Ae(t.value))){const n=Ie(e,t.path),r=s()(s()({},n),t.meta);te(e,[ve(t.path,r)])}return e},parentPathMatch:function(e,t){if(!Array.isArray(t))return!1;for(let n=0,r=t.length;n(e+"").replace(/~/g,"~0").replace(/\//g,"~1"))).join("/")}`:e}function ve(e,t,n){return{op:"replace",path:e,value:t,meta:n}}function be(e,t,n){return Se(_e(e.filter(je).map((e=>t(e.value,n,e.path)))||[]))}function we(e,t,n){return n=n||[],Array.isArray(e)?e.map(((e,r)=>we(e,t,n.concat(r)))):Ae(e)?Object.keys(e).map((r=>we(e[r],t,n.concat(r)))):t(e,n[n.length-1],n)}function Ee(e,t,n){let r=[];if((n=n||[]).length>0){const o=t(e,n[n.length-1],n);o&&(r=r.concat(o))}if(Array.isArray(e)){const o=e.map(((e,r)=>Ee(e,t,n.concat(r))));o&&(r=r.concat(o))}else if(Ae(e)){const o=Object.keys(e).map((r=>Ee(e[r],t,n.concat(r))));o&&(r=r.concat(o))}return r=_e(r),r}function xe(e){return Array.isArray(e)?e:[e]}function _e(e){return[].concat(...e.map((e=>Array.isArray(e)?_e(e):e)))}function Se(e){return e.filter((e=>void 0!==e))}function Ae(e){return e&&"object"==typeof e}function Ce(e){return e&&"function"==typeof e}function ke(e){if(Te(e)){const{op:t}=e;return"add"===t||"remove"===t||"replace"===t}return!1}function Oe(e){return ke(e)||Te(e)&&"mutation"===e.type}function je(e){return Oe(e)&&("add"===e.op||"replace"===e.op||"merge"===e.op||"mergeDeep"===e.op)}function Te(e){return e&&"object"==typeof e}function Ie(e,t){try{return X(e,t)}catch(e){return console.error(e),{}}}var Ne=n(8575);function Pe(e,t){function n(){Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack;for(var e=arguments.length,n=new Array(e),r=0;r-1&&-1===Le.indexOf(n)||Be.indexOf(r)>-1||Fe.some((e=>r.indexOf(e)>-1))}function ze(e,t){const[n,r]=e.split("#"),o=Ne.resolve(n||"",t||"");return r?`${o}#${r}`:o}const qe=/^([a-z]+:\/\/|\/\/)/i,$e=Pe("JSONRefError",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),Ve={},We=new WeakMap,He=[e=>"paths"===e[0]&&"responses"===e[3]&&"examples"===e[5],e=>"paths"===e[0]&&"responses"===e[3]&&"content"===e[5]&&"example"===e[7],e=>"paths"===e[0]&&"responses"===e[3]&&"content"===e[5]&&"examples"===e[7]&&"value"===e[9],e=>"paths"===e[0]&&"requestBody"===e[3]&&"content"===e[4]&&"example"===e[6],e=>"paths"===e[0]&&"requestBody"===e[3]&&"content"===e[4]&&"examples"===e[6]&&"value"===e[8],e=>"paths"===e[0]&&"parameters"===e[2]&&"example"===e[4],e=>"paths"===e[0]&&"parameters"===e[3]&&"example"===e[5],e=>"paths"===e[0]&&"parameters"===e[2]&&"examples"===e[4]&&"value"===e[6],e=>"paths"===e[0]&&"parameters"===e[3]&&"examples"===e[5]&&"value"===e[7],e=>"paths"===e[0]&&"parameters"===e[2]&&"content"===e[4]&&"example"===e[6],e=>"paths"===e[0]&&"parameters"===e[2]&&"content"===e[4]&&"examples"===e[6]&&"value"===e[8],e=>"paths"===e[0]&&"parameters"===e[3]&&"content"===e[4]&&"example"===e[7],e=>"paths"===e[0]&&"parameters"===e[3]&&"content"===e[5]&&"examples"===e[7]&&"value"===e[9]],Je={key:"$ref",plugin:(e,t,n,r)=>{const o=r.getInstance(),a=n.slice(0,-1);if(Ue(a)||(e=>He.some((t=>t(e))))(a))return;const{baseDoc:i}=r.getContext(n);if("string"!=typeof e)return new $e("$ref: must be a string (JSON-Ref)",{$ref:e,baseDoc:i,fullPath:n});const s=Qe(e),l=s[0],u=s[1]||"";let c,p,f;try{c=i||l?Ze(l,i):null}catch(t){return Ye(t,{pointer:u,$ref:e,basePath:c,fullPath:n})}if(function(e,t,n,r){let o=We.get(r);o||(o={},We.set(r,o));const a=function(e){if(0===e.length)return"";return`/${e.map(ot).join("/")}`}(n),i=`${t||""}#${e}`,s=a.replace(/allOf\/\d+\/?/g,""),l=r.contextTree.get([]).baseDoc;if(t===l&&it(s,e))return!0;let u="";const c=n.some((e=>(u=`${u}/${ot(e)}`,o[u]&&o[u].some((e=>it(e,i)||it(i,e))))));if(c)return!0;return void(o[s]=(o[s]||[]).concat(i))}(u,c,a,r)&&!o.useCircularStructures){const t=ze(e,c);return e===t?null:ge.replace(n,t)}if(null==c?(f=nt(u),p=r.get(f),void 0===p&&(p=new $e(`Could not resolve reference: ${e}`,{pointer:u,$ref:e,baseDoc:i,fullPath:n}))):(p=Xe(c,u),p=null!=p.__value?p.__value:p.catch((t=>{throw Ye(t,{pointer:u,$ref:e,baseDoc:i,fullPath:n})}))),p instanceof Error)return[ge.remove(n),p];const h=ze(e,c),d=ge.replace(a,p,{$$ref:h});if(c&&c!==i)return[d,ge.context(a,{baseDoc:c})];try{if(!function(e,t){const n=[e];return t.path.reduce(((e,t)=>(n.push(e[t]),e[t])),e),r(t.value);function r(e){return ge.isObject(e)&&(n.indexOf(e)>=0||Object.keys(e).some((t=>r(e[t]))))}}(r.state,d)||o.useCircularStructures)return d}catch(e){return null}}},Ke=Object.assign(Je,{docCache:Ve,absoluteify:Ze,clearCache:function(e){void 0!==e?delete Ve[e]:Object.keys(Ve).forEach((e=>{delete Ve[e]}))},JSONRefError:$e,wrapError:Ye,getDoc:et,split:Qe,extractFromDoc:Xe,fetchJSON:function(e){return fetch(e,{headers:{Accept:l},loadSpec:!0}).then((e=>e.text())).then((e=>f.ZP.load(e)))},extract:tt,jsonPointerToArray:nt,unescapeJsonPointerToken:rt}),Ge=Ke;function Ze(e,t){if(!qe.test(e)){if(!t)throw new $e(`Tried to resolve a relative URL, without having a basePath. path: '${e}' basePath: '${t}'`);return Ne.resolve(t,e)}return e}function Ye(e,t){let n;return n=e&&e.response&&e.response.body?`${e.response.body.code} ${e.response.body.message}`:e.message,new $e(`Could not resolve reference: ${n}`,t,e)}function Qe(e){return(e+"").split("#")}function Xe(e,t){const n=Ve[e];if(n&&!ge.isPromise(n))try{const e=tt(t,n);return Object.assign(Promise.resolve(e),{__value:e})}catch(e){return Promise.reject(e)}return et(e).then((e=>tt(t,e)))}function et(e){const t=Ve[e];return t?ge.isPromise(t)?t:Promise.resolve(t):(Ve[e]=Ke.fetchJSON(e).then((t=>(Ve[e]=t,t))),Ve[e])}function tt(e,t){const n=nt(e);if(n.length<1)return t;const r=ge.getIn(t,n);if(void 0===r)throw new $e(`Could not resolve pointer: ${e} does not exist in document`,{pointer:e});return r}function nt(e){if("string"!=typeof e)throw new TypeError("Expected a string, got a "+typeof e);return"/"===e[0]&&(e=e.substr(1)),""===e?[]:e.split("/").map(rt)}function rt(e){if("string"!=typeof e)return e;return new URLSearchParams(`=${e.replace(/~1/g,"/").replace(/~0/g,"~")}`).get("")}function ot(e){return new URLSearchParams([["",e.replace(/~/g,"~0").replace(/\//g,"~1")]]).toString().slice(1)}const at=e=>!e||"/"===e||"#"===e;function it(e,t){if(at(t))return!0;const n=e.charAt(t.length),r=t.slice(-1);return 0===e.indexOf(t)&&(!n||"/"===n||"#"===n)&&"#"!==r}const st={key:"allOf",plugin:(e,t,n,r,o)=>{if(o.meta&&o.meta.$$ref)return;const a=n.slice(0,-1);if(Ue(a))return;if(!Array.isArray(e)){const e=new TypeError("allOf must be an array");return e.fullPath=n,e}let i=!1,l=o.value;if(a.forEach((e=>{l&&(l=l[e])})),l=s()({},l),0===Object.keys(l).length)return;delete l.allOf;const u=[];return u.push(r.replace(a,{})),e.forEach(((e,t)=>{if(!r.isObject(e)){if(i)return null;i=!0;const e=new TypeError("Elements in allOf must be objects");return e.fullPath=n,u.push(e)}u.push(r.mergeDeep(a,e));const o=function(e,t){let{specmap:n,getBaseUrlForNodePath:r=(e=>n.getContext([...t,...e]).baseDoc),targetKeys:o=["$ref","$$ref"]}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=[];return Me()(e).forEach((function(){if(o.includes(this.key)&&"string"==typeof this.node){const e=this.path,o=t.concat(this.path),i=ze(this.node,r(e));a.push(n.replace(o,i))}})),a}(e,n.slice(0,-1),{getBaseUrlForNodePath:e=>r.getContext([...n,t,...e]).baseDoc,specmap:r});u.push(...o)})),l.example&&u.push(r.remove([].concat(a,"example"))),u.push(r.mergeDeep(a,l)),l.$$ref||u.push(r.remove([].concat(a,"$$ref"))),u}},lt={key:"parameters",plugin:(e,t,n,r)=>{if(Array.isArray(e)&&e.length){const t=Object.assign([],e),o=n.slice(0,-1),a=s()({},ge.getIn(r.spec,o));for(let o=0;o{const o=s()({},e);for(const t in e)try{o[t].default=r.modelPropertyMacro(o[t])}catch(e){const t=new Error(e);return t.fullPath=n,t}return ge.replace(n,o)}};class ct{constructor(e){this.root=pt(e||{})}set(e,t){const n=this.getParent(e,!0);if(!n)return void ft(this.root,t,null);const r=e[e.length-1],{children:o}=n;o[r]?ft(o[r],t,n):o[r]=pt(t,n)}get(e){if((e=e||[]).length<1)return this.root.value;let t,n,r=this.root;for(let o=0;o{if(!e)return e;const{children:r}=e;return!r[n]&&t&&(r[n]=pt(null,e)),r[n]}),this.root)}}function pt(e,t){return ft({children:{}},e,t)}function ft(e,t,n){return e.value=t||{},e.protoValue=n?s()(s()({},n.protoValue),e.value):e.value,Object.keys(e.children).forEach((t=>{const n=e.children[t];e.children[t]=ft(n,n.value,e)})),e}const ht=()=>{};class dt{static getPluginName(e){return e.pluginName}static getPatchesOfType(e,t){return e.filter(t)}constructor(e){Object.assign(this,{spec:"",debugLevel:"info",plugins:[],pluginHistory:{},errors:[],mutations:[],promisedPatches:[],state:{},patches:[],context:{},contextTree:new ct,showDebug:!1,allPatches:[],pluginProp:"specMap",libMethods:Object.assign(Object.create(this),ge,{getInstance:()=>this}),allowMetaPatches:!1},e),this.get=this._get.bind(this),this.getContext=this._getContext.bind(this),this.hasRun=this._hasRun.bind(this),this.wrappedPlugins=this.plugins.map(this.wrapPlugin.bind(this)).filter(ge.isFunction),this.patches.push(ge.add([],this.spec)),this.patches.push(ge.context([],this.context)),this.updatePatches(this.patches)}debug(e){if(this.debugLevel===e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1?t-1:0),r=1;r!Array.isArray(e)||e.every(((e,n)=>e===t[n]));return function*(r,o){const a={};for(const e of r.filter(ge.isAdditiveMutation))yield*i(e.value,e.path,e);function*i(r,s,l){if(ge.isObject(r)){const u=s.length-1,c=s[u],p=s.indexOf("properties"),f="properties"===c&&u===p,h=o.allowMetaPatches&&a[r.$$ref];for(const u of Object.keys(r)){const c=r[u],p=s.concat(u),d=ge.isObject(c),m=r.$$ref;if(h||d&&(o.allowMetaPatches&&m&&(a[m]=!0),yield*i(c,p,l)),!f&&u===e.key){const r=t(n,s);n&&!r||(yield e.plugin(c,u,p,o,l))}}}else e.key===s[s.length-1]&&(yield e.plugin(r,e.key,s,o))}}}(e)),Object.assign(r.bind(o),{pluginName:e.name||t,isGenerator:ge.isGenerator(r)})}nextPlugin(){return this.wrappedPlugins.find((e=>this.getMutationsForPlugin(e).length>0))}nextPromisedPatch(){if(this.promisedPatches.length>0)return Promise.race(this.promisedPatches.map((e=>e.value)))}getPluginHistory(e){const t=this.constructor.getPluginName(e);return this.pluginHistory[t]||[]}getPluginRunCount(e){return this.getPluginHistory(e).length}getPluginHistoryTip(e){const t=this.getPluginHistory(e);return t&&t[t.length-1]||{}}getPluginMutationIndex(e){const t=this.getPluginHistoryTip(e).mutationIndex;return"number"!=typeof t?-1:t}updatePluginHistory(e,t){const n=this.constructor.getPluginName(e);this.pluginHistory[n]=this.pluginHistory[n]||[],this.pluginHistory[n].push(t)}updatePatches(e){ge.normalizeArray(e).forEach((e=>{if(e instanceof Error)this.errors.push(e);else try{if(!ge.isObject(e))return void this.debug("updatePatches","Got a non-object patch",e);if(this.showDebug&&this.allPatches.push(e),ge.isPromise(e.value))return this.promisedPatches.push(e),void this.promisedPatchThen(e);if(ge.isContextPatch(e))return void this.setContext(e.path,e.value);if(ge.isMutation(e))return void this.updateMutations(e)}catch(e){console.error(e),this.errors.push(e)}}))}updateMutations(e){"object"==typeof e.value&&!Array.isArray(e.value)&&this.allowMetaPatches&&(e.value=s()({},e.value));const t=ge.applyPatch(this.state,e,{allowMetaPatches:this.allowMetaPatches});t&&(this.mutations.push(e),this.state=t)}removePromisedPatch(e){const t=this.promisedPatches.indexOf(e);t<0?this.debug("Tried to remove a promisedPatch that isn't there!"):this.promisedPatches.splice(t,1)}promisedPatchThen(e){return e.value=e.value.then((t=>{const n=s()(s()({},e),{},{value:t});this.removePromisedPatch(e),this.updatePatches(n)})).catch((t=>{this.removePromisedPatch(e),this.updatePatches(t)})),e.value}getMutations(e,t){return e=e||0,"number"!=typeof t&&(t=this.mutations.length),this.mutations.slice(e,t)}getCurrentMutations(){return this.getMutationsForPlugin(this.getCurrentPlugin())}getMutationsForPlugin(e){const t=this.getPluginMutationIndex(e);return this.getMutations(t+1)}getCurrentPlugin(){return this.currentPlugin}getLib(){return this.libMethods}_get(e){return ge.getIn(this.state,e)}_getContext(e){return this.contextTree.get(e)}setContext(e,t){return this.contextTree.set(e,t)}_hasRun(e){return this.getPluginRunCount(this.getCurrentPlugin())>(e||0)}dispatch(){const e=this,t=this.nextPlugin();if(!t){const e=this.nextPromisedPatch();if(e)return e.then((()=>this.dispatch())).catch((()=>this.dispatch()));const t={spec:this.state,errors:this.errors};return this.showDebug&&(t.patches=this.allPatches),Promise.resolve(t)}if(e.pluginCount=e.pluginCount||{},e.pluginCount[t]=(e.pluginCount[t]||0)+1,e.pluginCount[t]>100)return Promise.resolve({spec:e.state,errors:e.errors.concat(new Error("We've reached a hard limit of 100 plugin runs"))});if(t!==this.currentPlugin&&this.promisedPatches.length){const e=this.promisedPatches.map((e=>e.value));return Promise.all(e.map((e=>e.then(ht,ht)))).then((()=>this.dispatch()))}return function(){e.currentPlugin=t;const r=e.getCurrentMutations(),o=e.mutations.length-1;try{if(t.isGenerator)for(const o of t(r,e.getLib()))n(o);else{n(t(r,e.getLib()))}}catch(e){console.error(e),n([Object.assign(Object.create(e),{plugin:t})])}finally{e.updatePluginHistory(t,{mutationIndex:o})}return e.dispatch()}();function n(n){n&&(n=ge.fullyNormalizeArray(n),e.updatePatches(n,t))}}}const mt={refs:Ge,allOf:st,parameters:lt,properties:ut};var gt=n(32454);function yt(e){const{spec:t}=e,{paths:n}=t,r={};if(!n||t.$$normalized)return e;for(const e in n){const o=n[e];if(null==o||!["object","function"].includes(typeof o))continue;const a=o.parameters;for(const n in o){const i=o[n];if(null==i||!["object","function"].includes(typeof i))continue;const s=(0,gt.Z)(i,e,n);if(s){r[s]?r[s].push(i):r[s]=[i];const e=r[s];if(e.length>1)e.forEach(((e,t)=>{e.__originalOperationId=e.__originalOperationId||e.operationId,e.operationId=`${s}${t+1}`}));else if(void 0!==i.operationId){const t=e[0];t.__originalOperationId=t.__originalOperationId||i.operationId,t.operationId=s}}if("parameters"!==n){const e=[],n={};for(const r in t)"produces"!==r&&"consumes"!==r&&"security"!==r||(n[r]=t[r],e.push(n));if(a&&(n.parameters=a,e.push(n)),e.length)for(const t of e)for(const e in t)if(i[e]){if("parameters"===e)for(const n of t[e]){i[e].some((e=>e.name&&e.name===n.name||e.$ref&&e.$ref===n.$ref||e.$$ref&&e.$$ref===n.$$ref||e===n))||i[e].push(n)}}else i[e]=t[e]}}}return t.$$normalized=!0,e}async function vt(e){const{spec:t,mode:n,allowMetaPatches:r=!0,pathDiscriminator:o,modelPropertyMacro:a,parameterMacro:i,requestInterceptor:s,responseInterceptor:l,skipNormalization:c,useCircularStructures:p}=e,f=M(e),h=D(e);return function(e){f&&(mt.refs.docCache[f]=e);mt.refs.fetchJSON=u(h,{requestInterceptor:s,responseInterceptor:l});const t=[mt.refs];"function"==typeof i&&t.push(mt.parameters);"function"==typeof a&&t.push(mt.properties);"strict"!==n&&t.push(mt.allOf);return(d={spec:e,context:{baseDoc:f},plugins:t,allowMetaPatches:r,pathDiscriminator:o,parameterMacro:i,modelPropertyMacro:a,useCircularStructures:p},new dt(d).dispatch()).then(c?async e=>e:yt);var d}(t)}const bt={name:"generic",match:()=>!0,normalize(e){let{spec:t}=e;const{spec:n}=yt({spec:t});return n},resolve:async e=>vt(e)};const wt=e=>{try{const{openapi:t}=e;return"string"==typeof t&&/^3\.0\.([0123])(?:-rc[012])?$/.test(t)}catch{return!1}},Et=e=>wt(e)||(e=>{try{const{openapi:t}=e;return"string"==typeof t&&/^3\.1\.(?:[1-9]\d*|0)$/.test(t)}catch{return!1}})(e),xt={name:"openapi-2",match(e){let{spec:t}=e;return(e=>{try{const{swagger:t}=e;return"2.0"===t}catch{return!1}})(t)},normalize(e){let{spec:t}=e;const{spec:n}=yt({spec:t});return n},resolve:async e=>async function(e){return vt(e)}(e)};const _t={name:"openapi-3-0",match(e){let{spec:t}=e;return wt(t)},normalize(e){let{spec:t}=e;const{spec:n}=yt({spec:t});return n},resolve:async e=>async function(e){return vt(e)}(e)},St=(At={strategies:[_t,xt,bt]},async e=>(async e=>{const{spec:t,requestInterceptor:n,responseInterceptor:r}=e,o=M(e),a=D(e),i=t||await u(a,{requestInterceptor:n,responseInterceptor:r})(o),l=s()(s()({},e),{},{spec:i});return e.strategies.find((e=>e.match(l))).resolve(l)})(s()(s()({},At),e)));var At,Ct=n(88436),kt=n.n(Ct),Ot=n(27361),jt=n.n(Ot),Tt=n(76489);function It(e){return"[object Object]"===Object.prototype.toString.call(e)}function Nt(e){var t,n;return!1!==It(e)&&(void 0===(t=e.constructor)||!1!==It(n=t.prototype)&&!1!==n.hasOwnProperty("isPrototypeOf"))}const Pt={body:function(e){let{req:t,value:n}=e;t.body=n},header:function(e){let{req:t,parameter:n,value:r}=e;t.headers=t.headers||{},void 0!==r&&(t.headers[n.name]=r)},query:function(e){let{req:t,value:n,parameter:r}=e;t.query=t.query||{},!1===n&&"boolean"===r.type&&(n="false");0===n&&["number","integer"].indexOf(r.type)>-1&&(n="0");if(n)t.query[r.name]={collectionFormat:r.collectionFormat,value:n};else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}},path:function(e){let{req:t,value:n,parameter:r}=e;t.url=t.url.split(`{${r.name}}`).join(encodeURIComponent(n))},formData:function(e){let{req:t,value:n,parameter:r}=e;(n||r.allowEmptyValue)&&(t.form=t.form||{},t.form[r.name]={value:n,allowEmptyValue:r.allowEmptyValue,collectionFormat:r.collectionFormat})}};function Rt(e,t){return t.includes("application/json")?"string"==typeof e?e:JSON.stringify(e):e.toString()}function Mt(e){let{req:t,value:n,parameter:r}=e;const{name:o,style:a,explode:i,content:s}=r;if(s){const e=Object.keys(s)[0];return void(t.url=t.url.split(`{${o}}`).join(b(Rt(n,e),{escape:!0})))}const l=w({key:r.name,value:n,style:a||"simple",explode:i||!1,escape:!0});t.url=t.url.split(`{${o}}`).join(l)}function Dt(e){let{req:t,value:n,parameter:r}=e;if(t.query=t.query||{},r.content){const e=Rt(n,Object.keys(r.content)[0]);if(e)t.query[r.name]=e;else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}}else if(!1===n&&(n="false"),0===n&&(n="0"),n){const{style:e,explode:o,allowReserved:a}=r;t.query[r.name]={value:n,serializationOption:{style:e,explode:o,allowReserved:a}}}else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}}const Lt=["accept","authorization","content-type"];function Bt(e){let{req:t,parameter:n,value:r}=e;if(t.headers=t.headers||{},!(Lt.indexOf(n.name.toLowerCase())>-1))if(n.content){const e=Object.keys(n.content)[0];t.headers[n.name]=Rt(r,e)}else void 0!==r&&(t.headers[n.name]=w({key:n.name,value:r,style:n.style||"simple",explode:void 0!==n.explode&&n.explode,escape:!1}))}function Ft(e){let{req:t,parameter:n,value:r}=e;t.headers=t.headers||{};const o=typeof r;if(n.content){const e=Object.keys(n.content)[0];t.headers.Cookie=`${n.name}=${Rt(r,e)}`}else if("undefined"!==o){const e="object"===o&&!Array.isArray(r)&&n.explode?"":`${n.name}=`;t.headers.Cookie=e+w({key:n.name,value:r,escape:!1,style:n.style||"form",explode:void 0!==n.explode&&n.explode})}}const Ut="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,{btoa:zt}=Ut,qt=zt;function $t(e,t){const{operation:n,requestBody:r,securities:o,spec:a,attachContentTypeForEmptyPayload:i}=e;let{requestContentType:l}=e;t=function(e){let{request:t,securities:n={},operation:r={},spec:o}=e;const a=s()({},t),{authorized:i={}}=n,l=r.security||o.security||[],u=i&&!!Object.keys(i).length,c=jt()(o,["components","securitySchemes"])||{};if(a.headers=a.headers||{},a.query=a.query||{},!Object.keys(n).length||!u||!l||Array.isArray(r.security)&&!r.security.length)return t;return l.forEach((e=>{Object.keys(e).forEach((e=>{const t=i[e],n=c[e];if(!t)return;const r=t.value||t,{type:o}=n;if(t)if("apiKey"===o)"query"===n.in&&(a.query[n.name]=r),"header"===n.in&&(a.headers[n.name]=r),"cookie"===n.in&&(a.cookies[n.name]=r);else if("http"===o){if(/^basic$/i.test(n.scheme)){const e=r.username||"",t=r.password||"",n=qt(`${e}:${t}`);a.headers.Authorization=`Basic ${n}`}/^bearer$/i.test(n.scheme)&&(a.headers.Authorization=`Bearer ${r}`)}else if("oauth2"===o||"openIdConnect"===o){const e=t.token||{},r=e[n["x-tokenName"]||"access_token"];let o=e.token_type;o&&"bearer"!==o.toLowerCase()||(o="Bearer"),a.headers.Authorization=`${o} ${r}`}}))})),a}({request:t,securities:o,operation:n,spec:a});const u=n.requestBody||{},c=Object.keys(u.content||{}),p=l&&c.indexOf(l)>-1;if(r||i){if(l&&p)t.headers["Content-Type"]=l;else if(!l){const e=c[0];e&&(t.headers["Content-Type"]=e,l=e)}}else l&&p&&(t.headers["Content-Type"]=l);if(!e.responseContentType&&n.responses){const e=Object.entries(n.responses).filter((e=>{let[t,n]=e;const r=parseInt(t,10);return r>=200&&r<300&&Nt(n.content)})).reduce(((e,t)=>{let[,n]=t;return e.concat(Object.keys(n.content))}),[]);e.length>0&&(t.headers.accept=e.join(", "))}if(r)if(l){if(c.indexOf(l)>-1)if("application/x-www-form-urlencoded"===l||"multipart/form-data"===l)if("object"==typeof r){const e=(u.content[l]||{}).encoding||{};t.form={},Object.keys(r).forEach((n=>{t.form[n]={value:r[n],encoding:e[n]||{}}}))}else t.form=r;else t.body=r}else t.body=r;return t}function Vt(e,t){const{spec:n,operation:r,securities:o,requestContentType:a,responseContentType:i,attachContentTypeForEmptyPayload:l}=e;if(t=function(e){let{request:t,securities:n={},operation:r={},spec:o}=e;const a=s()({},t),{authorized:i={},specSecurity:l=[]}=n,u=r.security||l,c=i&&!!Object.keys(i).length,p=o.securityDefinitions;if(a.headers=a.headers||{},a.query=a.query||{},!Object.keys(n).length||!c||!u||Array.isArray(r.security)&&!r.security.length)return t;return u.forEach((e=>{Object.keys(e).forEach((e=>{const t=i[e];if(!t)return;const{token:n}=t,r=t.value||t,o=p[e],{type:s}=o,l=o["x-tokenName"]||"access_token",u=n&&n[l];let c=n&&n.token_type;if(t)if("apiKey"===s){const e="query"===o.in?"query":"headers";a[e]=a[e]||{},a[e][o.name]=r}else if("basic"===s)if(r.header)a.headers.authorization=r.header;else{const e=r.username||"",t=r.password||"";r.base64=qt(`${e}:${t}`),a.headers.authorization=`Basic ${r.base64}`}else"oauth2"===s&&u&&(c=c&&"bearer"!==c.toLowerCase()?c:"Bearer",a.headers.authorization=`${c} ${u}`)}))})),a}({request:t,securities:o,operation:r,spec:n}),t.body||t.form||l)a?t.headers["Content-Type"]=a:Array.isArray(r.consumes)?[t.headers["Content-Type"]]=r.consumes:Array.isArray(n.consumes)?[t.headers["Content-Type"]]=n.consumes:r.parameters&&r.parameters.filter((e=>"file"===e.type)).length?t.headers["Content-Type"]="multipart/form-data":r.parameters&&r.parameters.filter((e=>"formData"===e.in)).length&&(t.headers["Content-Type"]="application/x-www-form-urlencoded");else if(a){const e=r.parameters&&r.parameters.filter((e=>"body"===e.in)).length>0,n=r.parameters&&r.parameters.filter((e=>"formData"===e.in)).length>0;(e||n)&&(t.headers["Content-Type"]=a)}return!i&&Array.isArray(r.produces)&&r.produces.length>0&&(t.headers.accept=r.produces.join(", ")),t}function Wt(e,t){return`${t.toLowerCase()}-${e}`}const Ht=["http","fetch","spec","operationId","pathName","method","parameters","securities"],Jt=e=>Array.isArray(e)?e:[],Kt=Pe("OperationNotFoundError",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),Gt=(e,t)=>t.filter((t=>t.name===e)),Zt=e=>{const t={};e.forEach((e=>{t[e.in]||(t[e.in]={}),t[e.in][e.name]=e}));const n=[];return Object.keys(t).forEach((e=>{Object.keys(t[e]).forEach((r=>{n.push(t[e][r])}))})),n},Yt={buildRequest:Xt};function Qt(e){let{http:t,fetch:n,spec:r,operationId:o,pathName:a,method:i,parameters:l,securities:u}=e,c=kt()(e,Ht);const p=t||n||_;a&&i&&!o&&(o=Wt(a,i));const f=Yt.buildRequest(s()({spec:r,operationId:o,parameters:l,securities:u,http:p},c));return f.body&&(Nt(f.body)||Array.isArray(f.body))&&(f.body=JSON.stringify(f.body)),p(f)}function Xt(e){const{spec:t,operationId:n,responseContentType:r,scheme:o,requestInterceptor:i,responseInterceptor:l,contextUrl:u,userFetch:c,server:p,serverVariables:f,http:h,signal:d}=e;let{parameters:m,parameterBuilders:g}=e;const y=Et(t);g||(g=y?a:Pt);let v={url:"",credentials:h&&h.withCredentials?"include":"same-origin",headers:{},cookies:{}};d&&(v.signal=d),i&&(v.requestInterceptor=i),l&&(v.responseInterceptor=l),c&&(v.userFetch=c);const b=function(e,t){return e&&e.paths?function(e,t){return function(e,t,n){if(!e||"object"!=typeof e||!e.paths||"object"!=typeof e.paths)return null;const{paths:r}=e;for(const o in r)for(const a in r[o]){if("PARAMETERS"===a.toUpperCase())continue;const i=r[o][a];if(!i||"object"!=typeof i)continue;const s={spec:e,pathName:o,method:a.toUpperCase(),operation:i},l=t(s);if(n&&l)return s}}(e,t,!0)||null}(e,(e=>{let{pathName:n,method:r,operation:o}=e;if(!o||"object"!=typeof o)return!1;const a=o.operationId;return[(0,gt.Z)(o,n,r),Wt(n,r),a].some((e=>e&&e===t))})):null}(t,n);if(!b)throw new Kt(`Operation ${n} not found`);const{operation:w={},method:E,pathName:x}=b;if(v.url+=function(e){const t=Et(e.spec);return t?function(e){let{spec:t,pathName:n,method:r,server:o,contextUrl:a,serverVariables:i={}}=e;const s=jt()(t,["paths",n,(r||"").toLowerCase(),"servers"])||jt()(t,["paths",n,"servers"])||jt()(t,["servers"]);let l="",u=null;if(o&&s&&s.length){const e=s.map((e=>e.url));e.indexOf(o)>-1&&(l=o,u=s[e.indexOf(o)])}!l&&s&&s.length&&(l=s[0].url,[u]=s);if(l.indexOf("{")>-1){(function(e){const t=[],n=/{([^}]+)}/g;let r;for(;r=n.exec(e);)t.push(r[1]);return t})(l).forEach((e=>{if(u.variables&&u.variables[e]){const t=u.variables[e],n=i[e]||t.default,r=new RegExp(`{${e}}`,"g");l=l.replace(r,n)}}))}return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=e&&t?Ne.parse(Ne.resolve(t,e)):Ne.parse(e),r=Ne.parse(t),o=en(n.protocol)||en(r.protocol)||"",a=n.host||r.host,i=n.pathname||"";let s;s=o&&a?`${o}://${a+i}`:i;return"/"===s[s.length-1]?s.slice(0,-1):s}(l,a)}(e):function(e){let{spec:t,scheme:n,contextUrl:r=""}=e;const o=Ne.parse(r),a=Array.isArray(t.schemes)?t.schemes[0]:null,i=n||a||en(o.protocol)||"http",s=t.host||o.host||"",l=t.basePath||"";let u;u=i&&s?`${i}://${s+l}`:l;return"/"===u[u.length-1]?u.slice(0,-1):u}(e)}({spec:t,scheme:o,contextUrl:u,server:p,serverVariables:f,pathName:x,method:E}),!n)return delete v.cookies,v;v.url+=x,v.method=`${E}`.toUpperCase(),m=m||{};const _=t.paths[x]||{};r&&(v.headers.accept=r);const S=Zt([].concat(Jt(w.parameters)).concat(Jt(_.parameters)));S.forEach((e=>{const n=g[e.in];let r;if("body"===e.in&&e.schema&&e.schema.properties&&(r=m),r=e&&e.name&&m[e.name],void 0===r?r=e&&e.name&&m[`${e.in}.${e.name}`]:Gt(e.name,S).length>1&&console.warn(`Parameter '${e.name}' is ambiguous because the defined spec has more than one parameter with the name: '${e.name}' and the passed-in parameter values did not define an 'in' value.`),null!==r){if(void 0!==e.default&&void 0===r&&(r=e.default),void 0===r&&e.required&&!e.allowEmptyValue)throw new Error(`Required parameter ${e.name} is not provided`);if(y&&e.schema&&"object"===e.schema.type&&"string"==typeof r)try{r=JSON.parse(r)}catch(e){throw new Error("Could not parse object parameter value string as JSON")}n&&n({req:v,parameter:e,value:r,operation:w,spec:t})}}));const A=s()(s()({},e),{},{operation:w});if(v=y?$t(A,v):Vt(A,v),v.cookies&&Object.keys(v.cookies).length){const e=Object.keys(v.cookies).reduce(((e,t)=>{const n=v.cookies[t];return e+(e?"&":"")+Tt.serialize(t,n)}),"");v.headers.Cookie=e}return v.cookies&&delete v.cookies,R(v),v}const en=e=>e?e.replace(/\W/g,""):null;const tn=async function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{returnEntireTree:r,baseDoc:o,requestInterceptor:a,responseInterceptor:i,parameterMacro:l,modelPropertyMacro:u,useCircularStructures:c,strategies:p}=n,f={spec:e,pathDiscriminator:t,baseDoc:o,requestInterceptor:a,responseInterceptor:i,parameterMacro:l,modelPropertyMacro:u,useCircularStructures:c,strategies:p},h=p.find((e=>e.match(f))).normalize(f),d=await St(s()(s()({},f),{},{spec:h,allowMetaPatches:!0,skipNormalization:!0}));return!r&&Array.isArray(t)&&t.length&&(d.spec=jt()(d.spec,t)||null),d},nn=(e=>async function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=s()(s()({},e),r);return tn(t,n,o)})({strategies:[_t,xt,bt]});var rn=n(34852);function on(e){let{configs:t,getConfigs:n}=e;return{fn:{fetch:(r=_,o=t.preFetch,a=t.postFetch,a=a||(e=>e),o=o||(e=>e),e=>("string"==typeof e&&(e={url:e}),x.mergeInQueryOrForm(e),e=o(e),a(r(e)))),buildRequest:Xt,execute:Qt,resolve:St,resolveSubtree:function(e,t,r){if(void 0===r){const e=n();r={modelPropertyMacro:e.modelPropertyMacro,parameterMacro:e.parameterMacro,requestInterceptor:e.requestInterceptor,responseInterceptor:e.responseInterceptor}}for(var o=arguments.length,a=new Array(o>3?o-3:0),i=3;i{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(90242);function o(){return{fn:{shallowEqualKeys:r.be}}}},48347:(e,t,n)=>{"use strict";n.r(t),n.d(t,{getDisplayName:()=>r});const r=e=>e.displayName||e.name||"Component"},73420:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>u});var r=n(35627),o=n.n(r),a=n(90242),i=n(11092),s=n(48347),l=n(60314);const u=e=>{let{getComponents:t,getStore:n,getSystem:r}=e;const u=(c=(0,i.getComponent)(r,n,t),(0,a.HP)(c,(function(){for(var e=arguments.length,t=new Array(e),n=0;n(0,l.Z)(e,(function(){for(var e=arguments.length,t=new Array(e),n=0;n{"use strict";n.r(t),n.d(t,{getComponent:()=>Q,render:()=>Y,withMappedContainer:()=>Z});var r=n(23101),o=n.n(r),a=n(28222),i=n.n(a),s=n(67294),l=n(73935),u=n(97779),c=n(61688),p=n(52798);let f=function(e){e()};const h=()=>f,d=(0,s.createContext)(null);let m=null;var g=n(87462),y=n(63366),v=n(8679),b=n.n(v),w=n(59864);const E=["initMapStateToProps","initMapDispatchToProps","initMergeProps"];function x(e,t,n,r,{areStatesEqual:o,areOwnPropsEqual:a,areStatePropsEqual:i}){let s,l,u,c,p,f=!1;function h(f,h){const d=!a(h,l),m=!o(f,s,h,l);return s=f,l=h,d&&m?(u=e(s,l),t.dependsOnOwnProps&&(c=t(r,l)),p=n(u,c,l),p):d?(e.dependsOnOwnProps&&(u=e(s,l)),t.dependsOnOwnProps&&(c=t(r,l)),p=n(u,c,l),p):m?function(){const t=e(s,l),r=!i(t,u);return u=t,r&&(p=n(u,c,l)),p}():p}return function(o,a){return f?h(o,a):(s=o,l=a,u=e(s,l),c=t(r,l),p=n(u,c,l),f=!0,p)}}function _(e){return function(t){const n=e(t);function r(){return n}return r.dependsOnOwnProps=!1,r}}function S(e){return e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function A(e,t){return function(t,{displayName:n}){const r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e,void 0)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=S(e);let o=r(t,n);return"function"==typeof o&&(r.mapToProps=o,r.dependsOnOwnProps=S(o),o=r(t,n)),o},r}}function C(e,t){return(n,r)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${r.wrappedComponentName}.`)}}function k(e,t,n){return(0,g.Z)({},n,e,t)}const O={notify(){},get:()=>[]};function j(e,t){let n,r=O;function o(){i.onStateChange&&i.onStateChange()}function a(){n||(n=t?t.addNestedSub(o):e.subscribe(o),r=function(){const e=h();let t=null,n=null;return{clear(){t=null,n=null},notify(){e((()=>{let e=t;for(;e;)e.callback(),e=e.next}))},get(){let e=[],n=t;for(;n;)e.push(n),n=n.next;return e},subscribe(e){let r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}())}const i={addNestedSub:function(e){return a(),r.subscribe(e)},notifyNestedSubs:function(){r.notify()},handleChangeWrapper:o,isSubscribed:function(){return Boolean(n)},trySubscribe:a,tryUnsubscribe:function(){n&&(n(),n=void 0,r.clear(),r=O)},getListeners:()=>r};return i}const T=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement)?s.useLayoutEffect:s.useEffect;function I(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function N(e,t){if(I(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r=0;r{throw new Error("uSES not initialized!")};const M=[null,null];function D(e,t,n,r,o,a){e.current=r,n.current=!1,o.current&&(o.current=null,a())}function L(e,t){return e===t}const B=function(e,t,n,{pure:r,areStatesEqual:o=L,areOwnPropsEqual:a=N,areStatePropsEqual:i=N,areMergedPropsEqual:l=N,forwardRef:u=!1,context:c=d}={}){const p=c,f=function(e){return e?"function"==typeof e?A(e):C(e,"mapStateToProps"):_((()=>({})))}(e),h=function(e){return e&&"object"==typeof e?_((t=>function(e,t){const n={};for(const r in e){const o=e[r];"function"==typeof o&&(n[r]=(...e)=>t(o(...e)))}return n}(e,t))):e?"function"==typeof e?A(e):C(e,"mapDispatchToProps"):_((e=>({dispatch:e})))}(t),m=function(e){return e?"function"==typeof e?function(e){return function(t,{displayName:n,areMergedPropsEqual:r}){let o,a=!1;return function(t,n,i){const s=e(t,n,i);return a?r(s,o)||(o=s):(a=!0,o=s),o}}}(e):C(e,"mergeProps"):()=>k}(n),v=Boolean(e);return e=>{const t=e.displayName||e.name||"Component",n=`Connect(${t})`,r={shouldHandleStateChanges:v,displayName:n,wrappedComponentName:t,WrappedComponent:e,initMapStateToProps:f,initMapDispatchToProps:h,initMergeProps:m,areStatesEqual:o,areStatePropsEqual:i,areOwnPropsEqual:a,areMergedPropsEqual:l};function c(t){const[n,o,a]=(0,s.useMemo)((()=>{const{reactReduxForwardedRef:e}=t,n=(0,y.Z)(t,P);return[t.context,e,n]}),[t]),i=(0,s.useMemo)((()=>n&&n.Consumer&&(0,w.isContextConsumer)(s.createElement(n.Consumer,null))?n:p),[n,p]),l=(0,s.useContext)(i),u=Boolean(t.store)&&Boolean(t.store.getState)&&Boolean(t.store.dispatch),c=Boolean(l)&&Boolean(l.store);const f=u?t.store:l.store,h=c?l.getServerState:f.getState,d=(0,s.useMemo)((()=>function(e,t){let{initMapStateToProps:n,initMapDispatchToProps:r,initMergeProps:o}=t,a=(0,y.Z)(t,E);return x(n(e,a),r(e,a),o(e,a),e,a)}(f.dispatch,r)),[f]),[m,b]=(0,s.useMemo)((()=>{if(!v)return M;const e=j(f,u?void 0:l.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[f,u,l]),_=(0,s.useMemo)((()=>u?l:(0,g.Z)({},l,{subscription:m})),[u,l,m]),S=(0,s.useRef)(),A=(0,s.useRef)(a),C=(0,s.useRef)(),k=(0,s.useRef)(!1),O=((0,s.useRef)(!1),(0,s.useRef)(!1)),I=(0,s.useRef)();T((()=>(O.current=!0,()=>{O.current=!1})),[]);const N=(0,s.useMemo)((()=>()=>C.current&&a===A.current?C.current:d(f.getState(),a)),[f,a]),L=(0,s.useMemo)((()=>e=>m?function(e,t,n,r,o,a,i,s,l,u,c){if(!e)return()=>{};let p=!1,f=null;const h=()=>{if(p||!s.current)return;const e=t.getState();let n,h;try{n=r(e,o.current)}catch(e){h=e,f=e}h||(f=null),n===a.current?i.current||u():(a.current=n,l.current=n,i.current=!0,c())};return n.onStateChange=h,n.trySubscribe(),h(),()=>{if(p=!0,n.tryUnsubscribe(),n.onStateChange=null,f)throw f}}(v,f,m,d,A,S,k,O,C,b,e):()=>{}),[m]);var B,F,U;let z;B=D,F=[A,S,k,a,C,b],T((()=>B(...F)),U);try{z=R(L,N,h?()=>d(h(),a):N)}catch(e){throw I.current&&(e.message+=`\nThe error may be correlated with this previous error:\n${I.current.stack}\n\n`),e}T((()=>{I.current=void 0,C.current=void 0,S.current=z}));const q=(0,s.useMemo)((()=>s.createElement(e,(0,g.Z)({},z,{ref:o}))),[o,e,z]);return(0,s.useMemo)((()=>v?s.createElement(i.Provider,{value:_},q):q),[i,q,_])}const d=s.memo(c);if(d.WrappedComponent=e,d.displayName=c.displayName=n,u){const t=s.forwardRef((function(e,t){return s.createElement(d,(0,g.Z)({},e,{reactReduxForwardedRef:t}))}));return t.displayName=n,t.WrappedComponent=e,b()(t,e)}return b()(d,e)}};const F=function({store:e,context:t,children:n,serverState:r}){const o=(0,s.useMemo)((()=>{const t=j(e);return{store:e,subscription:t,getServerState:r?()=>r:void 0}}),[e,r]),a=(0,s.useMemo)((()=>e.getState()),[e]);T((()=>{const{subscription:t}=o;return t.onStateChange=t.notifyNestedSubs,t.trySubscribe(),a!==e.getState()&&t.notifyNestedSubs(),()=>{t.tryUnsubscribe(),t.onStateChange=void 0}}),[o,a]);const i=t||d;return s.createElement(i.Provider,{value:o},n)};var U,z;U=p.useSyncExternalStoreWithSelector,m=U,(e=>{R=e})(c.useSyncExternalStore),z=l.unstable_batchedUpdates,f=z;var q=n(57557),$=n.n(q),V=n(6557),W=n.n(V);const H=e=>t=>{const{fn:n}=e();class r extends s.Component{render(){return s.createElement(t,o()({},e(),this.props,this.context))}}return r.displayName=`WithSystem(${n.getDisplayName(t)})`,r},J=(e,t)=>n=>{const{fn:r}=e();class a extends s.Component{render(){return s.createElement(F,{store:t},s.createElement(n,o()({},this.props,this.context)))}}return a.displayName=`WithRoot(${r.getDisplayName(n)})`,a},K=(e,t,n)=>(0,u.qC)(n?J(e,n):W(),B(((n,r)=>{var o;const a={...r,...e()},i=(null===(o=t.prototype)||void 0===o?void 0:o.mapStateToProps)||(e=>({state:e}));return i(n,a)})),H(e))(t),G=(e,t,n,r)=>{for(const o in t){const a=t[o];"function"==typeof a&&a(n[o],r[o],e())}},Z=(e,t,n)=>(t,r)=>{const{fn:o}=e(),a=n(t,"root");class l extends s.Component{constructor(t,n){super(t,n),G(e,r,t,{})}UNSAFE_componentWillReceiveProps(t){G(e,r,t,this.props)}render(){const e=$()(this.props,r?i()(r):[]);return s.createElement(a,e)}}return l.displayName=`WithMappedContainer(${o.getDisplayName(a)})`,l},Y=(e,t,n,r)=>o=>{const a=n(e,t,r)("App","root");l.render(s.createElement(a,null),o)},Q=(e,t,n)=>function(r,o){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"!=typeof r)throw new TypeError("Need a string, to fetch a component. Was given a "+typeof r);const i=n(r);return i?o?"root"===o?K(e,i,t()):K(e,i):i:(a.failSilently||e().log.warn("Could not find component:",r),null)}},33424:(e,t,n)=>{"use strict";n.d(t,{d3:()=>D,C2:()=>ee});var r=n(28222),o=n.n(r),a=n(58118),i=n.n(a),s=n(63366);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return function(e){if(0===e.length||1===e.length)return e;var t,n,r=e.join(".");return m[r]||(m[r]=0===(n=(t=e).length)||1===n?t:2===n?[t[0],t[1],"".concat(t[0],".").concat(t[1]),"".concat(t[1],".").concat(t[0])]:3===n?[t[0],t[1],t[2],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0])]:n>=4?[t[0],t[1],t[2],t[3],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[2],".").concat(t[3]),"".concat(t[3],".").concat(t[0]),"".concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[0]),"".concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[3],".").concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[2],".").concat(t[1],".").concat(t[0])]:void 0),m[r]}(e.filter((function(e){return"token"!==e}))).reduce((function(e,t){return d(d({},e),n[t])}),t)}function y(e){return e.join(" ")}function v(e){var t=e.node,n=e.stylesheet,r=e.style,o=void 0===r?{}:r,a=e.useInlineStyles,i=e.key,s=t.properties,l=t.type,u=t.tagName,c=t.value;if("text"===l)return c;if(u){var h,m=function(e,t){var n=0;return function(r){return n+=1,r.map((function(r,o){return v({node:r,stylesheet:e,useInlineStyles:t,key:"code-segment-".concat(n,"-").concat(o)})}))}}(n,a);if(a){var b=Object.keys(n).reduce((function(e,t){return t.split(".").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),w=s.className&&s.className.includes("token")?["token"]:[],E=s.className&&w.concat(s.className.filter((function(e){return!b.includes(e)})));h=d(d({},s),{},{className:y(E)||void 0,style:g(s.className,Object.assign({},s.style,o),n)})}else h=d(d({},s),{},{className:y(s.className)});var x=m(t.children);return p.createElement(u,(0,f.Z)({key:i},h),x)}}const b=function(e,t){return-1!==e.listLanguages().indexOf(t)};var w=["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"];function E(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function x(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=0;r2&&void 0!==arguments[2]?arguments[2]:[];return t||u.length>0?function(e,t){return k({children:e,lineNumber:t,lineNumberStyle:s,largestLineNumber:i,showInlineLineNumbers:o,lineProps:n,className:arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],showLineNumbers:r,wrapLongLines:l})}(e,a,u):function(e,t){if(r&&t&&o){var n=C(s,t,i);e.unshift(A(t,n))}return e}(e,a)}for(var m=function(){var e=c[h],t=e.children[0].value;if(t.match(_)){var n=t.split("\n");n.forEach((function(t,o){var i=r&&p.length+a,s={type:"text",value:"".concat(t,"\n")};if(0===o){var l=d(c.slice(f+1,h).concat(k({children:[s],className:e.properties.className})),i);p.push(l)}else if(o===n.length-1){var u=c[h+1]&&c[h+1].children&&c[h+1].children[0],m={type:"text",value:"".concat(t)};if(u){var g=k({children:[m],className:e.properties.className});c.splice(h+1,0,g)}else{var y=d([m],i,e.properties.className);p.push(y)}}else{var v=d([s],i,e.properties.className);p.push(v)}})),f=h}h++};h=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,w);$=$||N;var W=d?p.createElement(S,{containerStyle:E,codeStyle:u.style||{},numberStyle:A,startingLineNumber:v,codeString:q}):null,H=o.hljs||o['pre[class*="language-"]']||{backgroundColor:"#fff"},J=I($)?"hljs":"prismjs",K=f?Object.assign({},V,{style:Object.assign({},H,i)}):Object.assign({},V,{className:V.className?"".concat(J," ").concat(V.className):J,style:Object.assign({},i)});if(u.style=x(x({},u.style),{},O?{whiteSpace:"pre-wrap"}:{whiteSpace:"pre"}),!$)return p.createElement(B,K,W,p.createElement(U,u,q));(void 0===C&&D||O)&&(C=!0),D=D||T;var G=[{type:"text",value:q}],Z=function(e){var t=e.astGenerator,n=e.language,r=e.code,o=e.defaultCodeValue;if(I(t)){var a=b(t,n);return"text"===n?{value:o,language:"text"}:a?t.highlight(n,r):t.highlightAuto(r)}try{return n&&"text"!==n?{value:t.highlight(r,n)}:{value:o}}catch(e){return{value:o}}}({astGenerator:$,language:t,code:q,defaultCodeValue:G});null===Z.language&&(Z.value=G);var Y=j(Z,C,M,d,g,v,Z.value.length+v,A,O);return p.createElement(B,K,p.createElement(U,u,!g&&W,D({rows:Y,stylesheet:o,useInlineStyles:f})))});M.registerLanguage=R.registerLanguage;const D=M;var L=n(96344);const B=n.n(L)();var F=n(82026);const U=n.n(F)();var z=n(42157);const q=n.n(z)();var $=n(61519);const V=n.n($)();var W=n(54587);const H=n.n(W)();var J=n(30786);const K=n.n(J)();var G=n(66336);const Z=n.n(G)(),Y={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#333",color:"white"},"hljs-name":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-code":{fontStyle:"italic",color:"#888"},"hljs-emphasis":{fontStyle:"italic"},"hljs-tag":{color:"#62c8f3"},"hljs-variable":{color:"#ade5fc"},"hljs-template-variable":{color:"#ade5fc"},"hljs-selector-id":{color:"#ade5fc"},"hljs-selector-class":{color:"#ade5fc"},"hljs-string":{color:"#a2fca2"},"hljs-bullet":{color:"#d36363"},"hljs-type":{color:"#ffa"},"hljs-title":{color:"#ffa"},"hljs-section":{color:"#ffa"},"hljs-attribute":{color:"#ffa"},"hljs-quote":{color:"#ffa"},"hljs-built_in":{color:"#ffa"},"hljs-builtin-name":{color:"#ffa"},"hljs-number":{color:"#d36363"},"hljs-symbol":{color:"#d36363"},"hljs-keyword":{color:"#fcc28c"},"hljs-selector-tag":{color:"#fcc28c"},"hljs-literal":{color:"#fcc28c"},"hljs-comment":{color:"#888"},"hljs-deletion":{color:"#333",backgroundColor:"#fc9b9b"},"hljs-regexp":{color:"#c6b4f0"},"hljs-link":{color:"#c6b4f0"},"hljs-meta":{color:"#fc9b9b"},"hljs-addition":{backgroundColor:"#a2fca2",color:"#333"}};D.registerLanguage("json",U),D.registerLanguage("js",B),D.registerLanguage("xml",q),D.registerLanguage("yaml",H),D.registerLanguage("http",K),D.registerLanguage("bash",V),D.registerLanguage("powershell",Z),D.registerLanguage("javascript",B);const Q={agate:Y,arta:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#222",color:"#aaa"},"hljs-subst":{color:"#aaa"},"hljs-section":{color:"#fff",fontWeight:"bold"},"hljs-comment":{color:"#444"},"hljs-quote":{color:"#444"},"hljs-meta":{color:"#444"},"hljs-string":{color:"#ffcc33"},"hljs-symbol":{color:"#ffcc33"},"hljs-bullet":{color:"#ffcc33"},"hljs-regexp":{color:"#ffcc33"},"hljs-number":{color:"#00cc66"},"hljs-addition":{color:"#00cc66"},"hljs-built_in":{color:"#32aaee"},"hljs-builtin-name":{color:"#32aaee"},"hljs-literal":{color:"#32aaee"},"hljs-type":{color:"#32aaee"},"hljs-template-variable":{color:"#32aaee"},"hljs-attribute":{color:"#32aaee"},"hljs-link":{color:"#32aaee"},"hljs-keyword":{color:"#6644aa"},"hljs-selector-tag":{color:"#6644aa"},"hljs-name":{color:"#6644aa"},"hljs-selector-id":{color:"#6644aa"},"hljs-selector-class":{color:"#6644aa"},"hljs-title":{color:"#bb1166"},"hljs-variable":{color:"#bb1166"},"hljs-deletion":{color:"#bb1166"},"hljs-template-tag":{color:"#bb1166"},"hljs-doctag":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-emphasis":{fontStyle:"italic"}},monokai:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#272822",color:"#ddd"},"hljs-tag":{color:"#f92672"},"hljs-keyword":{color:"#f92672",fontWeight:"bold"},"hljs-selector-tag":{color:"#f92672",fontWeight:"bold"},"hljs-literal":{color:"#f92672",fontWeight:"bold"},"hljs-strong":{color:"#f92672"},"hljs-name":{color:"#f92672"},"hljs-code":{color:"#66d9ef"},"hljs-class .hljs-title":{color:"white"},"hljs-attribute":{color:"#bf79db"},"hljs-symbol":{color:"#bf79db"},"hljs-regexp":{color:"#bf79db"},"hljs-link":{color:"#bf79db"},"hljs-string":{color:"#a6e22e"},"hljs-bullet":{color:"#a6e22e"},"hljs-subst":{color:"#a6e22e"},"hljs-title":{color:"#a6e22e",fontWeight:"bold"},"hljs-section":{color:"#a6e22e",fontWeight:"bold"},"hljs-emphasis":{color:"#a6e22e"},"hljs-type":{color:"#a6e22e",fontWeight:"bold"},"hljs-built_in":{color:"#a6e22e"},"hljs-builtin-name":{color:"#a6e22e"},"hljs-selector-attr":{color:"#a6e22e"},"hljs-selector-pseudo":{color:"#a6e22e"},"hljs-addition":{color:"#a6e22e"},"hljs-variable":{color:"#a6e22e"},"hljs-template-tag":{color:"#a6e22e"},"hljs-template-variable":{color:"#a6e22e"},"hljs-comment":{color:"#75715e"},"hljs-quote":{color:"#75715e"},"hljs-deletion":{color:"#75715e"},"hljs-meta":{color:"#75715e"},"hljs-doctag":{fontWeight:"bold"},"hljs-selector-id":{fontWeight:"bold"}},nord:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#2E3440",color:"#D8DEE9"},"hljs-subst":{color:"#D8DEE9"},"hljs-selector-tag":{color:"#81A1C1"},"hljs-selector-id":{color:"#8FBCBB",fontWeight:"bold"},"hljs-selector-class":{color:"#8FBCBB"},"hljs-selector-attr":{color:"#8FBCBB"},"hljs-selector-pseudo":{color:"#88C0D0"},"hljs-addition":{backgroundColor:"rgba(163, 190, 140, 0.5)"},"hljs-deletion":{backgroundColor:"rgba(191, 97, 106, 0.5)"},"hljs-built_in":{color:"#8FBCBB"},"hljs-type":{color:"#8FBCBB"},"hljs-class":{color:"#8FBCBB"},"hljs-function":{color:"#88C0D0"},"hljs-function > .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},obsidian:{hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},"tomorrow-night":{"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}}},X=o()(Q),ee=e=>i()(X).call(X,e)?Q[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),Y)},90242:(e,t,n)=>{"use strict";n.d(t,{AF:()=>he,Ay:()=>be,D$:()=>ut,DR:()=>Se,GZ:()=>Qe,HP:()=>ve,Ik:()=>qe,J6:()=>ot,Kn:()=>me,LQ:()=>de,Nm:()=>et,O2:()=>mt,Pz:()=>lt,Q2:()=>we,QG:()=>nt,UG:()=>Ge,Uj:()=>ft,V9:()=>ct,Wl:()=>ge,XV:()=>st,Xb:()=>ht,Zl:()=>Ae,_5:()=>Ee,be:()=>Xe,cz:()=>pt,gp:()=>_e,hW:()=>tt,iQ:()=>xe,kJ:()=>ye,mz:()=>pe,nX:()=>at,oG:()=>fe,oJ:()=>rt,po:()=>it,r3:()=>Ze,wh:()=>Ye,xi:()=>Ke});var r=n(58309),o=n.n(r),a=n(97606),i=n.n(a),s=n(74386),l=n.n(s),u=n(86),c=n.n(u),p=n(14418),f=n.n(p),h=n(28222),d=n.n(h),m=(n(11189),n(24282)),g=n.n(m),y=n(76986),v=n.n(y),b=n(2578),w=n.n(b),E=n(24278),x=n.n(E),_=(n(39022),n(92039)),S=n.n(_),A=(n(58118),n(35627)),C=n.n(A),k=n(11882),O=n.n(k),j=n(51679),T=n.n(j),I=n(27043),N=n.n(I),P=n(81607),R=n.n(P),M=n(43393),D=n.n(M),L=n(17967),B=n(68929),F=n.n(B),U=n(11700),z=n.n(U),q=n(88306),$=n.n(q),V=n(13311),W=n.n(V),H=n(59704),J=n.n(H),K=n(77813),G=n.n(K),Z=n(23560),Y=n.n(Z),Q=n(57050),X=n(27504),ee=n(8269),te=n.n(ee),ne=n(19069),re=n(92282),oe=n.n(re),ae=n(89072),ie=n.n(ae),se=n(1272),le=n(48764).Buffer;const ue="default",ce=e=>D().Iterable.isIterable(e);function pe(e){return me(e)?ce(e)?e.toJS():e:{}}function fe(e){var t,n;if(ce(e))return e;if(e instanceof X.Z.File)return e;if(!me(e))return e;if(o()(e))return i()(n=D().Seq(e)).call(n,fe).toList();if(Y()(l()(e))){var r;const t=function(e){if(!Y()(l()(e)))return e;const t={},n="_**[]",r={};for(let o of l()(e).call(e))if(t[o[0]]||r[o[0]]&&r[o[0]].containsMultiple){if(!r[o[0]]){r[o[0]]={containsMultiple:!0,length:1},t[`${o[0]}${n}${r[o[0]].length}`]=t[o[0]],delete t[o[0]]}r[o[0]].length+=1,t[`${o[0]}${n}${r[o[0]].length}`]=o[1]}else t[o[0]]=o[1];return t}(e);return i()(r=D().OrderedMap(t)).call(r,fe)}return i()(t=D().OrderedMap(e)).call(t,fe)}function he(e){return o()(e)?e:[e]}function de(e){return"function"==typeof e}function me(e){return!!e&&"object"==typeof e}function ge(e){return"function"==typeof e}function ye(e){return o()(e)}const ve=$();function be(e,t){var n;return g()(n=d()(e)).call(n,((n,r)=>(n[r]=t(e[r],r),n)),{})}function we(e,t){var n;return g()(n=d()(e)).call(n,((n,r)=>{let o=t(e[r],r);return o&&"object"==typeof o&&v()(n,o),n}),{})}function Ee(e){return t=>{let{dispatch:n,getState:r}=t;return t=>n=>"function"==typeof n?n(e()):t(n)}}function xe(e){var t;let n=e.keySeq();return n.contains(ue)?ue:w()(t=f()(n).call(n,(e=>"2"===(e+"")[0]))).call(t).first()}function _e(e,t){if(!D().Iterable.isIterable(e))return D().List();let n=e.getIn(o()(t)?t:[t]);return D().List.isList(n)?n:D().List()}function Se(e){let t,n=[/filename\*=[^']+'\w*'"([^"]+)";?/i,/filename\*=[^']+'\w*'([^;]+);?/i,/filename="([^;]*);?"/i,/filename=([^;]*);?/i];if(S()(n).call(n,(n=>(t=n.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function Ae(e){return t=e.replace(/\.[^./]*$/,""),z()(F()(t));var t}const Ce=(e,t)=>{if(e>t)return`Value must be less than ${t}`},ke=(e,t)=>{if(e{if(!/^-?\d+(\.?\d+)?$/.test(e))return"Value must be a number"},je=e=>{if(!/^-?\d+$/.test(e))return"Value must be an integer"},Te=e=>{if(e&&!(e instanceof X.Z.File))return"Value must be a file"},Ie=e=>{if("true"!==e&&"false"!==e&&!0!==e&&!1!==e)return"Value must be a boolean"},Ne=e=>{if(e&&"string"!=typeof e)return"Value must be a string"},Pe=e=>{if(isNaN(Date.parse(e)))return"Value must be a DateTime"},Re=e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return"Value must be a Guid"},Me=(e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?"s":""}`},De=(e,t)=>{if(e&&("true"===t||!0===t)){const t=(0,M.fromJS)(e),n=t.toSet();if(e.length>n.size){let e=(0,M.Set)();if(c()(t).call(t,((n,r)=>{f()(t).call(t,(e=>ge(e.equals)?e.equals(n):e===n)).size>1&&(e=e.add(r))})),0!==e.size)return i()(e).call(e,(e=>({index:e,error:"No duplicates allowed."}))).toArray()}}},Le=(e,t)=>{if(!e&&t>=1||e&&e.length{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?"":"s"}`},Fe=(e,t)=>{if(e.length{if(!new RegExp(t).test(e))return"Value must follow pattern "+t};function ze(e,t,n,r,a){if(!t)return[];let s=[],l=t.get("nullable"),u=t.get("required"),p=t.get("maximum"),f=t.get("minimum"),h=t.get("type"),d=t.get("format"),m=t.get("maxLength"),g=t.get("minLength"),y=t.get("uniqueItems"),v=t.get("maxItems"),b=t.get("minItems"),w=t.get("pattern");const E=n||!0===u,x=null!=e;if(l&&null===e||!h||!(E||x&&"array"===h||!(!E&&!x)))return[];let _="string"===h&&e,A="array"===h&&o()(e)&&e.length,C="array"===h&&D().List.isList(e)&&e.count();const k=[_,A,C,"array"===h&&"string"==typeof e&&e,"file"===h&&e instanceof X.Z.File,"boolean"===h&&(e||!1===e),"number"===h&&(e||0===e),"integer"===h&&(e||0===e),"object"===h&&"object"==typeof e&&null!==e,"object"===h&&"string"==typeof e&&e],O=S()(k).call(k,(e=>!!e));if(E&&!O&&!r)return s.push("Required field is not provided"),s;if("object"===h&&(null===a||"application/json"===a)){let n=e;if("string"==typeof e)try{n=JSON.parse(e)}catch(e){return s.push("Parameter string value must be valid JSON"),s}var j;if(t&&t.has("required")&&ge(u.isList)&&u.isList()&&c()(u).call(u,(e=>{void 0===n[e]&&s.push({propKey:e,error:"Required property not found"})})),t&&t.has("properties"))c()(j=t.get("properties")).call(j,((e,t)=>{const o=ze(n[t],e,!1,r,a);s.push(...i()(o).call(o,(e=>({propKey:t,error:e}))))}))}if(w){let t=Ue(e,w);t&&s.push(t)}if(b&&"array"===h){let t=Le(e,b);t&&s.push(t)}if(v&&"array"===h){let t=Be(e,v);t&&s.push({needRemove:!0,error:t})}if(y&&"array"===h){let t=De(e,y);t&&s.push(...t)}if(m||0===m){let t=Me(e,m);t&&s.push(t)}if(g){let t=Fe(e,g);t&&s.push(t)}if(p||0===p){let t=Ce(e,p);t&&s.push(t)}if(f||0===f){let t=ke(e,f);t&&s.push(t)}if("string"===h){let t;if(t="date-time"===d?Pe(e):"uuid"===d?Re(e):Ne(e),!t)return s;s.push(t)}else if("boolean"===h){let t=Ie(e);if(!t)return s;s.push(t)}else if("number"===h){let t=Oe(e);if(!t)return s;s.push(t)}else if("integer"===h){let t=je(e);if(!t)return s;s.push(t)}else if("array"===h){if(!A&&!C)return s;e&&c()(e).call(e,((e,n)=>{const o=ze(e,t.get("items"),!1,r,a);s.push(...i()(o).call(o,(e=>({index:n,error:e}))))}))}else if("file"===h){let t=Te(e);if(!t)return s;s.push(t)}return s}const qe=function(e,t){let{isOAS3:n=!1,bypassRequiredCheck:r=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=e.get("required"),{schema:a,parameterContentMediaType:i}=(0,ne.Z)(e,{isOAS3:n});return ze(t,a,o,r,i)},$e=(e,t,n)=>{if(e&&!e.xml&&(e.xml={}),e&&!e.xml.name){if(!e.$$ref&&(e.type||e.items||e.properties||e.additionalProperties))return'\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e';if(e.$$ref){let t=e.$$ref.match(/\S*\/(\S+)$/);e.xml.name=t[1]}}return(0,Q.memoizedCreateXMLExample)(e,t,n)},Ve=[{when:/json/,shouldStringifyTypes:["string"]}],We=["object"],He=(e,t,n,r)=>{const o=(0,Q.memoizedSampleFromSchema)(e,t,r),a=typeof o,i=g()(Ve).call(Ve,((e,t)=>t.when.test(n)?[...e,...t.shouldStringifyTypes]:e),We);return J()(i,(e=>e===a))?C()(o,null,2):o},Je=(e,t,n,r)=>{const o=He(e,t,n,r);let a;try{a=se.ZP.dump(se.ZP.load(o),{lineWidth:-1},{schema:se.A8}),"\n"===a[a.length-1]&&(a=x()(a).call(a,0,a.length-1))}catch(e){return console.error(e),"error: could not generate yaml example"}return a.replace(/\t/g," ")},Ke=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return e&&ge(e.toJS)&&(e=e.toJS()),r&&ge(r.toJS)&&(r=r.toJS()),/xml/.test(t)?$e(e,n,r):/(yaml|yml)/.test(t)?Je(e,n,t,r):He(e,n,t,r)},Ge=()=>{let e={},t=X.Z.location.search;if(!t)return{};if(""!=t){let n=t.substr(1).split("&");for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&(t=n[t].split("="),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||"")}return e},Ze=e=>{let t;return t=e instanceof le?e:le.from(e.toString(),"utf-8"),t.toString("base64")},Ye={operationsSorter:{alpha:(e,t)=>e.get("path").localeCompare(t.get("path")),method:(e,t)=>e.get("method").localeCompare(t.get("method"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},Qe=e=>{let t=[];for(let n in e){let r=e[n];void 0!==r&&""!==r&&t.push([n,"=",encodeURIComponent(r).replace(/%20/g,"+")].join(""))}return t.join("&")},Xe=(e,t,n)=>!!W()(n,(n=>G()(e[n],t[n])));function et(e){return"string"!=typeof e||""===e?"":(0,L.N)(e)}function tt(e){return!(!e||O()(e).call(e,"localhost")>=0||O()(e).call(e,"127.0.0.1")>=0||"none"===e)}function nt(e){if(!D().OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=T()(e).call(e,((e,t)=>N()(t).call(t,"2")&&d()(e.get("content")||{}).length>0)),n=e.get("default")||D().OrderedMap(),r=(n.get("content")||D().OrderedMap()).keySeq().toJS().length?n:null;return t||r}const rt=e=>"string"==typeof e||e instanceof String?R()(e).call(e).replace(/\s/g,"%20"):"",ot=e=>te()(rt(e).replace(/%20/g,"_")),at=e=>f()(e).call(e,((e,t)=>/^x-/.test(t))),it=e=>f()(e).call(e,((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function st(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if("object"!=typeof e||o()(e)||null===e||!t)return e;const a=v()({},e);return c()(n=d()(a)).call(n,(e=>{e===t&&r(a[e],e)?delete a[e]:a[e]=st(a[e],t,r)})),a}function lt(e){if("string"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),"object"==typeof e&&null!==e)try{return C()(e,null,2)}catch(t){return String(e)}return null==e?"":e.toString()}function ut(e){return"number"==typeof e?e.toString():e}function ct(e){let{returnAll:t=!1,allowHashes:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!D().Map.isMap(e))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");const r=e.get("name"),o=e.get("in");let a=[];return e&&e.hashCode&&o&&r&&n&&a.push(`${o}.${r}.hash-${e.hashCode()}`),o&&r&&a.push(`${o}.${r}`),a.push(r),t?a:a[0]||""}function pt(e,t){var n;const r=ct(e,{returnAll:!0});return f()(n=i()(r).call(r,(e=>t[e]))).call(n,(e=>void 0!==e))[0]}function ft(){return dt(oe()(32).toString("base64"))}function ht(e){return dt(ie()("sha256").update(e).digest("base64"))}function dt(e){return e.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}const mt=e=>!e||!(!ce(e)||!e.isEmpty())},2518:(e,t,n)=>{"use strict";function r(e){return function(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?"json":null}n.d(t,{O:()=>r})},27504:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=function(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if("undefined"==typeof window)return e;try{e=window;for(var t of["File","Blob","FormData"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}()},19069:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(14418),o=n.n(r),a=n(58118),i=n.n(a),s=n(43393),l=n.n(s);const u=l().Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");function c(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!l().Map.isMap(e))return{schema:l().Map(),parameterContentMediaType:null};if(!t)return"body"===e.get("in")?{schema:e.get("schema",l().Map()),parameterContentMediaType:null}:{schema:o()(e).call(e,((e,t)=>i()(u).call(u,t))),parameterContentMediaType:null};if(e.get("content")){const t=e.get("content",l().Map({})).keySeq().first();return{schema:e.getIn(["content",t,"schema"],l().Map()),parameterContentMediaType:t}}return{schema:e.get("schema")?e.get("schema",l().Map()):l().Map(),parameterContentMediaType:null}}},60314:(e,t,n)=>{"use strict";n.d(t,{Z:()=>x});var r=n(58309),o=n.n(r),a=n(2250),i=n.n(a),s=n(25110),l=n.n(s),u=n(8712),c=n.n(u),p=n(51679),f=n.n(p),h=n(12373),d=n.n(h),m=n(18492),g=n.n(m),y=n(88306),v=n.n(y);const b=e=>t=>o()(e)&&o()(t)&&e.length===t.length&&i()(e).call(e,((e,n)=>e===t[n])),w=function(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:w;const{Cache:n}=v();v().Cache=E;const r=v()(e,t);return v().Cache=n,r}},79742:(e,t)=>{"use strict";t.byteLength=function(e){var t=l(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,a=l(e),i=a[0],s=a[1],u=new o(function(e,t,n){return 3*(t+n)/4-n}(0,i,s)),c=0,p=s>0?i-4:i;for(n=0;n>16&255,u[c++]=t>>8&255,u[c++]=255&t;2===s&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,u[c++]=255&t);1===s&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,u[c++]=t>>8&255,u[c++]=255&t);return u},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,a=[],i=16383,s=0,l=r-o;sl?l:s+i));1===o?(t=e[r-1],a.push(n[t>>2]+n[t<<4&63]+"==")):2===o&&(t=(e[r-2]<<8)+e[r-1],a.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return a.join("")};for(var n=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,s=a.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function u(e,t,r){for(var o,a,i=[],s=t;s>18&63]+n[a>>12&63]+n[a>>6&63]+n[63&a]);return i.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},48764:(e,t,n)=>{"use strict";const r=n(79742),o=n(80645),a="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return p(e)}return u(e,t,n)}function u(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|m(e,t);let r=s(n);const o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(G(e,Uint8Array)){const t=new Uint8Array(e);return h(t.buffer,t.byteOffset,t.byteLength)}return f(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(G(e,ArrayBuffer)||e&&G(e.buffer,ArrayBuffer))return h(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(G(e,SharedArrayBuffer)||e&&G(e.buffer,SharedArrayBuffer)))return h(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const o=function(e){if(l.isBuffer(e)){const t=0|d(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!=typeof e.length||Z(e.length)?s(0):f(e);if("Buffer"===e.type&&Array.isArray(e.data))return f(e.data)}(e);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function c(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function p(e){return c(e),s(e<0?0:0|d(e))}function f(e){const t=e.length<0?0:0|d(e.length),n=s(t);for(let r=0;r=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||G(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let o=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return H(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return J(e).length;default:if(o)return r?-1:H(e).length;t=(""+t).toLowerCase(),o=!0}}function g(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return T(this,t,n);case"utf8":case"utf-8":return C(this,t,n);case"ascii":return O(this,t,n);case"latin1":case"binary":return j(this,t,n);case"base64":return A(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function y(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),Z(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,o){let a,i=1,s=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;i=2,s/=2,l/=2,n/=2}function u(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let r=-1;for(a=n;as&&(n=s-l),a=n;a>=0;a--){let n=!0;for(let r=0;ro&&(r=o):r=o;const a=t.length;let i;for(r>a/2&&(r=a/2),i=0;i>8,o=n%256,a.push(o),a.push(r);return a}(t,e.length-n),e,n,r)}function A(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function C(e,t,n){n=Math.min(e.length,n);const r=[];let o=t;for(;o239?4:t>223?3:t>191?2:1;if(o+i<=n){let n,r,s,l;switch(i){case 1:t<128&&(a=t);break;case 2:n=e[o+1],128==(192&n)&&(l=(31&t)<<6|63&n,l>127&&(a=l));break;case 3:n=e[o+1],r=e[o+2],128==(192&n)&&128==(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(a=l));break;case 4:n=e[o+1],r=e[o+2],s=e[o+3],128==(192&n)&&128==(192&r)&&128==(192&s)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&s,l>65535&&l<1114112&&(a=l))}}null===a?(a=65533,i=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),o+=i}return function(e){const t=e.length;if(t<=k)return String.fromCharCode.apply(String,e);let n="",r=0;for(;rr.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,o)):Uint8Array.prototype.set.call(r,t,o);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(r,o)}o+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tn&&(e+=" ... "),""},a&&(l.prototype[a]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,o){if(G(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;let a=(o>>>=0)-(r>>>=0),i=(n>>>=0)-(t>>>=0);const s=Math.min(a,i),u=this.slice(r,o),c=e.slice(t,n);for(let e=0;e>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}const o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");let a=!1;for(;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return E(this,e,t,n);case"ascii":case"latin1":case"binary":return x(this,e,t,n);case"base64":return _(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,n);default:if(a)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),a=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const k=4096;function O(e,t,n){let r="";n=Math.min(e.length,n);for(let o=t;or)&&(n=r);let o="";for(let r=t;rn)throw new RangeError("Trying to access beyond buffer length")}function P(e,t,n,r,o,a){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||te.length)throw new RangeError("Index out of range")}function R(e,t,n,r,o){q(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,n}function M(e,t,n,r,o){q(t,r,o,e,n,7);let a=Number(t&BigInt(4294967295));e[n+7]=a,a>>=8,e[n+6]=a,a>>=8,e[n+5]=a,a>>=8,e[n+4]=a;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=i,i>>=8,e[n+2]=i,i>>=8,e[n+1]=i,i>>=8,e[n]=i,n+8}function D(e,t,n,r,o,a){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function L(e,t,n,r,a){return t=+t,n>>>=0,a||D(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function B(e,t,n,r,a){return t=+t,n>>>=0,a||D(e,0,n,8),o.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t>>=0,t>>>=0,n||N(e,t,this.length);let r=this[e],o=1,a=0;for(;++a>>=0,t>>>=0,n||N(e,t,this.length);let r=this[e+--t],o=1;for(;t>0&&(o*=256);)r+=this[e+--t]*o;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||N(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||N(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||N(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||N(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||N(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=Q((function(e){$(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(o)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<>>=0,t>>>=0,n||N(e,t,this.length);let r=this[e],o=1,a=0;for(;++a=o&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||N(e,t,this.length);let r=t,o=1,a=this[e+--r];for(;r>0&&(o*=256);)a+=this[e+--r]*o;return o*=128,a>=o&&(a-=Math.pow(2,8*t)),a},l.prototype.readInt8=function(e,t){return e>>>=0,t||N(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||N(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||N(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||N(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||N(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=Q((function(e){$(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<>>=0,t||N(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||N(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||N(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||N(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){P(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=1,a=0;for(this[t]=255&e;++a>>=0,n>>>=0,!r){P(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=n-1,a=1;for(this[t+o]=255&e;--o>=0&&(a*=256);)this[t+o]=e/a&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=Q((function(e,t=0){return R(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=Q((function(e,t=0){return M(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);P(this,e,t,n,r-1,-r)}let o=0,a=1,i=0;for(this[t]=255&e;++o>0)-i&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);P(this,e,t,n,r-1,-r)}let o=n-1,a=1,i=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/a>>0)-i&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||P(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=Q((function(e,t=0){return R(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=Q((function(e,t=0){return M(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return L(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return L(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return B(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return B(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o=r+4;n-=3)t=`_${e.slice(n-3,n)}${t}`;return`${e.slice(0,n)}${t}`}function q(e,t,n,r,o,a){if(e>n||e3?0===t||t===BigInt(0)?`>= 0${r} and < 2${r} ** ${8*(a+1)}${r}`:`>= -(2${r} ** ${8*(a+1)-1}${r}) and < 2 ** ${8*(a+1)-1}${r}`:`>= ${t}${r} and <= ${n}${r}`,new F.ERR_OUT_OF_RANGE("value",o,e)}!function(e,t,n){$(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||V(t,e.length-(n+1))}(r,o,a)}function $(e,t){if("number"!=typeof e)throw new F.ERR_INVALID_ARG_TYPE(t,"number",e)}function V(e,t,n){if(Math.floor(e)!==e)throw $(e,n),new F.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new F.ERR_BUFFER_OUT_OF_BOUNDS;throw new F.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${t}`,e)}U("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),U("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),U("ERR_OUT_OF_RANGE",(function(e,t,n){let r=`The value of "${e}" is out of range.`,o=n;return Number.isInteger(n)&&Math.abs(n)>2**32?o=z(String(n)):"bigint"==typeof n&&(o=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(o=z(o)),o+="n"),r+=` It must be ${t}. Received ${o}`,r}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function H(e,t){let n;t=t||1/0;const r=e.length;let o=null;const a=[];for(let i=0;i55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&a.push(239,191,189);continue}if(i+1===r){(t-=3)>-1&&a.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&a.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&a.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;a.push(n)}else if(n<2048){if((t-=2)<0)break;a.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;a.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;a.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return a}function J(e){return r.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(W,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function K(e,t,n,r){let o;for(o=0;o=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function G(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Z(e){return e!=e}const Y=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let o=0;o<16;++o)t[r+o]=e[n]+e[o]}return t}();function Q(e){return"undefined"==typeof BigInt?X:e}function X(){throw new Error("BigInt not supported")}},21924:(e,t,n)=>{"use strict";var r=n(40210),o=n(55559),a=o(r("String.prototype.indexOf"));e.exports=function(e,t){var n=r(e,!!t);return"function"==typeof n&&a(e,".prototype.")>-1?o(n):n}},55559:(e,t,n)=>{"use strict";var r=n(58612),o=n(40210),a=o("%Function.prototype.apply%"),i=o("%Function.prototype.call%"),s=o("%Reflect.apply%",!0)||r.call(i,a),l=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),c=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(e){u=null}e.exports=function(e){var t=s(r,i,arguments);l&&u&&(l(t,"length").configurable&&u(t,"length",{value:1+c(0,e.length-(arguments.length-1))}));return t};var p=function(){return s(r,a,arguments)};u?u(e.exports,"apply",{value:p}):e.exports.apply=p},94184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t{"use strict";t.parse=function(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");var n={},r=(t||{}).decode||o,a=0;for(;a{"use strict";var r=n(11742),o={"text/plain":"Text","text/html":"Url",default:"Text"},a="Copy to clipboard: #{key}, Enter";e.exports=function(e,t){var n,i,s,l,u,c,p=!1;t||(t={}),n=t.debug||!1;try{if(s=r(),l=document.createRange(),u=document.getSelection(),(c=document.createElement("span")).textContent=e,c.ariaHidden="true",c.style.all="unset",c.style.position="fixed",c.style.top=0,c.style.clip="rect(0, 0, 0, 0)",c.style.whiteSpace="pre",c.style.webkitUserSelect="text",c.style.MozUserSelect="text",c.style.msUserSelect="text",c.style.userSelect="text",c.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[t.format]||o.default;window.clipboardData.setData(a,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(c),l.selectNodeContents(c),u.addRange(l),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");p=!0}catch(r){n&&console.error("unable to copy using execCommand: ",r),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),p=!0}catch(r){n&&console.error("unable to copy using clipboardData: ",r),n&&console.error("falling back to prompt"),i=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:a),window.prompt(i,e)}}finally{u&&("function"==typeof u.removeRange?u.removeRange(l):u.removeAllRanges()),c&&document.body.removeChild(c),s()}return p}},90093:(e,t,n)=>{var r=n(28196);e.exports=r},3688:(e,t,n)=>{var r=n(11955);e.exports=r},83838:(e,t,n)=>{var r=n(46279);e.exports=r},15684:(e,t,n)=>{var r=n(19373);e.exports=r},65362:(e,t,n)=>{var r=n(63383);e.exports=r},91254:(e,t,n)=>{var r=n(57396);e.exports=r},43536:(e,t,n)=>{var r=n(41910);e.exports=r},37331:(e,t,n)=>{var r=n(79427);e.exports=r},68522:(e,t,n)=>{var r=n(62857);e.exports=r},73151:(e,t,n)=>{var r=n(9534);e.exports=r},45012:(e,t,n)=>{var r=n(23059);e.exports=r},80281:(e,t,n)=>{var r=n(92547);n(43975),e.exports=r},40031:(e,t,n)=>{var r=n(46509);e.exports=r},17487:(e,t,n)=>{var r=n(35774);e.exports=r},54493:(e,t,n)=>{n(77971),n(53242);var r=n(54058);e.exports=r.Array.from},24034:(e,t,n)=>{n(92737);var r=n(54058);e.exports=r.Array.isArray},15367:(e,t,n)=>{n(85906);var r=n(35703);e.exports=r("Array").concat},12710:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r("Array").entries},51459:(e,t,n)=>{n(48851);var r=n(35703);e.exports=r("Array").every},6172:(e,t,n)=>{n(80290);var r=n(35703);e.exports=r("Array").fill},62383:(e,t,n)=>{n(21501);var r=n(35703);e.exports=r("Array").filter},60009:(e,t,n)=>{n(44929);var r=n(35703);e.exports=r("Array").findIndex},17671:(e,t,n)=>{n(80833);var r=n(35703);e.exports=r("Array").find},99324:(e,t,n)=>{n(2437);var r=n(35703);e.exports=r("Array").forEach},80991:(e,t,n)=>{n(97690);var r=n(35703);e.exports=r("Array").includes},8700:(e,t,n)=>{n(99076);var r=n(35703);e.exports=r("Array").indexOf},95909:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r("Array").keys},6442:(e,t,n)=>{n(75915);var r=n(35703);e.exports=r("Array").lastIndexOf},23866:(e,t,n)=>{n(68787);var r=n(35703);e.exports=r("Array").map},52999:(e,t,n)=>{n(81876);var r=n(35703);e.exports=r("Array").reduce},24900:(e,t,n)=>{n(60186);var r=n(35703);e.exports=r("Array").slice},3824:(e,t,n)=>{n(36026);var r=n(35703);e.exports=r("Array").some},2948:(e,t,n)=>{n(4115);var r=n(35703);e.exports=r("Array").sort},78209:(e,t,n)=>{n(98611);var r=n(35703);e.exports=r("Array").splice},14423:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r("Array").values},81103:(e,t,n)=>{n(95160);var r=n(54058);e.exports=r.Date.now},27700:(e,t,n)=>{n(73381);var r=n(35703);e.exports=r("Function").bind},16246:(e,t,n)=>{var r=n(7046),o=n(27700),a=Function.prototype;e.exports=function(e){var t=e.bind;return e===a||r(a,e)&&t===a.bind?o:t}},56043:(e,t,n)=>{var r=n(7046),o=n(15367),a=Array.prototype;e.exports=function(e){var t=e.concat;return e===a||r(a,e)&&t===a.concat?o:t}},13160:(e,t,n)=>{var r=n(7046),o=n(51459),a=Array.prototype;e.exports=function(e){var t=e.every;return e===a||r(a,e)&&t===a.every?o:t}},80446:(e,t,n)=>{var r=n(7046),o=n(6172),a=Array.prototype;e.exports=function(e){var t=e.fill;return e===a||r(a,e)&&t===a.fill?o:t}},2480:(e,t,n)=>{var r=n(7046),o=n(62383),a=Array.prototype;e.exports=function(e){var t=e.filter;return e===a||r(a,e)&&t===a.filter?o:t}},7147:(e,t,n)=>{var r=n(7046),o=n(60009),a=Array.prototype;e.exports=function(e){var t=e.findIndex;return e===a||r(a,e)&&t===a.findIndex?o:t}},32236:(e,t,n)=>{var r=n(7046),o=n(17671),a=Array.prototype;e.exports=function(e){var t=e.find;return e===a||r(a,e)&&t===a.find?o:t}},58557:(e,t,n)=>{var r=n(7046),o=n(80991),a=n(21631),i=Array.prototype,s=String.prototype;e.exports=function(e){var t=e.includes;return e===i||r(i,e)&&t===i.includes?o:"string"==typeof e||e===s||r(s,e)&&t===s.includes?a:t}},34570:(e,t,n)=>{var r=n(7046),o=n(8700),a=Array.prototype;e.exports=function(e){var t=e.indexOf;return e===a||r(a,e)&&t===a.indexOf?o:t}},57564:(e,t,n)=>{var r=n(7046),o=n(6442),a=Array.prototype;e.exports=function(e){var t=e.lastIndexOf;return e===a||r(a,e)&&t===a.lastIndexOf?o:t}},88287:(e,t,n)=>{var r=n(7046),o=n(23866),a=Array.prototype;e.exports=function(e){var t=e.map;return e===a||r(a,e)&&t===a.map?o:t}},68025:(e,t,n)=>{var r=n(7046),o=n(52999),a=Array.prototype;e.exports=function(e){var t=e.reduce;return e===a||r(a,e)&&t===a.reduce?o:t}},59257:(e,t,n)=>{var r=n(7046),o=n(80454),a=String.prototype;e.exports=function(e){var t=e.repeat;return"string"==typeof e||e===a||r(a,e)&&t===a.repeat?o:t}},69601:(e,t,n)=>{var r=n(7046),o=n(24900),a=Array.prototype;e.exports=function(e){var t=e.slice;return e===a||r(a,e)&&t===a.slice?o:t}},28299:(e,t,n)=>{var r=n(7046),o=n(3824),a=Array.prototype;e.exports=function(e){var t=e.some;return e===a||r(a,e)&&t===a.some?o:t}},69355:(e,t,n)=>{var r=n(7046),o=n(2948),a=Array.prototype;e.exports=function(e){var t=e.sort;return e===a||r(a,e)&&t===a.sort?o:t}},18339:(e,t,n)=>{var r=n(7046),o=n(78209),a=Array.prototype;e.exports=function(e){var t=e.splice;return e===a||r(a,e)&&t===a.splice?o:t}},71611:(e,t,n)=>{var r=n(7046),o=n(3269),a=String.prototype;e.exports=function(e){var t=e.startsWith;return"string"==typeof e||e===a||r(a,e)&&t===a.startsWith?o:t}},62774:(e,t,n)=>{var r=n(7046),o=n(13348),a=String.prototype;e.exports=function(e){var t=e.trim;return"string"==typeof e||e===a||r(a,e)&&t===a.trim?o:t}},84426:(e,t,n)=>{n(32619);var r=n(54058),o=n(79730);r.JSON||(r.JSON={stringify:JSON.stringify}),e.exports=function(e,t,n){return o(r.JSON.stringify,null,arguments)}},91018:(e,t,n)=>{n(66274),n(37501),n(55967),n(77971);var r=n(54058);e.exports=r.Map},45999:(e,t,n)=>{n(49221);var r=n(54058);e.exports=r.Object.assign},7702:(e,t,n)=>{n(74979);var r=n(54058).Object,o=e.exports=function(e,t){return r.defineProperties(e,t)};r.defineProperties.sham&&(o.sham=!0)},48171:(e,t,n)=>{n(86450);var r=n(54058).Object,o=e.exports=function(e,t,n){return r.defineProperty(e,t,n)};r.defineProperty.sham&&(o.sham=!0)},286:(e,t,n)=>{n(46924);var r=n(54058).Object,o=e.exports=function(e,t){return r.getOwnPropertyDescriptor(e,t)};r.getOwnPropertyDescriptor.sham&&(o.sham=!0)},92766:(e,t,n)=>{n(88482);var r=n(54058);e.exports=r.Object.getOwnPropertyDescriptors},30498:(e,t,n)=>{n(35824);var r=n(54058);e.exports=r.Object.getOwnPropertySymbols},48494:(e,t,n)=>{n(21724);var r=n(54058);e.exports=r.Object.keys},98430:(e,t,n)=>{n(26614);var r=n(54058);e.exports=r.Object.values},52956:(e,t,n)=>{n(47627),n(66274),n(55967),n(98881),n(4560),n(91302),n(44349),n(77971);var r=n(54058);e.exports=r.Promise},21631:(e,t,n)=>{n(11035);var r=n(35703);e.exports=r("String").includes},80454:(e,t,n)=>{n(60986);var r=n(35703);e.exports=r("String").repeat},3269:(e,t,n)=>{n(94761);var r=n(35703);e.exports=r("String").startsWith},13348:(e,t,n)=>{n(57398);var r=n(35703);e.exports=r("String").trim},57473:(e,t,n)=>{n(85906),n(55967),n(35824),n(8555),n(52615),n(21732),n(35903),n(1825),n(28394),n(45915),n(61766),n(62737),n(89911),n(74315),n(63131),n(64714),n(70659),n(69120),n(79413),n(1502);var r=n(54058);e.exports=r.Symbol},24227:(e,t,n)=>{n(66274),n(55967),n(77971),n(1825);var r=n(11477);e.exports=r.f("iterator")},62978:(e,t,n)=>{n(18084),n(63131);var r=n(11477);e.exports=r.f("toPrimitive")},14122:(e,t,n)=>{e.exports=n(89097)},44442:(e,t,n)=>{e.exports=n(51675)},57152:(e,t,n)=>{e.exports=n(82507)},69447:(e,t,n)=>{e.exports=n(628)},60269:(e,t,n)=>{e.exports=n(76936)},70573:(e,t,n)=>{e.exports=n(18180)},73685:(e,t,n)=>{e.exports=n(80621)},27533:(e,t,n)=>{e.exports=n(22948)},39057:(e,t,n)=>{e.exports=n(82108)},84710:(e,t,n)=>{e.exports=n(14058)},93799:(e,t,n)=>{e.exports=n(92093)},86600:(e,t,n)=>{e.exports=n(52201)},9759:(e,t,n)=>{e.exports=n(27398)},71384:(e,t,n)=>{e.exports=n(26189)},89097:(e,t,n)=>{var r=n(90093);e.exports=r},51675:(e,t,n)=>{var r=n(3688);e.exports=r},82507:(e,t,n)=>{var r=n(83838);e.exports=r},628:(e,t,n)=>{var r=n(15684);e.exports=r},76936:(e,t,n)=>{var r=n(65362);e.exports=r},18180:(e,t,n)=>{var r=n(91254);e.exports=r},80621:(e,t,n)=>{var r=n(43536);e.exports=r},22948:(e,t,n)=>{var r=n(37331);e.exports=r},82108:(e,t,n)=>{var r=n(68522);e.exports=r},14058:(e,t,n)=>{var r=n(73151);e.exports=r},92093:(e,t,n)=>{var r=n(45012);e.exports=r},52201:(e,t,n)=>{var r=n(80281);n(28783),n(22731),n(85605),n(65799),n(31943),n(46774),n(45414),n(80620),n(36172),e.exports=r},27398:(e,t,n)=>{var r=n(40031);e.exports=r},26189:(e,t,n)=>{var r=n(17487);e.exports=r},24883:(e,t,n)=>{var r=n(57475),o=n(69826),a=TypeError;e.exports=function(e){if(r(e))return e;throw a(o(e)+" is not a function")}},174:(e,t,n)=>{var r=n(24284),o=n(69826),a=TypeError;e.exports=function(e){if(r(e))return e;throw a(o(e)+" is not a constructor")}},11851:(e,t,n)=>{var r=n(57475),o=String,a=TypeError;e.exports=function(e){if("object"==typeof e||r(e))return e;throw a("Can't set "+o(e)+" as a prototype")}},18479:e=>{e.exports=function(){}},5743:(e,t,n)=>{var r=n(7046),o=TypeError;e.exports=function(e,t){if(r(t,e))return e;throw o("Incorrect invocation")}},96059:(e,t,n)=>{var r=n(10941),o=String,a=TypeError;e.exports=function(e){if(r(e))return e;throw a(o(e)+" is not an object")}},97135:(e,t,n)=>{var r=n(95981);e.exports=r((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},91860:(e,t,n)=>{"use strict";var r=n(89678),o=n(59413),a=n(10623);e.exports=function(e){for(var t=r(this),n=a(t),i=arguments.length,s=o(i>1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,u=void 0===l?n:o(l,n);u>s;)t[s++]=e;return t}},56837:(e,t,n)=>{"use strict";var r=n(3610).forEach,o=n(34194)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},11354:(e,t,n)=>{"use strict";var r=n(86843),o=n(78834),a=n(89678),i=n(75196),s=n(6782),l=n(24284),u=n(10623),c=n(55449),p=n(53476),f=n(22902),h=Array;e.exports=function(e){var t=a(e),n=l(this),d=arguments.length,m=d>1?arguments[1]:void 0,g=void 0!==m;g&&(m=r(m,d>2?arguments[2]:void 0));var y,v,b,w,E,x,_=f(t),S=0;if(!_||this===h&&s(_))for(y=u(t),v=n?new this(y):h(y);y>S;S++)x=g?m(t[S],S):t[S],c(v,S,x);else for(E=(w=p(t,_)).next,v=n?new this:[];!(b=o(E,w)).done;S++)x=g?i(w,m,[b.value,S],!0):b.value,c(v,S,x);return v.length=S,v}},31692:(e,t,n)=>{var r=n(74529),o=n(59413),a=n(10623),i=function(e){return function(t,n,i){var s,l=r(t),u=a(l),c=o(i,u);if(e&&n!=n){for(;u>c;)if((s=l[c++])!=s)return!0}else for(;u>c;c++)if((e||c in l)&&l[c]===n)return e||c||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},3610:(e,t,n)=>{var r=n(86843),o=n(95329),a=n(37026),i=n(89678),s=n(10623),l=n(64692),u=o([].push),c=function(e){var t=1==e,n=2==e,o=3==e,c=4==e,p=6==e,f=7==e,h=5==e||p;return function(d,m,g,y){for(var v,b,w=i(d),E=a(w),x=r(m,g),_=s(E),S=0,A=y||l,C=t?A(d,_):n||f?A(d,0):void 0;_>S;S++)if((h||S in E)&&(b=x(v=E[S],S,w),e))if(t)C[S]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return S;case 2:u(C,v)}else switch(e){case 4:return!1;case 7:u(C,v)}return p?-1:o||c?c:C}};e.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterReject:c(7)}},67145:(e,t,n)=>{"use strict";var r=n(79730),o=n(74529),a=n(62435),i=n(10623),s=n(34194),l=Math.min,u=[].lastIndexOf,c=!!u&&1/[1].lastIndexOf(1,-0)<0,p=s("lastIndexOf"),f=c||!p;e.exports=f?function(e){if(c)return r(u,this,arguments)||0;var t=o(this),n=i(t),s=n-1;for(arguments.length>1&&(s=l(s,a(arguments[1]))),s<0&&(s=n+s);s>=0;s--)if(s in t&&t[s]===e)return s||0;return-1}:u},50568:(e,t,n)=>{var r=n(95981),o=n(99813),a=n(53385),i=o("species");e.exports=function(e){return a>=51||!r((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},34194:(e,t,n)=>{"use strict";var r=n(95981);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){return 1},1)}))}},46499:(e,t,n)=>{var r=n(24883),o=n(89678),a=n(37026),i=n(10623),s=TypeError,l=function(e){return function(t,n,l,u){r(n);var c=o(t),p=a(c),f=i(c),h=e?f-1:0,d=e?-1:1;if(l<2)for(;;){if(h in p){u=p[h],h+=d;break}if(h+=d,e?h<0:f<=h)throw s("Reduce of empty array with no initial value")}for(;e?h>=0:f>h;h+=d)h in p&&(u=n(u,p[h],h,c));return u}};e.exports={left:l(!1),right:l(!0)}},89779:(e,t,n)=>{"use strict";var r=n(55746),o=n(1052),a=TypeError,i=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=s?function(e,t){if(o(e)&&!i(e,"length").writable)throw a("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},15790:(e,t,n)=>{var r=n(59413),o=n(10623),a=n(55449),i=Array,s=Math.max;e.exports=function(e,t,n){for(var l=o(e),u=r(t,l),c=r(void 0===n?l:n,l),p=i(s(c-u,0)),f=0;u{var r=n(95329);e.exports=r([].slice)},61388:(e,t,n)=>{var r=n(15790),o=Math.floor,a=function(e,t){var n=e.length,l=o(n/2);return n<8?i(e,t):s(e,a(r(e,0,l),t),a(r(e,l),t),t)},i=function(e,t){for(var n,r,o=e.length,a=1;a0;)e[r]=e[--r];r!==a++&&(e[r]=n)}return e},s=function(e,t,n,r){for(var o=t.length,a=n.length,i=0,s=0;i{var r=n(1052),o=n(24284),a=n(10941),i=n(99813)("species"),s=Array;e.exports=function(e){var t;return r(e)&&(t=e.constructor,(o(t)&&(t===s||r(t.prototype))||a(t)&&null===(t=t[i]))&&(t=void 0)),void 0===t?s:t}},64692:(e,t,n)=>{var r=n(5693);e.exports=function(e,t){return new(r(e))(0===t?0:t)}},75196:(e,t,n)=>{var r=n(96059),o=n(7609);e.exports=function(e,t,n,a){try{return a?t(r(n)[0],n[1]):t(n)}catch(t){o(e,"throw",t)}}},21385:(e,t,n)=>{var r=n(99813)("iterator"),o=!1;try{var a=0,i={next:function(){return{done:!!a++}},return:function(){o=!0}};i[r]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var a={};a[r]=function(){return{next:function(){return{done:n=!0}}}},e(a)}catch(e){}return n}},82532:(e,t,n)=>{var r=n(95329),o=r({}.toString),a=r("".slice);e.exports=function(e){return a(o(e),8,-1)}},9697:(e,t,n)=>{var r=n(22885),o=n(57475),a=n(82532),i=n(99813)("toStringTag"),s=Object,l="Arguments"==a(function(){return arguments}());e.exports=r?a:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=s(e),i))?n:l?a(t):"Object"==(r=a(t))&&o(t.callee)?"Arguments":r}},85616:(e,t,n)=>{"use strict";var r=n(29290),o=n(29202),a=n(94380),i=n(86843),s=n(5743),l=n(82119),u=n(93091),c=n(75105),p=n(23538),f=n(94431),h=n(55746),d=n(21647).fastKey,m=n(45402),g=m.set,y=m.getterFor;e.exports={getConstructor:function(e,t,n,c){var p=e((function(e,o){s(e,f),g(e,{type:t,index:r(null),first:void 0,last:void 0,size:0}),h||(e.size=0),l(o)||u(o,e[c],{that:e,AS_ENTRIES:n})})),f=p.prototype,m=y(t),v=function(e,t,n){var r,o,a=m(e),i=b(e,t);return i?i.value=n:(a.last=i={index:o=d(t,!0),key:t,value:n,previous:r=a.last,next:void 0,removed:!1},a.first||(a.first=i),r&&(r.next=i),h?a.size++:e.size++,"F"!==o&&(a.index[o]=i)),e},b=function(e,t){var n,r=m(e),o=d(t);if("F"!==o)return r.index[o];for(n=r.first;n;n=n.next)if(n.key==t)return n};return a(f,{clear:function(){for(var e=m(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete t[n.index],n=n.next;e.first=e.last=void 0,h?e.size=0:this.size=0},delete:function(e){var t=this,n=m(t),r=b(t,e);if(r){var o=r.next,a=r.previous;delete n.index[r.index],r.removed=!0,a&&(a.next=o),o&&(o.previous=a),n.first==r&&(n.first=o),n.last==r&&(n.last=a),h?n.size--:t.size--}return!!r},forEach:function(e){for(var t,n=m(this),r=i(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!b(this,e)}}),a(f,n?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),h&&o(f,"size",{configurable:!0,get:function(){return m(this).size}}),p},setStrong:function(e,t,n){var r=t+" Iterator",o=y(t),a=y(r);c(e,t,(function(e,t){g(this,{type:r,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=a(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?p("keys"==t?n.key:"values"==t?n.value:[n.key,n.value],!1):(e.target=void 0,p(void 0,!0))}),n?"entries":"values",!n,!0),f(t)}}},24683:(e,t,n)=>{"use strict";var r=n(76887),o=n(21899),a=n(21647),i=n(95981),s=n(32029),l=n(93091),u=n(5743),c=n(57475),p=n(10941),f=n(90904),h=n(65988).f,d=n(3610).forEach,m=n(55746),g=n(45402),y=g.set,v=g.getterFor;e.exports=function(e,t,n){var g,b=-1!==e.indexOf("Map"),w=-1!==e.indexOf("Weak"),E=b?"set":"add",x=o[e],_=x&&x.prototype,S={};if(m&&c(x)&&(w||_.forEach&&!i((function(){(new x).entries().next()})))){var A=(g=t((function(t,n){y(u(t,A),{type:e,collection:new x}),null!=n&&l(n,t[E],{that:t,AS_ENTRIES:b})}))).prototype,C=v(e);d(["add","clear","delete","forEach","get","has","set","keys","values","entries"],(function(e){var t="add"==e||"set"==e;!(e in _)||w&&"clear"==e||s(A,e,(function(n,r){var o=C(this).collection;if(!t&&w&&!p(n))return"get"==e&&void 0;var a=o[e](0===n?0:n,r);return t?this:a}))})),w||h(A,"size",{configurable:!0,get:function(){return C(this).collection.size}})}else g=n.getConstructor(t,e,b,E),a.enable();return f(g,e,!1,!0),S[e]=g,r({global:!0,forced:!0},S),w||n.setStrong(g,e,b),g}},23489:(e,t,n)=>{var r=n(90953),o=n(31136),a=n(49677),i=n(65988);e.exports=function(e,t,n){for(var s=o(t),l=i.f,u=a.f,c=0;c{var r=n(99813)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,"/./"[e](t)}catch(e){}}return!1}},64160:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},23538:e=>{e.exports=function(e,t){return{value:e,done:t}}},32029:(e,t,n)=>{var r=n(55746),o=n(65988),a=n(31887);e.exports=r?function(e,t,n){return o.f(e,t,a(1,n))}:function(e,t,n){return e[t]=n,e}},31887:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},55449:(e,t,n)=>{"use strict";var r=n(83894),o=n(65988),a=n(31887);e.exports=function(e,t,n){var i=r(t);i in e?o.f(e,i,a(0,n)):e[i]=n}},29202:(e,t,n)=>{var r=n(65988);e.exports=function(e,t,n){return r.f(e,t,n)}},95929:(e,t,n)=>{var r=n(32029);e.exports=function(e,t,n,o){return o&&o.enumerable?e[t]=n:r(e,t,n),e}},94380:(e,t,n)=>{var r=n(95929);e.exports=function(e,t,n){for(var o in t)n&&n.unsafe&&e[o]?e[o]=t[o]:r(e,o,t[o],n);return e}},75609:(e,t,n)=>{var r=n(21899),o=Object.defineProperty;e.exports=function(e,t){try{o(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},15863:(e,t,n)=>{"use strict";var r=n(69826),o=TypeError;e.exports=function(e,t){if(!delete e[t])throw o("Cannot delete property "+r(t)+" of "+r(e))}},55746:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},76616:e=>{var t="object"==typeof document&&document.all,n=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:n}},61333:(e,t,n)=>{var r=n(21899),o=n(10941),a=r.document,i=o(a)&&o(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},66796:e=>{var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},63281:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},34342:(e,t,n)=>{var r=n(2861).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},23321:(e,t,n)=>{var r=n(48501),o=n(6049);e.exports=!r&&!o&&"object"==typeof window&&"object"==typeof document},56491:e=>{e.exports="function"==typeof Bun&&Bun&&"string"==typeof Bun.version},48501:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},81046:(e,t,n)=>{var r=n(2861);e.exports=/MSIE|Trident/.test(r)},4470:(e,t,n)=>{var r=n(2861);e.exports=/ipad|iphone|ipod/i.test(r)&&"undefined"!=typeof Pebble},22749:(e,t,n)=>{var r=n(2861);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},6049:(e,t,n)=>{var r=n(34155),o=n(82532);e.exports=void 0!==r&&"process"==o(r)},58045:(e,t,n)=>{var r=n(2861);e.exports=/web0s(?!.*chrome)/i.test(r)},2861:e=>{e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},53385:(e,t,n)=>{var r,o,a=n(21899),i=n(2861),s=a.process,l=a.Deno,u=s&&s.versions||l&&l.version,c=u&&u.v8;c&&(o=(r=c.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&i&&(!(r=i.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=i.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},18938:(e,t,n)=>{var r=n(2861).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},35703:(e,t,n)=>{var r=n(54058);e.exports=function(e){return r[e+"Prototype"]}},56759:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},53995:(e,t,n)=>{var r=n(95329),o=Error,a=r("".replace),i=String(o("zxcasd").stack),s=/\n\s*at [^:]*:[^\n]*/,l=s.test(i);e.exports=function(e,t){if(l&&"string"==typeof e&&!o.prepareStackTrace)for(;t--;)e=a(e,s,"");return e}},79585:(e,t,n)=>{var r=n(32029),o=n(53995),a=n(18780),i=Error.captureStackTrace;e.exports=function(e,t,n,s){a&&(i?i(e,t):r(e,"stack",o(n,s)))}},18780:(e,t,n)=>{var r=n(95981),o=n(31887);e.exports=!r((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},76887:(e,t,n)=>{"use strict";var r=n(21899),o=n(79730),a=n(97484),i=n(57475),s=n(49677).f,l=n(37252),u=n(54058),c=n(86843),p=n(32029),f=n(90953),h=function(e){var t=function(n,r,a){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,a)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,o,d,m,g,y,v,b,w,E=e.target,x=e.global,_=e.stat,S=e.proto,A=x?r:_?r[E]:(r[E]||{}).prototype,C=x?u:u[E]||p(u,E,{})[E],k=C.prototype;for(m in t)o=!(n=l(x?m:E+(_?".":"#")+m,e.forced))&&A&&f(A,m),y=C[m],o&&(v=e.dontCallGetSet?(w=s(A,m))&&w.value:A[m]),g=o&&v?v:t[m],o&&typeof y==typeof g||(b=e.bind&&o?c(g,r):e.wrap&&o?h(g):S&&i(g)?a(g):g,(e.sham||g&&g.sham||y&&y.sham)&&p(b,"sham",!0),p(C,m,b),S&&(f(u,d=E+"Prototype")||p(u,d,{}),p(u[d],m,g),e.real&&k&&(n||!k[m])&&p(k,m,g)))}},95981:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},45602:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},79730:(e,t,n)=>{var r=n(18285),o=Function.prototype,a=o.apply,i=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?i.bind(a):function(){return i.apply(a,arguments)})},86843:(e,t,n)=>{var r=n(97484),o=n(24883),a=n(18285),i=r(r.bind);e.exports=function(e,t){return o(e),void 0===t?e:a?i(e,t):function(){return e.apply(t,arguments)}}},18285:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},98308:(e,t,n)=>{"use strict";var r=n(95329),o=n(24883),a=n(10941),i=n(90953),s=n(93765),l=n(18285),u=Function,c=r([].concat),p=r([].join),f={},h=function(e,t,n){if(!i(f,t)){for(var r=[],o=0;o{var r=n(18285),o=Function.prototype.call;e.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},79417:(e,t,n)=>{var r=n(55746),o=n(90953),a=Function.prototype,i=r&&Object.getOwnPropertyDescriptor,s=o(a,"name"),l=s&&"something"===function(){}.name,u=s&&(!r||r&&i(a,"name").configurable);e.exports={EXISTS:s,PROPER:l,CONFIGURABLE:u}},45526:(e,t,n)=>{var r=n(95329),o=n(24883);e.exports=function(e,t,n){try{return r(o(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},97484:(e,t,n)=>{var r=n(82532),o=n(95329);e.exports=function(e){if("Function"===r(e))return o(e)}},95329:(e,t,n)=>{var r=n(18285),o=Function.prototype,a=o.call,i=r&&o.bind.bind(a,a);e.exports=r?i:function(e){return function(){return a.apply(e,arguments)}}},626:(e,t,n)=>{var r=n(54058),o=n(21899),a=n(57475),i=function(e){return a(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},22902:(e,t,n)=>{var r=n(9697),o=n(14229),a=n(82119),i=n(12077),s=n(99813)("iterator");e.exports=function(e){if(!a(e))return o(e,s)||o(e,"@@iterator")||i[r(e)]}},53476:(e,t,n)=>{var r=n(78834),o=n(24883),a=n(96059),i=n(69826),s=n(22902),l=TypeError;e.exports=function(e,t){var n=arguments.length<2?s(e):t;if(o(n))return a(r(n,e));throw l(i(e)+" is not iterable")}},33323:(e,t,n)=>{var r=n(95329),o=n(1052),a=n(57475),i=n(82532),s=n(85803),l=r([].push);e.exports=function(e){if(a(e))return e;if(o(e)){for(var t=e.length,n=[],r=0;r{var r=n(24883),o=n(82119);e.exports=function(e,t){var n=e[t];return o(n)?void 0:r(n)}},21899:(e,t,n)=>{var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},90953:(e,t,n)=>{var r=n(95329),o=n(89678),a=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(o(e),t)}},27748:e=>{e.exports={}},34845:e=>{e.exports=function(e,t){try{1==arguments.length?console.error(e):console.error(e,t)}catch(e){}}},15463:(e,t,n)=>{var r=n(626);e.exports=r("document","documentElement")},2840:(e,t,n)=>{var r=n(55746),o=n(95981),a=n(61333);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},37026:(e,t,n)=>{var r=n(95329),o=n(95981),a=n(82532),i=Object,s=r("".split);e.exports=o((function(){return!i("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?s(e,""):i(e)}:i},81302:(e,t,n)=>{var r=n(95329),o=n(57475),a=n(63030),i=r(Function.toString);o(a.inspectSource)||(a.inspectSource=function(e){return i(e)}),e.exports=a.inspectSource},53794:(e,t,n)=>{var r=n(10941),o=n(32029);e.exports=function(e,t){r(t)&&"cause"in t&&o(e,"cause",t.cause)}},21647:(e,t,n)=>{var r=n(76887),o=n(95329),a=n(27748),i=n(10941),s=n(90953),l=n(65988).f,u=n(10946),c=n(684),p=n(91584),f=n(99418),h=n(45602),d=!1,m=f("meta"),g=0,y=function(e){l(e,m,{value:{objectID:"O"+g++,weakData:{}}})},v=e.exports={enable:function(){v.enable=function(){},d=!0;var e=u.f,t=o([].splice),n={};n[m]=1,e(n).length&&(u.f=function(n){for(var r=e(n),o=0,a=r.length;o{var r,o,a,i=n(47093),s=n(21899),l=n(10941),u=n(32029),c=n(90953),p=n(63030),f=n(44262),h=n(27748),d="Object already initialized",m=s.TypeError,g=s.WeakMap;if(i||p.state){var y=p.state||(p.state=new g);y.get=y.get,y.has=y.has,y.set=y.set,r=function(e,t){if(y.has(e))throw m(d);return t.facade=e,y.set(e,t),t},o=function(e){return y.get(e)||{}},a=function(e){return y.has(e)}}else{var v=f("state");h[v]=!0,r=function(e,t){if(c(e,v))throw m(d);return t.facade=e,u(e,v,t),t},o=function(e){return c(e,v)?e[v]:{}},a=function(e){return c(e,v)}}e.exports={set:r,get:o,has:a,enforce:function(e){return a(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=o(t)).type!==e)throw m("Incompatible receiver, "+e+" required");return n}}}},6782:(e,t,n)=>{var r=n(99813),o=n(12077),a=r("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||i[a]===e)}},1052:(e,t,n)=>{var r=n(82532);e.exports=Array.isArray||function(e){return"Array"==r(e)}},57475:(e,t,n)=>{var r=n(76616),o=r.all;e.exports=r.IS_HTMLDDA?function(e){return"function"==typeof e||e===o}:function(e){return"function"==typeof e}},24284:(e,t,n)=>{var r=n(95329),o=n(95981),a=n(57475),i=n(9697),s=n(626),l=n(81302),u=function(){},c=[],p=s("Reflect","construct"),f=/^\s*(?:class|function)\b/,h=r(f.exec),d=!f.exec(u),m=function(e){if(!a(e))return!1;try{return p(u,c,e),!0}catch(e){return!1}},g=function(e){if(!a(e))return!1;switch(i(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return d||!!h(f,l(e))}catch(e){return!0}};g.sham=!0,e.exports=!p||o((function(){var e;return m(m.call)||!m(Object)||!m((function(){e=!0}))||e}))?g:m},37252:(e,t,n)=>{var r=n(95981),o=n(57475),a=/#|\.prototype\./,i=function(e,t){var n=l[s(e)];return n==c||n!=u&&(o(t)?r(t):!!t)},s=i.normalize=function(e){return String(e).replace(a,".").toLowerCase()},l=i.data={},u=i.NATIVE="N",c=i.POLYFILL="P";e.exports=i},82119:e=>{e.exports=function(e){return null==e}},10941:(e,t,n)=>{var r=n(57475),o=n(76616),a=o.all;e.exports=o.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:r(e)||e===a}:function(e){return"object"==typeof e?null!==e:r(e)}},82529:e=>{e.exports=!0},60685:(e,t,n)=>{var r=n(10941),o=n(82532),a=n(99813)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[a])?!!t:"RegExp"==o(e))}},56664:(e,t,n)=>{var r=n(626),o=n(57475),a=n(7046),i=n(32302),s=Object;e.exports=i?function(e){return"symbol"==typeof e}:function(e){var t=r("Symbol");return o(t)&&a(t.prototype,s(e))}},93091:(e,t,n)=>{var r=n(86843),o=n(78834),a=n(96059),i=n(69826),s=n(6782),l=n(10623),u=n(7046),c=n(53476),p=n(22902),f=n(7609),h=TypeError,d=function(e,t){this.stopped=e,this.result=t},m=d.prototype;e.exports=function(e,t,n){var g,y,v,b,w,E,x,_=n&&n.that,S=!(!n||!n.AS_ENTRIES),A=!(!n||!n.IS_RECORD),C=!(!n||!n.IS_ITERATOR),k=!(!n||!n.INTERRUPTED),O=r(t,_),j=function(e){return g&&f(g,"normal",e),new d(!0,e)},T=function(e){return S?(a(e),k?O(e[0],e[1],j):O(e[0],e[1])):k?O(e,j):O(e)};if(A)g=e.iterator;else if(C)g=e;else{if(!(y=p(e)))throw h(i(e)+" is not iterable");if(s(y)){for(v=0,b=l(e);b>v;v++)if((w=T(e[v]))&&u(m,w))return w;return new d(!1)}g=c(e,y)}for(E=A?e.next:g.next;!(x=o(E,g)).done;){try{w=T(x.value)}catch(e){f(g,"throw",e)}if("object"==typeof w&&w&&u(m,w))return w}return new d(!1)}},7609:(e,t,n)=>{var r=n(78834),o=n(96059),a=n(14229);e.exports=function(e,t,n){var i,s;o(e);try{if(!(i=a(e,"return"))){if("throw"===t)throw n;return n}i=r(i,e)}catch(e){s=!0,i=e}if("throw"===t)throw n;if(s)throw i;return o(i),n}},53847:(e,t,n)=>{"use strict";var r=n(35143).IteratorPrototype,o=n(29290),a=n(31887),i=n(90904),s=n(12077),l=function(){return this};e.exports=function(e,t,n,u){var c=t+" Iterator";return e.prototype=o(r,{next:a(+!u,n)}),i(e,c,!1,!0),s[c]=l,e}},75105:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(82529),i=n(79417),s=n(57475),l=n(53847),u=n(249),c=n(88929),p=n(90904),f=n(32029),h=n(95929),d=n(99813),m=n(12077),g=n(35143),y=i.PROPER,v=i.CONFIGURABLE,b=g.IteratorPrototype,w=g.BUGGY_SAFARI_ITERATORS,E=d("iterator"),x="keys",_="values",S="entries",A=function(){return this};e.exports=function(e,t,n,i,d,g,C){l(n,t,i);var k,O,j,T=function(e){if(e===d&&M)return M;if(!w&&e in P)return P[e];switch(e){case x:case _:case S:return function(){return new n(this,e)}}return function(){return new n(this)}},I=t+" Iterator",N=!1,P=e.prototype,R=P[E]||P["@@iterator"]||d&&P[d],M=!w&&R||T(d),D="Array"==t&&P.entries||R;if(D&&(k=u(D.call(new e)))!==Object.prototype&&k.next&&(a||u(k)===b||(c?c(k,b):s(k[E])||h(k,E,A)),p(k,I,!0,!0),a&&(m[I]=A)),y&&d==_&&R&&R.name!==_&&(!a&&v?f(P,"name",_):(N=!0,M=function(){return o(R,this)})),d)if(O={values:T(_),keys:g?M:T(x),entries:T(S)},C)for(j in O)(w||N||!(j in P))&&h(P,j,O[j]);else r({target:t,proto:!0,forced:w||N},O);return a&&!C||P[E]===M||h(P,E,M,{name:d}),m[t]=M,O}},35143:(e,t,n)=>{"use strict";var r,o,a,i=n(95981),s=n(57475),l=n(10941),u=n(29290),c=n(249),p=n(95929),f=n(99813),h=n(82529),d=f("iterator"),m=!1;[].keys&&("next"in(a=[].keys())?(o=c(c(a)))!==Object.prototype&&(r=o):m=!0),!l(r)||i((function(){var e={};return r[d].call(e)!==e}))?r={}:h&&(r=u(r)),s(r[d])||p(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},12077:e=>{e.exports={}},10623:(e,t,n)=>{var r=n(43057);e.exports=function(e){return r(e.length)}},35331:e=>{var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},66132:(e,t,n)=>{var r,o,a,i,s,l=n(21899),u=n(86843),c=n(49677).f,p=n(42941).set,f=n(18397),h=n(22749),d=n(4470),m=n(58045),g=n(6049),y=l.MutationObserver||l.WebKitMutationObserver,v=l.document,b=l.process,w=l.Promise,E=c(l,"queueMicrotask"),x=E&&E.value;if(!x){var _=new f,S=function(){var e,t;for(g&&(e=b.domain)&&e.exit();t=_.get();)try{t()}catch(e){throw _.head&&r(),e}e&&e.enter()};h||g||m||!y||!v?!d&&w&&w.resolve?((i=w.resolve(void 0)).constructor=w,s=u(i.then,i),r=function(){s(S)}):g?r=function(){b.nextTick(S)}:(p=u(p,l),r=function(){p(S)}):(o=!0,a=v.createTextNode(""),new y(S).observe(a,{characterData:!0}),r=function(){a.data=o=!o}),x=function(e){_.head||r(),_.add(e)}}e.exports=x},69520:(e,t,n)=>{"use strict";var r=n(24883),o=TypeError,a=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw o("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new a(e)}},14649:(e,t,n)=>{var r=n(85803);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:r(e)}},70344:(e,t,n)=>{var r=n(60685),o=TypeError;e.exports=function(e){if(r(e))throw o("The method doesn't accept regular expressions");return e}},24420:(e,t,n)=>{"use strict";var r=n(55746),o=n(95329),a=n(78834),i=n(95981),s=n(14771),l=n(87857),u=n(36760),c=n(89678),p=n(37026),f=Object.assign,h=Object.defineProperty,d=o([].concat);e.exports=!f||i((function(){if(r&&1!==f({b:1},f(h({},"a",{enumerable:!0,get:function(){h(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o="abcdefghijklmnopqrst";return e[n]=7,o.split("").forEach((function(e){t[e]=e})),7!=f({},e)[n]||s(f({},t)).join("")!=o}))?function(e,t){for(var n=c(e),o=arguments.length,i=1,f=l.f,h=u.f;o>i;)for(var m,g=p(arguments[i++]),y=f?d(s(g),f(g)):s(g),v=y.length,b=0;v>b;)m=y[b++],r&&!a(h,g,m)||(n[m]=g[m]);return n}:f},29290:(e,t,n)=>{var r,o=n(96059),a=n(59938),i=n(56759),s=n(27748),l=n(15463),u=n(61333),c=n(44262),p="prototype",f="script",h=c("IE_PROTO"),d=function(){},m=function(e){return"<"+f+">"+e+""},g=function(e){e.write(m("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject("htmlfile")}catch(e){}var e,t,n;y="undefined"!=typeof document?document.domain&&r?g(r):(t=u("iframe"),n="java"+f+":",t.style.display="none",l.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(m("document.F=Object")),e.close(),e.F):g(r);for(var o=i.length;o--;)delete y[p][i[o]];return y()};s[h]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(d[p]=o(e),n=new d,d[p]=null,n[h]=e):n=y(),void 0===t?n:a.f(n,t)}},59938:(e,t,n)=>{var r=n(55746),o=n(83937),a=n(65988),i=n(96059),s=n(74529),l=n(14771);t.f=r&&!o?Object.defineProperties:function(e,t){i(e);for(var n,r=s(t),o=l(t),u=o.length,c=0;u>c;)a.f(e,n=o[c++],r[n]);return e}},65988:(e,t,n)=>{var r=n(55746),o=n(2840),a=n(83937),i=n(96059),s=n(83894),l=TypeError,u=Object.defineProperty,c=Object.getOwnPropertyDescriptor,p="enumerable",f="configurable",h="writable";t.f=r?a?function(e,t,n){if(i(e),t=s(t),i(n),"function"==typeof e&&"prototype"===t&&"value"in n&&h in n&&!n[h]){var r=c(e,t);r&&r[h]&&(e[t]=n.value,n={configurable:f in n?n[f]:r[f],enumerable:p in n?n[p]:r[p],writable:!1})}return u(e,t,n)}:u:function(e,t,n){if(i(e),t=s(t),i(n),o)try{return u(e,t,n)}catch(e){}if("get"in n||"set"in n)throw l("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},49677:(e,t,n)=>{var r=n(55746),o=n(78834),a=n(36760),i=n(31887),s=n(74529),l=n(83894),u=n(90953),c=n(2840),p=Object.getOwnPropertyDescriptor;t.f=r?p:function(e,t){if(e=s(e),t=l(t),c)try{return p(e,t)}catch(e){}if(u(e,t))return i(!o(a.f,e,t),e[t])}},684:(e,t,n)=>{var r=n(82532),o=n(74529),a=n(10946).f,i=n(15790),s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return s&&"Window"==r(e)?function(e){try{return a(e)}catch(e){return i(s)}}(e):a(o(e))}},10946:(e,t,n)=>{var r=n(55629),o=n(56759).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},87857:(e,t)=>{t.f=Object.getOwnPropertySymbols},249:(e,t,n)=>{var r=n(90953),o=n(57475),a=n(89678),i=n(44262),s=n(64160),l=i("IE_PROTO"),u=Object,c=u.prototype;e.exports=s?u.getPrototypeOf:function(e){var t=a(e);if(r(t,l))return t[l];var n=t.constructor;return o(n)&&t instanceof n?n.prototype:t instanceof u?c:null}},91584:(e,t,n)=>{var r=n(95981),o=n(10941),a=n(82532),i=n(97135),s=Object.isExtensible,l=r((function(){s(1)}));e.exports=l||i?function(e){return!!o(e)&&((!i||"ArrayBuffer"!=a(e))&&(!s||s(e)))}:s},7046:(e,t,n)=>{var r=n(95329);e.exports=r({}.isPrototypeOf)},55629:(e,t,n)=>{var r=n(95329),o=n(90953),a=n(74529),i=n(31692).indexOf,s=n(27748),l=r([].push);e.exports=function(e,t){var n,r=a(e),u=0,c=[];for(n in r)!o(s,n)&&o(r,n)&&l(c,n);for(;t.length>u;)o(r,n=t[u++])&&(~i(c,n)||l(c,n));return c}},14771:(e,t,n)=>{var r=n(55629),o=n(56759);e.exports=Object.keys||function(e){return r(e,o)}},36760:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},88929:(e,t,n)=>{var r=n(45526),o=n(96059),a=n(11851);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=r(Object.prototype,"__proto__","set"))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return o(n),a(r),t?e(n,r):n.__proto__=r,n}}():void 0)},88810:(e,t,n)=>{var r=n(55746),o=n(95329),a=n(14771),i=n(74529),s=o(n(36760).f),l=o([].push),u=function(e){return function(t){for(var n,o=i(t),u=a(o),c=u.length,p=0,f=[];c>p;)n=u[p++],r&&!s(o,n)||l(f,e?[n,o[n]]:o[n]);return f}};e.exports={entries:u(!0),values:u(!1)}},95623:(e,t,n)=>{"use strict";var r=n(22885),o=n(9697);e.exports=r?{}.toString:function(){return"[object "+o(this)+"]"}},39811:(e,t,n)=>{var r=n(78834),o=n(57475),a=n(10941),i=TypeError;e.exports=function(e,t){var n,s;if("string"===t&&o(n=e.toString)&&!a(s=r(n,e)))return s;if(o(n=e.valueOf)&&!a(s=r(n,e)))return s;if("string"!==t&&o(n=e.toString)&&!a(s=r(n,e)))return s;throw i("Can't convert object to primitive value")}},31136:(e,t,n)=>{var r=n(626),o=n(95329),a=n(10946),i=n(87857),s=n(96059),l=o([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=a.f(s(e)),n=i.f;return n?l(t,n(e)):t}},54058:e=>{e.exports={}},40002:e=>{e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},67742:(e,t,n)=>{var r=n(21899),o=n(6991),a=n(57475),i=n(37252),s=n(81302),l=n(99813),u=n(23321),c=n(48501),p=n(82529),f=n(53385),h=o&&o.prototype,d=l("species"),m=!1,g=a(r.PromiseRejectionEvent),y=i("Promise",(function(){var e=s(o),t=e!==String(o);if(!t&&66===f)return!0;if(p&&(!h.catch||!h.finally))return!0;if(!f||f<51||!/native code/.test(e)){var n=new o((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};if((n.constructor={})[d]=r,!(m=n.then((function(){}))instanceof r))return!0}return!t&&(u||c)&&!g}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:g,SUBCLASSING:m}},6991:(e,t,n)=>{var r=n(21899);e.exports=r.Promise},56584:(e,t,n)=>{var r=n(96059),o=n(10941),a=n(69520);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=a.f(e);return(0,n.resolve)(t),n.promise}},31542:(e,t,n)=>{var r=n(6991),o=n(21385),a=n(67742).CONSTRUCTOR;e.exports=a||!o((function(e){r.all(e).then(void 0,(function(){}))}))},18397:e=>{var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},n=this.tail;n?n.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},e.exports=t},48219:(e,t,n)=>{var r=n(82119),o=TypeError;e.exports=function(e){if(r(e))throw o("Can't call method on "+e);return e}},37620:(e,t,n)=>{"use strict";var r,o=n(21899),a=n(79730),i=n(57475),s=n(56491),l=n(2861),u=n(93765),c=n(18348),p=o.Function,f=/MSIE .\./.test(l)||s&&((r=o.Bun.version.split(".")).length<3||0==r[0]&&(r[1]<3||3==r[1]&&0==r[2]));e.exports=function(e,t){var n=t?2:1;return f?function(r,o){var s=c(arguments.length,1)>n,l=i(r)?r:p(r),f=s?u(arguments,n):[],h=s?function(){a(l,this,f)}:l;return t?e(h,o):e(h)}:e}},94431:(e,t,n)=>{"use strict";var r=n(626),o=n(29202),a=n(99813),i=n(55746),s=a("species");e.exports=function(e){var t=r(e);i&&t&&!t[s]&&o(t,s,{configurable:!0,get:function(){return this}})}},90904:(e,t,n)=>{var r=n(22885),o=n(65988).f,a=n(32029),i=n(90953),s=n(95623),l=n(99813)("toStringTag");e.exports=function(e,t,n,u){if(e){var c=n?e:e.prototype;i(c,l)||o(c,l,{configurable:!0,value:t}),u&&!r&&a(c,"toString",s)}}},44262:(e,t,n)=>{var r=n(68726),o=n(99418),a=r("keys");e.exports=function(e){return a[e]||(a[e]=o(e))}},63030:(e,t,n)=>{var r=n(21899),o=n(75609),a="__core-js_shared__",i=r[a]||o(a,{});e.exports=i},68726:(e,t,n)=>{var r=n(82529),o=n(63030);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.28.0",mode:r?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.28.0/LICENSE",source:"https://github.com/zloirock/core-js"})},70487:(e,t,n)=>{var r=n(96059),o=n(174),a=n(82119),i=n(99813)("species");e.exports=function(e,t){var n,s=r(e).constructor;return void 0===s||a(n=r(s)[i])?t:o(n)}},64620:(e,t,n)=>{var r=n(95329),o=n(62435),a=n(85803),i=n(48219),s=r("".charAt),l=r("".charCodeAt),u=r("".slice),c=function(e){return function(t,n){var r,c,p=a(i(t)),f=o(n),h=p.length;return f<0||f>=h?e?"":void 0:(r=l(p,f))<55296||r>56319||f+1===h||(c=l(p,f+1))<56320||c>57343?e?s(p,f):r:e?u(p,f,f+2):c-56320+(r-55296<<10)+65536}};e.exports={codeAt:c(!1),charAt:c(!0)}},73291:(e,t,n)=>{var r=n(95329),o=2147483647,a=/[^\0-\u007E]/,i=/[.\u3002\uFF0E\uFF61]/g,s="Overflow: input needs wider integers to process",l=RangeError,u=r(i.exec),c=Math.floor,p=String.fromCharCode,f=r("".charCodeAt),h=r([].join),d=r([].push),m=r("".replace),g=r("".split),y=r("".toLowerCase),v=function(e){return e+22+75*(e<26)},b=function(e,t,n){var r=0;for(e=n?c(e/700):e>>1,e+=c(e/t);e>455;)e=c(e/35),r+=36;return c(r+36*e/(e+38))},w=function(e){var t=[];e=function(e){for(var t=[],n=0,r=e.length;n=55296&&o<=56319&&n=i&&rc((o-u)/E))throw l(s);for(u+=(w-i)*E,i=w,n=0;no)throw l(s);if(r==i){for(var x=u,_=36;;){var S=_<=m?1:_>=m+26?26:_-m;if(x{"use strict";var r=n(62435),o=n(85803),a=n(48219),i=RangeError;e.exports=function(e){var t=o(a(this)),n="",s=r(e);if(s<0||s==1/0)throw i("Wrong number of repetitions");for(;s>0;(s>>>=1)&&(t+=t))1&s&&(n+=t);return n}},93093:(e,t,n)=>{var r=n(79417).PROPER,o=n(95981),a=n(73483);e.exports=function(e){return o((function(){return!!a[e]()||"​…᠎"!=="​…᠎"[e]()||r&&a[e].name!==e}))}},74853:(e,t,n)=>{var r=n(95329),o=n(48219),a=n(85803),i=n(73483),s=r("".replace),l=RegExp("^["+i+"]+"),u=RegExp("(^|[^"+i+"])["+i+"]+$"),c=function(e){return function(t){var n=a(o(t));return 1&e&&(n=s(n,l,"")),2&e&&(n=s(n,u,"$1")),n}};e.exports={start:c(1),end:c(2),trim:c(3)}},63405:(e,t,n)=>{var r=n(53385),o=n(95981);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},29630:(e,t,n)=>{var r=n(78834),o=n(626),a=n(99813),i=n(95929);e.exports=function(){var e=o("Symbol"),t=e&&e.prototype,n=t&&t.valueOf,s=a("toPrimitive");t&&!t[s]&&i(t,s,(function(e){return r(n,this)}),{arity:1})}},34680:(e,t,n)=>{var r=n(63405);e.exports=r&&!!Symbol.for&&!!Symbol.keyFor},42941:(e,t,n)=>{var r,o,a,i,s=n(21899),l=n(79730),u=n(86843),c=n(57475),p=n(90953),f=n(95981),h=n(15463),d=n(93765),m=n(61333),g=n(18348),y=n(22749),v=n(6049),b=s.setImmediate,w=s.clearImmediate,E=s.process,x=s.Dispatch,_=s.Function,S=s.MessageChannel,A=s.String,C=0,k={},O="onreadystatechange";f((function(){r=s.location}));var j=function(e){if(p(k,e)){var t=k[e];delete k[e],t()}},T=function(e){return function(){j(e)}},I=function(e){j(e.data)},N=function(e){s.postMessage(A(e),r.protocol+"//"+r.host)};b&&w||(b=function(e){g(arguments.length,1);var t=c(e)?e:_(e),n=d(arguments,1);return k[++C]=function(){l(t,void 0,n)},o(C),C},w=function(e){delete k[e]},v?o=function(e){E.nextTick(T(e))}:x&&x.now?o=function(e){x.now(T(e))}:S&&!y?(i=(a=new S).port2,a.port1.onmessage=I,o=u(i.postMessage,i)):s.addEventListener&&c(s.postMessage)&&!s.importScripts&&r&&"file:"!==r.protocol&&!f(N)?(o=N,s.addEventListener("message",I,!1)):o=O in m("script")?function(e){h.appendChild(m("script"))[O]=function(){h.removeChild(this),j(e)}}:function(e){setTimeout(T(e),0)}),e.exports={set:b,clear:w}},59413:(e,t,n)=>{var r=n(62435),o=Math.max,a=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):a(n,t)}},74529:(e,t,n)=>{var r=n(37026),o=n(48219);e.exports=function(e){return r(o(e))}},62435:(e,t,n)=>{var r=n(35331);e.exports=function(e){var t=+e;return t!=t||0===t?0:r(t)}},43057:(e,t,n)=>{var r=n(62435),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},89678:(e,t,n)=>{var r=n(48219),o=Object;e.exports=function(e){return o(r(e))}},46935:(e,t,n)=>{var r=n(78834),o=n(10941),a=n(56664),i=n(14229),s=n(39811),l=n(99813),u=TypeError,c=l("toPrimitive");e.exports=function(e,t){if(!o(e)||a(e))return e;var n,l=i(e,c);if(l){if(void 0===t&&(t="default"),n=r(l,e,t),!o(n)||a(n))return n;throw u("Can't convert object to primitive value")}return void 0===t&&(t="number"),s(e,t)}},83894:(e,t,n)=>{var r=n(46935),o=n(56664);e.exports=function(e){var t=r(e,"string");return o(t)?t:t+""}},22885:(e,t,n)=>{var r={};r[n(99813)("toStringTag")]="z",e.exports="[object z]"===String(r)},85803:(e,t,n)=>{var r=n(9697),o=String;e.exports=function(e){if("Symbol"===r(e))throw TypeError("Cannot convert a Symbol value to a string");return o(e)}},69826:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},99418:(e,t,n)=>{var r=n(95329),o=0,a=Math.random(),i=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+i(++o+a,36)}},14766:(e,t,n)=>{var r=n(95981),o=n(99813),a=n(82529),i=o("iterator");e.exports=!r((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,r){t.delete("b"),n+=r+e})),a&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[i]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},32302:(e,t,n)=>{var r=n(63405);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},83937:(e,t,n)=>{var r=n(55746),o=n(95981);e.exports=r&&o((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},18348:e=>{var t=TypeError;e.exports=function(e,n){if(e{var r=n(21899),o=n(57475),a=r.WeakMap;e.exports=o(a)&&/native code/.test(String(a))},73464:(e,t,n)=>{var r=n(54058),o=n(90953),a=n(11477),i=n(65988).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||i(t,e,{value:a.f(e)})}},11477:(e,t,n)=>{var r=n(99813);t.f=r},99813:(e,t,n)=>{var r=n(21899),o=n(68726),a=n(90953),i=n(99418),s=n(63405),l=n(32302),u=r.Symbol,c=o("wks"),p=l?u.for||u:u&&u.withoutSetter||i;e.exports=function(e){return a(c,e)||(c[e]=s&&a(u,e)?u[e]:p("Symbol."+e)),c[e]}},73483:e=>{e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},49812:(e,t,n)=>{"use strict";var r=n(76887),o=n(7046),a=n(249),i=n(88929),s=n(23489),l=n(29290),u=n(32029),c=n(31887),p=n(53794),f=n(79585),h=n(93091),d=n(14649),m=n(99813)("toStringTag"),g=Error,y=[].push,v=function(e,t){var n,r=o(b,this);i?n=i(g(),r?a(this):b):(n=r?this:l(b),u(n,m,"Error")),void 0!==t&&u(n,"message",d(t)),f(n,v,n.stack,1),arguments.length>2&&p(n,arguments[2]);var s=[];return h(e,y,{that:s}),u(n,"errors",s),n};i?i(v,g):s(v,g,{name:!0});var b=v.prototype=l(g.prototype,{constructor:c(1,v),message:c(1,""),name:c(1,"AggregateError")});r({global:!0,constructor:!0,arity:2},{AggregateError:v})},47627:(e,t,n)=>{n(49812)},85906:(e,t,n)=>{"use strict";var r=n(76887),o=n(95981),a=n(1052),i=n(10941),s=n(89678),l=n(10623),u=n(66796),c=n(55449),p=n(64692),f=n(50568),h=n(99813),d=n(53385),m=h("isConcatSpreadable"),g=d>=51||!o((function(){var e=[];return e[m]=!1,e.concat()[0]!==e})),y=function(e){if(!i(e))return!1;var t=e[m];return void 0!==t?!!t:a(e)};r({target:"Array",proto:!0,arity:1,forced:!g||!f("concat")},{concat:function(e){var t,n,r,o,a,i=s(this),f=p(i,0),h=0;for(t=-1,r=arguments.length;t{"use strict";var r=n(76887),o=n(3610).every;r({target:"Array",proto:!0,forced:!n(34194)("every")},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},80290:(e,t,n)=>{var r=n(76887),o=n(91860),a=n(18479);r({target:"Array",proto:!0},{fill:o}),a("fill")},21501:(e,t,n)=>{"use strict";var r=n(76887),o=n(3610).filter;r({target:"Array",proto:!0,forced:!n(50568)("filter")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},44929:(e,t,n)=>{"use strict";var r=n(76887),o=n(3610).findIndex,a=n(18479),i="findIndex",s=!0;i in[]&&Array(1)[i]((function(){s=!1})),r({target:"Array",proto:!0,forced:s},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),a(i)},80833:(e,t,n)=>{"use strict";var r=n(76887),o=n(3610).find,a=n(18479),i="find",s=!0;i in[]&&Array(1)[i]((function(){s=!1})),r({target:"Array",proto:!0,forced:s},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),a(i)},2437:(e,t,n)=>{"use strict";var r=n(76887),o=n(56837);r({target:"Array",proto:!0,forced:[].forEach!=o},{forEach:o})},53242:(e,t,n)=>{var r=n(76887),o=n(11354);r({target:"Array",stat:!0,forced:!n(21385)((function(e){Array.from(e)}))},{from:o})},97690:(e,t,n)=>{"use strict";var r=n(76887),o=n(31692).includes,a=n(95981),i=n(18479);r({target:"Array",proto:!0,forced:a((function(){return!Array(1).includes()}))},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i("includes")},99076:(e,t,n)=>{"use strict";var r=n(76887),o=n(97484),a=n(31692).indexOf,i=n(34194),s=o([].indexOf),l=!!s&&1/s([1],1,-0)<0;r({target:"Array",proto:!0,forced:l||!i("indexOf")},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return l?s(this,e,t)||0:a(this,e,t)}})},92737:(e,t,n)=>{n(76887)({target:"Array",stat:!0},{isArray:n(1052)})},66274:(e,t,n)=>{"use strict";var r=n(74529),o=n(18479),a=n(12077),i=n(45402),s=n(65988).f,l=n(75105),u=n(23538),c=n(82529),p=n(55746),f="Array Iterator",h=i.set,d=i.getterFor(f);e.exports=l(Array,"Array",(function(e,t){h(this,{type:f,target:r(e),index:0,kind:t})}),(function(){var e=d(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,u(void 0,!0)):u("keys"==n?r:"values"==n?t[r]:[r,t[r]],!1)}),"values");var m=a.Arguments=a.Array;if(o("keys"),o("values"),o("entries"),!c&&p&&"values"!==m.name)try{s(m,"name",{value:"values"})}catch(e){}},75915:(e,t,n)=>{var r=n(76887),o=n(67145);r({target:"Array",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},68787:(e,t,n)=>{"use strict";var r=n(76887),o=n(3610).map;r({target:"Array",proto:!0,forced:!n(50568)("map")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},81876:(e,t,n)=>{"use strict";var r=n(76887),o=n(46499).left,a=n(34194),i=n(53385);r({target:"Array",proto:!0,forced:!n(6049)&&i>79&&i<83||!a("reduce")},{reduce:function(e){var t=arguments.length;return o(this,e,t,t>1?arguments[1]:void 0)}})},60186:(e,t,n)=>{"use strict";var r=n(76887),o=n(1052),a=n(24284),i=n(10941),s=n(59413),l=n(10623),u=n(74529),c=n(55449),p=n(99813),f=n(50568),h=n(93765),d=f("slice"),m=p("species"),g=Array,y=Math.max;r({target:"Array",proto:!0,forced:!d},{slice:function(e,t){var n,r,p,f=u(this),d=l(f),v=s(e,d),b=s(void 0===t?d:t,d);if(o(f)&&(n=f.constructor,(a(n)&&(n===g||o(n.prototype))||i(n)&&null===(n=n[m]))&&(n=void 0),n===g||void 0===n))return h(f,v,b);for(r=new(void 0===n?g:n)(y(b-v,0)),p=0;v{"use strict";var r=n(76887),o=n(3610).some;r({target:"Array",proto:!0,forced:!n(34194)("some")},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},4115:(e,t,n)=>{"use strict";var r=n(76887),o=n(95329),a=n(24883),i=n(89678),s=n(10623),l=n(15863),u=n(85803),c=n(95981),p=n(61388),f=n(34194),h=n(34342),d=n(81046),m=n(53385),g=n(18938),y=[],v=o(y.sort),b=o(y.push),w=c((function(){y.sort(void 0)})),E=c((function(){y.sort(null)})),x=f("sort"),_=!c((function(){if(m)return m<70;if(!(h&&h>3)){if(d)return!0;if(g)return g<603;var e,t,n,r,o="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)y.push({k:t+r,v:n})}for(y.sort((function(e,t){return t.v-e.v})),r=0;ru(n)?1:-1}}(e)),n=s(o),r=0;r{"use strict";var r=n(76887),o=n(89678),a=n(59413),i=n(62435),s=n(10623),l=n(89779),u=n(66796),c=n(64692),p=n(55449),f=n(15863),h=n(50568)("splice"),d=Math.max,m=Math.min;r({target:"Array",proto:!0,forced:!h},{splice:function(e,t){var n,r,h,g,y,v,b=o(this),w=s(b),E=a(e,w),x=arguments.length;for(0===x?n=r=0:1===x?(n=0,r=w-E):(n=x-2,r=m(d(i(t),0),w-E)),u(w+n-r),h=c(b,r),g=0;gw-r+n;g--)f(b,g-1)}else if(n>r)for(g=w-r;g>E;g--)v=g+n-1,(y=g+r-1)in b?b[v]=b[y]:f(b,v);for(g=0;g{var r=n(76887),o=n(95329),a=Date,i=o(a.prototype.getTime);r({target:"Date",stat:!0},{now:function(){return i(new a)}})},18084:()=>{},73381:(e,t,n)=>{var r=n(76887),o=n(98308);r({target:"Function",proto:!0,forced:Function.bind!==o},{bind:o})},32619:(e,t,n)=>{var r=n(76887),o=n(626),a=n(79730),i=n(78834),s=n(95329),l=n(95981),u=n(57475),c=n(56664),p=n(93765),f=n(33323),h=n(63405),d=String,m=o("JSON","stringify"),g=s(/./.exec),y=s("".charAt),v=s("".charCodeAt),b=s("".replace),w=s(1..toString),E=/[\uD800-\uDFFF]/g,x=/^[\uD800-\uDBFF]$/,_=/^[\uDC00-\uDFFF]$/,S=!h||l((function(){var e=o("Symbol")();return"[null]"!=m([e])||"{}"!=m({a:e})||"{}"!=m(Object(e))})),A=l((function(){return'"\\udf06\\ud834"'!==m("\udf06\ud834")||'"\\udead"'!==m("\udead")})),C=function(e,t){var n=p(arguments),r=f(t);if(u(r)||void 0!==e&&!c(e))return n[1]=function(e,t){if(u(r)&&(t=i(r,this,d(e),t)),!c(t))return t},a(m,null,n)},k=function(e,t,n){var r=y(n,t-1),o=y(n,t+1);return g(x,e)&&!g(_,o)||g(_,e)&&!g(x,r)?"\\u"+w(v(e,0),16):e};m&&r({target:"JSON",stat:!0,arity:3,forced:S||A},{stringify:function(e,t,n){var r=p(arguments),o=a(S?C:m,null,r);return A&&"string"==typeof o?b(o,E,k):o}})},69120:(e,t,n)=>{var r=n(21899);n(90904)(r.JSON,"JSON",!0)},23112:(e,t,n)=>{"use strict";n(24683)("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(85616))},37501:(e,t,n)=>{n(23112)},79413:()=>{},49221:(e,t,n)=>{var r=n(76887),o=n(24420);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},74979:(e,t,n)=>{var r=n(76887),o=n(55746),a=n(59938).f;r({target:"Object",stat:!0,forced:Object.defineProperties!==a,sham:!o},{defineProperties:a})},86450:(e,t,n)=>{var r=n(76887),o=n(55746),a=n(65988).f;r({target:"Object",stat:!0,forced:Object.defineProperty!==a,sham:!o},{defineProperty:a})},46924:(e,t,n)=>{var r=n(76887),o=n(95981),a=n(74529),i=n(49677).f,s=n(55746);r({target:"Object",stat:!0,forced:!s||o((function(){i(1)})),sham:!s},{getOwnPropertyDescriptor:function(e,t){return i(a(e),t)}})},88482:(e,t,n)=>{var r=n(76887),o=n(55746),a=n(31136),i=n(74529),s=n(49677),l=n(55449);r({target:"Object",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),o=s.f,u=a(r),c={},p=0;u.length>p;)void 0!==(n=o(r,t=u[p++]))&&l(c,t,n);return c}})},37144:(e,t,n)=>{var r=n(76887),o=n(63405),a=n(95981),i=n(87857),s=n(89678);r({target:"Object",stat:!0,forced:!o||a((function(){i.f(1)}))},{getOwnPropertySymbols:function(e){var t=i.f;return t?t(s(e)):[]}})},21724:(e,t,n)=>{var r=n(76887),o=n(89678),a=n(14771);r({target:"Object",stat:!0,forced:n(95981)((function(){a(1)}))},{keys:function(e){return a(o(e))}})},55967:()=>{},26614:(e,t,n)=>{var r=n(76887),o=n(88810).values;r({target:"Object",stat:!0},{values:function(e){return o(e)}})},4560:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(24883),i=n(69520),s=n(40002),l=n(93091);r({target:"Promise",stat:!0,forced:n(31542)},{allSettled:function(e){var t=this,n=i.f(t),r=n.resolve,u=n.reject,c=s((function(){var n=a(t.resolve),i=[],s=0,u=1;l(e,(function(e){var a=s++,l=!1;u++,o(n,t,e).then((function(e){l||(l=!0,i[a]={status:"fulfilled",value:e},--u||r(i))}),(function(e){l||(l=!0,i[a]={status:"rejected",reason:e},--u||r(i))}))})),--u||r(i)}));return c.error&&u(c.value),n.promise}})},16890:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(24883),i=n(69520),s=n(40002),l=n(93091);r({target:"Promise",stat:!0,forced:n(31542)},{all:function(e){var t=this,n=i.f(t),r=n.resolve,u=n.reject,c=s((function(){var n=a(t.resolve),i=[],s=0,c=1;l(e,(function(e){var a=s++,l=!1;c++,o(n,t,e).then((function(e){l||(l=!0,i[a]=e,--c||r(i))}),u)})),--c||r(i)}));return c.error&&u(c.value),n.promise}})},91302:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(24883),i=n(626),s=n(69520),l=n(40002),u=n(93091),c=n(31542),p="No one promise resolved";r({target:"Promise",stat:!0,forced:c},{any:function(e){var t=this,n=i("AggregateError"),r=s.f(t),c=r.resolve,f=r.reject,h=l((function(){var r=a(t.resolve),i=[],s=0,l=1,h=!1;u(e,(function(e){var a=s++,u=!1;l++,o(r,t,e).then((function(e){u||h||(h=!0,c(e))}),(function(e){u||h||(u=!0,i[a]=e,--l||f(new n(i,p)))}))})),--l||f(new n(i,p))}));return h.error&&f(h.value),r.promise}})},83376:(e,t,n)=>{"use strict";var r=n(76887),o=n(82529),a=n(67742).CONSTRUCTOR,i=n(6991),s=n(626),l=n(57475),u=n(95929),c=i&&i.prototype;if(r({target:"Promise",proto:!0,forced:a,real:!0},{catch:function(e){return this.then(void 0,e)}}),!o&&l(i)){var p=s("Promise").prototype.catch;c.catch!==p&&u(c,"catch",p,{unsafe:!0})}},26934:(e,t,n)=>{"use strict";var r,o,a,i=n(76887),s=n(82529),l=n(6049),u=n(21899),c=n(78834),p=n(95929),f=n(88929),h=n(90904),d=n(94431),m=n(24883),g=n(57475),y=n(10941),v=n(5743),b=n(70487),w=n(42941).set,E=n(66132),x=n(34845),_=n(40002),S=n(18397),A=n(45402),C=n(6991),k=n(67742),O=n(69520),j="Promise",T=k.CONSTRUCTOR,I=k.REJECTION_EVENT,N=k.SUBCLASSING,P=A.getterFor(j),R=A.set,M=C&&C.prototype,D=C,L=M,B=u.TypeError,F=u.document,U=u.process,z=O.f,q=z,$=!!(F&&F.createEvent&&u.dispatchEvent),V="unhandledrejection",W=function(e){var t;return!(!y(e)||!g(t=e.then))&&t},H=function(e,t){var n,r,o,a=t.value,i=1==t.state,s=i?e.ok:e.fail,l=e.resolve,u=e.reject,p=e.domain;try{s?(i||(2===t.rejection&&Y(t),t.rejection=1),!0===s?n=a:(p&&p.enter(),n=s(a),p&&(p.exit(),o=!0)),n===e.promise?u(B("Promise-chain cycle")):(r=W(n))?c(r,n,l,u):l(n)):u(a)}catch(e){p&&!o&&p.exit(),u(e)}},J=function(e,t){e.notified||(e.notified=!0,E((function(){for(var n,r=e.reactions;n=r.get();)H(n,e);e.notified=!1,t&&!e.rejection&&G(e)})))},K=function(e,t,n){var r,o;$?((r=F.createEvent("Event")).promise=t,r.reason=n,r.initEvent(e,!1,!0),u.dispatchEvent(r)):r={promise:t,reason:n},!I&&(o=u["on"+e])?o(r):e===V&&x("Unhandled promise rejection",n)},G=function(e){c(w,u,(function(){var t,n=e.facade,r=e.value;if(Z(e)&&(t=_((function(){l?U.emit("unhandledRejection",r,n):K(V,n,r)})),e.rejection=l||Z(e)?2:1,t.error))throw t.value}))},Z=function(e){return 1!==e.rejection&&!e.parent},Y=function(e){c(w,u,(function(){var t=e.facade;l?U.emit("rejectionHandled",t):K("rejectionhandled",t,e.value)}))},Q=function(e,t,n){return function(r){e(t,r,n)}},X=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,J(e,!0))},ee=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw B("Promise can't be resolved itself");var r=W(t);r?E((function(){var n={done:!1};try{c(r,t,Q(ee,n,e),Q(X,n,e))}catch(t){X(n,t,e)}})):(e.value=t,e.state=1,J(e,!1))}catch(t){X({done:!1},t,e)}}};if(T&&(L=(D=function(e){v(this,L),m(e),c(r,this);var t=P(this);try{e(Q(ee,t),Q(X,t))}catch(e){X(t,e)}}).prototype,(r=function(e){R(this,{type:j,done:!1,notified:!1,parent:!1,reactions:new S,rejection:!1,state:0,value:void 0})}).prototype=p(L,"then",(function(e,t){var n=P(this),r=z(b(this,D));return n.parent=!0,r.ok=!g(e)||e,r.fail=g(t)&&t,r.domain=l?U.domain:void 0,0==n.state?n.reactions.add(r):E((function(){H(r,n)})),r.promise})),o=function(){var e=new r,t=P(e);this.promise=e,this.resolve=Q(ee,t),this.reject=Q(X,t)},O.f=z=function(e){return e===D||undefined===e?new o(e):q(e)},!s&&g(C)&&M!==Object.prototype)){a=M.then,N||p(M,"then",(function(e,t){var n=this;return new D((function(e,t){c(a,n,e,t)})).then(e,t)}),{unsafe:!0});try{delete M.constructor}catch(e){}f&&f(M,L)}i({global:!0,constructor:!0,wrap:!0,forced:T},{Promise:D}),h(D,j,!1,!0),d(j)},44349:(e,t,n)=>{"use strict";var r=n(76887),o=n(82529),a=n(6991),i=n(95981),s=n(626),l=n(57475),u=n(70487),c=n(56584),p=n(95929),f=a&&a.prototype;if(r({target:"Promise",proto:!0,real:!0,forced:!!a&&i((function(){f.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=u(this,s("Promise")),n=l(e);return this.then(n?function(n){return c(t,e()).then((function(){return n}))}:e,n?function(n){return c(t,e()).then((function(){throw n}))}:e)}}),!o&&l(a)){var h=s("Promise").prototype.finally;f.finally!==h&&p(f,"finally",h,{unsafe:!0})}},98881:(e,t,n)=>{n(26934),n(16890),n(83376),n(55921),n(64069),n(14482)},55921:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(24883),i=n(69520),s=n(40002),l=n(93091);r({target:"Promise",stat:!0,forced:n(31542)},{race:function(e){var t=this,n=i.f(t),r=n.reject,u=s((function(){var i=a(t.resolve);l(e,(function(e){o(i,t,e).then(n.resolve,r)}))}));return u.error&&r(u.value),n.promise}})},64069:(e,t,n)=>{"use strict";var r=n(76887),o=n(78834),a=n(69520);r({target:"Promise",stat:!0,forced:n(67742).CONSTRUCTOR},{reject:function(e){var t=a.f(this);return o(t.reject,void 0,e),t.promise}})},14482:(e,t,n)=>{"use strict";var r=n(76887),o=n(626),a=n(82529),i=n(6991),s=n(67742).CONSTRUCTOR,l=n(56584),u=o("Promise"),c=a&&!s;r({target:"Promise",stat:!0,forced:a||s},{resolve:function(e){return l(c&&this===u?i:this,e)}})},1502:()=>{},11035:(e,t,n)=>{"use strict";var r=n(76887),o=n(95329),a=n(70344),i=n(48219),s=n(85803),l=n(67772),u=o("".indexOf);r({target:"String",proto:!0,forced:!l("includes")},{includes:function(e){return!!~u(s(i(this)),s(a(e)),arguments.length>1?arguments[1]:void 0)}})},77971:(e,t,n)=>{"use strict";var r=n(64620).charAt,o=n(85803),a=n(45402),i=n(75105),s=n(23538),l="String Iterator",u=a.set,c=a.getterFor(l);i(String,"String",(function(e){u(this,{type:l,string:o(e),index:0})}),(function(){var e,t=c(this),n=t.string,o=t.index;return o>=n.length?s(void 0,!0):(e=r(n,o),t.index+=e.length,s(e,!1))}))},60986:(e,t,n)=>{n(76887)({target:"String",proto:!0},{repeat:n(16178)})},94761:(e,t,n)=>{"use strict";var r,o=n(76887),a=n(97484),i=n(49677).f,s=n(43057),l=n(85803),u=n(70344),c=n(48219),p=n(67772),f=n(82529),h=a("".startsWith),d=a("".slice),m=Math.min,g=p("startsWith");o({target:"String",proto:!0,forced:!!(f||g||(r=i(String.prototype,"startsWith"),!r||r.writable))&&!g},{startsWith:function(e){var t=l(c(this));u(e);var n=s(m(arguments.length>1?arguments[1]:void 0,t.length)),r=l(e);return h?h(t,r,n):d(t,n,n+r.length)===r}})},57398:(e,t,n)=>{"use strict";var r=n(76887),o=n(74853).trim;r({target:"String",proto:!0,forced:n(93093)("trim")},{trim:function(){return o(this)}})},8555:(e,t,n)=>{n(73464)("asyncIterator")},48616:(e,t,n)=>{"use strict";var r=n(76887),o=n(21899),a=n(78834),i=n(95329),s=n(82529),l=n(55746),u=n(63405),c=n(95981),p=n(90953),f=n(7046),h=n(96059),d=n(74529),m=n(83894),g=n(85803),y=n(31887),v=n(29290),b=n(14771),w=n(10946),E=n(684),x=n(87857),_=n(49677),S=n(65988),A=n(59938),C=n(36760),k=n(95929),O=n(29202),j=n(68726),T=n(44262),I=n(27748),N=n(99418),P=n(99813),R=n(11477),M=n(73464),D=n(29630),L=n(90904),B=n(45402),F=n(3610).forEach,U=T("hidden"),z="Symbol",q="prototype",$=B.set,V=B.getterFor(z),W=Object[q],H=o.Symbol,J=H&&H[q],K=o.TypeError,G=o.QObject,Z=_.f,Y=S.f,Q=E.f,X=C.f,ee=i([].push),te=j("symbols"),ne=j("op-symbols"),re=j("wks"),oe=!G||!G[q]||!G[q].findChild,ae=l&&c((function(){return 7!=v(Y({},"a",{get:function(){return Y(this,"a",{value:7}).a}})).a}))?function(e,t,n){var r=Z(W,t);r&&delete W[t],Y(e,t,n),r&&e!==W&&Y(W,t,r)}:Y,ie=function(e,t){var n=te[e]=v(J);return $(n,{type:z,tag:e,description:t}),l||(n.description=t),n},se=function(e,t,n){e===W&&se(ne,t,n),h(e);var r=m(t);return h(n),p(te,r)?(n.enumerable?(p(e,U)&&e[U][r]&&(e[U][r]=!1),n=v(n,{enumerable:y(0,!1)})):(p(e,U)||Y(e,U,y(1,{})),e[U][r]=!0),ae(e,r,n)):Y(e,r,n)},le=function(e,t){h(e);var n=d(t),r=b(n).concat(fe(n));return F(r,(function(t){l&&!a(ue,n,t)||se(e,t,n[t])})),e},ue=function(e){var t=m(e),n=a(X,this,t);return!(this===W&&p(te,t)&&!p(ne,t))&&(!(n||!p(this,t)||!p(te,t)||p(this,U)&&this[U][t])||n)},ce=function(e,t){var n=d(e),r=m(t);if(n!==W||!p(te,r)||p(ne,r)){var o=Z(n,r);return!o||!p(te,r)||p(n,U)&&n[U][r]||(o.enumerable=!0),o}},pe=function(e){var t=Q(d(e)),n=[];return F(t,(function(e){p(te,e)||p(I,e)||ee(n,e)})),n},fe=function(e){var t=e===W,n=Q(t?ne:d(e)),r=[];return F(n,(function(e){!p(te,e)||t&&!p(W,e)||ee(r,te[e])})),r};u||(k(J=(H=function(){if(f(J,this))throw K("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?g(arguments[0]):void 0,t=N(e),n=function(e){this===W&&a(n,ne,e),p(this,U)&&p(this[U],t)&&(this[U][t]=!1),ae(this,t,y(1,e))};return l&&oe&&ae(W,t,{configurable:!0,set:n}),ie(t,e)})[q],"toString",(function(){return V(this).tag})),k(H,"withoutSetter",(function(e){return ie(N(e),e)})),C.f=ue,S.f=se,A.f=le,_.f=ce,w.f=E.f=pe,x.f=fe,R.f=function(e){return ie(P(e),e)},l&&(O(J,"description",{configurable:!0,get:function(){return V(this).description}}),s||k(W,"propertyIsEnumerable",ue,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!u,sham:!u},{Symbol:H}),F(b(re),(function(e){M(e)})),r({target:z,stat:!0,forced:!u},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),r({target:"Object",stat:!0,forced:!u,sham:!l},{create:function(e,t){return void 0===t?v(e):le(v(e),t)},defineProperty:se,defineProperties:le,getOwnPropertyDescriptor:ce}),r({target:"Object",stat:!0,forced:!u},{getOwnPropertyNames:pe}),D(),L(H,z),I[U]=!0},52615:()=>{},64523:(e,t,n)=>{var r=n(76887),o=n(626),a=n(90953),i=n(85803),s=n(68726),l=n(34680),u=s("string-to-symbol-registry"),c=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!l},{for:function(e){var t=i(e);if(a(u,t))return u[t];var n=o("Symbol")(t);return u[t]=n,c[n]=t,n}})},21732:(e,t,n)=>{n(73464)("hasInstance")},35903:(e,t,n)=>{n(73464)("isConcatSpreadable")},1825:(e,t,n)=>{n(73464)("iterator")},35824:(e,t,n)=>{n(48616),n(64523),n(38608),n(32619),n(37144)},38608:(e,t,n)=>{var r=n(76887),o=n(90953),a=n(56664),i=n(69826),s=n(68726),l=n(34680),u=s("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!l},{keyFor:function(e){if(!a(e))throw TypeError(i(e)+" is not a symbol");if(o(u,e))return u[e]}})},45915:(e,t,n)=>{n(73464)("matchAll")},28394:(e,t,n)=>{n(73464)("match")},61766:(e,t,n)=>{n(73464)("replace")},62737:(e,t,n)=>{n(73464)("search")},89911:(e,t,n)=>{n(73464)("species")},74315:(e,t,n)=>{n(73464)("split")},63131:(e,t,n)=>{var r=n(73464),o=n(29630);r("toPrimitive"),o()},64714:(e,t,n)=>{var r=n(626),o=n(73464),a=n(90904);o("toStringTag"),a(r("Symbol"),"Symbol")},70659:(e,t,n)=>{n(73464)("unscopables")},28783:(e,t,n)=>{n(73464)("asyncDispose")},43975:(e,t,n)=>{n(73464)("dispose")},22731:(e,t,n)=>{var r=n(76887),o=n(626),a=n(95329),i=o("Symbol"),s=i.keyFor,l=a(i.prototype.valueOf);r({target:"Symbol",stat:!0},{isRegistered:function(e){try{return void 0!==s(l(e))}catch(e){return!1}}})},85605:(e,t,n)=>{for(var r=n(76887),o=n(68726),a=n(626),i=n(95329),s=n(56664),l=n(99813),u=a("Symbol"),c=u.isWellKnown,p=a("Object","getOwnPropertyNames"),f=i(u.prototype.valueOf),h=o("wks"),d=0,m=p(u),g=m.length;d{n(73464)("matcher")},31943:(e,t,n)=>{n(73464)("metadataKey")},45414:(e,t,n)=>{n(73464)("metadata")},46774:(e,t,n)=>{n(73464)("observable")},80620:(e,t,n)=>{n(73464)("patternMatch")},36172:(e,t,n)=>{n(73464)("replaceAll")},7634:(e,t,n)=>{n(66274);var r=n(63281),o=n(21899),a=n(9697),i=n(32029),s=n(12077),l=n(99813)("toStringTag");for(var u in r){var c=o[u],p=c&&c.prototype;p&&a(p)!==l&&i(p,l,u),s[u]=s.Array}},79229:(e,t,n)=>{var r=n(76887),o=n(21899),a=n(37620)(o.setInterval,!0);r({global:!0,bind:!0,forced:o.setInterval!==a},{setInterval:a})},17749:(e,t,n)=>{var r=n(76887),o=n(21899),a=n(37620)(o.setTimeout,!0);r({global:!0,bind:!0,forced:o.setTimeout!==a},{setTimeout:a})},71249:(e,t,n)=>{n(79229),n(17749)},62524:(e,t,n)=>{"use strict";n(66274);var r=n(76887),o=n(21899),a=n(78834),i=n(95329),s=n(55746),l=n(14766),u=n(95929),c=n(94380),p=n(90904),f=n(53847),h=n(45402),d=n(5743),m=n(57475),g=n(90953),y=n(86843),v=n(9697),b=n(96059),w=n(10941),E=n(85803),x=n(29290),_=n(31887),S=n(53476),A=n(22902),C=n(18348),k=n(99813),O=n(61388),j=k("iterator"),T="URLSearchParams",I=T+"Iterator",N=h.set,P=h.getterFor(T),R=h.getterFor(I),M=Object.getOwnPropertyDescriptor,D=function(e){if(!s)return o[e];var t=M(o,e);return t&&t.value},L=D("fetch"),B=D("Request"),F=D("Headers"),U=B&&B.prototype,z=F&&F.prototype,q=o.RegExp,$=o.TypeError,V=o.decodeURIComponent,W=o.encodeURIComponent,H=i("".charAt),J=i([].join),K=i([].push),G=i("".replace),Z=i([].shift),Y=i([].splice),Q=i("".split),X=i("".slice),ee=/\+/g,te=Array(4),ne=function(e){return te[e-1]||(te[e-1]=q("((?:%[\\da-f]{2}){"+e+"})","gi"))},re=function(e){try{return V(e)}catch(t){return e}},oe=function(e){var t=G(e,ee," "),n=4;try{return V(t)}catch(e){for(;n;)t=G(t,ne(n--),re);return t}},ae=/[!'()~]|%20/g,ie={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},se=function(e){return ie[e]},le=function(e){return G(W(e),ae,se)},ue=f((function(e,t){N(this,{type:I,iterator:S(P(e).entries),kind:t})}),"Iterator",(function(){var e=R(this),t=e.kind,n=e.iterator.next(),r=n.value;return n.done||(n.value="keys"===t?r.key:"values"===t?r.value:[r.key,r.value]),n}),!0),ce=function(e){this.entries=[],this.url=null,void 0!==e&&(w(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===H(e,0)?X(e,1):e:E(e)))};ce.prototype={type:T,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,o,i,s,l,u=A(e);if(u)for(n=(t=S(e,u)).next;!(r=a(n,t)).done;){if(i=(o=S(b(r.value))).next,(s=a(i,o)).done||(l=a(i,o)).done||!a(i,o).done)throw $("Expected sequence with length 2");K(this.entries,{key:E(s.value),value:E(l.value)})}else for(var c in e)g(e,c)&&K(this.entries,{key:c,value:E(e[c])})},parseQuery:function(e){if(e)for(var t,n,r=Q(e,"&"),o=0;o0?arguments[0]:void 0))},fe=pe.prototype;if(c(fe,{append:function(e,t){C(arguments.length,2);var n=P(this);K(n.entries,{key:E(e),value:E(t)}),n.updateURL()},delete:function(e){C(arguments.length,1);for(var t=P(this),n=t.entries,r=E(e),o=0;ot.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,n=P(this).entries,r=y(e,arguments.length>1?arguments[1]:void 0),o=0;o1?me(arguments[1]):{})}}),m(B)){var ge=function(e){return d(this,U),new B(e,arguments.length>1?me(arguments[1]):{})};U.constructor=ge,ge.prototype=U,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:ge})}}e.exports={URLSearchParams:pe,getState:P}},95304:(e,t,n)=>{n(62524)},47250:(e,t,n)=>{"use strict";n(77971);var r,o=n(76887),a=n(55746),i=n(14766),s=n(21899),l=n(86843),u=n(95329),c=n(95929),p=n(29202),f=n(5743),h=n(90953),d=n(24420),m=n(11354),g=n(15790),y=n(64620).codeAt,v=n(73291),b=n(85803),w=n(90904),E=n(18348),x=n(62524),_=n(45402),S=_.set,A=_.getterFor("URL"),C=x.URLSearchParams,k=x.getState,O=s.URL,j=s.TypeError,T=s.parseInt,I=Math.floor,N=Math.pow,P=u("".charAt),R=u(/./.exec),M=u([].join),D=u(1..toString),L=u([].pop),B=u([].push),F=u("".replace),U=u([].shift),z=u("".split),q=u("".slice),$=u("".toLowerCase),V=u([].unshift),W="Invalid scheme",H="Invalid host",J="Invalid port",K=/[a-z]/i,G=/[\d+-.a-z]/i,Z=/\d/,Y=/^0x/i,Q=/^[0-7]+$/,X=/^\d+$/,ee=/^[\da-f]+$/i,te=/[\0\t\n\r #%/:<>?@[\\\]^|]/,ne=/[\0\t\n\r #/:<>?@[\\\]^|]/,re=/^[\u0000-\u0020]+/,oe=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,ae=/[\t\n\r]/g,ie=function(e){var t,n,r,o;if("number"==typeof e){for(t=[],n=0;n<4;n++)V(t,e%256),e=I(e/256);return M(t,".")}if("object"==typeof e){for(t="",r=function(e){for(var t=null,n=1,r=null,o=0,a=0;a<8;a++)0!==e[a]?(o>n&&(t=r,n=o),r=null,o=0):(null===r&&(r=a),++o);return o>n&&(t=r,n=o),t}(e),n=0;n<8;n++)o&&0===e[n]||(o&&(o=!1),r===n?(t+=n?":":"::",o=!0):(t+=D(e[n],16),n<7&&(t+=":")));return"["+t+"]"}return e},se={},le=d({},se,{" ":1,'"':1,"<":1,">":1,"`":1}),ue=d({},le,{"#":1,"?":1,"{":1,"}":1}),ce=d({},ue,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),pe=function(e,t){var n=y(e,0);return n>32&&n<127&&!h(t,e)?e:encodeURIComponent(e)},fe={ftp:21,file:null,http:80,https:443,ws:80,wss:443},he=function(e,t){var n;return 2==e.length&&R(K,P(e,0))&&(":"==(n=P(e,1))||!t&&"|"==n)},de=function(e){var t;return e.length>1&&he(q(e,0,2))&&(2==e.length||"/"===(t=P(e,2))||"\\"===t||"?"===t||"#"===t)},me=function(e){return"."===e||"%2e"===$(e)},ge={},ye={},ve={},be={},we={},Ee={},xe={},_e={},Se={},Ae={},Ce={},ke={},Oe={},je={},Te={},Ie={},Ne={},Pe={},Re={},Me={},De={},Le=function(e,t,n){var r,o,a,i=b(e);if(t){if(o=this.parse(i))throw j(o);this.searchParams=null}else{if(void 0!==n&&(r=new Le(n,!0)),o=this.parse(i,null,r))throw j(o);(a=k(new C)).bindURL(this),this.searchParams=a}};Le.prototype={type:"URL",parse:function(e,t,n){var o,a,i,s,l,u=this,c=t||ge,p=0,f="",d=!1,y=!1,v=!1;for(e=b(e),t||(u.scheme="",u.username="",u.password="",u.host=null,u.port=null,u.path=[],u.query=null,u.fragment=null,u.cannotBeABaseURL=!1,e=F(e,re,""),e=F(e,oe,"$1")),e=F(e,ae,""),o=m(e);p<=o.length;){switch(a=o[p],c){case ge:if(!a||!R(K,a)){if(t)return W;c=ve;continue}f+=$(a),c=ye;break;case ye:if(a&&(R(G,a)||"+"==a||"-"==a||"."==a))f+=$(a);else{if(":"!=a){if(t)return W;f="",c=ve,p=0;continue}if(t&&(u.isSpecial()!=h(fe,f)||"file"==f&&(u.includesCredentials()||null!==u.port)||"file"==u.scheme&&!u.host))return;if(u.scheme=f,t)return void(u.isSpecial()&&fe[u.scheme]==u.port&&(u.port=null));f="","file"==u.scheme?c=je:u.isSpecial()&&n&&n.scheme==u.scheme?c=be:u.isSpecial()?c=_e:"/"==o[p+1]?(c=we,p++):(u.cannotBeABaseURL=!0,B(u.path,""),c=Re)}break;case ve:if(!n||n.cannotBeABaseURL&&"#"!=a)return W;if(n.cannotBeABaseURL&&"#"==a){u.scheme=n.scheme,u.path=g(n.path),u.query=n.query,u.fragment="",u.cannotBeABaseURL=!0,c=De;break}c="file"==n.scheme?je:Ee;continue;case be:if("/"!=a||"/"!=o[p+1]){c=Ee;continue}c=Se,p++;break;case we:if("/"==a){c=Ae;break}c=Pe;continue;case Ee:if(u.scheme=n.scheme,a==r)u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,u.path=g(n.path),u.query=n.query;else if("/"==a||"\\"==a&&u.isSpecial())c=xe;else if("?"==a)u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,u.path=g(n.path),u.query="",c=Me;else{if("#"!=a){u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,u.path=g(n.path),u.path.length--,c=Pe;continue}u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,u.path=g(n.path),u.query=n.query,u.fragment="",c=De}break;case xe:if(!u.isSpecial()||"/"!=a&&"\\"!=a){if("/"!=a){u.username=n.username,u.password=n.password,u.host=n.host,u.port=n.port,c=Pe;continue}c=Ae}else c=Se;break;case _e:if(c=Se,"/"!=a||"/"!=P(f,p+1))continue;p++;break;case Se:if("/"!=a&&"\\"!=a){c=Ae;continue}break;case Ae:if("@"==a){d&&(f="%40"+f),d=!0,i=m(f);for(var w=0;w65535)return J;u.port=u.isSpecial()&&_===fe[u.scheme]?null:_,f=""}if(t)return;c=Ne;continue}return J}f+=a;break;case je:if(u.scheme="file","/"==a||"\\"==a)c=Te;else{if(!n||"file"!=n.scheme){c=Pe;continue}if(a==r)u.host=n.host,u.path=g(n.path),u.query=n.query;else if("?"==a)u.host=n.host,u.path=g(n.path),u.query="",c=Me;else{if("#"!=a){de(M(g(o,p),""))||(u.host=n.host,u.path=g(n.path),u.shortenPath()),c=Pe;continue}u.host=n.host,u.path=g(n.path),u.query=n.query,u.fragment="",c=De}}break;case Te:if("/"==a||"\\"==a){c=Ie;break}n&&"file"==n.scheme&&!de(M(g(o,p),""))&&(he(n.path[0],!0)?B(u.path,n.path[0]):u.host=n.host),c=Pe;continue;case Ie:if(a==r||"/"==a||"\\"==a||"?"==a||"#"==a){if(!t&&he(f))c=Pe;else if(""==f){if(u.host="",t)return;c=Ne}else{if(s=u.parseHost(f))return s;if("localhost"==u.host&&(u.host=""),t)return;f="",c=Ne}continue}f+=a;break;case Ne:if(u.isSpecial()){if(c=Pe,"/"!=a&&"\\"!=a)continue}else if(t||"?"!=a)if(t||"#"!=a){if(a!=r&&(c=Pe,"/"!=a))continue}else u.fragment="",c=De;else u.query="",c=Me;break;case Pe:if(a==r||"/"==a||"\\"==a&&u.isSpecial()||!t&&("?"==a||"#"==a)){if(".."===(l=$(l=f))||"%2e."===l||".%2e"===l||"%2e%2e"===l?(u.shortenPath(),"/"==a||"\\"==a&&u.isSpecial()||B(u.path,"")):me(f)?"/"==a||"\\"==a&&u.isSpecial()||B(u.path,""):("file"==u.scheme&&!u.path.length&&he(f)&&(u.host&&(u.host=""),f=P(f,0)+":"),B(u.path,f)),f="","file"==u.scheme&&(a==r||"?"==a||"#"==a))for(;u.path.length>1&&""===u.path[0];)U(u.path);"?"==a?(u.query="",c=Me):"#"==a&&(u.fragment="",c=De)}else f+=pe(a,ue);break;case Re:"?"==a?(u.query="",c=Me):"#"==a?(u.fragment="",c=De):a!=r&&(u.path[0]+=pe(a,se));break;case Me:t||"#"!=a?a!=r&&("'"==a&&u.isSpecial()?u.query+="%27":u.query+="#"==a?"%23":pe(a,se)):(u.fragment="",c=De);break;case De:a!=r&&(u.fragment+=pe(a,le))}p++}},parseHost:function(e){var t,n,r;if("["==P(e,0)){if("]"!=P(e,e.length-1))return H;if(t=function(e){var t,n,r,o,a,i,s,l=[0,0,0,0,0,0,0,0],u=0,c=null,p=0,f=function(){return P(e,p)};if(":"==f()){if(":"!=P(e,1))return;p+=2,c=++u}for(;f();){if(8==u)return;if(":"!=f()){for(t=n=0;n<4&&R(ee,f());)t=16*t+T(f(),16),p++,n++;if("."==f()){if(0==n)return;if(p-=n,u>6)return;for(r=0;f();){if(o=null,r>0){if(!("."==f()&&r<4))return;p++}if(!R(Z,f()))return;for(;R(Z,f());){if(a=T(f(),10),null===o)o=a;else{if(0==o)return;o=10*o+a}if(o>255)return;p++}l[u]=256*l[u]+o,2!=++r&&4!=r||u++}if(4!=r)return;break}if(":"==f()){if(p++,!f())return}else if(f())return;l[u++]=t}else{if(null!==c)return;p++,c=++u}}if(null!==c)for(i=u-c,u=7;0!=u&&i>0;)s=l[u],l[u--]=l[c+i-1],l[c+--i]=s;else if(8!=u)return;return l}(q(e,1,-1)),!t)return H;this.host=t}else if(this.isSpecial()){if(e=v(e),R(te,e))return H;if(t=function(e){var t,n,r,o,a,i,s,l=z(e,".");if(l.length&&""==l[l.length-1]&&l.length--,(t=l.length)>4)return e;for(n=[],r=0;r1&&"0"==P(o,0)&&(a=R(Y,o)?16:8,o=q(o,8==a?1:2)),""===o)i=0;else{if(!R(10==a?X:8==a?Q:ee,o))return e;i=T(o,a)}B(n,i)}for(r=0;r=N(256,5-t))return null}else if(i>255)return null;for(s=L(n),r=0;r1?arguments[1]:void 0,r=S(t,new Le(e,!1,n));a||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},Fe=Be.prototype,Ue=function(e,t){return{get:function(){return A(this)[e]()},set:t&&function(e){return A(this)[t](e)},configurable:!0,enumerable:!0}};if(a&&(p(Fe,"href",Ue("serialize","setHref")),p(Fe,"origin",Ue("getOrigin")),p(Fe,"protocol",Ue("getProtocol","setProtocol")),p(Fe,"username",Ue("getUsername","setUsername")),p(Fe,"password",Ue("getPassword","setPassword")),p(Fe,"host",Ue("getHost","setHost")),p(Fe,"hostname",Ue("getHostname","setHostname")),p(Fe,"port",Ue("getPort","setPort")),p(Fe,"pathname",Ue("getPathname","setPathname")),p(Fe,"search",Ue("getSearch","setSearch")),p(Fe,"searchParams",Ue("getSearchParams")),p(Fe,"hash",Ue("getHash","setHash"))),c(Fe,"toJSON",(function(){return A(this).serialize()}),{enumerable:!0}),c(Fe,"toString",(function(){return A(this).serialize()}),{enumerable:!0}),O){var ze=O.createObjectURL,qe=O.revokeObjectURL;ze&&c(Be,"createObjectURL",l(ze,O)),qe&&c(Be,"revokeObjectURL",l(qe,O))}w(Be,"URL"),o({global:!0,constructor:!0,forced:!i,sham:!a},{URL:Be})},33601:(e,t,n)=>{n(47250)},98947:()=>{},24848:(e,t,n)=>{var r=n(54493);e.exports=r},83363:(e,t,n)=>{var r=n(24034);e.exports=r},62908:(e,t,n)=>{var r=n(12710);e.exports=r},49216:(e,t,n)=>{var r=n(99324);e.exports=r},56668:(e,t,n)=>{var r=n(95909);e.exports=r},74719:(e,t,n)=>{var r=n(14423);e.exports=r},57784:(e,t,n)=>{var r=n(81103);e.exports=r},28196:(e,t,n)=>{var r=n(16246);e.exports=r},8065:(e,t,n)=>{var r=n(56043);e.exports=r},57448:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),a=n(7046),i=n(62908),s=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.entries;return e===s||a(s,e)&&t===s.entries||o(l,r(e))?i:t}},29455:(e,t,n)=>{var r=n(13160);e.exports=r},69743:(e,t,n)=>{var r=n(80446);e.exports=r},11955:(e,t,n)=>{var r=n(2480);e.exports=r},96064:(e,t,n)=>{var r=n(7147);e.exports=r},61577:(e,t,n)=>{var r=n(32236);e.exports=r},46279:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),a=n(7046),i=n(49216),s=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.forEach;return e===s||a(s,e)&&t===s.forEach||o(l,r(e))?i:t}},33778:(e,t,n)=>{var r=n(58557);e.exports=r},19373:(e,t,n)=>{var r=n(34570);e.exports=r},73819:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),a=n(7046),i=n(56668),s=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.keys;return e===s||a(s,e)&&t===s.keys||o(l,r(e))?i:t}},11022:(e,t,n)=>{var r=n(57564);e.exports=r},61798:(e,t,n)=>{var r=n(88287);e.exports=r},52527:(e,t,n)=>{var r=n(68025);e.exports=r},36857:(e,t,n)=>{var r=n(59257);e.exports=r},82073:(e,t,n)=>{var r=n(69601);e.exports=r},45286:(e,t,n)=>{var r=n(28299);e.exports=r},62856:(e,t,n)=>{var r=n(69355);e.exports=r},2348:(e,t,n)=>{var r=n(18339);e.exports=r},35178:(e,t,n)=>{var r=n(71611);e.exports=r},76361:(e,t,n)=>{var r=n(62774);e.exports=r},71815:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),a=n(7046),i=n(74719),s=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.values;return e===s||a(s,e)&&t===s.values||o(l,r(e))?i:t}},8933:(e,t,n)=>{var r=n(84426);e.exports=r},15868:(e,t,n)=>{var r=n(91018);n(7634),e.exports=r},63383:(e,t,n)=>{var r=n(45999);e.exports=r},57396:(e,t,n)=>{var r=n(7702);e.exports=r},41910:(e,t,n)=>{var r=n(48171);e.exports=r},79427:(e,t,n)=>{var r=n(286);e.exports=r},62857:(e,t,n)=>{var r=n(92766);e.exports=r},9534:(e,t,n)=>{var r=n(30498);e.exports=r},23059:(e,t,n)=>{var r=n(48494);e.exports=r},47795:(e,t,n)=>{var r=n(98430);e.exports=r},27460:(e,t,n)=>{var r=n(52956);n(7634),e.exports=r},27989:(e,t,n)=>{n(71249);var r=n(54058);e.exports=r.setTimeout},92547:(e,t,n)=>{var r=n(57473);n(7634),e.exports=r},46509:(e,t,n)=>{var r=n(24227);n(7634),e.exports=r},35774:(e,t,n)=>{var r=n(62978);e.exports=r},57641:(e,t,n)=>{var r=n(71459);e.exports=r},71459:(e,t,n)=>{n(33601),n(98947),n(95304);var r=n(54058);e.exports=r.URL},31905:function(){!function(e){!function(t){var n={searchParams:"URLSearchParams"in e,iterable:"Symbol"in e&&"iterator"in Symbol,blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e};if(n.arrayBuffer)var r=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],o=ArrayBuffer.isView||function(e){return e&&r.indexOf(Object.prototype.toString.call(e))>-1};function a(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function i(e){return"string"!=typeof e&&(e=String(e)),e}function s(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return n.iterable&&(t[Symbol.iterator]=function(){return t}),t}function l(e){this.map={},e instanceof l?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function u(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function c(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function p(e){var t=new FileReader,n=c(t);return t.readAsArrayBuffer(e),n}function f(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function h(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?"string"==typeof e?this._bodyText=e:n.blob&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:n.formData&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():n.arrayBuffer&&n.blob&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=f(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):n.arrayBuffer&&(ArrayBuffer.prototype.isPrototypeOf(e)||o(e))?this._bodyArrayBuffer=f(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText="",this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):n.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},n.blob&&(this.blob=function(){var e=u(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?u(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(p)}),this.text=function(){var e,t,n,r=u(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=c(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o)}function g(e){var t=new FormData;return e.trim().split("&").forEach((function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function y(e,t){t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new l(t.headers),this.url=t.url||"",this._initBody(e)}m.prototype.clone=function(){return new m(this,{body:this._bodyInit})},h.call(m.prototype),h.call(y.prototype),y.prototype.clone=function(){return new y(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new l(this.headers),url:this.url})},y.error=function(){var e=new y(null,{status:0,statusText:""});return e.type="error",e};var v=[301,302,303,307,308];y.redirect=function(e,t){if(-1===v.indexOf(t))throw new RangeError("Invalid status code");return new y(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function b(e,r){return new Promise((function(o,a){var i=new m(e,r);if(i.signal&&i.signal.aborted)return a(new t.DOMException("Aborted","AbortError"));var s=new XMLHttpRequest;function u(){s.abort()}s.onload=function(){var e,t,n={status:s.status,statusText:s.statusText,headers:(e=s.getAllResponseHeaders()||"",t=new l,e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach((function(e){var n=e.split(":"),r=n.shift().trim();if(r){var o=n.join(":").trim();t.append(r,o)}})),t)};n.url="responseURL"in s?s.responseURL:n.headers.get("X-Request-URL");var r="response"in s?s.response:s.responseText;o(new y(r,n))},s.onerror=function(){a(new TypeError("Network request failed"))},s.ontimeout=function(){a(new TypeError("Network request failed"))},s.onabort=function(){a(new t.DOMException("Aborted","AbortError"))},s.open(i.method,i.url,!0),"include"===i.credentials?s.withCredentials=!0:"omit"===i.credentials&&(s.withCredentials=!1),"responseType"in s&&n.blob&&(s.responseType="blob"),i.headers.forEach((function(e,t){s.setRequestHeader(t,e)})),i.signal&&(i.signal.addEventListener("abort",u),s.onreadystatechange=function(){4===s.readyState&&i.signal.removeEventListener("abort",u)}),s.send(void 0===i._bodyInit?null:i._bodyInit)}))}b.polyfill=!0,e.fetch||(e.fetch=b,e.Headers=l,e.Request=m,e.Response=y),t.Headers=l,t.Request=m,t.Response=y,t.fetch=b,Object.defineProperty(t,"__esModule",{value:!0})}({})}("undefined"!=typeof self?self:this)},8269:function(e,t,n){var r;r=void 0!==n.g?n.g:this,e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var t,n=String(e),r=n.length,o=-1,a="",i=n.charCodeAt(0);++o=1&&t<=31||127==t||0==o&&t>=48&&t<=57||1==o&&t>=48&&t<=57&&45==i?"\\"+t.toString(16)+" ":0==o&&1==r&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?"\\"+n.charAt(o):n.charAt(o):a+="�";return a};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(r)},27698:(e,t,n)=>{"use strict";var r=n(48764).Buffer;function o(e){return e instanceof r||e instanceof Date||e instanceof RegExp}function a(e){if(e instanceof r){var t=r.alloc?r.alloc(e.length):new r(e.length);return e.copy(t),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function i(e){var t=[];return e.forEach((function(e,n){"object"==typeof e&&null!==e?Array.isArray(e)?t[n]=i(e):o(e)?t[n]=a(e):t[n]=l({},e):t[n]=e})),t}function s(e,t){return"__proto__"===t?void 0:e[t]}var l=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,n=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(r){"object"!=typeof r||null===r||Array.isArray(r)||Object.keys(r).forEach((function(u){return t=s(n,u),(e=s(r,u))===n?void 0:"object"!=typeof e||null===e?void(n[u]=e):Array.isArray(e)?void(n[u]=i(e)):o(e)?void(n[u]=a(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(n[u]=l({},e)):void(n[u]=l(t,e))}))})),n}},9996:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===n}(e)}(e)};var n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function r(e,t){return!1!==t.clone&&t.isMergeableObject(e)?l((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function o(e,t,n){return e.concat(t).map((function(e){return r(e,n)}))}function a(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function i(e,t){try{return t in e}catch(e){return!1}}function s(e,t,n){var o={};return n.isMergeableObject(e)&&a(e).forEach((function(t){o[t]=r(e[t],n)})),a(t).forEach((function(a){(function(e,t){return i(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,a)||(i(e,a)&&n.isMergeableObject(t[a])?o[a]=function(e,t){if(!t.customMerge)return l;var n=t.customMerge(e);return"function"==typeof n?n:l}(a,n)(e[a],t[a],n):o[a]=r(t[a],n))})),o}function l(e,n,a){(a=a||{}).arrayMerge=a.arrayMerge||o,a.isMergeableObject=a.isMergeableObject||t,a.cloneUnlessOtherwiseSpecified=r;var i=Array.isArray(n);return i===Array.isArray(e)?i?a.arrayMerge(e,n,a):s(e,n,a):r(n,a)}l.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,n){return l(e,n,t)}),{})};var u=l;e.exports=u},27856:function(e){e.exports=function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:o}=Object;let{freeze:a,seal:i,create:s}=Object,{apply:l,construct:u}="undefined"!=typeof Reflect&&Reflect;l||(l=function(e,t,n){return e.apply(t,n)}),a||(a=function(e){return e}),i||(i=function(e){return e}),u||(u=function(e,t){return new e(...t)});const c=E(Array.prototype.forEach),p=E(Array.prototype.pop),f=E(Array.prototype.push),h=E(String.prototype.toLowerCase),d=E(String.prototype.toString),m=E(String.prototype.match),g=E(String.prototype.replace),y=E(String.prototype.indexOf),v=E(String.prototype.trim),b=E(RegExp.prototype.test),w=x(TypeError);function E(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o/gm),F=i(/\${[\w\W]*}/gm),U=i(/^data-[\-\w.\u00B7-\uFFFF]/),z=i(/^aria-[\-\w]+$/),q=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$=i(/^(?:\w+script|data):/i),V=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i);var H=Object.freeze({__proto__:null,MUSTACHE_EXPR:L,ERB_EXPR:B,TMPLIT_EXPR:F,DATA_ATTR:U,ARIA_ATTR:z,IS_ALLOWED_URI:q,IS_SCRIPT_OR_DATA:$,ATTR_WHITESPACE:V,DOCTYPE_NAME:W});const J=()=>"undefined"==typeof window?null:window,K=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const r="data-tt-policy-suffix";t.currentScript&&t.currentScript.hasAttribute(r)&&(n=t.currentScript.getAttribute(r));const o="dompurify"+(n?"#"+n:"");try{return e.createPolicy(o,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+o+" could not be created."),null}};function G(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:J();const n=e=>G(e);if(n.version="3.0.2",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;const r=t.document;let{document:o}=t;const{DocumentFragment:i,HTMLTemplateElement:s,Node:l,Element:u,NodeFilter:E,NamedNodeMap:x=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:L,DOMParser:B,trustedTypes:F}=t,U=u.prototype,z=A(U,"cloneNode"),$=A(U,"nextSibling"),V=A(U,"childNodes"),Z=A(U,"parentNode");if("function"==typeof s){const e=o.createElement("template");e.content&&e.content.ownerDocument&&(o=e.content.ownerDocument)}const Y=K(F,r),Q=Y?Y.createHTML(""):"",{implementation:X,createNodeIterator:ee,createDocumentFragment:te,getElementsByTagName:ne}=o,{importNode:re}=r;let oe={};n.isSupported="function"==typeof e&&"function"==typeof Z&&X&&void 0!==X.createHTMLDocument;const{MUSTACHE_EXPR:ae,ERB_EXPR:ie,TMPLIT_EXPR:se,DATA_ATTR:le,ARIA_ATTR:ue,IS_SCRIPT_OR_DATA:ce,ATTR_WHITESPACE:pe}=H;let{IS_ALLOWED_URI:fe}=H,he=null;const de=_({},[...C,...k,...O,...T,...N]);let me=null;const ge=_({},[...P,...R,...M,...D]);let ye=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ve=null,be=null,we=!0,Ee=!0,xe=!1,_e=!0,Se=!1,Ae=!1,Ce=!1,ke=!1,Oe=!1,je=!1,Te=!1,Ie=!0,Ne=!1;const Pe="user-content-";let Re=!0,Me=!1,De={},Le=null;const Be=_({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Fe=null;const Ue=_({},["audio","video","img","source","image","track"]);let ze=null;const qe=_({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),$e="http://www.w3.org/1998/Math/MathML",Ve="http://www.w3.org/2000/svg",We="http://www.w3.org/1999/xhtml";let He=We,Je=!1,Ke=null;const Ge=_({},[$e,Ve,We],d);let Ze;const Ye=["application/xhtml+xml","text/html"],Qe="text/html";let Xe,et=null;const tt=o.createElement("form"),nt=function(e){return e instanceof RegExp||e instanceof Function},rt=function(e){et&&et===e||(e&&"object"==typeof e||(e={}),e=S(e),Ze=Ze=-1===Ye.indexOf(e.PARSER_MEDIA_TYPE)?Qe:e.PARSER_MEDIA_TYPE,Xe="application/xhtml+xml"===Ze?d:h,he="ALLOWED_TAGS"in e?_({},e.ALLOWED_TAGS,Xe):de,me="ALLOWED_ATTR"in e?_({},e.ALLOWED_ATTR,Xe):ge,Ke="ALLOWED_NAMESPACES"in e?_({},e.ALLOWED_NAMESPACES,d):Ge,ze="ADD_URI_SAFE_ATTR"in e?_(S(qe),e.ADD_URI_SAFE_ATTR,Xe):qe,Fe="ADD_DATA_URI_TAGS"in e?_(S(Ue),e.ADD_DATA_URI_TAGS,Xe):Ue,Le="FORBID_CONTENTS"in e?_({},e.FORBID_CONTENTS,Xe):Be,ve="FORBID_TAGS"in e?_({},e.FORBID_TAGS,Xe):{},be="FORBID_ATTR"in e?_({},e.FORBID_ATTR,Xe):{},De="USE_PROFILES"in e&&e.USE_PROFILES,we=!1!==e.ALLOW_ARIA_ATTR,Ee=!1!==e.ALLOW_DATA_ATTR,xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,_e=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,Se=e.SAFE_FOR_TEMPLATES||!1,Ae=e.WHOLE_DOCUMENT||!1,Oe=e.RETURN_DOM||!1,je=e.RETURN_DOM_FRAGMENT||!1,Te=e.RETURN_TRUSTED_TYPE||!1,ke=e.FORCE_BODY||!1,Ie=!1!==e.SANITIZE_DOM,Ne=e.SANITIZE_NAMED_PROPS||!1,Re=!1!==e.KEEP_CONTENT,Me=e.IN_PLACE||!1,fe=e.ALLOWED_URI_REGEXP||q,He=e.NAMESPACE||We,ye=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&nt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ye.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&nt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ye.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ye.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Se&&(Ee=!1),je&&(Oe=!0),De&&(he=_({},[...N]),me=[],!0===De.html&&(_(he,C),_(me,P)),!0===De.svg&&(_(he,k),_(me,R),_(me,D)),!0===De.svgFilters&&(_(he,O),_(me,R),_(me,D)),!0===De.mathMl&&(_(he,T),_(me,M),_(me,D))),e.ADD_TAGS&&(he===de&&(he=S(he)),_(he,e.ADD_TAGS,Xe)),e.ADD_ATTR&&(me===ge&&(me=S(me)),_(me,e.ADD_ATTR,Xe)),e.ADD_URI_SAFE_ATTR&&_(ze,e.ADD_URI_SAFE_ATTR,Xe),e.FORBID_CONTENTS&&(Le===Be&&(Le=S(Le)),_(Le,e.FORBID_CONTENTS,Xe)),Re&&(he["#text"]=!0),Ae&&_(he,["html","head","body"]),he.table&&(_(he,["tbody"]),delete ve.tbody),a&&a(e),et=e)},ot=_({},["mi","mo","mn","ms","mtext"]),at=_({},["foreignobject","desc","title","annotation-xml"]),it=_({},["title","style","font","a","script"]),st=_({},k);_(st,O),_(st,j);const lt=_({},T);_(lt,I);const ut=function(e){let t=Z(e);t&&t.tagName||(t={namespaceURI:He,tagName:"template"});const n=h(e.tagName),r=h(t.tagName);return!!Ke[e.namespaceURI]&&(e.namespaceURI===Ve?t.namespaceURI===We?"svg"===n:t.namespaceURI===$e?"svg"===n&&("annotation-xml"===r||ot[r]):Boolean(st[n]):e.namespaceURI===$e?t.namespaceURI===We?"math"===n:t.namespaceURI===Ve?"math"===n&&at[r]:Boolean(lt[n]):e.namespaceURI===We?!(t.namespaceURI===Ve&&!at[r])&&!(t.namespaceURI===$e&&!ot[r])&&!lt[n]&&(it[n]||!st[n]):!("application/xhtml+xml"!==Ze||!Ke[e.namespaceURI]))},ct=function(e){f(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},pt=function(e,t){try{f(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){f(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!me[e])if(Oe||je)try{ct(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ft=function(e){let t,n;if(ke)e=""+e;else{const t=m(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===Ze&&He===We&&(e=''+e+"");const r=Y?Y.createHTML(e):e;if(He===We)try{t=(new B).parseFromString(r,Ze)}catch(e){}if(!t||!t.documentElement){t=X.createDocument(He,"template",null);try{t.documentElement.innerHTML=Je?Q:r}catch(e){}}const a=t.body||t.documentElement;return e&&n&&a.insertBefore(o.createTextNode(n),a.childNodes[0]||null),He===We?ne.call(t,Ae?"html":"body")[0]:Ae?t.documentElement:a},ht=function(e){return ee.call(e.ownerDocument||e,e,E.SHOW_ELEMENT|E.SHOW_COMMENT|E.SHOW_TEXT,null,!1)},dt=function(e){return e instanceof L&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof x)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},mt=function(e){return"object"==typeof l?e instanceof l:e&&"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},gt=function(e,t,r){oe[e]&&c(oe[e],(e=>{e.call(n,t,r,et)}))},yt=function(e){let t;if(gt("beforeSanitizeElements",e,null),dt(e))return ct(e),!0;const r=Xe(e.nodeName);if(gt("uponSanitizeElement",e,{tagName:r,allowedTags:he}),e.hasChildNodes()&&!mt(e.firstElementChild)&&(!mt(e.content)||!mt(e.content.firstElementChild))&&b(/<[/\w]/g,e.innerHTML)&&b(/<[/\w]/g,e.textContent))return ct(e),!0;if(!he[r]||ve[r]){if(!ve[r]&&bt(r)){if(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,r))return!1;if(ye.tagNameCheck instanceof Function&&ye.tagNameCheck(r))return!1}if(Re&&!Le[r]){const t=Z(e)||e.parentNode,n=V(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(z(n[r],!0),$(e))}return ct(e),!0}return e instanceof u&&!ut(e)?(ct(e),!0):"noscript"!==r&&"noembed"!==r||!b(/<\/no(script|embed)/i,e.innerHTML)?(Se&&3===e.nodeType&&(t=e.textContent,t=g(t,ae," "),t=g(t,ie," "),t=g(t,se," "),e.textContent!==t&&(f(n.removed,{element:e.cloneNode()}),e.textContent=t)),gt("afterSanitizeElements",e,null),!1):(ct(e),!0)},vt=function(e,t,n){if(Ie&&("id"===t||"name"===t)&&(n in o||n in tt))return!1;if(Ee&&!be[t]&&b(le,t));else if(we&&b(ue,t));else if(!me[t]||be[t]){if(!(bt(e)&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,e)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(e))&&(ye.attributeNameCheck instanceof RegExp&&b(ye.attributeNameCheck,t)||ye.attributeNameCheck instanceof Function&&ye.attributeNameCheck(t))||"is"===t&&ye.allowCustomizedBuiltInElements&&(ye.tagNameCheck instanceof RegExp&&b(ye.tagNameCheck,n)||ye.tagNameCheck instanceof Function&&ye.tagNameCheck(n))))return!1}else if(ze[t]);else if(b(fe,g(n,pe,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!Fe[e])if(xe&&!b(ce,g(n,pe,"")));else if(n)return!1;return!0},bt=function(e){return e.indexOf("-")>0},wt=function(e){let t,r,o,a;gt("beforeSanitizeAttributes",e,null);const{attributes:i}=e;if(!i)return;const s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:me};for(a=i.length;a--;){t=i[a];const{name:l,namespaceURI:u}=t;if(r="value"===l?t.value:v(t.value),o=Xe(l),s.attrName=o,s.attrValue=r,s.keepAttr=!0,s.forceKeepAttr=void 0,gt("uponSanitizeAttribute",e,s),r=s.attrValue,s.forceKeepAttr)continue;if(pt(l,e),!s.keepAttr)continue;if(!_e&&b(/\/>/i,r)){pt(l,e);continue}Se&&(r=g(r,ae," "),r=g(r,ie," "),r=g(r,se," "));const c=Xe(e.nodeName);if(vt(c,o,r)){if(!Ne||"id"!==o&&"name"!==o||(pt(l,e),r=Pe+r),Y&&"object"==typeof F&&"function"==typeof F.getAttributeType)if(u);else switch(F.getAttributeType(c,o)){case"TrustedHTML":r=Y.createHTML(r);break;case"TrustedScriptURL":r=Y.createScriptURL(r)}try{u?e.setAttributeNS(u,l,r):e.setAttribute(l,r),p(n.removed)}catch(e){}}}gt("afterSanitizeAttributes",e,null)},Et=function e(t){let n;const r=ht(t);for(gt("beforeSanitizeShadowDOM",t,null);n=r.nextNode();)gt("uponSanitizeShadowNode",n,null),yt(n)||(n.content instanceof i&&e(n.content),wt(n));gt("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e){let t,o,a,s,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Je=!e,Je&&(e="\x3c!--\x3e"),"string"!=typeof e&&!mt(e)){if("function"!=typeof e.toString)throw w("toString is not a function");if("string"!=typeof(e=e.toString()))throw w("dirty is not a string, aborting")}if(!n.isSupported)return e;if(Ce||rt(u),n.removed=[],"string"==typeof e&&(Me=!1),Me){if(e.nodeName){const t=Xe(e.nodeName);if(!he[t]||ve[t])throw w("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof l)t=ft("\x3c!----\x3e"),o=t.ownerDocument.importNode(e,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?t=o:t.appendChild(o);else{if(!Oe&&!Se&&!Ae&&-1===e.indexOf("<"))return Y&&Te?Y.createHTML(e):e;if(t=ft(e),!t)return Oe?null:Te?Q:""}t&&ke&&ct(t.firstChild);const c=ht(Me?e:t);for(;a=c.nextNode();)yt(a)||(a.content instanceof i&&Et(a.content),wt(a));if(Me)return e;if(Oe){if(je)for(s=te.call(t.ownerDocument);t.firstChild;)s.appendChild(t.firstChild);else s=t;return(me.shadowroot||me.shadowrootmod)&&(s=re.call(r,s,!0)),s}let p=Ae?t.outerHTML:t.innerHTML;return Ae&&he["!doctype"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&b(W,t.ownerDocument.doctype.name)&&(p="\n"+p),Se&&(p=g(p,ae," "),p=g(p,ie," "),p=g(p,se," ")),Y&&Te?Y.createHTML(p):p},n.setConfig=function(e){rt(e),Ce=!0},n.clearConfig=function(){et=null,Ce=!1},n.isValidAttribute=function(e,t,n){et||rt({});const r=Xe(e),o=Xe(t);return vt(r,o,n)},n.addHook=function(e,t){"function"==typeof t&&(oe[e]=oe[e]||[],f(oe[e],t))},n.removeHook=function(e){if(oe[e])return p(oe[e])},n.removeHooks=function(e){oe[e]&&(oe[e]=[])},n.removeAllHooks=function(){oe={}},n}return G()}()},69450:e=>{"use strict";class t{constructor(e,t){this.low=e,this.high=t,this.length=1+t-e}overlaps(e){return!(this.highe.high)}touches(e){return!(this.high+1e.high)}add(e){return new t(Math.min(this.low,e.low),Math.max(this.high,e.high))}subtract(e){return e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.highe+t.length),0)}add(e,r){var o=e=>{for(var t=0;t{for(var t=0;t{for(var n=0;n{for(var n=t.low;n<=t.high;)e.push(n),n++;return e}),[])}subranges(){return this.ranges.map((e=>({low:e.low,high:e.high,length:1+e.high-e.low})))}}e.exports=n},17187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,r=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function a(){a.init.call(this)}e.exports=a,e.exports.once=function(e,t){return new Promise((function(n,r){function o(n){e.removeListener(t,a),r(n)}function a(){"function"==typeof e.removeListener&&e.removeListener("error",o),n([].slice.call(arguments))}m(e,t,a,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,o,{once:!0})}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var i=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function u(e,t,n,r){var o,a,i,u;if(s(n),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),a=e._events),i=a[t]),void 0===i)i=a[t]=n,++e._eventsCount;else if("function"==typeof i?i=a[t]=r?[n,i]:[i,n]:r?i.unshift(n):i.push(n),(o=l(e))>0&&i.length>o&&!i.warned){i.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+i.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=e,c.type=t,c.count=i.length,u=c,console&&console.warn&&console.warn(u)}return e}function c(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=c.bind(r);return o.listener=n,r.wrapFn=o,o}function f(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:"function"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(i=t[0]),i instanceof Error)throw i;var s=new Error("Unhandled error."+(i?" ("+i.message+")":""));throw s.context=i,s}var l=a[e];if(void 0===l)return!1;if("function"==typeof l)r(l,this,t);else{var u=l.length,c=d(l,u);for(n=0;n=0;a--)if(n[a]===t||n[a].listener===t){i=n[a].listener,o=a;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},a.prototype.listeners=function(e){return f(this,e,!0)},a.prototype.rawListeners=function(e){return f(this,e,!1)},a.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):h.call(e,t)},a.prototype.listenerCount=h,a.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},21102:(e,t,n)=>{"use strict";var r=n(46291),o=a(Error);function a(e){return t.displayName=e.displayName||e.name,t;function t(t){return t&&(t=r.apply(null,arguments)),new e(t)}}e.exports=o,o.eval=a(EvalError),o.range=a(RangeError),o.reference=a(ReferenceError),o.syntax=a(SyntaxError),o.type=a(TypeError),o.uri=a(URIError),o.create=a},46291:e=>{!function(){var t;function n(e){for(var t,n,r,o,a=1,i=[].slice.call(arguments),s=0,l=e.length,u="",c=!1,p=!1,f=function(){return i[a++]},h=function(){for(var n="";/\d/.test(e[s]);)n+=e[s++],t=e[s];return n.length>0?parseInt(n):null};s{"use strict";var t="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,r=Object.prototype.toString,o="[object Function]";e.exports=function(e){var a=this;if("function"!=typeof a||r.call(a)!==o)throw new TypeError(t+a);for(var i,s=n.call(arguments,1),l=Math.max(0,a.length-s.length),u=[],c=0;c{"use strict";var r=n(17648);e.exports=Function.prototype.bind||r},40210:(e,t,n)=>{"use strict";var r,o=SyntaxError,a=Function,i=TypeError,s=function(e){try{return a('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var u=function(){throw new i},c=l?function(){try{return u}catch(e){try{return l(arguments,"callee").get}catch(e){return u}}}():u,p=n(41405)(),f=Object.getPrototypeOf||function(e){return e.__proto__},h={},d="undefined"==typeof Uint8Array?r:f(Uint8Array),m={"%AggregateError%":"undefined"==typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":p?f([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":h,"%AsyncGenerator%":h,"%AsyncGeneratorFunction%":h,"%AsyncIteratorPrototype%":h,"%Atomics%":"undefined"==typeof Atomics?r:Atomics,"%BigInt%":"undefined"==typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":a,"%GeneratorFunction%":h,"%Int8Array%":"undefined"==typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":p?f(f([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":"undefined"==typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&p?f((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?r:Promise,"%Proxy%":"undefined"==typeof Proxy?r:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&p?f((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":p?f(""[Symbol.iterator]()):r,"%Symbol%":p?Symbol:r,"%SyntaxError%":o,"%ThrowTypeError%":c,"%TypedArray%":d,"%TypeError%":i,"%Uint8Array%":"undefined"==typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?r:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?r:WeakSet};try{null.error}catch(e){var g=f(f(e));m["%Error.prototype%"]=g}var y=function e(t){var n;if("%AsyncFunction%"===t)n=s("async function () {}");else if("%GeneratorFunction%"===t)n=s("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=s("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&(n=f(o.prototype))}return m[t]=n,n},v={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},b=n(58612),w=n(17642),E=b.call(Function.call,Array.prototype.concat),x=b.call(Function.apply,Array.prototype.splice),_=b.call(Function.call,String.prototype.replace),S=b.call(Function.call,String.prototype.slice),A=b.call(Function.call,RegExp.prototype.exec),C=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,k=/\\(\\)?/g,O=function(e){var t=S(e,0,1),n=S(e,-1);if("%"===t&&"%"!==n)throw new o("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new o("invalid intrinsic syntax, expected opening `%`");var r=[];return _(e,C,(function(e,t,n,o){r[r.length]=n?_(o,k,"$1"):t||e})),r},j=function(e,t){var n,r=e;if(w(v,r)&&(r="%"+(n=v[r])[0]+"%"),w(m,r)){var a=m[r];if(a===h&&(a=y(r)),void 0===a&&!t)throw new i("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:a}}throw new o("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new i("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new i('"allowMissing" argument must be a boolean');if(null===A(/^%?[^%]*%?$/,e))throw new o("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=O(e),r=n.length>0?n[0]:"",a=j("%"+r+"%",t),s=a.name,u=a.value,c=!1,p=a.alias;p&&(r=p[0],x(n,E([0,1],p)));for(var f=1,h=!0;f=n.length){var v=l(u,d);u=(h=!!v)&&"get"in v&&!("originalValue"in v.get)?v.get:u[d]}else h=w(u,d),u=u[d];h&&!c&&(m[s]=u)}}return u}},41405:(e,t,n)=>{"use strict";var r="undefined"!=typeof Symbol&&Symbol,o=n(55419);e.exports=function(){return"function"==typeof r&&("function"==typeof Symbol&&("symbol"==typeof r("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},55419:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},17642:(e,t,n)=>{"use strict";var r=n(58612);e.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},47802:e=>{function t(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(n){var r=e[n];"object"!=typeof r||Object.isFrozen(r)||t(r)})),e}var n=t,r=t;n.default=r;class o{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function a(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.kind;class l{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=a(e)}openNode(e){if(!s(e))return;let t=e.kind;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){s(e)&&(this.buffer+="")}value(){return this.buffer}span(e){this.buffer+=``}}class u{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{u._collapse(e)})))}}class c extends u{constructor(e){super(),this.options=e}addKeyword(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function p(e){return e?"string"==typeof e?e:e.source:null}const f=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;const h="[a-zA-Z]\\w*",d="[a-zA-Z_]\\w*",m="\\b\\d+(\\.\\d+)?",g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",y="\\b(0b[01]+)",v={begin:"\\\\[\\s\\S]",relevance:0},b={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[v]},w={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[v]},E={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},x=function(e,t,n={}){const r=i({className:"comment",begin:e,end:t,contains:[]},n);return r.contains.push(E),r.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),r},_=x("//","$"),S=x("/\\*","\\*/"),A=x("#","$"),C={className:"number",begin:m,relevance:0},k={className:"number",begin:g,relevance:0},O={className:"number",begin:y,relevance:0},j={className:"number",begin:m+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},T={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[v,{begin:/\[/,end:/\]/,relevance:0,contains:[v]}]}]},I={className:"title",begin:h,relevance:0},N={className:"title",begin:d,relevance:0},P={begin:"\\.\\s*"+d,relevance:0};var R=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:h,UNDERSCORE_IDENT_RE:d,NUMBER_RE:m,C_NUMBER_RE:g,BINARY_NUMBER_RE:y,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const t=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map((e=>p(e))).join("")}(t,/.*\b/,e.binary,/\b.*/)),i({className:"meta",begin:t,end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:v,APOS_STRING_MODE:b,QUOTE_STRING_MODE:w,PHRASAL_WORDS_MODE:E,COMMENT:x,C_LINE_COMMENT_MODE:_,C_BLOCK_COMMENT_MODE:S,HASH_COMMENT_MODE:A,NUMBER_MODE:C,C_NUMBER_MODE:k,BINARY_NUMBER_MODE:O,CSS_NUMBER_MODE:j,REGEXP_MODE:T,TITLE_MODE:I,UNDERSCORE_TITLE_MODE:N,METHOD_GUARD:P,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function M(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}function D(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=M,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function L(e,t){Array.isArray(e.illegal)&&(e.illegal=function(...e){return"("+e.map((e=>p(e))).join("|")+")"}(...e.illegal))}function B(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function F(e,t){void 0===e.relevance&&(e.relevance=1)}const U=["of","and","for","in","not","or","if","then","parent","list","value"],z="keyword";function q(e,t,n=z){const r={};return"string"==typeof e?o(n,e.split(" ")):Array.isArray(e)?o(n,e):Object.keys(e).forEach((function(n){Object.assign(r,q(e[n],t,n))})),r;function o(e,n){t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((function(t){const n=t.split("|");r[n[0]]=[e,$(n[0],n[1])]}))}}function $(e,t){return t?Number(t):function(e){return U.includes(e.toLowerCase())}(e)?0:1}function V(e,{plugins:t}){function n(t,n){return new RegExp(p(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}class r{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=n(function(e,t="|"){let n=0;return e.map((e=>{n+=1;const t=n;let r=p(e),o="";for(;r.length>0;){const e=f.exec(r);if(!e){o+=r;break}o+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?o+="\\"+String(Number(e[1])+t):(o+=e[0],"("===e[0]&&n++)}return o})).map((e=>`(${e})`)).join(t)}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class o{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new r;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=i(e.classNameAliases||{}),function t(r,a){const s=r;if(r.isCompiled)return s;[B].forEach((e=>e(r,a))),e.compilerExtensions.forEach((e=>e(r,a))),r.__beforeBegin=null,[D,L,F].forEach((e=>e(r,a))),r.isCompiled=!0;let l=null;if("object"==typeof r.keywords&&(l=r.keywords.$pattern,delete r.keywords.$pattern),r.keywords&&(r.keywords=q(r.keywords,e.case_insensitive)),r.lexemes&&l)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l=l||r.lexemes||/\w+/,s.keywordPatternRe=n(l,!0),a&&(r.begin||(r.begin=/\B|\b/),s.beginRe=n(r.begin),r.endSameAsBegin&&(r.end=r.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),r.end&&(s.endRe=n(r.end)),s.terminatorEnd=p(r.end)||"",r.endsWithParent&&a.terminatorEnd&&(s.terminatorEnd+=(r.end?"|":"")+a.terminatorEnd)),r.illegal&&(s.illegalRe=n(r.illegal)),r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return i(e,{variants:null},t)})));if(e.cachedVariants)return e.cachedVariants;if(W(e))return i(e,{starts:e.starts?i(e.starts):null});if(Object.isFrozen(e))return i(e);return e}("self"===e?r:e)}))),r.contains.forEach((function(e){t(e,s)})),r.starts&&t(r.starts,a),s.matcher=function(e){const t=new o;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(s),s}(e)}function W(e){return!!e&&(e.endsWithParent||W(e.starts))}function H(e){const t={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,a(this.code);let t={};return this.autoDetect?(t=e.highlightAuto(this.code),this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),t.value},autoDetect(){return!this.language||(e=this.autodetect,Boolean(e||""===e));var e},ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:t,VuePlugin:{install(e){e.component("highlightjs",t)}}}}const J={"after:highlightElement":({el:e,result:t,text:n})=>{const r=G(e);if(!r.length)return;const o=document.createElement("div");o.innerHTML=t.value,t.value=function(e,t,n){let r=0,o="";const i=[];function s(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function u(e){o+=""}function c(e){("start"===e.event?l:u)(e.node)}for(;e.length||t.length;){let t=s();if(o+=a(n.substring(r,t[0].offset)),r=t[0].offset,t===e){i.reverse().forEach(u);do{c(t.splice(0,1)[0]),t=s()}while(t===e&&t.length&&t[0].offset===r);i.reverse().forEach(l)}else"start"===t[0].event?i.push(t[0].node):i.pop(),c(t.splice(0,1)[0])}return o+a(n.substr(r))}(r,G(o),n)}};function K(e){return e.nodeName.toLowerCase()}function G(e){const t=[];return function e(n,r){for(let o=n.firstChild;o;o=o.nextSibling)3===o.nodeType?r+=o.nodeValue.length:1===o.nodeType&&(t.push({event:"start",offset:r,node:o}),r=e(o,r),K(o).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:o}));return r}(e,0),t}const Z={},Y=e=>{console.error(e)},Q=(e,...t)=>{console.log(`WARN: ${e}`,...t)},X=(e,t)=>{Z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Z[`${e}/${t}`]=!0)},ee=a,te=i,ne=Symbol("nomatch");var re=function(e){const t=Object.create(null),r=Object.create(null),a=[];let i=!0;const s=/(^(<[^>]+>|\t|)+|\n)/gm,l="Could not find the language '{}', did you forget to load/include a language module?",u={disableAutodetect:!0,name:"Plain text",contains:[]};let p={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:c};function f(e){return p.noHighlightRe.test(e)}function h(e,t,n,r){let o="",a="";"object"==typeof t?(o=e,n=t.ignoreIllegals,a=t.language,r=void 0):(X("10.7.0","highlight(lang, code, ...args) has been deprecated."),X("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),a=e,o=t);const i={code:o,language:a};C("before:highlight",i);const s=i.result?i.result:d(i.language,i.code,n,r);return s.code=i.code,C("after:highlight",s),s}function d(e,n,r,s){function u(e,t){const n=E.case_insensitive?t[0].toLowerCase():t[0];return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}function c(){null!=A.subLanguage?function(){if(""===O)return;let e=null;if("string"==typeof A.subLanguage){if(!t[A.subLanguage])return void k.addText(O);e=d(A.subLanguage,O,!0,C[A.subLanguage]),C[A.subLanguage]=e.top}else e=m(O,A.subLanguage.length?A.subLanguage:null);A.relevance>0&&(j+=e.relevance),k.addSublanguage(e.emitter,e.language)}():function(){if(!A.keywords)return void k.addText(O);let e=0;A.keywordPatternRe.lastIndex=0;let t=A.keywordPatternRe.exec(O),n="";for(;t;){n+=O.substring(e,t.index);const r=u(A,t);if(r){const[e,o]=r;if(k.addText(n),n="",j+=o,e.startsWith("_"))n+=t[0];else{const n=E.classNameAliases[e]||e;k.addKeyword(t[0],n)}}else n+=t[0];e=A.keywordPatternRe.lastIndex,t=A.keywordPatternRe.exec(O)}n+=O.substr(e),k.addText(n)}(),O=""}function f(e){return e.className&&k.openNode(E.classNameAliases[e.className]||e.className),A=Object.create(e,{parent:{value:A}}),A}function h(e,t,n){let r=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(r){if(e["on:end"]){const n=new o(e);e["on:end"](t,n),n.isMatchIgnored&&(r=!1)}if(r){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return h(e.parent,t,n)}function g(e){return 0===A.matcher.regexIndex?(O+=e[0],1):(N=!0,0)}function y(e){const t=e[0],n=e.rule,r=new o(n),a=[n.__beforeBegin,n["on:begin"]];for(const n of a)if(n&&(n(e,r),r.isMatchIgnored))return g(t);return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),n.skip?O+=t:(n.excludeBegin&&(O+=t),c(),n.returnBegin||n.excludeBegin||(O=t)),f(n),n.returnBegin?0:t.length}function v(e){const t=e[0],r=n.substr(e.index),o=h(A,e,r);if(!o)return ne;const a=A;a.skip?O+=t:(a.returnEnd||a.excludeEnd||(O+=t),c(),a.excludeEnd&&(O=t));do{A.className&&k.closeNode(),A.skip||A.subLanguage||(j+=A.relevance),A=A.parent}while(A!==o.parent);return o.starts&&(o.endSameAsBegin&&(o.starts.endRe=o.endRe),f(o.starts)),a.returnEnd?0:t.length}let b={};function w(t,o){const a=o&&o[0];if(O+=t,null==a)return c(),0;if("begin"===b.type&&"end"===o.type&&b.index===o.index&&""===a){if(O+=n.slice(o.index,o.index+1),!i){const t=new Error("0 width match regex");throw t.languageName=e,t.badRule=b.rule,t}return 1}if(b=o,"begin"===o.type)return y(o);if("illegal"===o.type&&!r){const e=new Error('Illegal lexeme "'+a+'" for mode "'+(A.className||"")+'"');throw e.mode=A,e}if("end"===o.type){const e=v(o);if(e!==ne)return e}if("illegal"===o.type&&""===a)return 1;if(I>1e5&&I>3*o.index){throw new Error("potential infinite loop, way more iterations than matches")}return O+=a,a.length}const E=_(e);if(!E)throw Y(l.replace("{}",e)),new Error('Unknown language: "'+e+'"');const x=V(E,{plugins:a});let S="",A=s||x;const C={},k=new p.__emitter(p);!function(){const e=[];for(let t=A;t!==E;t=t.parent)t.className&&e.unshift(t.className);e.forEach((e=>k.openNode(e)))}();let O="",j=0,T=0,I=0,N=!1;try{for(A.matcher.considerAll();;){I++,N?N=!1:A.matcher.considerAll(),A.matcher.lastIndex=T;const e=A.matcher.exec(n);if(!e)break;const t=w(n.substring(T,e.index),e);T=e.index+t}return w(n.substr(T)),k.closeAllNodes(),k.finalize(),S=k.toHTML(),{relevance:Math.floor(j),value:S,language:e,illegal:!1,emitter:k,top:A}}catch(t){if(t.message&&t.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:t.message,context:n.slice(T-100,T+100),mode:t.mode},sofar:S,relevance:0,value:ee(n),emitter:k};if(i)return{illegal:!1,relevance:0,value:ee(n),emitter:k,language:e,top:A,errorRaised:t};throw t}}function m(e,n){n=n||p.languages||Object.keys(t);const r=function(e){const t={relevance:0,emitter:new p.__emitter(p),value:ee(e),illegal:!1,top:u};return t.emitter.addText(e),t}(e),o=n.filter(_).filter(A).map((t=>d(t,e,!1)));o.unshift(r);const a=o.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(_(e.language).supersetOf===t.language)return 1;if(_(t.language).supersetOf===e.language)return-1}return 0})),[i,s]=a,l=i;return l.second_best=s,l}const g={"before:highlightElement":({el:e})=>{p.useBR&&(e.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"))},"after:highlightElement":({result:e})=>{p.useBR&&(e.value=e.value.replace(/\n/g,"
"))}},y=/^(<[^>]+>|\t)+/gm,v={"after:highlightElement":({result:e})=>{p.tabReplace&&(e.value=e.value.replace(y,(e=>e.replace(/\t/g,p.tabReplace))))}};function b(e){let t=null;const n=function(e){let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";const n=p.languageDetectRe.exec(t);if(n){const t=_(n[1]);return t||(Q(l.replace("{}",n[1])),Q("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}return t.split(/\s+/).find((e=>f(e)||_(e)))}(e);if(f(n))return;C("before:highlightElement",{el:e,language:n}),t=e;const o=t.textContent,a=n?h(o,{language:n,ignoreIllegals:!0}):m(o);C("after:highlightElement",{el:e,result:a,text:o}),e.innerHTML=a.value,function(e,t,n){const o=t?r[t]:n;e.classList.add("hljs"),o&&e.classList.add(o)}(e,n,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const w=()=>{if(w.called)return;w.called=!0,X("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead.");document.querySelectorAll("pre code").forEach(b)};let E=!1;function x(){if("loading"===document.readyState)return void(E=!0);document.querySelectorAll("pre code").forEach(b)}function _(e){return e=(e||"").toLowerCase(),t[e]||t[r[e]]}function S(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{r[e.toLowerCase()]=t}))}function A(e){const t=_(e);return t&&!t.disableAutodetect}function C(e,t){const n=e;a.forEach((function(e){e[n]&&e[n](t)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){E&&x()}),!1),Object.assign(e,{highlight:h,highlightAuto:m,highlightAll:x,fixMarkup:function(e){return X("10.2.0","fixMarkup will be removed entirely in v11.0"),X("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),t=e,p.tabReplace||p.useBR?t.replace(s,(e=>"\n"===e?p.useBR?"
":e:p.tabReplace?e.replace(/\t/g,p.tabReplace):e)):t;var t},highlightElement:b,highlightBlock:function(e){return X("10.7.0","highlightBlock will be removed entirely in v12.0"),X("10.7.0","Please use highlightElement now."),b(e)},configure:function(e){e.useBR&&(X("10.3.0","'useBR' will be removed entirely in v11.0"),X("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),p=te(p,e)},initHighlighting:w,initHighlightingOnLoad:function(){X("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),E=!0},registerLanguage:function(n,r){let o=null;try{o=r(e)}catch(e){if(Y("Language definition for '{}' could not be registered.".replace("{}",n)),!i)throw e;Y(e),o=u}o.name||(o.name=n),t[n]=o,o.rawDefinition=r.bind(null,e),o.aliases&&S(o.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(const t of Object.keys(r))r[t]===e&&delete r[t]},listLanguages:function(){return Object.keys(t)},getLanguage:_,registerAliases:S,requireLanguage:function(e){X("10.4.0","requireLanguage will be removed entirely in v11."),X("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const t=_(e);if(t)return t;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:A,inherit:te,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{e["before:highlightBlock"](Object.assign({block:t.el},t))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{e["after:highlightBlock"](Object.assign({block:t.el},t))})}(e),a.push(e)},vuePlugin:H(e).VuePlugin}),e.debugMode=function(){i=!1},e.safeMode=function(){i=!0},e.versionString="10.7.3";for(const e in R)"object"==typeof R[e]&&n(R[e]);return Object.assign(e,R),e.addPlugin(g),e.addPlugin(J),e.addPlugin(v),e}({});e.exports=re},61519:e=>{function t(...e){return e.map((e=>{return(t=e)?"string"==typeof t?t:t.source:null;var t})).join("")}e.exports=function(e){const n={},r={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{begin:t(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},r]});const o={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},a={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},i={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,o]};o.contains.push(i);const s={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,n]},l=e.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),u={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[l,e.SHEBANG(),u,s,e.HASH_COMMENT_MODE,a,i,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},n]}}},30786:e=>{function t(...e){return e.map((e=>{return(t=e)?"string"==typeof t?t:t.source:null;var t})).join("")}e.exports=function(e){const n="HTTP/(2|1\\.[01])",r={className:"attribute",begin:t("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},o=[r,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+n+" \\d{3})",end:/$/,contains:[{className:"meta",begin:n},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:o}},{begin:"(?=^[A-Z]+ (.*?) "+n+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:n},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:o}},e.inherit(r,{relevance:0})]}}},96344:e=>{const t="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],o=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function a(e){return i("(?=",e,")")}function i(...e){return e.map((e=>{return(t=e)?"string"==typeof t?t:t.source:null;var t})).join("")}e.exports=function(e){const s=t,l="<>",u="",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];"<"!==r?">"===r&&(((e,{after:t})=>{const n="",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:_}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:l,end:u},{begin:c.begin,"on:begin":c.isTrulyOpeningTag,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:p,contains:["self",e.inherit(e.TITLE_MODE,{begin:s}),S],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[S,e.inherit(e.TITLE_MODE,{begin:s})]},{variants:[{begin:"\\."+s},{begin:"\\$"+s}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:s}),"self",S]},{begin:"(get|set)\\s+(?="+s+"\\()",end:/\{/,keywords:"get set",contains:[e.inherit(e.TITLE_MODE,{begin:s}),{begin:/\(\)/},S]},{begin:/\$[(.]/}]}}},82026:e=>{e.exports=function(e){const t={literal:"true false null"},n=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],r=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],o={end:",",endsWithParent:!0,excludeEnd:!0,contains:r,keywords:t},a={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(o,{begin:/:/})].concat(n),illegal:"\\S"},i={begin:"\\[",end:"\\]",contains:[e.inherit(o)],illegal:"\\S"};return r.push(a,i),n.forEach((function(e){r.push(e)})),{name:"JSON",contains:r,keywords:t,illegal:"\\S"}}},66336:e=>{e.exports=function(e){const t={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},n={begin:"`[\\s\\S]",relevance:0},r={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},o={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[n,r,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},a={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},i=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),s={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},u={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[r]}]},c={begin:/using\s/,end:/$/,returnBegin:!0,contains:[o,a,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},p={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},f={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(t.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},h=[f,i,n,e.NUMBER_MODE,o,a,s,r,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/@\B/,relevance:0}],d={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",h,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return f.contains.unshift(d),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:t,contains:h.concat(l,u,c,p,d)}}},42157:e=>{function t(e){return e?"string"==typeof e?e:e.source:null}function n(e){return r("(?=",e,")")}function r(...e){return e.map((e=>t(e))).join("")}function o(...e){return"("+e.map((e=>t(e))).join("|")+")"}e.exports=function(e){const t=r(/[A-Z_]/,r("(",/[A-Z0-9_.-]*:/,")?"),/[A-Z0-9_.-]*/),a={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},s=e.inherit(i,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),u=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),c={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,u,l,s,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[i,s,u,l]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},a,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[c],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[c],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:r(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:c}]},{className:"tag",begin:r(/<\//,n(r(t,/>/))),contains:[{className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},54587:e=>{e.exports=function(e){var t="true false yes no null",n="[\\w#;/?:@&=+$,.~*'()[\\]]+",r={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},o=e.inherit(r,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),a={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},i={end:",",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},s={begin:/\{/,end:/\}/,contains:[i],illegal:"\\n",relevance:0},l={begin:"\\[",end:"\\]",contains:[i],illegal:"\\n",relevance:0},u=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+n},{className:"type",begin:"!<"+n+">"},{className:"type",begin:"!"+n},{className:"type",begin:"!!"+n},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},a,{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,l,r],c=[...u];return c.pop(),c.push(o),i.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:u}}},8679:(e,t,n)=>{"use strict";var r=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,h=Object.getPrototypeOf,d=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(d){var o=h(n);o&&o!==d&&e(t,o,r)}var i=c(n);p&&(i=i.concat(p(n)));for(var s=l(t),m=l(n),g=0;g{t.read=function(e,t,n,r,o){var a,i,s=8*o-r-1,l=(1<>1,c=-7,p=n?o-1:0,f=n?-1:1,h=e[t+p];for(p+=f,a=h&(1<<-c)-1,h>>=-c,c+=s;c>0;a=256*a+e[t+p],p+=f,c-=8);for(i=a&(1<<-c)-1,a>>=-c,c+=r;c>0;i=256*i+e[t+p],p+=f,c-=8);if(0===a)a=1-u;else{if(a===l)return i?NaN:1/0*(h?-1:1);i+=Math.pow(2,r),a-=u}return(h?-1:1)*i*Math.pow(2,a-r)},t.write=function(e,t,n,r,o,a){var i,s,l,u=8*a-o-1,c=(1<>1,f=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:a-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=c):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),(t+=i+p>=1?f/l:f*Math.pow(2,1-p))*l>=2&&(i++,l/=2),i+p>=c?(s=0,i=c):i+p>=1?(s=(t*l-1)*Math.pow(2,o),i+=p):(s=t*Math.pow(2,p-1)*Math.pow(2,o),i=0));o>=8;e[n+h]=255&s,h+=d,s/=256,o-=8);for(i=i<0;e[n+h]=255&i,h+=d,i/=256,u-=8);e[n+h-d]|=128*m}},43393:function(e){e.exports=function(){"use strict";var e=Array.prototype.slice;function t(e,t){t&&(e.prototype=Object.create(t.prototype)),e.prototype.constructor=e}function n(e){return i(e)?e:J(e)}function r(e){return s(e)?e:K(e)}function o(e){return l(e)?e:G(e)}function a(e){return i(e)&&!u(e)?e:Z(e)}function i(e){return!(!e||!e[p])}function s(e){return!(!e||!e[f])}function l(e){return!(!e||!e[h])}function u(e){return s(e)||l(e)}function c(e){return!(!e||!e[d])}t(r,n),t(o,n),t(a,n),n.isIterable=i,n.isKeyed=s,n.isIndexed=l,n.isAssociative=u,n.isOrdered=c,n.Keyed=r,n.Indexed=o,n.Set=a;var p="@@__IMMUTABLE_ITERABLE__@@",f="@@__IMMUTABLE_KEYED__@@",h="@@__IMMUTABLE_INDEXED__@@",d="@@__IMMUTABLE_ORDERED__@@",m="delete",g=5,y=1<>>0;if(""+n!==t||4294967295===n)return NaN;t=n}return t<0?C(e)+t:t}function O(){return!0}function j(e,t,n){return(0===e||void 0!==n&&e<=-n)&&(void 0===t||void 0!==n&&t>=n)}function T(e,t){return N(e,t,0)}function I(e,t){return N(e,t,t)}function N(e,t,n){return void 0===e?n:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}var P=0,R=1,M=2,D="function"==typeof Symbol&&Symbol.iterator,L="@@iterator",B=D||L;function F(e){this.next=e}function U(e,t,n,r){var o=0===e?t:1===e?n:[t,n];return r?r.value=o:r={value:o,done:!1},r}function z(){return{value:void 0,done:!0}}function q(e){return!!W(e)}function $(e){return e&&"function"==typeof e.next}function V(e){var t=W(e);return t&&t.call(e)}function W(e){var t=e&&(D&&e[D]||e[L]);if("function"==typeof t)return t}function H(e){return e&&"number"==typeof e.length}function J(e){return null==e?ie():i(e)?e.toSeq():ue(e)}function K(e){return null==e?ie().toKeyedSeq():i(e)?s(e)?e.toSeq():e.fromEntrySeq():se(e)}function G(e){return null==e?ie():i(e)?s(e)?e.entrySeq():e.toIndexedSeq():le(e)}function Z(e){return(null==e?ie():i(e)?s(e)?e.entrySeq():e:le(e)).toSetSeq()}F.prototype.toString=function(){return"[Iterator]"},F.KEYS=P,F.VALUES=R,F.ENTRIES=M,F.prototype.inspect=F.prototype.toSource=function(){return this.toString()},F.prototype[B]=function(){return this},t(J,n),J.of=function(){return J(arguments)},J.prototype.toSeq=function(){return this},J.prototype.toString=function(){return this.__toString("Seq {","}")},J.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},J.prototype.__iterate=function(e,t){return pe(this,e,t,!0)},J.prototype.__iterator=function(e,t){return fe(this,e,t,!0)},t(K,J),K.prototype.toKeyedSeq=function(){return this},t(G,J),G.of=function(){return G(arguments)},G.prototype.toIndexedSeq=function(){return this},G.prototype.toString=function(){return this.__toString("Seq [","]")},G.prototype.__iterate=function(e,t){return pe(this,e,t,!1)},G.prototype.__iterator=function(e,t){return fe(this,e,t,!1)},t(Z,J),Z.of=function(){return Z(arguments)},Z.prototype.toSetSeq=function(){return this},J.isSeq=ae,J.Keyed=K,J.Set=Z,J.Indexed=G;var Y,Q,X,ee="@@__IMMUTABLE_SEQ__@@";function te(e){this._array=e,this.size=e.length}function ne(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function re(e){this._iterable=e,this.size=e.length||e.size}function oe(e){this._iterator=e,this._iteratorCache=[]}function ae(e){return!(!e||!e[ee])}function ie(){return Y||(Y=new te([]))}function se(e){var t=Array.isArray(e)?new te(e).fromEntrySeq():$(e)?new oe(e).fromEntrySeq():q(e)?new re(e).fromEntrySeq():"object"==typeof e?new ne(e):void 0;if(!t)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+e);return t}function le(e){var t=ce(e);if(!t)throw new TypeError("Expected Array or iterable object of values: "+e);return t}function ue(e){var t=ce(e)||"object"==typeof e&&new ne(e);if(!t)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+e);return t}function ce(e){return H(e)?new te(e):$(e)?new oe(e):q(e)?new re(e):void 0}function pe(e,t,n,r){var o=e._cache;if(o){for(var a=o.length-1,i=0;i<=a;i++){var s=o[n?a-i:i];if(!1===t(s[1],r?s[0]:i,e))return i+1}return i}return e.__iterateUncached(t,n)}function fe(e,t,n,r){var o=e._cache;if(o){var a=o.length-1,i=0;return new F((function(){var e=o[n?a-i:i];return i++>a?z():U(t,r?e[0]:i-1,e[1])}))}return e.__iteratorUncached(t,n)}function he(e,t){return t?de(t,e,"",{"":e}):me(e)}function de(e,t,n,r){return Array.isArray(t)?e.call(r,n,G(t).map((function(n,r){return de(e,n,r,t)}))):ge(t)?e.call(r,n,K(t).map((function(n,r){return de(e,n,r,t)}))):t}function me(e){return Array.isArray(e)?G(e).map(me).toList():ge(e)?K(e).map(me).toMap():e}function ge(e){return e&&(e.constructor===Object||void 0===e.constructor)}function ye(e,t){if(e===t||e!=e&&t!=t)return!0;if(!e||!t)return!1;if("function"==typeof e.valueOf&&"function"==typeof t.valueOf){if((e=e.valueOf())===(t=t.valueOf())||e!=e&&t!=t)return!0;if(!e||!t)return!1}return!("function"!=typeof e.equals||"function"!=typeof t.equals||!e.equals(t))}function ve(e,t){if(e===t)return!0;if(!i(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||s(e)!==s(t)||l(e)!==l(t)||c(e)!==c(t))return!1;if(0===e.size&&0===t.size)return!0;var n=!u(e);if(c(e)){var r=e.entries();return t.every((function(e,t){var o=r.next().value;return o&&ye(o[1],e)&&(n||ye(o[0],t))}))&&r.next().done}var o=!1;if(void 0===e.size)if(void 0===t.size)"function"==typeof e.cacheResult&&e.cacheResult();else{o=!0;var a=e;e=t,t=a}var p=!0,f=t.__iterate((function(t,r){if(n?!e.has(t):o?!ye(t,e.get(r,b)):!ye(e.get(r,b),t))return p=!1,!1}));return p&&e.size===f}function be(e,t){if(!(this instanceof be))return new be(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(Q)return Q;Q=this}}function we(e,t){if(!e)throw new Error(t)}function Ee(e,t,n){if(!(this instanceof Ee))return new Ee(e,t,n);if(we(0!==n,"Cannot step a Range by 0"),e=e||0,void 0===t&&(t=1/0),n=void 0===n?1:Math.abs(n),tr?z():U(e,o,n[t?r-o++:o++])}))},t(ne,K),ne.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},ne.prototype.has=function(e){return this._object.hasOwnProperty(e)},ne.prototype.__iterate=function(e,t){for(var n=this._object,r=this._keys,o=r.length-1,a=0;a<=o;a++){var i=r[t?o-a:a];if(!1===e(n[i],i,this))return a+1}return a},ne.prototype.__iterator=function(e,t){var n=this._object,r=this._keys,o=r.length-1,a=0;return new F((function(){var i=r[t?o-a:a];return a++>o?z():U(e,i,n[i])}))},ne.prototype[d]=!0,t(re,G),re.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var n=V(this._iterable),r=0;if($(n))for(var o;!(o=n.next()).done&&!1!==e(o.value,r++,this););return r},re.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=V(this._iterable);if(!$(n))return new F(z);var r=0;return new F((function(){var t=n.next();return t.done?t:U(e,r++,t.value)}))},t(oe,G),oe.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var n,r=this._iterator,o=this._iteratorCache,a=0;a=r.length){var t=n.next();if(t.done)return t;r[o]=t.value}return U(e,o,r[o++])}))},t(be,G),be.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},be.prototype.get=function(e,t){return this.has(e)?this._value:t},be.prototype.includes=function(e){return ye(this._value,e)},be.prototype.slice=function(e,t){var n=this.size;return j(e,t,n)?this:new be(this._value,I(t,n)-T(e,n))},be.prototype.reverse=function(){return this},be.prototype.indexOf=function(e){return ye(this._value,e)?0:-1},be.prototype.lastIndexOf=function(e){return ye(this._value,e)?this.size:-1},be.prototype.__iterate=function(e,t){for(var n=0;n=0&&t=0&&nn?z():U(e,a++,i)}))},Ee.prototype.equals=function(e){return e instanceof Ee?this._start===e._start&&this._end===e._end&&this._step===e._step:ve(this,e)},t(xe,n),t(_e,xe),t(Se,xe),t(Ae,xe),xe.Keyed=_e,xe.Indexed=Se,xe.Set=Ae;var Ce="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(e,t){var n=65535&(e|=0),r=65535&(t|=0);return n*r+((e>>>16)*r+n*(t>>>16)<<16>>>0)|0};function ke(e){return e>>>1&1073741824|3221225471&e}function Oe(e){if(!1===e||null==e)return 0;if("function"==typeof e.valueOf&&(!1===(e=e.valueOf())||null==e))return 0;if(!0===e)return 1;var t=typeof e;if("number"===t){if(e!=e||e===1/0)return 0;var n=0|e;for(n!==e&&(n^=4294967295*e);e>4294967295;)n^=e/=4294967295;return ke(n)}if("string"===t)return e.length>Fe?je(e):Te(e);if("function"==typeof e.hashCode)return e.hashCode();if("object"===t)return Ie(e);if("function"==typeof e.toString)return Te(e.toString());throw new Error("Value type "+t+" cannot be hashed.")}function je(e){var t=qe[e];return void 0===t&&(t=Te(e),ze===Ue&&(ze=0,qe={}),ze++,qe[e]=t),t}function Te(e){for(var t=0,n=0;n0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}var Me,De="function"==typeof WeakMap;De&&(Me=new WeakMap);var Le=0,Be="__immutablehash__";"function"==typeof Symbol&&(Be=Symbol(Be));var Fe=16,Ue=255,ze=0,qe={};function $e(e){we(e!==1/0,"Cannot perform this action with an infinite size.")}function Ve(e){return null==e?ot():We(e)&&!c(e)?e:ot().withMutations((function(t){var n=r(e);$e(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function We(e){return!(!e||!e[Je])}t(Ve,_e),Ve.of=function(){var t=e.call(arguments,0);return ot().withMutations((function(e){for(var n=0;n=t.length)throw new Error("Missing value for key: "+t[n]);e.set(t[n],t[n+1])}}))},Ve.prototype.toString=function(){return this.__toString("Map {","}")},Ve.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},Ve.prototype.set=function(e,t){return at(this,e,t)},Ve.prototype.setIn=function(e,t){return this.updateIn(e,b,(function(){return t}))},Ve.prototype.remove=function(e){return at(this,e,b)},Ve.prototype.deleteIn=function(e){return this.updateIn(e,(function(){return b}))},Ve.prototype.update=function(e,t,n){return 1===arguments.length?e(this):this.updateIn([e],t,n)},Ve.prototype.updateIn=function(e,t,n){n||(n=t,t=void 0);var r=gt(this,xn(e),t,n);return r===b?void 0:r},Ve.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):ot()},Ve.prototype.merge=function(){return ft(this,void 0,arguments)},Ve.prototype.mergeWith=function(t){return ft(this,t,e.call(arguments,1))},Ve.prototype.mergeIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.merge?e.merge.apply(e,n):n[n.length-1]}))},Ve.prototype.mergeDeep=function(){return ft(this,ht,arguments)},Ve.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return ft(this,dt(t),n)},Ve.prototype.mergeDeepIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return"function"==typeof e.mergeDeep?e.mergeDeep.apply(e,n):n[n.length-1]}))},Ve.prototype.sort=function(e){return qt(pn(this,e))},Ve.prototype.sortBy=function(e,t){return qt(pn(this,t,e))},Ve.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},Ve.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new S)},Ve.prototype.asImmutable=function(){return this.__ensureOwner()},Ve.prototype.wasAltered=function(){return this.__altered},Ve.prototype.__iterator=function(e,t){return new et(this,e,t)},Ve.prototype.__iterate=function(e,t){var n=this,r=0;return this._root&&this._root.iterate((function(t){return r++,e(t[1],t[0],n)}),t),r},Ve.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?rt(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Ve.isMap=We;var He,Je="@@__IMMUTABLE_MAP__@@",Ke=Ve.prototype;function Ge(e,t){this.ownerID=e,this.entries=t}function Ze(e,t,n){this.ownerID=e,this.bitmap=t,this.nodes=n}function Ye(e,t,n){this.ownerID=e,this.count=t,this.nodes=n}function Qe(e,t,n){this.ownerID=e,this.keyHash=t,this.entries=n}function Xe(e,t,n){this.ownerID=e,this.keyHash=t,this.entry=n}function et(e,t,n){this._type=t,this._reverse=n,this._stack=e._root&&nt(e._root)}function tt(e,t){return U(e,t[0],t[1])}function nt(e,t){return{node:e,index:0,__prev:t}}function rt(e,t,n,r){var o=Object.create(Ke);return o.size=e,o._root=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function ot(){return He||(He=rt(0))}function at(e,t,n){var r,o;if(e._root){var a=x(w),i=x(E);if(r=it(e._root,e.__ownerID,0,void 0,t,n,a,i),!i.value)return e;o=e.size+(a.value?n===b?-1:1:0)}else{if(n===b)return e;o=1,r=new Ge(e.__ownerID,[[t,n]])}return e.__ownerID?(e.size=o,e._root=r,e.__hash=void 0,e.__altered=!0,e):r?rt(o,r):ot()}function it(e,t,n,r,o,a,i,s){return e?e.update(t,n,r,o,a,i,s):a===b?e:(_(s),_(i),new Xe(t,r,[o,a]))}function st(e){return e.constructor===Xe||e.constructor===Qe}function lt(e,t,n,r,o){if(e.keyHash===r)return new Qe(t,r,[e.entry,o]);var a,i=(0===n?e.keyHash:e.keyHash>>>n)&v,s=(0===n?r:r>>>n)&v;return new Ze(t,1<>>=1)i[s]=1&n?t[a++]:void 0;return i[r]=o,new Ye(e,a+1,i)}function ft(e,t,n){for(var o=[],a=0;a>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135,e+=e>>8,127&(e+=e>>16)}function vt(e,t,n,r){var o=r?e:A(e);return o[t]=n,o}function bt(e,t,n,r){var o=e.length+1;if(r&&t+1===o)return e[t]=n,e;for(var a=new Array(o),i=0,s=0;s=Et)return ut(e,l,r,o);var f=e&&e===this.ownerID,h=f?l:A(l);return p?s?u===c-1?h.pop():h[u]=h.pop():h[u]=[r,o]:h.push([r,o]),f?(this.entries=h,this):new Ge(e,h)}},Ze.prototype.get=function(e,t,n,r){void 0===t&&(t=Oe(n));var o=1<<((0===e?t:t>>>e)&v),a=this.bitmap;return 0==(a&o)?r:this.nodes[yt(a&o-1)].get(e+g,t,n,r)},Ze.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Oe(r));var s=(0===t?n:n>>>t)&v,l=1<=xt)return pt(e,f,u,s,d);if(c&&!d&&2===f.length&&st(f[1^p]))return f[1^p];if(c&&d&&1===f.length&&st(d))return d;var m=e&&e===this.ownerID,y=c?d?u:u^l:u|l,w=c?d?vt(f,p,d,m):wt(f,p,m):bt(f,p,d,m);return m?(this.bitmap=y,this.nodes=w,this):new Ze(e,y,w)},Ye.prototype.get=function(e,t,n,r){void 0===t&&(t=Oe(n));var o=(0===e?t:t>>>e)&v,a=this.nodes[o];return a?a.get(e+g,t,n,r):r},Ye.prototype.update=function(e,t,n,r,o,a,i){void 0===n&&(n=Oe(r));var s=(0===t?n:n>>>t)&v,l=o===b,u=this.nodes,c=u[s];if(l&&!c)return this;var p=it(c,e,t+g,n,r,o,a,i);if(p===c)return this;var f=this.count;if(c){if(!p&&--f<_t)return ct(e,u,f,s)}else f++;var h=e&&e===this.ownerID,d=vt(u,s,p,h);return h?(this.count=f,this.nodes=d,this):new Ye(e,f,d)},Qe.prototype.get=function(e,t,n,r){for(var o=this.entries,a=0,i=o.length;a0&&r=0&&e>>t&v;if(r>=this.array.length)return new Ot([],e);var o,a=0===r;if(t>0){var i=this.array[r];if((o=i&&i.removeBefore(e,t-g,n))===i&&a)return this}if(a&&!o)return this;var s=Lt(this,e);if(!a)for(var l=0;l>>t&v;if(o>=this.array.length)return this;if(t>0){var a=this.array[o];if((r=a&&a.removeAfter(e,t-g,n))===a&&o===this.array.length-1)return this}var i=Lt(this,e);return i.array.splice(o+1),r&&(i.array[o]=r),i};var jt,Tt,It={};function Nt(e,t){var n=e._origin,r=e._capacity,o=zt(r),a=e._tail;return i(e._root,e._level,0);function i(e,t,n){return 0===t?s(e,n):l(e,t,n)}function s(e,i){var s=i===o?a&&a.array:e&&e.array,l=i>n?0:n-i,u=r-i;return u>y&&(u=y),function(){if(l===u)return It;var e=t?--u:l++;return s&&s[e]}}function l(e,o,a){var s,l=e&&e.array,u=a>n?0:n-a>>o,c=1+(r-a>>o);return c>y&&(c=y),function(){for(;;){if(s){var e=s();if(e!==It)return e;s=null}if(u===c)return It;var n=t?--c:u++;s=i(l&&l[n],o-g,a+(n<=e.size||t<0)return e.withMutations((function(e){t<0?Ft(e,t).set(0,n):Ft(e,0,t+1).set(t,n)}));t+=e._origin;var r=e._tail,o=e._root,a=x(E);return t>=zt(e._capacity)?r=Dt(r,e.__ownerID,0,t,n,a):o=Dt(o,e.__ownerID,e._level,t,n,a),a.value?e.__ownerID?(e._root=o,e._tail=r,e.__hash=void 0,e.__altered=!0,e):Pt(e._origin,e._capacity,e._level,o,r):e}function Dt(e,t,n,r,o,a){var i,s=r>>>n&v,l=e&&s0){var u=e&&e.array[s],c=Dt(u,t,n-g,r,o,a);return c===u?e:((i=Lt(e,t)).array[s]=c,i)}return l&&e.array[s]===o?e:(_(a),i=Lt(e,t),void 0===o&&s===i.array.length-1?i.array.pop():i.array[s]=o,i)}function Lt(e,t){return t&&e&&t===e.ownerID?e:new Ot(e?e.array.slice():[],t)}function Bt(e,t){if(t>=zt(e._capacity))return e._tail;if(t<1<0;)n=n.array[t>>>r&v],r-=g;return n}}function Ft(e,t,n){void 0!==t&&(t|=0),void 0!==n&&(n|=0);var r=e.__ownerID||new S,o=e._origin,a=e._capacity,i=o+t,s=void 0===n?a:n<0?a+n:o+n;if(i===o&&s===a)return e;if(i>=s)return e.clear();for(var l=e._level,u=e._root,c=0;i+c<0;)u=new Ot(u&&u.array.length?[void 0,u]:[],r),c+=1<<(l+=g);c&&(i+=c,o+=c,s+=c,a+=c);for(var p=zt(a),f=zt(s);f>=1<p?new Ot([],r):h;if(h&&f>p&&ig;y-=g){var b=p>>>y&v;m=m.array[b]=Lt(m.array[b],r)}m.array[p>>>g&v]=h}if(s=f)i-=f,s-=f,l=g,u=null,d=d&&d.removeBefore(r,0,i);else if(i>o||f>>l&v;if(w!==f>>>l&v)break;w&&(c+=(1<o&&(u=u.removeBefore(r,l,i-c)),u&&fa&&(a=u.size),i(l)||(u=u.map((function(e){return he(e)}))),r.push(u)}return a>e.size&&(e=e.setSize(a)),mt(e,t,r)}function zt(e){return e>>g<=y&&i.size>=2*a.size?(r=(o=i.filter((function(e,t){return void 0!==e&&s!==t}))).toKeyedSeq().map((function(e){return e[0]})).flip().toMap(),e.__ownerID&&(r.__ownerID=o.__ownerID=e.__ownerID)):(r=a.remove(t),o=s===i.size-1?i.pop():i.set(s,void 0))}else if(l){if(n===i.get(s)[1])return e;r=a,o=i.set(s,[t,n])}else r=a.set(t,i.size),o=i.set(i.size,[t,n]);return e.__ownerID?(e.size=r.size,e._map=r,e._list=o,e.__hash=void 0,e):Vt(r,o)}function Jt(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function Kt(e){this._iter=e,this.size=e.size}function Gt(e){this._iter=e,this.size=e.size}function Zt(e){this._iter=e,this.size=e.size}function Yt(e){var t=bn(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=wn,t.__iterateUncached=function(t,n){var r=this;return e.__iterate((function(e,n){return!1!==t(n,e,r)}),n)},t.__iteratorUncached=function(t,n){if(t===M){var r=e.__iterator(t,n);return new F((function(){var e=r.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e}))}return e.__iterator(t===R?P:R,n)},t}function Qt(e,t,n){var r=bn(e);return r.size=e.size,r.has=function(t){return e.has(t)},r.get=function(r,o){var a=e.get(r,b);return a===b?o:t.call(n,a,r,e)},r.__iterateUncached=function(r,o){var a=this;return e.__iterate((function(e,o,i){return!1!==r(t.call(n,e,o,i),o,a)}),o)},r.__iteratorUncached=function(r,o){var a=e.__iterator(M,o);return new F((function(){var o=a.next();if(o.done)return o;var i=o.value,s=i[0];return U(r,s,t.call(n,i[1],s,e),o)}))},r}function Xt(e,t){var n=bn(e);return n._iter=e,n.size=e.size,n.reverse=function(){return e},e.flip&&(n.flip=function(){var t=Yt(e);return t.reverse=function(){return e.flip()},t}),n.get=function(n,r){return e.get(t?n:-1-n,r)},n.has=function(n){return e.has(t?n:-1-n)},n.includes=function(t){return e.includes(t)},n.cacheResult=wn,n.__iterate=function(t,n){var r=this;return e.__iterate((function(e,n){return t(e,n,r)}),!n)},n.__iterator=function(t,n){return e.__iterator(t,!n)},n}function en(e,t,n,r){var o=bn(e);return r&&(o.has=function(r){var o=e.get(r,b);return o!==b&&!!t.call(n,o,r,e)},o.get=function(r,o){var a=e.get(r,b);return a!==b&&t.call(n,a,r,e)?a:o}),o.__iterateUncached=function(o,a){var i=this,s=0;return e.__iterate((function(e,a,l){if(t.call(n,e,a,l))return s++,o(e,r?a:s-1,i)}),a),s},o.__iteratorUncached=function(o,a){var i=e.__iterator(M,a),s=0;return new F((function(){for(;;){var a=i.next();if(a.done)return a;var l=a.value,u=l[0],c=l[1];if(t.call(n,c,u,e))return U(o,r?u:s++,c,a)}}))},o}function tn(e,t,n){var r=Ve().asMutable();return e.__iterate((function(o,a){r.update(t.call(n,o,a,e),0,(function(e){return e+1}))})),r.asImmutable()}function nn(e,t,n){var r=s(e),o=(c(e)?qt():Ve()).asMutable();e.__iterate((function(a,i){o.update(t.call(n,a,i,e),(function(e){return(e=e||[]).push(r?[i,a]:a),e}))}));var a=vn(e);return o.map((function(t){return mn(e,a(t))}))}function rn(e,t,n,r){var o=e.size;if(void 0!==t&&(t|=0),void 0!==n&&(n===1/0?n=o:n|=0),j(t,n,o))return e;var a=T(t,o),i=I(n,o);if(a!=a||i!=i)return rn(e.toSeq().cacheResult(),t,n,r);var s,l=i-a;l==l&&(s=l<0?0:l);var u=bn(e);return u.size=0===s?s:e.size&&s||void 0,!r&&ae(e)&&s>=0&&(u.get=function(t,n){return(t=k(this,t))>=0&&ts)return z();var e=o.next();return r||t===R?e:U(t,l-1,t===P?void 0:e.value[1],e)}))},u}function on(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterate(r,o);var i=0;return e.__iterate((function(e,o,s){return t.call(n,e,o,s)&&++i&&r(e,o,a)})),i},r.__iteratorUncached=function(r,o){var a=this;if(o)return this.cacheResult().__iterator(r,o);var i=e.__iterator(M,o),s=!0;return new F((function(){if(!s)return z();var e=i.next();if(e.done)return e;var o=e.value,l=o[0],u=o[1];return t.call(n,u,l,a)?r===M?e:U(r,l,u,e):(s=!1,z())}))},r}function an(e,t,n,r){var o=bn(e);return o.__iterateUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterate(o,a);var s=!0,l=0;return e.__iterate((function(e,a,u){if(!s||!(s=t.call(n,e,a,u)))return l++,o(e,r?a:l-1,i)})),l},o.__iteratorUncached=function(o,a){var i=this;if(a)return this.cacheResult().__iterator(o,a);var s=e.__iterator(M,a),l=!0,u=0;return new F((function(){var e,a,c;do{if((e=s.next()).done)return r||o===R?e:U(o,u++,o===P?void 0:e.value[1],e);var p=e.value;a=p[0],c=p[1],l&&(l=t.call(n,c,a,i))}while(l);return o===M?e:U(o,a,c,e)}))},o}function sn(e,t){var n=s(e),o=[e].concat(t).map((function(e){return i(e)?n&&(e=r(e)):e=n?se(e):le(Array.isArray(e)?e:[e]),e})).filter((function(e){return 0!==e.size}));if(0===o.length)return e;if(1===o.length){var a=o[0];if(a===e||n&&s(a)||l(e)&&l(a))return a}var u=new te(o);return n?u=u.toKeyedSeq():l(e)||(u=u.toSetSeq()),(u=u.flatten(!0)).size=o.reduce((function(e,t){if(void 0!==e){var n=t.size;if(void 0!==n)return e+n}}),0),u}function ln(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var a=0,s=!1;function l(e,u){var c=this;e.__iterate((function(e,o){return(!t||u0}function dn(e,t,r){var o=bn(e);return o.size=new te(r).map((function(e){return e.size})).min(),o.__iterate=function(e,t){for(var n,r=this.__iterator(R,t),o=0;!(n=r.next()).done&&!1!==e(n.value,o++,this););return o},o.__iteratorUncached=function(e,o){var a=r.map((function(e){return e=n(e),V(o?e.reverse():e)})),i=0,s=!1;return new F((function(){var n;return s||(n=a.map((function(e){return e.next()})),s=n.some((function(e){return e.done}))),s?z():U(e,i++,t.apply(null,n.map((function(e){return e.value}))))}))},o}function mn(e,t){return ae(e)?t:e.constructor(t)}function gn(e){if(e!==Object(e))throw new TypeError("Expected [K, V] tuple: "+e)}function yn(e){return $e(e.size),C(e)}function vn(e){return s(e)?r:l(e)?o:a}function bn(e){return Object.create((s(e)?K:l(e)?G:Z).prototype)}function wn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):J.prototype.cacheResult.call(this)}function En(e,t){return e>t?1:e=0;n--)t={value:arguments[n],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):Kn(e,t)},$n.prototype.pushAll=function(e){if(0===(e=o(e)).size)return this;$e(e.size);var t=this.size,n=this._head;return e.reverse().forEach((function(e){t++,n={value:e,next:n}})),this.__ownerID?(this.size=t,this._head=n,this.__hash=void 0,this.__altered=!0,this):Kn(t,n)},$n.prototype.pop=function(){return this.slice(1)},$n.prototype.unshift=function(){return this.push.apply(this,arguments)},$n.prototype.unshiftAll=function(e){return this.pushAll(e)},$n.prototype.shift=function(){return this.pop.apply(this,arguments)},$n.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Gn()},$n.prototype.slice=function(e,t){if(j(e,t,this.size))return this;var n=T(e,this.size);if(I(t,this.size)!==this.size)return Se.prototype.slice.call(this,e,t);for(var r=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=r,this._head=o,this.__hash=void 0,this.__altered=!0,this):Kn(r,o)},$n.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Kn(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},$n.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var n=0,r=this._head;r&&!1!==e(r.value,n++,this);)r=r.next;return n},$n.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var n=0,r=this._head;return new F((function(){if(r){var t=r.value;return r=r.next,U(e,n++,t)}return z()}))},$n.isStack=Vn;var Wn,Hn="@@__IMMUTABLE_STACK__@@",Jn=$n.prototype;function Kn(e,t,n,r){var o=Object.create(Jn);return o.size=e,o._head=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function Gn(){return Wn||(Wn=Kn(0))}function Zn(e,t){var n=function(n){e.prototype[n]=t[n]};return Object.keys(t).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(n),e}Jn[Hn]=!0,Jn.withMutations=Ke.withMutations,Jn.asMutable=Ke.asMutable,Jn.asImmutable=Ke.asImmutable,Jn.wasAltered=Ke.wasAltered,n.Iterator=F,Zn(n,{toArray:function(){$e(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate((function(t,n){e[n]=t})),e},toIndexedSeq:function(){return new Kt(this)},toJS:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJS?e.toJS():e})).__toJS()},toJSON:function(){return this.toSeq().map((function(e){return e&&"function"==typeof e.toJSON?e.toJSON():e})).__toJS()},toKeyedSeq:function(){return new Jt(this,!0)},toMap:function(){return Ve(this.toKeyedSeq())},toObject:function(){$e(this.size);var e={};return this.__iterate((function(t,n){e[n]=t})),e},toOrderedMap:function(){return qt(this.toKeyedSeq())},toOrderedSet:function(){return Ln(s(this)?this.valueSeq():this)},toSet:function(){return jn(s(this)?this.valueSeq():this)},toSetSeq:function(){return new Gt(this)},toSeq:function(){return l(this)?this.toIndexedSeq():s(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return $n(s(this)?this.valueSeq():this)},toList:function(){return St(s(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(e,t){return 0===this.size?e+t:e+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+t},concat:function(){return mn(this,sn(this,e.call(arguments,0)))},includes:function(e){return this.some((function(t){return ye(t,e)}))},entries:function(){return this.__iterator(M)},every:function(e,t){$e(this.size);var n=!0;return this.__iterate((function(r,o,a){if(!e.call(t,r,o,a))return n=!1,!1})),n},filter:function(e,t){return mn(this,en(this,e,t,!0))},find:function(e,t,n){var r=this.findEntry(e,t);return r?r[1]:n},forEach:function(e,t){return $e(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){$e(this.size),e=void 0!==e?""+e:",";var t="",n=!0;return this.__iterate((function(r){n?n=!1:t+=e,t+=null!=r?r.toString():""})),t},keys:function(){return this.__iterator(P)},map:function(e,t){return mn(this,Qt(this,e,t))},reduce:function(e,t,n){var r,o;return $e(this.size),arguments.length<2?o=!0:r=t,this.__iterate((function(t,a,i){o?(o=!1,r=t):r=e.call(n,r,t,a,i)})),r},reduceRight:function(e,t,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return mn(this,Xt(this,!0))},slice:function(e,t){return mn(this,rn(this,e,t,!0))},some:function(e,t){return!this.every(tr(e),t)},sort:function(e){return mn(this,pn(this,e))},values:function(){return this.__iterator(R)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(e,t){return C(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return tn(this,e,t)},equals:function(e){return ve(this,e)},entrySeq:function(){var e=this;if(e._cache)return new te(e._cache);var t=e.toSeq().map(er).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(tr(e),t)},findEntry:function(e,t,n){var r=n;return this.__iterate((function(n,o,a){if(e.call(t,n,o,a))return r=[o,n],!1})),r},findKey:function(e,t){var n=this.findEntry(e,t);return n&&n[0]},findLast:function(e,t,n){return this.toKeyedSeq().reverse().find(e,t,n)},findLastEntry:function(e,t,n){return this.toKeyedSeq().reverse().findEntry(e,t,n)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(O)},flatMap:function(e,t){return mn(this,un(this,e,t))},flatten:function(e){return mn(this,ln(this,e,!0))},fromEntrySeq:function(){return new Zt(this)},get:function(e,t){return this.find((function(t,n){return ye(n,e)}),void 0,t)},getIn:function(e,t){for(var n,r=this,o=xn(e);!(n=o.next()).done;){var a=n.value;if((r=r&&r.get?r.get(a,b):b)===b)return t}return r},groupBy:function(e,t){return nn(this,e,t)},has:function(e){return this.get(e,b)!==b},hasIn:function(e){return this.getIn(e,b)!==b},isSubset:function(e){return e="function"==typeof e.includes?e:n(e),this.every((function(t){return e.includes(t)}))},isSuperset:function(e){return(e="function"==typeof e.isSubset?e:n(e)).isSubset(this)},keyOf:function(e){return this.findKey((function(t){return ye(t,e)}))},keySeq:function(){return this.toSeq().map(Xn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return fn(this,e)},maxBy:function(e,t){return fn(this,t,e)},min:function(e){return fn(this,e?nr(e):ar)},minBy:function(e,t){return fn(this,t?nr(t):ar,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return mn(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return mn(this,an(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(tr(e),t)},sortBy:function(e,t){return mn(this,pn(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return mn(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return mn(this,on(this,e,t))},takeUntil:function(e,t){return this.takeWhile(tr(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=ir(this))}});var Yn=n.prototype;Yn[p]=!0,Yn[B]=Yn.values,Yn.__toJS=Yn.toArray,Yn.__toStringMapper=rr,Yn.inspect=Yn.toSource=function(){return this.toString()},Yn.chain=Yn.flatMap,Yn.contains=Yn.includes,Zn(r,{flip:function(){return mn(this,Yt(this))},mapEntries:function(e,t){var n=this,r=0;return mn(this,this.toSeq().map((function(o,a){return e.call(t,[a,o],r++,n)})).fromEntrySeq())},mapKeys:function(e,t){var n=this;return mn(this,this.toSeq().flip().map((function(r,o){return e.call(t,r,o,n)})).flip())}});var Qn=r.prototype;function Xn(e,t){return t}function er(e,t){return[t,e]}function tr(e){return function(){return!e.apply(this,arguments)}}function nr(e){return function(){return-e.apply(this,arguments)}}function rr(e){return"string"==typeof e?JSON.stringify(e):String(e)}function or(){return A(arguments)}function ar(e,t){return et?-1:0}function ir(e){if(e.size===1/0)return 0;var t=c(e),n=s(e),r=t?1:0;return sr(e.__iterate(n?t?function(e,t){r=31*r+lr(Oe(e),Oe(t))|0}:function(e,t){r=r+lr(Oe(e),Oe(t))|0}:t?function(e){r=31*r+Oe(e)|0}:function(e){r=r+Oe(e)|0}),r)}function sr(e,t){return t=Ce(t,3432918353),t=Ce(t<<15|t>>>-15,461845907),t=Ce(t<<13|t>>>-13,5),t=Ce((t=(t+3864292196|0)^e)^t>>>16,2246822507),t=ke((t=Ce(t^t>>>13,3266489909))^t>>>16)}function lr(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}return Qn[f]=!0,Qn[B]=Yn.entries,Qn.__toJS=Yn.toObject,Qn.__toStringMapper=function(e,t){return JSON.stringify(t)+": "+rr(e)},Zn(o,{toKeyedSeq:function(){return new Jt(this,!1)},filter:function(e,t){return mn(this,en(this,e,t,!1))},findIndex:function(e,t){var n=this.findEntry(e,t);return n?n[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return mn(this,Xt(this,!1))},slice:function(e,t){return mn(this,rn(this,e,t,!1))},splice:function(e,t){var n=arguments.length;if(t=Math.max(0|t,0),0===n||2===n&&!t)return this;e=T(e,e<0?this.count():this.size);var r=this.slice(0,e);return mn(this,1===n?r:r.concat(A(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var n=this.findLastEntry(e,t);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(e){return mn(this,ln(this,e,!1))},get:function(e,t){return(e=k(this,e))<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find((function(t,n){return n===e}),void 0,t)},has:function(e){return(e=k(this,e))>=0&&(void 0!==this.size?this.size===1/0||e{"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},35823:e=>{e.exports=function(e,t,n,r){var o=new Blob(void 0!==r?[r,e]:[e],{type:n||"application/octet-stream"});if(void 0!==window.navigator.msSaveBlob)window.navigator.msSaveBlob(o,t);else{var a=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(o):window.webkitURL.createObjectURL(o),i=document.createElement("a");i.style.display="none",i.href=a,i.setAttribute("download",t),void 0===i.download&&i.setAttribute("target","_blank"),document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(a)}),200)}}},91296:(e,t,n)=>{var r="Expected a function",o=NaN,a="[object Symbol]",i=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,u=/^0o[0-7]+$/i,c=parseInt,p="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,f="object"==typeof self&&self&&self.Object===Object&&self,h=p||f||Function("return this")(),d=Object.prototype.toString,m=Math.max,g=Math.min,y=function(){return h.Date.now()};function v(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function b(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&d.call(e)==a}(e))return o;if(v(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=v(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(i,"");var n=l.test(e);return n||u.test(e)?c(e.slice(2),n?2:8):s.test(e)?o:+e}e.exports=function(e,t,n){var o,a,i,s,l,u,c=0,p=!1,f=!1,h=!0;if("function"!=typeof e)throw new TypeError(r);function d(t){var n=o,r=a;return o=a=void 0,c=t,s=e.apply(r,n)}function w(e){var n=e-u;return void 0===u||n>=t||n<0||f&&e-c>=i}function E(){var e=y();if(w(e))return x(e);l=setTimeout(E,function(e){var n=t-(e-u);return f?g(n,i-(e-c)):n}(e))}function x(e){return l=void 0,h&&o?d(e):(o=a=void 0,s)}function _(){var e=y(),n=w(e);if(o=arguments,a=this,u=e,n){if(void 0===l)return function(e){return c=e,l=setTimeout(E,t),p?d(e):s}(u);if(f)return l=setTimeout(E,t),d(u)}return void 0===l&&(l=setTimeout(E,t)),s}return t=b(t)||0,v(n)&&(p=!!n.leading,i=(f="maxWait"in n)?m(b(n.maxWait)||0,t):i,h="trailing"in n?!!n.trailing:h),_.cancel=function(){void 0!==l&&clearTimeout(l),c=0,o=u=a=l=void 0},_.flush=function(){return void 0===l?s:x(y())},_}},18552:(e,t,n)=>{var r=n(10852)(n(55639),"DataView");e.exports=r},1989:(e,t,n)=>{var r=n(51789),o=n(80401),a=n(57667),i=n(21327),s=n(81866);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(27040),o=n(14125),a=n(82117),i=n(67518),s=n(54705);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(10852)(n(55639),"Map");e.exports=r},83369:(e,t,n)=>{var r=n(24785),o=n(11285),a=n(96e3),i=n(49916),s=n(95265);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(10852)(n(55639),"Promise");e.exports=r},58525:(e,t,n)=>{var r=n(10852)(n(55639),"Set");e.exports=r},88668:(e,t,n)=>{var r=n(83369),o=n(90619),a=n(72385);function i(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t{var r=n(38407),o=n(37465),a=n(63779),i=n(67599),s=n(44758),l=n(34309);function u(e){var t=this.__data__=new r(e);this.size=t.size}u.prototype.clear=o,u.prototype.delete=a,u.prototype.get=i,u.prototype.has=s,u.prototype.set=l,e.exports=u},62705:(e,t,n)=>{var r=n(55639).Symbol;e.exports=r},11149:(e,t,n)=>{var r=n(55639).Uint8Array;e.exports=r},70577:(e,t,n)=>{var r=n(10852)(n(55639),"WeakMap");e.exports=r},96874:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},77412:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,a=[];++n{var r=n(22545),o=n(35694),a=n(1469),i=n(44144),s=n(65776),l=n(36719),u=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=a(e),c=!n&&o(e),p=!n&&!c&&i(e),f=!n&&!c&&!p&&l(e),h=n||c||p||f,d=h?r(e.length,String):[],m=d.length;for(var g in e)!t&&!u.call(e,g)||h&&("length"==g||p&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,m))||d.push(g);return d}},29932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n{e.exports=function(e,t,n,r){var o=-1,a=null==e?0:e.length;for(r&&a&&(n=e[++o]);++o{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{e.exports=function(e){return e.split("")}},49029:e=>{var t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;e.exports=function(e){return e.match(t)||[]}},86556:(e,t,n)=>{var r=n(89465),o=n(77813);e.exports=function(e,t,n){(void 0!==n&&!o(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}},34865:(e,t,n)=>{var r=n(89465),o=n(77813),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var i=e[t];a.call(e,t)&&o(i,n)&&(void 0!==n||t in e)||r(e,t,n)}},18470:(e,t,n)=>{var r=n(77813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},44037:(e,t,n)=>{var r=n(98363),o=n(3674);e.exports=function(e,t){return e&&r(t,o(t),e)}},63886:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e,t){return e&&r(t,o(t),e)}},89465:(e,t,n)=>{var r=n(38777);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},85990:(e,t,n)=>{var r=n(46384),o=n(77412),a=n(34865),i=n(44037),s=n(63886),l=n(64626),u=n(278),c=n(18805),p=n(1911),f=n(58234),h=n(46904),d=n(98882),m=n(43824),g=n(29148),y=n(38517),v=n(1469),b=n(44144),w=n(56688),E=n(13218),x=n(72928),_=n(3674),S=n(81704),A=1,C=2,k=4,O="[object Arguments]",j="[object Function]",T="[object GeneratorFunction]",I="[object Object]",N={};N[O]=N["[object Array]"]=N["[object ArrayBuffer]"]=N["[object DataView]"]=N["[object Boolean]"]=N["[object Date]"]=N["[object Float32Array]"]=N["[object Float64Array]"]=N["[object Int8Array]"]=N["[object Int16Array]"]=N["[object Int32Array]"]=N["[object Map]"]=N["[object Number]"]=N[I]=N["[object RegExp]"]=N["[object Set]"]=N["[object String]"]=N["[object Symbol]"]=N["[object Uint8Array]"]=N["[object Uint8ClampedArray]"]=N["[object Uint16Array]"]=N["[object Uint32Array]"]=!0,N["[object Error]"]=N[j]=N["[object WeakMap]"]=!1,e.exports=function e(t,n,P,R,M,D){var L,B=n&A,F=n&C,U=n&k;if(P&&(L=M?P(t,R,M,D):P(t)),void 0!==L)return L;if(!E(t))return t;var z=v(t);if(z){if(L=m(t),!B)return u(t,L)}else{var q=d(t),$=q==j||q==T;if(b(t))return l(t,B);if(q==I||q==O||$&&!M){if(L=F||$?{}:y(t),!B)return F?p(t,s(L,t)):c(t,i(L,t))}else{if(!N[q])return M?t:{};L=g(t,q,B)}}D||(D=new r);var V=D.get(t);if(V)return V;D.set(t,L),x(t)?t.forEach((function(r){L.add(e(r,n,P,r,t,D))})):w(t)&&t.forEach((function(r,o){L.set(o,e(r,n,P,o,t,D))}));var W=z?void 0:(U?F?h:f:F?S:_)(t);return o(W||t,(function(r,o){W&&(r=t[o=r]),a(L,o,e(r,n,P,o,t,D))})),L}},3118:(e,t,n)=>{var r=n(13218),o=Object.create,a=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=a},89881:(e,t,n)=>{var r=n(47816),o=n(99291)(r);e.exports=o},41848:e=>{e.exports=function(e,t,n,r){for(var o=e.length,a=n+(r?1:-1);r?a--:++a{var r=n(62488),o=n(37285);e.exports=function e(t,n,a,i,s){var l=-1,u=t.length;for(a||(a=o),s||(s=[]);++l0&&a(c)?n>1?e(c,n-1,a,i,s):r(s,c):i||(s[s.length]=c)}return s}},28483:(e,t,n)=>{var r=n(25063)();e.exports=r},47816:(e,t,n)=>{var r=n(28483),o=n(3674);e.exports=function(e,t){return e&&r(e,t,o)}},97786:(e,t,n)=>{var r=n(71811),o=n(40327);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n{var r=n(62488),o=n(1469);e.exports=function(e,t,n){var a=t(e);return o(e)?a:r(a,n(e))}},44239:(e,t,n)=>{var r=n(62705),o=n(89607),a=n(2333),i="[object Null]",s="[object Undefined]",l=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?s:i:l&&l in Object(e)?o(e):a(e)}},13:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},9454:(e,t,n)=>{var r=n(44239),o=n(37005),a="[object Arguments]";e.exports=function(e){return o(e)&&r(e)==a}},90939:(e,t,n)=>{var r=n(2492),o=n(37005);e.exports=function e(t,n,a,i,s){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,a,i,e,s))}},2492:(e,t,n)=>{var r=n(46384),o=n(67114),a=n(18351),i=n(16096),s=n(98882),l=n(1469),u=n(44144),c=n(36719),p=1,f="[object Arguments]",h="[object Array]",d="[object Object]",m=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,g,y,v){var b=l(e),w=l(t),E=b?h:s(e),x=w?h:s(t),_=(E=E==f?d:E)==d,S=(x=x==f?d:x)==d,A=E==x;if(A&&u(e)){if(!u(t))return!1;b=!0,_=!1}if(A&&!_)return v||(v=new r),b||c(e)?o(e,t,n,g,y,v):a(e,t,E,n,g,y,v);if(!(n&p)){var C=_&&m.call(e,"__wrapped__"),k=S&&m.call(t,"__wrapped__");if(C||k){var O=C?e.value():e,j=k?t.value():t;return v||(v=new r),y(O,j,n,g,v)}}return!!A&&(v||(v=new r),i(e,t,n,g,y,v))}},25588:(e,t,n)=>{var r=n(98882),o=n(37005),a="[object Map]";e.exports=function(e){return o(e)&&r(e)==a}},2958:(e,t,n)=>{var r=n(46384),o=n(90939),a=1,i=2;e.exports=function(e,t,n,s){var l=n.length,u=l,c=!s;if(null==e)return!u;for(e=Object(e);l--;){var p=n[l];if(c&&p[2]?p[1]!==e[p[0]]:!(p[0]in e))return!1}for(;++l{var r=n(23560),o=n(15346),a=n(13218),i=n(80346),s=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,c=l.toString,p=u.hasOwnProperty,f=RegExp("^"+c.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||o(e))&&(r(e)?f:s).test(i(e))}},29221:(e,t,n)=>{var r=n(98882),o=n(37005),a="[object Set]";e.exports=function(e){return o(e)&&r(e)==a}},38749:(e,t,n)=>{var r=n(44239),o=n(41780),a=n(37005),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return a(e)&&o(e.length)&&!!i[r(e)]}},67206:(e,t,n)=>{var r=n(91573),o=n(16432),a=n(6557),i=n(1469),s=n(39601);e.exports=function(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?i(e)?o(e[0],e[1]):r(e):s(e)}},280:(e,t,n)=>{var r=n(25726),o=n(86916),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))a.call(e,n)&&"constructor"!=n&&t.push(n);return t}},10313:(e,t,n)=>{var r=n(13218),o=n(25726),a=n(33498),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return a(e);var t=o(e),n=[];for(var s in e)("constructor"!=s||!t&&i.call(e,s))&&n.push(s);return n}},91573:(e,t,n)=>{var r=n(2958),o=n(1499),a=n(42634);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},16432:(e,t,n)=>{var r=n(90939),o=n(27361),a=n(79095),i=n(15403),s=n(89162),l=n(42634),u=n(40327),c=1,p=2;e.exports=function(e,t){return i(e)&&s(t)?l(u(e),t):function(n){var i=o(n,e);return void 0===i&&i===t?a(n,e):r(t,i,c|p)}}},42980:(e,t,n)=>{var r=n(46384),o=n(86556),a=n(28483),i=n(59783),s=n(13218),l=n(81704),u=n(36390);e.exports=function e(t,n,c,p,f){t!==n&&a(n,(function(a,l){if(f||(f=new r),s(a))i(t,n,l,c,e,p,f);else{var h=p?p(u(t,l),a,l+"",t,n,f):void 0;void 0===h&&(h=a),o(t,l,h)}}),l)}},59783:(e,t,n)=>{var r=n(86556),o=n(64626),a=n(77133),i=n(278),s=n(38517),l=n(35694),u=n(1469),c=n(29246),p=n(44144),f=n(23560),h=n(13218),d=n(68630),m=n(36719),g=n(36390),y=n(59881);e.exports=function(e,t,n,v,b,w,E){var x=g(e,n),_=g(t,n),S=E.get(_);if(S)r(e,n,S);else{var A=w?w(x,_,n+"",e,t,E):void 0,C=void 0===A;if(C){var k=u(_),O=!k&&p(_),j=!k&&!O&&m(_);A=_,k||O||j?u(x)?A=x:c(x)?A=i(x):O?(C=!1,A=o(_,!0)):j?(C=!1,A=a(_,!0)):A=[]:d(_)||l(_)?(A=x,l(x)?A=y(x):h(x)&&!f(x)||(A=s(_))):C=!1}C&&(E.set(_,A),b(A,_,v,w,E),E.delete(_)),r(e,n,A)}}},40371:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},79152:(e,t,n)=>{var r=n(97786);e.exports=function(e){return function(t){return r(t,e)}}},18674:e=>{e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},10107:e=>{e.exports=function(e,t,n,r,o){return o(e,(function(e,o,a){n=r?(r=!1,e):t(n,e,o,a)})),n}},5976:(e,t,n)=>{var r=n(6557),o=n(45357),a=n(30061);e.exports=function(e,t){return a(o(e,t,r),e+"")}},10611:(e,t,n)=>{var r=n(34865),o=n(71811),a=n(65776),i=n(13218),s=n(40327);e.exports=function(e,t,n,l){if(!i(e))return e;for(var u=-1,c=(t=o(t,e)).length,p=c-1,f=e;null!=f&&++u{var r=n(75703),o=n(38777),a=n(6557),i=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:a;e.exports=i},14259:e=>{e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(o);++r{var r=n(89881);e.exports=function(e,t){var n;return r(e,(function(e,r,o){return!(n=t(e,r,o))})),!!n}},22545:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n{var r=n(62705),o=n(29932),a=n(1469),i=n(33448),s=1/0,l=r?r.prototype:void 0,u=l?l.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return o(t,e)+"";if(i(t))return u?u.call(t):"";var n=t+"";return"0"==n&&1/t==-s?"-0":n}},27561:(e,t,n)=>{var r=n(67990),o=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(o,""):e}},7518:e=>{e.exports=function(e){return function(t){return e(t)}}},57406:(e,t,n)=>{var r=n(71811),o=n(10928),a=n(40292),i=n(40327);e.exports=function(e,t){return t=r(t,e),null==(e=a(e,t))||delete e[i(o(t))]}},1757:e=>{e.exports=function(e,t,n){for(var r=-1,o=e.length,a=t.length,i={};++r{e.exports=function(e,t){return e.has(t)}},71811:(e,t,n)=>{var r=n(1469),o=n(15403),a=n(55514),i=n(79833);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:a(i(e))}},40180:(e,t,n)=>{var r=n(14259);e.exports=function(e,t,n){var o=e.length;return n=void 0===n?o:n,!t&&n>=o?e:r(e,t,n)}},74318:(e,t,n)=>{var r=n(11149);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},64626:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o?r.Buffer:void 0,s=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=s?s(n):new e.constructor(n);return e.copy(r),r}},57157:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},93147:e=>{var t=/\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},40419:(e,t,n)=>{var r=n(62705),o=r?r.prototype:void 0,a=o?o.valueOf:void 0;e.exports=function(e){return a?Object(a.call(e)):{}}},77133:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var r=n(34865),o=n(89465);e.exports=function(e,t,n,a){var i=!n;n||(n={});for(var s=-1,l=t.length;++s{var r=n(98363),o=n(99551);e.exports=function(e,t){return r(e,o(e),t)}},1911:(e,t,n)=>{var r=n(98363),o=n(51442);e.exports=function(e,t){return r(e,o(e),t)}},14429:(e,t,n)=>{var r=n(55639)["__core-js_shared__"];e.exports=r},21463:(e,t,n)=>{var r=n(5976),o=n(16612);e.exports=function(e){return r((function(t,n){var r=-1,a=n.length,i=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(i=e.length>3&&"function"==typeof i?(a--,i):void 0,s&&o(n[0],n[1],s)&&(i=a<3?void 0:i,a=1),t=Object(t);++r{var r=n(98612);e.exports=function(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var a=n.length,i=t?a:-1,s=Object(n);(t?i--:++i{e.exports=function(e){return function(t,n,r){for(var o=-1,a=Object(t),i=r(t),s=i.length;s--;){var l=i[e?s:++o];if(!1===n(a[l],l,a))break}return t}}},98805:(e,t,n)=>{var r=n(40180),o=n(62689),a=n(83140),i=n(79833);e.exports=function(e){return function(t){t=i(t);var n=o(t)?a(t):void 0,s=n?n[0]:t.charAt(0),l=n?r(n,1).join(""):t.slice(1);return s[e]()+l}}},35393:(e,t,n)=>{var r=n(62663),o=n(53816),a=n(58748),i=RegExp("['’]","g");e.exports=function(e){return function(t){return r(a(o(t).replace(i,"")),e,"")}}},67740:(e,t,n)=>{var r=n(67206),o=n(98612),a=n(3674);e.exports=function(e){return function(t,n,i){var s=Object(t);if(!o(t)){var l=r(n,3);t=a(t),n=function(e){return l(s[e],e,s)}}var u=e(t,n,i);return u>-1?s[l?t[u]:u]:void 0}}},60696:(e,t,n)=>{var r=n(68630);e.exports=function(e){return r(e)?void 0:e}},69389:(e,t,n)=>{var r=n(18674)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});e.exports=r},38777:(e,t,n)=>{var r=n(10852),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=o},67114:(e,t,n)=>{var r=n(88668),o=n(82908),a=n(74757),i=1,s=2;e.exports=function(e,t,n,l,u,c){var p=n&i,f=e.length,h=t.length;if(f!=h&&!(p&&h>f))return!1;var d=c.get(e),m=c.get(t);if(d&&m)return d==t&&m==e;var g=-1,y=!0,v=n&s?new r:void 0;for(c.set(e,t),c.set(t,e);++g{var r=n(62705),o=n(11149),a=n(77813),i=n(67114),s=n(68776),l=n(21814),u=1,c=2,p="[object Boolean]",f="[object Date]",h="[object Error]",d="[object Map]",m="[object Number]",g="[object RegExp]",y="[object Set]",v="[object String]",b="[object Symbol]",w="[object ArrayBuffer]",E="[object DataView]",x=r?r.prototype:void 0,_=x?x.valueOf:void 0;e.exports=function(e,t,n,r,x,S,A){switch(n){case E:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case w:return!(e.byteLength!=t.byteLength||!S(new o(e),new o(t)));case p:case f:case m:return a(+e,+t);case h:return e.name==t.name&&e.message==t.message;case g:case v:return e==t+"";case d:var C=s;case y:var k=r&u;if(C||(C=l),e.size!=t.size&&!k)return!1;var O=A.get(e);if(O)return O==t;r|=c,A.set(e,t);var j=i(C(e),C(t),r,x,S,A);return A.delete(e),j;case b:if(_)return _.call(e)==_.call(t)}return!1}},16096:(e,t,n)=>{var r=n(58234),o=1,a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,i,s,l){var u=n&o,c=r(e),p=c.length;if(p!=r(t).length&&!u)return!1;for(var f=p;f--;){var h=c[f];if(!(u?h in t:a.call(t,h)))return!1}var d=l.get(e),m=l.get(t);if(d&&m)return d==t&&m==e;var g=!0;l.set(e,t),l.set(t,e);for(var y=u;++f{var r=n(85564),o=n(45357),a=n(30061);e.exports=function(e){return a(o(e,void 0,r),e+"")}},31957:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},58234:(e,t,n)=>{var r=n(68866),o=n(99551),a=n(3674);e.exports=function(e){return r(e,a,o)}},46904:(e,t,n)=>{var r=n(68866),o=n(51442),a=n(81704);e.exports=function(e){return r(e,a,o)}},45050:(e,t,n)=>{var r=n(37019);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},1499:(e,t,n)=>{var r=n(89162),o=n(3674);e.exports=function(e){for(var t=o(e),n=t.length;n--;){var a=t[n],i=e[a];t[n]=[a,i,r(i)]}return t}},10852:(e,t,n)=>{var r=n(28458),o=n(47801);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},85924:(e,t,n)=>{var r=n(5569)(Object.getPrototypeOf,Object);e.exports=r},89607:(e,t,n)=>{var r=n(62705),o=Object.prototype,a=o.hasOwnProperty,i=o.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var o=i.call(e);return r&&(t?e[s]=n:delete e[s]),o}},99551:(e,t,n)=>{var r=n(34963),o=n(70479),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,s=i?function(e){return null==e?[]:(e=Object(e),r(i(e),(function(t){return a.call(e,t)})))}:o;e.exports=s},51442:(e,t,n)=>{var r=n(62488),o=n(85924),a=n(99551),i=n(70479),s=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,a(e)),e=o(e);return t}:i;e.exports=s},98882:(e,t,n)=>{var r=n(18552),o=n(57071),a=n(53818),i=n(58525),s=n(70577),l=n(44239),u=n(80346),c="[object Map]",p="[object Promise]",f="[object Set]",h="[object WeakMap]",d="[object DataView]",m=u(r),g=u(o),y=u(a),v=u(i),b=u(s),w=l;(r&&w(new r(new ArrayBuffer(1)))!=d||o&&w(new o)!=c||a&&w(a.resolve())!=p||i&&w(new i)!=f||s&&w(new s)!=h)&&(w=function(e){var t=l(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case m:return d;case g:return c;case y:return p;case v:return f;case b:return h}return t}),e.exports=w},47801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},222:(e,t,n)=>{var r=n(71811),o=n(35694),a=n(1469),i=n(65776),s=n(41780),l=n(40327);e.exports=function(e,t,n){for(var u=-1,c=(t=r(t,e)).length,p=!1;++u{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},93157:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function(e){return t.test(e)}},51789:(e,t,n)=>{var r=n(94536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},80401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},57667:(e,t,n)=>{var r=n(94536),o="__lodash_hash_undefined__",a=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return n===o?void 0:n}return a.call(t,e)?t[e]:void 0}},21327:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},81866:(e,t,n)=>{var r=n(94536),o="__lodash_hash_undefined__";e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?o:t,this}},43824:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&"string"==typeof e[0]&&t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},29148:(e,t,n)=>{var r=n(74318),o=n(57157),a=n(93147),i=n(40419),s=n(77133),l="[object Boolean]",u="[object Date]",c="[object Map]",p="[object Number]",f="[object RegExp]",h="[object Set]",d="[object String]",m="[object Symbol]",g="[object ArrayBuffer]",y="[object DataView]",v="[object Float32Array]",b="[object Float64Array]",w="[object Int8Array]",E="[object Int16Array]",x="[object Int32Array]",_="[object Uint8Array]",S="[object Uint8ClampedArray]",A="[object Uint16Array]",C="[object Uint32Array]";e.exports=function(e,t,n){var k=e.constructor;switch(t){case g:return r(e);case l:case u:return new k(+e);case y:return o(e,n);case v:case b:case w:case E:case x:case _:case S:case A:case C:return s(e,n);case c:return new k;case p:case d:return new k(e);case f:return a(e);case h:return new k;case m:return i(e)}}},38517:(e,t,n)=>{var r=n(3118),o=n(85924),a=n(25726);e.exports=function(e){return"function"!=typeof e.constructor||a(e)?{}:r(o(e))}},37285:(e,t,n)=>{var r=n(62705),o=n(35694),a=n(1469),i=r?r.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||o(e)||!!(i&&e&&e[i])}},65776:e=>{var t=9007199254740991,n=/^(?:0|[1-9]\d*)$/;e.exports=function(e,r){var o=typeof e;return!!(r=null==r?t:r)&&("number"==o||"symbol"!=o&&n.test(e))&&e>-1&&e%1==0&&e{var r=n(77813),o=n(98612),a=n(65776),i=n(13218);e.exports=function(e,t,n){if(!i(n))return!1;var s=typeof t;return!!("number"==s?o(n)&&a(t,n.length):"string"==s&&t in n)&&r(n[t],e)}},15403:(e,t,n)=>{var r=n(1469),o=n(33448),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(i.test(e)||!a.test(e)||null!=t&&e in Object(t))}},37019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},15346:(e,t,n)=>{var r,o=n(14429),a=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},25726:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},89162:(e,t,n)=>{var r=n(13218);e.exports=function(e){return e==e&&!r(e)}},27040:e=>{e.exports=function(){this.__data__=[],this.size=0}},14125:(e,t,n)=>{var r=n(18470),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},82117:(e,t,n)=>{var r=n(18470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},67518:(e,t,n)=>{var r=n(18470);e.exports=function(e){return r(this.__data__,e)>-1}},54705:(e,t,n)=>{var r=n(18470);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},24785:(e,t,n)=>{var r=n(1989),o=n(38407),a=n(57071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||o),string:new r}}},11285:(e,t,n)=>{var r=n(45050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},96e3:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).get(e)}},49916:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).has(e)}},95265:(e,t,n)=>{var r=n(45050);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},68776:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},42634:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},24523:(e,t,n)=>{var r=n(88306),o=500;e.exports=function(e){var t=r(e,(function(e){return n.size===o&&n.clear(),e})),n=t.cache;return t}},94536:(e,t,n)=>{var r=n(10852)(Object,"create");e.exports=r},86916:(e,t,n)=>{var r=n(5569)(Object.keys,Object);e.exports=r},33498:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},31167:(e,t,n)=>{e=n.nmd(e);var r=n(31957),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o&&r.process,s=function(){try{var e=a&&a.require&&a.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=s},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},45357:(e,t,n)=>{var r=n(96874),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var a=arguments,i=-1,s=o(a.length-t,0),l=Array(s);++i{var r=n(97786),o=n(14259);e.exports=function(e,t){return t.length<2?e:r(e,o(t,0,-1))}},55639:(e,t,n)=>{var r=n(31957),o="object"==typeof self&&self&&self.Object===Object&&self,a=r||o||Function("return this")();e.exports=a},36390:e=>{e.exports=function(e,t){if(("constructor"!==t||"function"!=typeof e[t])&&"__proto__"!=t)return e[t]}},90619:e=>{var t="__lodash_hash_undefined__";e.exports=function(e){return this.__data__.set(e,t),this}},72385:e=>{e.exports=function(e){return this.__data__.has(e)}},21814:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},30061:(e,t,n)=>{var r=n(56560),o=n(21275)(r);e.exports=o},21275:e=>{var t=800,n=16,r=Date.now;e.exports=function(e){var o=0,a=0;return function(){var i=r(),s=n-(i-a);if(a=i,s>0){if(++o>=t)return arguments[0]}else o=0;return e.apply(void 0,arguments)}}},37465:(e,t,n)=>{var r=n(38407);e.exports=function(){this.__data__=new r,this.size=0}},63779:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},67599:e=>{e.exports=function(e){return this.__data__.get(e)}},44758:e=>{e.exports=function(e){return this.__data__.has(e)}},34309:(e,t,n)=>{var r=n(38407),o=n(57071),a=n(83369),i=200;e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!o||s.length{var r=n(44286),o=n(62689),a=n(676);e.exports=function(e){return o(e)?a(e):r(e)}},55514:(e,t,n)=>{var r=n(24523),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,i=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(a,"$1"):n||e)})),t}));e.exports=i},40327:(e,t,n)=>{var r=n(33448),o=1/0;e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-o?"-0":t}},80346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},67990:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},676:e=>{var t="\\ud800-\\udfff",n="["+t+"]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",a="[^"+t+"]",i="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",l="(?:"+r+"|"+o+")"+"?",u="[\\ufe0e\\ufe0f]?",c=u+l+("(?:\\u200d(?:"+[a,i,s].join("|")+")"+u+l+")*"),p="(?:"+[a+r+"?",r,i,s,n].join("|")+")",f=RegExp(o+"(?="+o+")|"+p+c,"g");e.exports=function(e){return e.match(f)||[]}},2757:e=>{var t="\\ud800-\\udfff",n="\\u2700-\\u27bf",r="a-z\\xdf-\\xf6\\xf8-\\xff",o="A-Z\\xc0-\\xd6\\xd8-\\xde",a="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",i="["+a+"]",s="\\d+",l="["+n+"]",u="["+r+"]",c="[^"+t+a+s+n+r+o+"]",p="(?:\\ud83c[\\udde6-\\uddff]){2}",f="[\\ud800-\\udbff][\\udc00-\\udfff]",h="["+o+"]",d="(?:"+u+"|"+c+")",m="(?:"+h+"|"+c+")",g="(?:['’](?:d|ll|m|re|s|t|ve))?",y="(?:['’](?:D|LL|M|RE|S|T|VE))?",v="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",b="[\\ufe0e\\ufe0f]?",w=b+v+("(?:\\u200d(?:"+["[^"+t+"]",p,f].join("|")+")"+b+v+")*"),E="(?:"+[l,p,f].join("|")+")"+w,x=RegExp([h+"?"+u+"+"+g+"(?="+[i,h,"$"].join("|")+")",m+"+"+y+"(?="+[i,h+d,"$"].join("|")+")",h+"?"+d+"+"+g,h+"+"+y,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",s,E].join("|"),"g");e.exports=function(e){return e.match(x)||[]}},68929:(e,t,n)=>{var r=n(48403),o=n(35393)((function(e,t,n){return t=t.toLowerCase(),e+(n?r(t):t)}));e.exports=o},48403:(e,t,n)=>{var r=n(79833),o=n(11700);e.exports=function(e){return o(r(e).toLowerCase())}},75703:e=>{e.exports=function(e){return function(){return e}}},23279:(e,t,n)=>{var r=n(13218),o=n(7771),a=n(14841),i="Expected a function",s=Math.max,l=Math.min;e.exports=function(e,t,n){var u,c,p,f,h,d,m=0,g=!1,y=!1,v=!0;if("function"!=typeof e)throw new TypeError(i);function b(t){var n=u,r=c;return u=c=void 0,m=t,f=e.apply(r,n)}function w(e){var n=e-d;return void 0===d||n>=t||n<0||y&&e-m>=p}function E(){var e=o();if(w(e))return x(e);h=setTimeout(E,function(e){var n=t-(e-d);return y?l(n,p-(e-m)):n}(e))}function x(e){return h=void 0,v&&u?b(e):(u=c=void 0,f)}function _(){var e=o(),n=w(e);if(u=arguments,c=this,d=e,n){if(void 0===h)return function(e){return m=e,h=setTimeout(E,t),g?b(e):f}(d);if(y)return clearTimeout(h),h=setTimeout(E,t),b(d)}return void 0===h&&(h=setTimeout(E,t)),f}return t=a(t)||0,r(n)&&(g=!!n.leading,p=(y="maxWait"in n)?s(a(n.maxWait)||0,t):p,v="trailing"in n?!!n.trailing:v),_.cancel=function(){void 0!==h&&clearTimeout(h),m=0,u=d=c=h=void 0},_.flush=function(){return void 0===h?f:x(o())},_}},53816:(e,t,n)=>{var r=n(69389),o=n(79833),a=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,i=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");e.exports=function(e){return(e=o(e))&&e.replace(a,r).replace(i,"")}},77813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},13311:(e,t,n)=>{var r=n(67740)(n(30998));e.exports=r},30998:(e,t,n)=>{var r=n(41848),o=n(67206),a=n(40554),i=Math.max;e.exports=function(e,t,n){var s=null==e?0:e.length;if(!s)return-1;var l=null==n?0:a(n);return l<0&&(l=i(s+l,0)),r(e,o(t,3),l)}},85564:(e,t,n)=>{var r=n(21078);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},27361:(e,t,n)=>{var r=n(97786);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},79095:(e,t,n)=>{var r=n(13),o=n(222);e.exports=function(e,t){return null!=e&&o(e,t,r)}},6557:e=>{e.exports=function(e){return e}},35694:(e,t,n)=>{var r=n(9454),o=n(37005),a=Object.prototype,i=a.hasOwnProperty,s=a.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&i.call(e,"callee")&&!s.call(e,"callee")};e.exports=l},1469:e=>{var t=Array.isArray;e.exports=t},98612:(e,t,n)=>{var r=n(23560),o=n(41780);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},29246:(e,t,n)=>{var r=n(98612),o=n(37005);e.exports=function(e){return o(e)&&r(e)}},44144:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=n(95062),a=t&&!t.nodeType&&t,i=a&&e&&!e.nodeType&&e,s=i&&i.exports===a?r.Buffer:void 0,l=(s?s.isBuffer:void 0)||o;e.exports=l},41609:(e,t,n)=>{var r=n(280),o=n(98882),a=n(35694),i=n(1469),s=n(98612),l=n(44144),u=n(25726),c=n(36719),p="[object Map]",f="[object Set]",h=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(s(e)&&(i(e)||"string"==typeof e||"function"==typeof e.splice||l(e)||c(e)||a(e)))return!e.length;var t=o(e);if(t==p||t==f)return!e.size;if(u(e))return!r(e).length;for(var n in e)if(h.call(e,n))return!1;return!0}},23560:(e,t,n)=>{var r=n(44239),o=n(13218),a="[object AsyncFunction]",i="[object Function]",s="[object GeneratorFunction]",l="[object Proxy]";e.exports=function(e){if(!o(e))return!1;var t=r(e);return t==i||t==s||t==a||t==l}},41780:e=>{var t=9007199254740991;e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=t}},56688:(e,t,n)=>{var r=n(25588),o=n(7518),a=n(31167),i=a&&a.isMap,s=i?o(i):r;e.exports=s},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},37005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},68630:(e,t,n)=>{var r=n(44239),o=n(85924),a=n(37005),i="[object Object]",s=Function.prototype,l=Object.prototype,u=s.toString,c=l.hasOwnProperty,p=u.call(Object);e.exports=function(e){if(!a(e)||r(e)!=i)return!1;var t=o(e);if(null===t)return!0;var n=c.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&u.call(n)==p}},72928:(e,t,n)=>{var r=n(29221),o=n(7518),a=n(31167),i=a&&a.isSet,s=i?o(i):r;e.exports=s},47037:(e,t,n)=>{var r=n(44239),o=n(1469),a=n(37005),i="[object String]";e.exports=function(e){return"string"==typeof e||!o(e)&&a(e)&&r(e)==i}},33448:(e,t,n)=>{var r=n(44239),o=n(37005),a="[object Symbol]";e.exports=function(e){return"symbol"==typeof e||o(e)&&r(e)==a}},36719:(e,t,n)=>{var r=n(38749),o=n(7518),a=n(31167),i=a&&a.isTypedArray,s=i?o(i):r;e.exports=s},3674:(e,t,n)=>{var r=n(14636),o=n(280),a=n(98612);e.exports=function(e){return a(e)?r(e):o(e)}},81704:(e,t,n)=>{var r=n(14636),o=n(10313),a=n(98612);e.exports=function(e){return a(e)?r(e,!0):o(e)}},10928:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},88306:(e,t,n)=>{var r=n(83369),o="Expected a function";function a(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError(o);var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],a=n.cache;if(a.has(o))return a.get(o);var i=e.apply(this,r);return n.cache=a.set(o,i)||a,i};return n.cache=new(a.Cache||r),n}a.Cache=r,e.exports=a},82492:(e,t,n)=>{var r=n(42980),o=n(21463)((function(e,t,n){r(e,t,n)}));e.exports=o},7771:(e,t,n)=>{var r=n(55639);e.exports=function(){return r.Date.now()}},57557:(e,t,n)=>{var r=n(29932),o=n(85990),a=n(57406),i=n(71811),s=n(98363),l=n(60696),u=n(99021),c=n(46904),p=u((function(e,t){var n={};if(null==e)return n;var u=!1;t=r(t,(function(t){return t=i(t,e),u||(u=t.length>1),t})),s(e,c(e),n),u&&(n=o(n,7,l));for(var p=t.length;p--;)a(n,t[p]);return n}));e.exports=p},39601:(e,t,n)=>{var r=n(40371),o=n(79152),a=n(15403),i=n(40327);e.exports=function(e){return a(e)?r(i(e)):o(e)}},54061:(e,t,n)=>{var r=n(62663),o=n(89881),a=n(67206),i=n(10107),s=n(1469);e.exports=function(e,t,n){var l=s(e)?r:i,u=arguments.length<3;return l(e,a(t,4),n,u,o)}},36968:(e,t,n)=>{var r=n(10611);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},59704:(e,t,n)=>{var r=n(82908),o=n(67206),a=n(5076),i=n(1469),s=n(16612);e.exports=function(e,t,n){var l=i(e)?r:a;return n&&s(e,t,n)&&(t=void 0),l(e,o(t,3))}},70479:e=>{e.exports=function(){return[]}},95062:e=>{e.exports=function(){return!1}},18601:(e,t,n)=>{var r=n(14841),o=1/0,a=17976931348623157e292;e.exports=function(e){return e?(e=r(e))===o||e===-o?(e<0?-1:1)*a:e==e?e:0:0===e?e:0}},40554:(e,t,n)=>{var r=n(18601);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},7334:(e,t,n)=>{var r=n(79833);e.exports=function(e){return r(e).toLowerCase()}},14841:(e,t,n)=>{var r=n(27561),o=n(13218),a=n(33448),i=NaN,s=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,u=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(a(e))return i;if(o(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=l.test(e);return n||u.test(e)?c(e.slice(2),n?2:8):s.test(e)?i:+e}},59881:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e){return r(e,o(e))}},79833:(e,t,n)=>{var r=n(80531);e.exports=function(e){return null==e?"":r(e)}},11700:(e,t,n)=>{var r=n(98805)("toUpperCase");e.exports=r},58748:(e,t,n)=>{var r=n(49029),o=n(93157),a=n(79833),i=n(2757);e.exports=function(e,t,n){return e=a(e),void 0===(t=n?void 0:t)?o(e)?i(e):r(e):e.match(t)||[]}},7287:(e,t,n)=>{var r=n(34865),o=n(1757);e.exports=function(e,t){return o(e||[],t||[],r)}},96470:(e,t,n)=>{"use strict";var r=n(47802),o=n(21102);t.highlight=i,t.highlightAuto=function(e,t){var n,s,l,u,c=t||{},p=c.subset||r.listLanguages(),f=c.prefix,h=p.length,d=-1;null==f&&(f=a);if("string"!=typeof e)throw o("Expected `string` for value, got `%s`",e);s={relevance:0,language:null,value:[]},n={relevance:0,language:null,value:[]};for(;++ds.relevance&&(s=l),l.relevance>n.relevance&&(s=n,n=l));s.language&&(n.secondBest=s);return n},t.registerLanguage=function(e,t){r.registerLanguage(e,t)},t.listLanguages=function(){return r.listLanguages()},t.registerAlias=function(e,t){var n,o=e;t&&((o={})[e]=t);for(n in o)r.registerAliases(o[n],{languageName:n})},s.prototype.addText=function(e){var t,n,r=this.stack;if(""===e)return;t=r[r.length-1],(n=t.children[t.children.length-1])&&"text"===n.type?n.value+=e:t.children.push({type:"text",value:e})},s.prototype.addKeyword=function(e,t){this.openNode(t),this.addText(e),this.closeNode()},s.prototype.addSublanguage=function(e,t){var n=this.stack,r=n[n.length-1],o=e.rootNode.children,a=t?{type:"element",tagName:"span",properties:{className:[t]},children:o}:o;r.children=r.children.concat(a)},s.prototype.openNode=function(e){var t=this.stack,n=this.options.classPrefix+e,r=t[t.length-1],o={type:"element",tagName:"span",properties:{className:[n]},children:[]};r.children.push(o),t.push(o)},s.prototype.closeNode=function(){this.stack.pop()},s.prototype.closeAllNodes=l,s.prototype.finalize=l,s.prototype.toHTML=function(){return""};var a="hljs-";function i(e,t,n){var i,l=r.configure({}),u=(n||{}).prefix;if("string"!=typeof e)throw o("Expected `string` for name, got `%s`",e);if(!r.getLanguage(e))throw o("Unknown language: `%s` is not registered",e);if("string"!=typeof t)throw o("Expected `string` for value, got `%s`",t);if(null==u&&(u=a),r.configure({__emitter:s,classPrefix:u}),i=r.highlight(t,{language:e,ignoreIllegals:!0}),r.configure(l||{}),i.errorRaised)throw i.errorRaised;return{relevance:i.relevance,language:i.language,value:i.emitter.rootNode.children}}function s(e){this.options=e,this.rootNode={children:[]},this.stack=[this.rootNode]}function l(){}},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,o){for(var a,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l{var r="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,a=r&&o&&"function"==typeof o.get?o.get:null,i=r&&Map.prototype.forEach,s="function"==typeof Set&&Set.prototype,l=Object.getOwnPropertyDescriptor&&s?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,u=s&&l&&"function"==typeof l.get?l.get:null,c=s&&Set.prototype.forEach,p="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,f="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,h="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,d=Boolean.prototype.valueOf,m=Object.prototype.toString,g=Function.prototype.toString,y=String.prototype.match,v=String.prototype.slice,b=String.prototype.replace,w=String.prototype.toUpperCase,E=String.prototype.toLowerCase,x=RegExp.prototype.test,_=Array.prototype.concat,S=Array.prototype.join,A=Array.prototype.slice,C=Math.floor,k="function"==typeof BigInt?BigInt.prototype.valueOf:null,O=Object.getOwnPropertySymbols,j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,T="function"==typeof Symbol&&"object"==typeof Symbol.iterator,I="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===T||"symbol")?Symbol.toStringTag:null,N=Object.prototype.propertyIsEnumerable,P=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function R(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||x.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-C(-e):C(e);if(r!==e){var o=String(r),a=v.call(t,o.length+1);return b.call(o,n,"$&_")+"."+b.call(b.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return b.call(t,n,"$&_")}var M=n(24654),D=M.custom,L=q(D)?D:null;function B(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function F(e){return b.call(String(e),/"/g,""")}function U(e){return!("[object Array]"!==W(e)||I&&"object"==typeof e&&I in e)}function z(e){return!("[object RegExp]"!==W(e)||I&&"object"==typeof e&&I in e)}function q(e){if(T)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!j)return!1;try{return j.call(e),!0}catch(e){}return!1}e.exports=function e(t,n,r,o){var s=n||{};if(V(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(V(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var l=!V(s,"customInspect")||s.customInspect;if("boolean"!=typeof l&&"symbol"!==l)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(V(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(V(s,"numericSeparator")&&"boolean"!=typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var m=s.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return J(t,s);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var w=String(t);return m?R(t,w):w}if("bigint"==typeof t){var x=String(t)+"n";return m?R(t,x):x}var C=void 0===s.depth?5:s.depth;if(void 0===r&&(r=0),r>=C&&C>0&&"object"==typeof t)return U(t)?"[Array]":"[Object]";var O=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=S.call(Array(e.indent+1)," ")}return{base:n,prev:S.call(Array(t+1),n)}}(s,r);if(void 0===o)o=[];else if(H(o,t)>=0)return"[Circular]";function D(t,n,a){if(n&&(o=A.call(o)).push(n),a){var i={depth:s.depth};return V(s,"quoteStyle")&&(i.quoteStyle=s.quoteStyle),e(t,i,r+1,o)}return e(t,s,r+1,o)}if("function"==typeof t&&!z(t)){var $=function(e){if(e.name)return e.name;var t=y.call(g.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),K=X(t,D);return"[Function"+($?": "+$:" (anonymous)")+"]"+(K.length>0?" { "+S.call(K,", ")+" }":"")}if(q(t)){var ee=T?b.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):j.call(t);return"object"!=typeof t||T?ee:G(ee)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var te="<"+E.call(String(t.nodeName)),ne=t.attributes||[],re=0;re"}if(U(t)){if(0===t.length)return"[]";var oe=X(t,D);return O&&!function(e){for(var t=0;t=0)return!1;return!0}(oe)?"["+Q(oe,O)+"]":"[ "+S.call(oe,", ")+" ]"}if(function(e){return!("[object Error]"!==W(e)||I&&"object"==typeof e&&I in e)}(t)){var ae=X(t,D);return"cause"in Error.prototype||!("cause"in t)||N.call(t,"cause")?0===ae.length?"["+String(t)+"]":"{ ["+String(t)+"] "+S.call(ae,", ")+" }":"{ ["+String(t)+"] "+S.call(_.call("[cause]: "+D(t.cause),ae),", ")+" }"}if("object"==typeof t&&l){if(L&&"function"==typeof t[L]&&M)return M(t,{depth:C-r});if("symbol"!==l&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!a||!e||"object"!=typeof e)return!1;try{a.call(e);try{u.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var ie=[];return i&&i.call(t,(function(e,n){ie.push(D(n,t,!0)+" => "+D(e,t))})),Y("Map",a.call(t),ie,O)}if(function(e){if(!u||!e||"object"!=typeof e)return!1;try{u.call(e);try{a.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var se=[];return c&&c.call(t,(function(e){se.push(D(e,t))})),Y("Set",u.call(t),se,O)}if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{p.call(e,p);try{f.call(e,f)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Z("WeakMap");if(function(e){if(!f||!e||"object"!=typeof e)return!1;try{f.call(e,f);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Z("WeakSet");if(function(e){if(!h||!e||"object"!=typeof e)return!1;try{return h.call(e),!0}catch(e){}return!1}(t))return Z("WeakRef");if(function(e){return!("[object Number]"!==W(e)||I&&"object"==typeof e&&I in e)}(t))return G(D(Number(t)));if(function(e){if(!e||"object"!=typeof e||!k)return!1;try{return k.call(e),!0}catch(e){}return!1}(t))return G(D(k.call(t)));if(function(e){return!("[object Boolean]"!==W(e)||I&&"object"==typeof e&&I in e)}(t))return G(d.call(t));if(function(e){return!("[object String]"!==W(e)||I&&"object"==typeof e&&I in e)}(t))return G(D(String(t)));if(!function(e){return!("[object Date]"!==W(e)||I&&"object"==typeof e&&I in e)}(t)&&!z(t)){var le=X(t,D),ue=P?P(t)===Object.prototype:t instanceof Object||t.constructor===Object,ce=t instanceof Object?"":"null prototype",pe=!ue&&I&&Object(t)===t&&I in t?v.call(W(t),8,-1):ce?"Object":"",fe=(ue||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(pe||ce?"["+S.call(_.call([],pe||[],ce||[]),": ")+"] ":"");return 0===le.length?fe+"{}":O?fe+"{"+Q(le,O)+"}":fe+"{ "+S.call(le,", ")+" }"}return String(t)};var $=Object.prototype.hasOwnProperty||function(e){return e in this};function V(e,t){return $.call(e,t)}function W(e){return m.call(e)}function H(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return J(v.call(e,0,t.maxStringLength),t)+r}return B(b.call(b.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,K),"single",t)}function K(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+w.call(t.toString(16))}function G(e){return"Object("+e+")"}function Z(e){return e+" { ? }"}function Y(e,t,n,r){return e+" ("+t+") {"+(r?Q(n,r):S.call(n,", "))+"}"}function Q(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+S.call(e,","+n)+"\n"+t.prev}function X(e,t){var n=U(e),r=[];if(n){r.length=e.length;for(var o=0;o{var t,n,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:o}catch(e){t=o}try{n="function"==typeof clearTimeout?clearTimeout:a}catch(e){n=a}}();var s,l=[],u=!1,c=-1;function p(){u&&s&&(u=!1,s.length?l=s.concat(l):c=-1,l.length&&f())}function f(){if(!u){var e=i(p);u=!0;for(var t=l.length;t;){for(s=l,l=[];++c1)for(var n=1;n{"use strict";var r=n(50414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},55798:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,r="RFC1738",o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},80129:(e,t,n)=>{"use strict";var r=n(58261),o=n(55235),a=n(55798);e.exports={formats:a,parse:o,stringify:r}},55235:(e,t,n)=>{"use strict";var r=n(12769),o=Object.prototype.hasOwnProperty,a=Array.isArray,i={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},s=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},l=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},u=function(e,t,n,r){if(e){var a=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,s=n.depth>0&&/(\[[^[\]]*])/.exec(a),u=s?a.slice(0,s.index):a,c=[];if(u){if(!n.plainObjects&&o.call(Object.prototype,u)&&!n.allowPrototypes)return;c.push(u)}for(var p=0;n.depth>0&&null!==(s=i.exec(a))&&p=0;--a){var i,s=e[a];if("[]"===s&&n.parseArrays)i=[].concat(o);else{i=n.plainObjects?Object.create(null):{};var u="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,c=parseInt(u,10);n.parseArrays||""!==u?!isNaN(c)&&s!==u&&String(c)===u&&c>=0&&n.parseArrays&&c<=n.arrayLimit?(i=[])[c]=o:"__proto__"!==u&&(i[u]=o):i={0:o}}o=i}return o}(c,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?i.charset:e.charset;return{allowDots:void 0===e.allowDots?i.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:i.comma,decoder:"function"==typeof e.decoder?e.decoder:i.decoder,delimiter:"string"==typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:i.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:i.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var c="string"==typeof e?function(e,t){var n,u={},c=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,p=t.parameterLimit===1/0?void 0:t.parameterLimit,f=c.split(t.delimiter,p),h=-1,d=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(g=a(g)?[g]:g),o.call(u,m)?u[m]=r.combine(u[m],g):u[m]=g}return u}(e,n):e,p=n.plainObjects?Object.create(null):{},f=Object.keys(c),h=0;h{"use strict";var r=n(37478),o=n(12769),a=n(55798),i=Object.prototype.hasOwnProperty,s={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},l=Array.isArray,u=String.prototype.split,c=Array.prototype.push,p=function(e,t){c.apply(e,l(t)?t:[t])},f=Date.prototype.toISOString,h=a.default,d={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:o.encode,encodeValuesOnly:!1,format:h,formatter:a.formatters[h],indices:!1,serializeDate:function(e){return f.call(e)},skipNulls:!1,strictNullHandling:!1},m={},g=function e(t,n,a,i,s,c,f,h,g,y,v,b,w,E,x,_){for(var S,A=t,C=_,k=0,O=!1;void 0!==(C=C.get(m))&&!O;){var j=C.get(t);if(k+=1,void 0!==j){if(j===k)throw new RangeError("Cyclic object value");O=!0}void 0===C.get(m)&&(k=0)}if("function"==typeof h?A=h(n,A):A instanceof Date?A=v(A):"comma"===a&&l(A)&&(A=o.maybeMap(A,(function(e){return e instanceof Date?v(e):e}))),null===A){if(s)return f&&!E?f(n,d.encoder,x,"key",b):n;A=""}if("string"==typeof(S=A)||"number"==typeof S||"boolean"==typeof S||"symbol"==typeof S||"bigint"==typeof S||o.isBuffer(A)){if(f){var T=E?n:f(n,d.encoder,x,"key",b);if("comma"===a&&E){for(var I=u.call(String(A),","),N="",P=0;P0?A.join(",")||null:void 0}];else if(l(h))R=h;else{var D=Object.keys(A);R=g?D.sort(g):D}for(var L=i&&l(A)&&1===A.length?n+"[]":n,B=0;B0?E+w:""}},12769:(e,t,n)=>{"use strict";var r=n(55798),o=Object.prototype.hasOwnProperty,a=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),s=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var r=[],o=0;o=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122||a===r.RFC1738&&(40===c||41===c)?l+=s.charAt(u):c<128?l+=i[c]:c<2048?l+=i[192|c>>6]+i[128|63&c]:c<55296||c>=57344?l+=i[224|c>>12]+i[128|c>>6&63]+i[128|63&c]:(u+=1,c=65536+((1023&c)<<10|1023&s.charCodeAt(u)),l+=i[240|c>>18]+i[128|c>>12&63]+i[128|c>>6&63]+i[128|63&c])}return l},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(a(e)){for(var n=[],r=0;r{"use strict";function t(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,n,r,o){n=n||"&",r=r||"=";var a={};if("string"!=typeof e||0===e.length)return a;var i=/\+/g;e=e.split(n);var s=1e3;o&&"number"==typeof o.maxKeys&&(s=o.maxKeys);var l=e.length;s>0&&l>s&&(l=s);for(var u=0;u=0?(c=d.substr(0,m),p=d.substr(m+1)):(c=d,p=""),f=decodeURIComponent(c),h=decodeURIComponent(p),t(a,f)?Array.isArray(a[f])?a[f].push(h):a[f]=[a[f],h]:a[f]=h}return a}},12361:e=>{"use strict";var t=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,n,r,o){return n=n||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map((function(o){var a=encodeURIComponent(t(o))+r;return Array.isArray(e[o])?e[o].map((function(e){return a+encodeURIComponent(t(e))})).join(n):a+encodeURIComponent(t(e[o]))})).join(n):o?encodeURIComponent(t(o))+r+encodeURIComponent(t(e)):""}},17673:(e,t,n)=>{"use strict";t.decode=t.parse=n(62587),t.encode=t.stringify=n(12361)},57129:(e,t)=>{"use strict";var n,r=Object.prototype.hasOwnProperty;function o(e){try{return decodeURIComponent(e.replace(/\+/g," "))}catch(e){return null}}function a(e){try{return encodeURIComponent(e)}catch(e){return null}}t.stringify=function(e,t){t=t||"";var o,i,s=[];for(i in"string"!=typeof t&&(t="?"),e)if(r.call(e,i)){if((o=e[i])||null!==o&&o!==n&&!isNaN(o)||(o=""),i=a(i),o=a(o),null===i||null===o)continue;s.push(i+"="+o)}return s.length?t+s.join("&"):""},t.parse=function(e){for(var t,n=/([^=?#&]+)=?([^&]*)/g,r={};t=n.exec(e);){var a=o(t[1]),i=o(t[2]);null===a||null===i||a in r||(r[a]=i)}return r}},14419:(e,t,n)=>{const r=n(60697),o=n(69450),a=r.types;e.exports=class e{constructor(e,t){if(this._setDefaults(e),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,e=e.source;else{if("string"!=typeof e)throw new Error("Expected a regexp or string");this.ignoreCase=t&&-1!==t.indexOf("i"),this.multiline=t&&-1!==t.indexOf("m")}this.tokens=r(e)}_setDefaults(t){this.max=null!=t.max?t.max:null!=e.prototype.max?e.prototype.max:100,this.defaultRange=t.defaultRange?t.defaultRange:this.defaultRange.clone(),t.randInt&&(this.randInt=t.randInt)}gen(){return this._gen(this.tokens,[])}_gen(e,t){var n,r,o,i,s;switch(e.type){case a.ROOT:case a.GROUP:if(e.followedBy||e.notFollowedBy)return"";for(e.remember&&void 0===e.groupNumber&&(e.groupNumber=t.push(null)-1),r="",i=0,s=(n=e.options?this._randSelect(e.options):e.stack).length;i{"use strict";var r=n(34155),o=65536,a=4294967295;var i=n(89509).Buffer,s=n.g.crypto||n.g.msCrypto;s&&s.getRandomValues?e.exports=function(e,t){if(e>a)throw new RangeError("requested too many random bytes");var n=i.allocUnsafe(e);if(e>0)if(e>o)for(var l=0;l{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.CopyToClipboard=void 0;var o=s(n(67294)),a=s(n(20640)),i=["text","onCopy","options","children"];function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e,t){for(var n=0;n{"use strict";var r=n(74300).CopyToClipboard;r.CopyToClipboard=r,e.exports=r},53441:(e,t,n)=>{"use strict";function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.DebounceInput=void 0;var o=s(n(67294)),a=s(n(91296)),i=["element","onChange","value","minLength","debounceTimeout","forceNotifyByEnter","forceNotifyOnBlur","onKeyDown","onBlur","inputRef"];function s(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=r?t.notify(e):n.length>o.length&&t.notify(c(c({},e),{},{target:c(c({},e.target),{},{value:""})}))}))})),g(d(t),"onKeyDown",(function(e){"Enter"===e.key&&t.forceNotify(e);var n=t.props.onKeyDown;n&&(e.persist(),n(e))})),g(d(t),"onBlur",(function(e){t.forceNotify(e);var n=t.props.onBlur;n&&(e.persist(),n(e))})),g(d(t),"createNotifier",(function(e){if(e<0)t.notify=function(){return null};else if(0===e)t.notify=t.doNotify;else{var n=(0,a.default)((function(e){t.isDebouncing=!1,t.doNotify(e)}),e);t.notify=function(e){t.isDebouncing=!0,n(e)},t.flush=function(){return n.flush()},t.cancel=function(){t.isDebouncing=!1,n.cancel()}}})),g(d(t),"doNotify",(function(){t.props.onChange.apply(void 0,arguments)})),g(d(t),"forceNotify",(function(e){var n=t.props.debounceTimeout;if(t.isDebouncing||!(n>0)){t.cancel&&t.cancel();var r=t.state.value,o=t.props.minLength;r.length>=o?t.doNotify(e):t.doNotify(c(c({},e),{},{target:c(c({},e.target),{},{value:r})}))}})),t.isDebouncing=!1,t.state={value:void 0===e.value||null===e.value?"":e.value};var n=t.props.debounceTimeout;return t.createNotifier(n),t}return t=u,(n=[{key:"componentDidUpdate",value:function(e){if(!this.isDebouncing){var t=this.props,n=t.value,r=t.debounceTimeout,o=e.debounceTimeout,a=e.value,i=this.state.value;void 0!==n&&a!==n&&i!==n&&this.setState({value:n}),r!==o&&this.createNotifier(r)}}},{key:"componentWillUnmount",value:function(){this.flush&&this.flush()}},{key:"render",value:function(){var e,t,n=this.props,r=n.element,a=(n.onChange,n.value,n.minLength,n.debounceTimeout,n.forceNotifyByEnter),s=n.forceNotifyOnBlur,u=n.onKeyDown,p=n.onBlur,f=n.inputRef,h=l(n,i),d=this.state.value;e=a?{onKeyDown:this.onKeyDown}:u?{onKeyDown:u}:{},t=s?{onBlur:this.onBlur}:p?{onBlur:p}:{};var m=f?{ref:f}:{};return o.default.createElement(r,c(c(c(c({},h),{},{onChange:this.onChange,value:d},e),t),m))}}])&&p(t.prototype,n),r&&p(t,r),Object.defineProperty(t,"prototype",{writable:!1}),u}(o.default.PureComponent);t.DebounceInput=y,g(y,"defaultProps",{element:"input",type:"text",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},775:(e,t,n)=>{"use strict";var r=n(53441).DebounceInput;r.DebounceInput=r,e.exports=r},64448:(e,t,n)=>{"use strict";var r=n(67294),o=n(27418),a=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n
{% endif %} - + {% if item.webhook %} WEBHOOK {% endif %} + {% if item.params-schema-js %} + + SC + + {% else %} + + SP + + {% endif %} diff --git a/backend/resources/app/templates/api-doc.css b/backend/resources/app/templates/api-doc.css index b7b4ad5f12..33e2022ca9 100644 --- a/backend/resources/app/templates/api-doc.css +++ b/backend/resources/app/templates/api-doc.css @@ -27,12 +27,78 @@ main { header { border-bottom: 1px solid #c0c0c0; display: flex; + flex-direction: column; + align-items: center; justify-content: center; width: 100%; } -.rpc-doc-content { +header .menu { + display: flex; + align-items: center; + margin-top: 5px; + margin-bottom: 10px; +} + +header .menu nav { + list-style: none; + padding: 0px; + margin: 0px; + display: flex; + width: 45px; + justify-content: space-between; +} + +header .menu nav > a { + list-style: none; + padding: 0px; + margin: 0px; + cursor: pointer; +} + +header .menu nav > a.selected { + font-weight: 600; +} + +b { + font-weight: 500; +} + +h2 { + margin-top: 30px; +} + +h3 { + font-weight: 400; + font-size: 11px; margin-top: 20px; + text-decoration: underline; +} + +h4 { + font-weight: 300; + font-size: 11px; +} + +.doc-content { + margin-top: 20px; + width: 100%; + display: flex; + flex-direction: column; + /* border: 1px solid red; */ + padding: 5px; +} + +.doc-content p { + line-height: 22px; + margin-bottom: 0px; +} + +.doc-content h3 { + margin-bottom: 0px; +} + +.rpc-doc-content { width: 100%; display: flex; flex-direction: column; @@ -65,7 +131,7 @@ header { .rpc-row-info { cursor: pointer; display: flex; - background-color: #eeeeee; + background-color: #e5e5e5; padding: 5px 10px; } @@ -108,6 +174,8 @@ header { .rpc-row-detail { padding: 5px 10px; padding-bottom: 20px; + border-left: 2px solid #e5e5e5; + border-right: 2px solid #e5e5e5; } .rpc-row-detail p { @@ -143,3 +211,7 @@ header { p.small strong { font-size: 10px; } + +p.small a { + font-size: 10px; +} diff --git a/backend/resources/app/templates/api-doc.tmpl b/backend/resources/app/templates/api-doc.tmpl index 1aa28a7ebe..2a08739733 100644 --- a/backend/resources/app/templates/api-doc.tmpl +++ b/backend/resources/app/templates/api-doc.tmpl @@ -20,10 +20,68 @@

Penpot API Documentation (v{{version}})

+ + [ + + ] +
-
+
+

INTRODUCTION

+

This documentation is intended to be a general overview of the penpot RPC API. + If you prefer, you can use OpenAPI + and/or SwaggerUI as alternative.

-

RPC METHODS:

+

GENERAL NOTES

+ +

Authentication

+

The penpot backend right now offerts two way for authenticate the request: + cookies (the same mechanism that we use ourselves on accessing the API from the + web application) and access tokens.

+ +

The cookie can be obtained using the `login-with-password` rpc method, + on successful login it sets the `auth-token` cookie with the session + token.

+ +

The access token can be obtained on the appropriate section on profile settings + and it should be provided using `Authorization` header with `Token + <token-string>` value.

+ +

Content Negotiation

+

The penpot API by default operates indistinctly with: `application/json` + and `application/transit+json` content types. You should specify the + desired content-type on the `Accept` header, the transit encoding is used + by default.

+ + +

Limits

+

The rate limit work per user basis (this means that different api keys share + the same rate limit). For now the limits are not documented because we are + studying and analyzing the data. As a general rule, it should not be abused, if an + abusive use is detected, we will proceed to block the user's access to the + API.

+ +

Webhooks

+

All methods that emit webhook events are marked with flag WEBHOOK, the + data structure defined on each method represents the payload of the + event.

+

The webhook event structure has this aspect:

+
+ +
+{
+  "id": "db601c95-045f-808b-8002-362f08fcb621",
+  "name": "rename-file",
+  "props": <payload>,
+  "profileId": "db601c95-045f-808b-8002-361312e63531"
+}
+        
+
+
+

RPC METHODS REFERENCE:

    {% for item in methods %} {% include "app/templates/api-doc-entry.tmpl" with item=item %} diff --git a/backend/resources/app/templates/error-report.v3.tmpl b/backend/resources/app/templates/error-report.v3.tmpl new file mode 100644 index 0000000000..216c4d3ebb --- /dev/null +++ b/backend/resources/app/templates/error-report.v3.tmpl @@ -0,0 +1,100 @@ + {% extends "app/templates/base.tmpl" %} + +{% block title %} +penpot - error report v2 {{id}} +{% endblock %} + +{% block content %} + +
    +
    +
    +
    MESSAGE:
    + +
    +

    {{hint}}

    +
    +
    + +
    +
    LOG PROPS:
    +
    +
    {{props}}
    +
    +
    + +
    +
    CONTEXT:
    + +
    +
    {{context}}
    +
    +
    + + {% if params %} +
    +
    PARAMS:
    +
    +
    {{params}}
    +
    +
    + {% endif %} + + {% if data %} +
    +
    DATA:
    +
    +
    {{data}}
    +
    +
    + {% endif %} + + {% if value %} +
    +
    VALIDATION VALUE:
    +
    +
    {{value}}
    +
    +
    + {% endif %} + + {% if explain %} +
    +
    EXPLAIN:
    +
    +
    {{explain}}
    +
    +
    + {% endif %} + + {% if trace %} +
    +
    TRACE:
    +
    +
    {{trace}}
    +
    +
    + {% endif %} +
    +
    +{% endblock %} diff --git a/backend/resources/app/templates/openapi.tmpl b/backend/resources/app/templates/openapi.tmpl new file mode 100644 index 0000000000..78e2577f2e --- /dev/null +++ b/backend/resources/app/templates/openapi.tmpl @@ -0,0 +1,28 @@ + + + + + + + PENPOT Swagger UI + + + +
    + + + + diff --git a/backend/src/app/config.clj b/backend/src/app/config.clj index 00065e8112..601bcf69ee 100644 --- a/backend/src/app/config.clj +++ b/backend/src/app/config.clj @@ -323,6 +323,7 @@ (def default-flags [:enable-backend-api-doc + :enable-backend-openapi-doc :enable-backend-worker :enable-secure-session-cookies :enable-email-verification]) diff --git a/backend/src/app/http.clj b/backend/src/app/http.clj index 46ae0a8d90..59ba338614 100644 --- a/backend/src/app/http.clj +++ b/backend/src/app/http.clj @@ -154,8 +154,8 @@ [_ cfg] (rr/router [["" {:middleware [[mw/server-timing] - [mw/format-response] [mw/params] + [mw/format-response] [mw/parse-request] [session/soft-auth cfg] [actoken/soft-auth cfg] diff --git a/backend/src/app/http/debug.clj b/backend/src/app/http/debug.clj index 50fa7c37b8..b4ff0c8ab2 100644 --- a/backend/src/app/http/debug.clj +++ b/backend/src/app/http/debug.clj @@ -238,6 +238,9 @@ (-> (io/resource "app/templates/error-report.v2.tmpl") (tmpl/render report))) + (render-template-v3 [{report :content}] + (-> (io/resource "app/templates/error-report.v3.tmpl") + (tmpl/render report))) ] (when-not (authorized? pool request) @@ -245,9 +248,10 @@ :code :only-admins-allowed)) (if-let [report (get-report request)] - (let [result (if (= 1 (:version report)) - (render-template-v1 report) - (render-template-v2 report))] + (let [result (case (:version report) + 1 (render-template-v1 report) + 2 (render-template-v2 report) + 3 (render-template-v3 report))] {::yrs/status 200 ::yrs/body result ::yrs/headers {"content-type" "text/html; charset=utf-8" diff --git a/backend/src/app/http/errors.clj b/backend/src/app/http/errors.clj index 9fa4e7a780..3829abfaa7 100644 --- a/backend/src/app/http/errors.clj +++ b/backend/src/app/http/errors.clj @@ -9,6 +9,7 @@ (:require [app.common.exceptions :as ex] [app.common.logging :as l] + [app.common.schema :as sm] [app.http :as-alias http] [app.http.access-token :as-alias actoken] [app.http.session :as-alias session] @@ -82,6 +83,14 @@ (dissoc ::s/problems ::s/value) (cond-> explain (assoc :explain explain)))}) + (= code :params-validation) + (let [explain (::sm/explain data) + payload (sm/humanize-data explain)] + {::yrs/status 400 + ::yrs/body (-> data + (dissoc ::sm/explain) + (assoc :data payload))}) + (= code :request-body-too-large) {::yrs/status 413 ::yrs/body data} @@ -90,16 +99,38 @@ (defmethod handle-exception :assertion [error request] - (let [edata (ex-data error) - explain (ex/explain edata)] - (binding [l/*context* (request->context request)] - (l/error :hint "Assertion error" :message (ex-message error) :cause error) - {::yrs/status 500 - ::yrs/body {:type :server-error - :code :assertion - :data (-> edata - (dissoc ::s/problems ::s/value ::s/spec) - (cond-> explain (assoc :explain explain)))}}))) + (binding [l/*context* (request->context request)] + (let [{:keys [code] :as data} (ex-data error)] + (cond + (= code :data-validation) + (let [explain (::sm/explain data) + payload (sm/humanize-data explain)] + (l/error :hint "Data assertion error" :message (ex-message error) :cause error) + {::yrs/status 500 + ::yrs/body {:type :server-error + :code :assertion + :data (-> data + (dissoc ::sm/explain) + (assoc :data payload))}}) + + (= code :spec-validation) + (let [explain (ex/explain data)] + (l/error :hint "Spec assertion error" :message (ex-message error) :cause error) + {::yrs/status 500 + ::yrs/body {:type :server-error + :code :assertion + :data (-> data + (dissoc ::s/problems ::s/value ::s/spec) + (cond-> explain (assoc :explain explain)))}}) + + :else + (do + (l/error :hint "Assertion error" :message (ex-message error) :cause error) + {::yrs/status 500 + ::yrs/body {:type :server-error + :code :assertion + :data data}}))))) + (defmethod handle-exception :not-found [err _] diff --git a/backend/src/app/loggers/audit.clj b/backend/src/app/loggers/audit.clj index 6e09733492..df1ad5bf05 100644 --- a/backend/src/app/loggers/audit.clj +++ b/backend/src/app/loggers/audit.clj @@ -141,7 +141,7 @@ (defn prepare-event [cfg mdata params result] (let [resultm (meta result) - request (::http/request params) + request (-> params meta ::http/request) profile-id (or (::profile-id resultm) (:profile-id result) (::rpc/profile-id params) @@ -171,7 +171,7 @@ ;; NOTE: for batch-key lookup we need the params as-is ;; because the rpc api does not need to know the ;; audit/webhook specific object layout. - ::rpc/params (dissoc params ::http/request) + ::rpc/params params ::webhooks/batch-key (or (::webhooks/batch-key mdata) diff --git a/backend/src/app/loggers/database.clj b/backend/src/app/loggers/database.clj index 1e9045de83..5fbee80e98 100644 --- a/backend/src/app/loggers/database.clj +++ b/backend/src/app/loggers/database.clj @@ -11,6 +11,7 @@ [app.common.exceptions :as ex] [app.common.logging :as l] [app.common.pprint :as pp] + [app.common.schema :as sm] [app.common.spec :as us] [app.config :as cf] [app.db :as db] @@ -32,35 +33,41 @@ (when-not (db/read-only? pool) (db/insert! pool :server-error-report {:id id - :version 2 + :version 3 :content (db/tjson report)}))) (defn record->report [{:keys [::l/context ::l/message ::l/props ::l/logger ::l/level ::l/cause] :as record}] (us/assert! ::l/record record) - (merge - {:context (-> context - (assoc :tenant (cf/get :tenant)) - (assoc :host (cf/get :host)) - (assoc :public-uri (cf/get :public-uri)) - (assoc :version (:full cf/version)) - (assoc :logger-name logger) - (assoc :logger-level level) - (dissoc :params) - (pp/pprint-str :width 200)) - :params (some-> (:params context) - (pp/pprint-str :width 200)) - :props (pp/pprint-str props :width 200) - :hint (or (ex-message cause) @message) - :trace (ex/format-throwable cause :data? false :explain? false :header? false :summary? false)} + (let [data (ex-data cause)] + (merge + {:context (-> context + (assoc :tenant (cf/get :tenant)) + (assoc :host (cf/get :host)) + (assoc :public-uri (cf/get :public-uri)) + (assoc :version (:full cf/version)) + (assoc :logger-name logger) + (assoc :logger-level level) + (dissoc :params) + (pp/pprint-str :width 200)) + + :props (pp/pprint-str props :width 200) + :hint (or (ex-message cause) @message) + :trace (ex/format-throwable cause :data? false :explain? false :header? false :summary? false)} + + (when-let [params (:params context)] + {:params (pp/pprint-str params :width 200)}) + + (when-let [data (some-> data (dissoc ::s/problems ::s/value ::s/spec ::sm/explain :hint))] + {:data (pp/pprint-str data :width 200)}) + + (when-let [value (-> data ::sm/explain :value)] + {:value (pp/pprint-str value :width 200)}) + + (when-let [explain (ex/explain data)] + {:explain explain})))) - (when-let [data (ex-data cause)] - {:spec-value (some-> (::s/value data) (pp/pprint-str :width 200)) - :spec-explain (ex/explain data) - :data (-> data - (dissoc ::s/problems ::s/value ::s/spec :hint) - (pp/pprint-str :width 200))}))) (defn error-record? [{:keys [::l/level ::l/cause]}] diff --git a/backend/src/app/media.clj b/backend/src/app/media.clj index 72de03ddd0..9964c2824d 100644 --- a/backend/src/app/media.clj +++ b/backend/src/app/media.clj @@ -10,6 +10,9 @@ [app.common.data :as d] [app.common.exceptions :as ex] [app.common.media :as cm] + [app.common.schema :as sm] + [app.common.schema.generators :as sg] + [app.common.schema.openapi :as-alias oapi] [app.common.spec :as us] [app.config :as cf] [app.db :as-alias db] @@ -47,6 +50,27 @@ (s/keys :req-un [::path] :opt-un [::mtype])) +(sm/def! ::fs/path + {:type ::fs/path + :pred fs/path? + :type-properties + {:title "path" + :description "filesystem path" + :error/message "expected a valid fs path instance" + :gen/gen (sg/generator :string) + ::oapi/type "string" + ::oapi/format "unix-path" + ::oapi/decode fs/path}}) + +(sm/def! ::upload + [:map {:title "Upload"} + [:filename :string] + [:size :int] + [:path ::fs/path] + [:mtype {:optional true} :string] + [:headers {:optional true} + [:map-of :string :string]]]) + (defn validate-media-type! ([upload] (validate-media-type! upload cm/valid-image-types)) ([upload allowed] diff --git a/backend/src/app/rpc.clj b/backend/src/app/rpc.clj index f260ddbf7b..63077eec78 100644 --- a/backend/src/app/rpc.clj +++ b/backend/src/app/rpc.clj @@ -10,6 +10,7 @@ [app.common.data :as d] [app.common.exceptions :as ex] [app.common.logging :as l] + [app.common.schema :as sm] [app.common.spec :as us] [app.config :as cf] [app.db :as db] @@ -74,15 +75,16 @@ etag (yrq/get-header request "if-none-match") profile-id (or (::session/profile-id request) (::actoken/profile-id request)) + data (-> params (assoc ::request-at (dt/now)) (assoc ::session/id (::session/id request)) - (assoc ::http/request request) (assoc ::cond/key etag) (cond-> (uuid? profile-id) (assoc ::profile-id profile-id))) - method (get methods type default-handler)] + data (vary-meta data assoc ::http/request request) + method (get methods type default-handler)] (binding [cond/*enabled* true] (let [response (method data)] @@ -127,9 +129,49 @@ (defn- wrap-spec-conform [_ f mdata] - (let [spec (or (::sv/spec mdata) (s/spec any?))] - (fn [cfg params] - (f cfg (us/conform spec params))))) + ;; NOTE: skip spec conform operation on rpc methods that already + ;; uses malli validation mechanism. + (if (contains? mdata ::sm/params) + f + (if-let [spec (ex/ignoring (s/spec (::sv/spec mdata)))] + (fn [cfg params] + (f cfg (us/conform spec params))) + f))) + +(defn- wrap-params-validation + [_ f mdata] + (if-let [schema (::sm/params mdata)] + (let [schema (sm/schema schema) + valid? (sm/validator schema) + explain (sm/explainer schema) + decode (sm/decoder schema sm/default-transformer)] + + (fn [cfg params] + (let [params (decode params)] + (if (valid? params) + (f cfg params) + (ex/raise :type :validation + :code :params-validation + ::sm/explain (explain params)))))) + f)) + +(defn- wrap-output-validation + [_ f mdata] + (if (contains? cf/flags :rpc-output-validation) + (or (when-let [schema (::sm/result mdata)] + (let [schema (sm/schema schema) + valid? (sm/validator schema) + explain (sm/explainer schema)] + (fn [cfg params] + (let [response (f cfg params)] + (when (map? response) + (when-not (valid? response) + (ex/raise :type :validation + :code :data-validation + ::sm/explain (explain response)))) + response)))) + f) + f)) (defn- wrap-all [cfg f mdata] @@ -141,6 +183,8 @@ (rlimit/wrap cfg $ mdata) (wrap-audit cfg $ mdata) (wrap-spec-conform cfg $ mdata) + (wrap-output-validation cfg $ mdata) + (wrap-params-validation cfg $ mdata) (wrap-authentication cfg $ mdata))) (defn- wrap diff --git a/backend/src/app/rpc/commands/audit.clj b/backend/src/app/rpc/commands/audit.clj index b094cbb677..4578a74b3c 100644 --- a/backend/src/app/rpc/commands/audit.clj +++ b/backend/src/app/rpc/commands/audit.clj @@ -39,8 +39,9 @@ :profile-id :ip-addr :props :context]) (defn- handle-events - [{:keys [::db/pool]} {:keys [::rpc/profile-id events ::http/request]}] - (let [ip-addr (audit/parse-client-ip request) + [{:keys [::db/pool]} {:keys [::rpc/profile-id events] :as params}] + (let [request (-> params meta ::http/request) + ip-addr (audit/parse-client-ip request) xform (comp (map #(assoc % :profile-id profile-id)) (map #(assoc % :ip-addr ip-addr)) diff --git a/backend/src/app/rpc/commands/files.clj b/backend/src/app/rpc/commands/files.clj index 81be1a9006..b6a47c1f5e 100644 --- a/backend/src/app/rpc/commands/files.clj +++ b/backend/src/app/rpc/commands/files.clj @@ -11,6 +11,9 @@ [app.common.exceptions :as ex] [app.common.pages.helpers :as cph] [app.common.pages.migrations :as pmg] + [app.common.schema :as sm] + [app.common.schema.desc-js-like :as-alias smdj] + [app.common.schema.generators :as sg] [app.common.spec :as us] [app.common.types.components-list :as ctkl] [app.common.types.file :as ctf] @@ -19,7 +22,6 @@ [app.loggers.audit :as-alias audit] [app.loggers.webhooks :as-alias webhooks] [app.rpc :as-alias rpc] - [app.rpc.commands.files.thumbnails :as-alias thumbs] [app.rpc.commands.projects :as projects] [app.rpc.commands.teams :as teams] [app.rpc.cond :as-alias cond] @@ -188,7 +190,7 @@ (ex/raise :type :restriction :code :features-not-supported :feature (first not-supported) - :hint (format "features %s not supported" (str/join "," not-supported)))) + :hint (format "features %s not supported" (str/join "," (map name not-supported))))) features)) (defn load-pointer @@ -264,6 +266,41 @@ ;; --- COMMAND QUERY: get-file (by id) +(sm/def! ::features + [:schema + {:title "FileFeatures" + ::smdj/inline true + :gen/gen (sg/subseq supported-features)} + ::sm/set-of-strings]) + +(sm/def! ::file + [:map {:title "File"} + [:id ::sm/uuid] + [:features ::features] + [:has-media-trimmed :boolean] + [:comment-thread-seqn {:min 0} :int] + [:name :string] + [:revn {:min 0} :int] + [:modified-at ::dt/instant] + [:is-shared :boolean] + [:project-id ::sm/uuid] + [:created-at ::dt/instant] + [:data {:optional true} :any]]) + +(sm/def! ::permissions-mixin + [:map {:title "PermissionsMixin"} + [:permissions ::perms/permissions]]) + +(sm/def! ::file-with-permissions + [:merge {:title "FileWithPermissions"} + ::file + ::permissions-mixin]) + +(sm/def! ::get-file + [:map {:title "get-file"} + [:features {:optional true} ::features] + [:id ::sm/uuid]]) + (defn get-file [conn id client-features] ;; here we check if client requested features are supported @@ -282,17 +319,14 @@ [{:keys [modified-at revn]}] (str (dt/format-instant modified-at :iso) "-" revn)) -(s/def ::get-file - (s/keys :req [::rpc/profile-id] - :req-un [::id] - :opt-un [::features])) - (sv/defmethod ::get-file "Retrieve a file by its ID. Only authenticated users." {::doc/added "1.17" ::cond/get-object #(get-minimal-file %1 (:id %2)) - ::cond/key-fn get-file-etag} - [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id id features]}] + ::cond/key-fn get-file-etag + ::sm/params ::get-file + ::sm/result ::file-with-permissions} + [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id id features] :as params}] (dm/with-open [conn (db/open pool)] (let [perms (get-permissions conn profile-id id)] (check-read-permissions! perms) @@ -303,23 +337,29 @@ ;; --- COMMAND QUERY: get-file-fragment (by id) +(sm/def! ::file-fragment + [:map {:title "FileFragment"} + [:id ::sm/uuid] + [:file-id ::sm/uuid] + [:created-at ::dt/instant] + [:content any?]]) + +(sm/def! ::get-file-fragment + [:map {:title "get-file-fragment"} + [:file-id ::sm/uuid] + [:fragment-id ::sm/uuid] + [:share-id {:optional true} ::sm/uuid]]) + (defn- get-file-fragment [conn file-id fragment-id] (some-> (db/get conn :file-data-fragment {:file-id file-id :id fragment-id}) (update :content blob/decode))) -(s/def ::share-id ::us/uuid) -(s/def ::fragment-id ::us/uuid) - -(s/def ::get-file-fragment - (s/keys :req-un [::file-id ::fragment-id] - :opt [::rpc/profile-id] - :opt-un [::share-id])) - (sv/defmethod ::get-file-fragment "Retrieve a file by its ID. Only authenticated users." {::doc/added "1.17" - ::rpc/:auth false} + ::sm/params ::get-file-fragment + ::sm/result ::file-fragment} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id fragment-id share-id] }] (dm/with-open [conn (db/open pool)] (let [perms (get-permissions conn profile-id file-id share-id)] @@ -342,16 +382,16 @@ and f.deleted_at is null order by f.modified_at desc") -(s/def ::get-project-files - (s/keys :req [::rpc/profile-id] :req-un [::project-id])) - (defn get-project-files [conn project-id] (db/exec! conn [sql:project-files project-id])) (sv/defmethod ::get-project-files "Get all files for the specified project." - {::doc/added "1.17"} + {::doc/added "1.17" + ::sm/params [:map {:title "get-project-files"} + [:project-id ::sm/uuid]] + ::sm/result [:vector ::file]} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id project-id]}] (dm/with-open [conn (db/open pool)] (projects/check-read-permissions! conn profile-id project-id) @@ -362,15 +402,12 @@ (declare get-has-file-libraries) -(s/def ::file-id ::us/uuid) - -(s/def ::has-file-libraries - (s/keys :req [::rpc/profile-id] - :req-un [::file-id])) - (sv/defmethod ::has-file-libraries "Checks if the file has libraries. Returns a boolean" - {::doc/added "1.15.1"} + {::doc/added "1.15.1" + ::sm/params [:map {:title "has-file-libraries"} + [:file-id ::sm/uuid]] + ::sm/result :boolean} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id]}] (dm/with-open [conn (db/open pool)] (check-read-permissions! pool profile-id file-id) @@ -398,7 +435,7 @@ structure." [{:keys [objects] :as page} object-id] (let [objects (cph/get-children-with-self objects object-id)] - (assoc page :objects (d/index-by :id objects)))) + (assoc page :objects (d/index-by :id objects)))) (defn- prune-thumbnails "Given the page data, removes the `:thumbnail` prop from all @@ -408,6 +445,12 @@ (defn get-page [conn {:keys [file-id page-id object-id features]}] + (when (and (uuid? object-id) + (not (uuid? page-id))) + (ex/raise :type :validation + :code :params-validation + :hint "page-id is required when object-id is provided")) + (let [file (get-file conn file-id features) page-id (or page-id (-> file :data :pages first)) page (dm/get-in file [:data :pages-index page-id])] @@ -415,17 +458,11 @@ (uuid? object-id) (prune-objects object-id)))) -(s/def ::page-id ::us/uuid) -(s/def ::object-id ::us/uuid) -(s/def ::get-page - (s/and - (s/keys :req [::rpc/profile-id] - :req-un [::file-id] - :opt-un [::page-id ::object-id ::features]) - (fn [obj] - (if (contains? obj :object-id) - (contains? obj :page-id) - true)))) +(sm/def! ::get-page + [:map {:title "GetPage"} + [:page-id {:optional true} ::sm/uuid] + [:object-id {:optional true} ::sm/uuid] + [:features {:optional true} ::features]]) (sv/defmethod ::get-page "Retrieves the page data from file and returns it. If no page-id is @@ -437,7 +474,8 @@ mandatory. Mainly used for rendering purposes." - {::doc/added "1.17"} + {::doc/added "1.17" + ::sm/params ::get-page} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id] :as params}] (dm/with-open [conn (db/open pool)] (check-read-permissions! conn profile-id file-id) @@ -635,13 +673,30 @@ :modified-at (dt/now)} {:id id})) -(s/def ::rename-file - (s/keys :req [::rpc/profile-id] - :req-un [::name ::id])) - (sv/defmethod ::rename-file {::doc/added "1.17" - ::webhooks/event? true} + ::webhooks/event? true + + ::sm/webhook + [:map {:title "RenameFileEvent"} + [:id ::sm/uuid] + [:project-id ::sm/uuid] + [:name :string] + [:created-at ::dt/instant] + [:modified-at ::dt/instant]] + + ::sm/params + [:map {:title "RenameFileParams"} + [:name {:min 1} :string] + [:id ::sm/uuid]] + + ::sm/result + [:map {:title "SimplifiedFile"} + [:id ::sm/uuid] + [:name :string] + [:created-at ::dt/instant] + [:modified-at ::dt/instant]]} + [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id id] :as params}] (db/with-atomic [conn pool] (check-edition-permissions! conn profile-id id) @@ -673,6 +728,7 @@ (let [ldata (-> library decode-row pmg/migrate-file :data)] (binding [pmap/*load-fn* (partial load-pointer conn id)] (load-all-pointers! ldata)) + (->> (db/query conn :file-library-rel {:library-file-id id}) (map :file-id) (keep #(db/get-by-id conn :file % ::db/check-deleted? false)) diff --git a/backend/src/app/rpc/commands/files_create.clj b/backend/src/app/rpc/commands/files_create.clj index 734c281d4d..8f279d5773 100644 --- a/backend/src/app/rpc/commands/files_create.clj +++ b/backend/src/app/rpc/commands/files_create.clj @@ -40,21 +40,19 @@ :or {is-shared false revn 0 create-page true} :as params}] - (db/exec-one! conn ["SET CONSTRAINTS ALL DEFERRED;"]) (let [id (or id (uuid/next)) features (->> features (into (files/get-default-features)) (files/check-features-compatibility!)) - data (binding [pmap/*tracked* (atom {}) + pointers (atom {}) + data (binding [pmap/*tracked* pointers ffeat/*current* features ffeat/*wrap-with-objects-map-fn* (if (features "storate/objects-map") omap/wrap identity) ffeat/*wrap-with-pointer-map-fn* (if (features "storage/pointer-map") pmap/wrap identity)] - (let [data (if create-page - (ctf/make-file-data id) - (ctf/make-file-data id nil))] - (files/persist-pointers! conn id) - data)) + (if create-page + (ctf/make-file-data id) + (ctf/make-file-data id nil))) features (db/create-array conn "text" features) file (db/insert! conn :file @@ -70,6 +68,9 @@ :modified-at modified-at :deleted-at deleted-at}))] + (binding [pmap/*tracked* pointers] + (files/persist-pointers! conn id)) + (->> (assoc params :file-id id :role :owner) (create-file-role! conn)) @@ -89,6 +90,7 @@ (sv/defmethod ::create-file {::doc/added "1.17" + ::doc/module :files ::webhooks/event? true} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id project-id] :as params}] (db/with-atomic [conn pool] diff --git a/backend/src/app/rpc/commands/files_share.clj b/backend/src/app/rpc/commands/files_share.clj index f517fbb1ff..bf761b5bf9 100644 --- a/backend/src/app/rpc/commands/files_share.clj +++ b/backend/src/app/rpc/commands/files_share.clj @@ -36,7 +36,8 @@ Share links are resources that allows external users access to specific pages of a file with specific permissions (who-comment and who-inspect)." - {::doc/added "1.18"} + {::doc/added "1.18" + ::doc/module :files} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id] :as params}] (db/with-atomic [conn pool] (files/check-edition-permissions! conn profile-id file-id) @@ -62,7 +63,8 @@ :req-un [::us/id])) (sv/defmethod ::delete-share-link - {::doc/added "1.18"} + {::doc/added "1.18" + ::doc/module ::files} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id id] :as params}] (db/with-atomic [conn pool] (let [slink (db/get-by-id conn :share-link id)] diff --git a/backend/src/app/rpc/commands/files_temp.clj b/backend/src/app/rpc/commands/files_temp.clj index b0982c4a14..4eb24cca26 100644 --- a/backend/src/app/rpc/commands/files_temp.clj +++ b/backend/src/app/rpc/commands/files_temp.clj @@ -36,7 +36,8 @@ ::create-page])) (sv/defmethod ::create-temp-file - {::doc/added "1.17"} + {::doc/added "1.17" + ::doc/module :files} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id project-id] :as params}] (db/with-atomic [conn pool] (projects/check-edition-permissions! conn profile-id project-id) @@ -64,7 +65,8 @@ ::files/id])) (sv/defmethod ::update-temp-file - {::doc/added "1.17"} + {::doc/added "1.17" + ::doc/module :files} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id] :as params}] (db/with-atomic [conn pool] (update-temp-file conn (assoc params :profile-id profile-id)) @@ -101,7 +103,8 @@ :req-un [::files/id])) (sv/defmethod ::persist-temp-file - {::doc/added "1.17"} + {::doc/added "1.17" + ::doc/module :files} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id id] :as params}] (db/with-atomic [conn pool] (files/check-edition-permissions! conn profile-id id) diff --git a/backend/src/app/rpc/commands/files_thumbnails.clj b/backend/src/app/rpc/commands/files_thumbnails.clj index 83a7afdabe..c8315b37ce 100644 --- a/backend/src/app/rpc/commands/files_thumbnails.clj +++ b/backend/src/app/rpc/commands/files_thumbnails.clj @@ -11,6 +11,7 @@ [app.common.exceptions :as ex] [app.common.geom.shapes :as gsh] [app.common.pages.helpers :as cph] + [app.common.schema :as sm] [app.common.spec :as us] [app.common.types.shape-tree :as ctt] [app.config :as cf] @@ -65,13 +66,12 @@ (or (some-> row :media-id get-public-uri) (:data row)))))))) -(s/def ::file-id ::us/uuid) -(s/def ::get-file-object-thumbnails - (s/keys :req [::rpc/profile-id] :req-un [::file-id])) - (sv/defmethod ::get-file-object-thumbnails "Retrieve a file object thumbnails." {::doc/added "1.17" + ::sm/params [:map {:title "get-file-object-thumbnails"} + [:file-id ::sm/uuid]] + ::sm/result [:map-of :string :string] ::cond/get-object #(files/get-minimal-file %1 (:file-id %2)) ::cond/reuse-key? true ::cond/key-fn files/get-file-etag} @@ -102,6 +102,7 @@ :file-id (:file-id row)})) (s/def ::revn ::us/integer) +(s/def ::file-id ::us/uuid) (s/def ::get-file-thumbnail (s/keys :req [::rpc/profile-id] @@ -217,15 +218,18 @@ :always (update :objects assoc-thumbnails page-id thumbs)))))) -(s/def ::get-file-data-for-thumbnail - (s/keys :req [::rpc/profile-id] - :req-un [::file-id] - :opt-un [::features])) - (sv/defmethod ::get-file-data-for-thumbnail "Retrieves the data for generate the thumbnail of the file. Used mainly for render thumbnails on dashboard." - {::doc/added "1.17"} + + {::doc/added "1.17" + ::sm/params [:map {:title "get-file-data-for-thumbnail"} + [:file-id ::sm/uuid] + [:features {:optional true} ::files/features]] + ::sm/result [:map {:title "PartialFile"} + [:id ::sm/uuid] + [:revn {:min 0} :int] + [:page :any]]} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id file-id features] :as props}] (dm/with-open [conn (db/open pool)] (files/check-read-permissions! conn profile-id file-id) diff --git a/backend/src/app/rpc/commands/files_update.clj b/backend/src/app/rpc/commands/files_update.clj index f25dc8997f..0accca0a37 100644 --- a/backend/src/app/rpc/commands/files_update.clj +++ b/backend/src/app/rpc/commands/files_update.clj @@ -10,7 +10,10 @@ [app.common.files.features :as ffeat] [app.common.logging :as l] [app.common.pages :as cp] + [app.common.pages.changes :as cpc] [app.common.pages.migrations :as pmg] + [app.common.schema :as sm] + [app.common.schema.generators :as smg] [app.common.spec :as us] [app.common.types.file :as ctf] [app.common.uuid :as uuid] @@ -60,6 +63,40 @@ (or (contains? o :changes) (contains? o :changes-with-metadata))))) + +;; --- SCHEMA + +(sm/def! ::changes + [:vector ::cpc/change]) + +(sm/def! ::change-with-metadata + [:map {:title "ChangeWithMetadata"} + [:changes ::changes] + [:hint-origin {:optional true} :keyword] + [:hint-events {:optional true} [:vector :string]]]) + +(sm/def! ::update-file-params + [:map {:title "UpdateFileParams"} + [:id ::sm/uuid] + [:session-id ::sm/uuid] + [:revn {:min 0} :int] + [:features {:optional true + :gen/max 3 + :gen/gen (smg/subseq files/supported-features)} + ::sm/set-of-strings] + [:changes {:optional true} ::changes] + [:changes-with-metadata {:optional true} + [:vector ::change-with-metadata]]]) + +(sm/def! ::update-file-result + [:vector {:title "UpdateFileResults"} + [:map {:title "UpdateFileResult"} + [:changes ::changes] + [:file-id ::sm/uuid] + [:id ::sm/uuid] + [:revn {:min 0} :int] + [:session-id ::sm/uuid]]]) + ;; --- HELPERS ;; File changes that affect to the library, and must be notified @@ -130,6 +167,11 @@ ::webhooks/event? true ::webhooks/batch-timeout (dt/duration "2m") ::webhooks/batch-key (webhooks/key-fn ::rpc/profile-id :id) + + ::sm/params ::update-file-params + ::sm/result ::update-file-result + + ::doc/module :files ::doc/added "1.17"} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id id] :as params}] (db/with-atomic [conn pool] diff --git a/backend/src/app/rpc/commands/profile.clj b/backend/src/app/rpc/commands/profile.clj index 0aed83a61f..0a44998ed4 100644 --- a/backend/src/app/rpc/commands/profile.clj +++ b/backend/src/app/rpc/commands/profile.clj @@ -8,8 +8,9 @@ (:require [app.auth :as auth] [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.exceptions :as ex] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.uuid :as uuid] [app.config :as cf] [app.db :as db] @@ -37,19 +38,35 @@ (declare strip-private-attrs) (declare verify-password) -;; --- QUERY: Get profile (own) +(def schema:profile + [:map {:title "Profile"} + [:id ::sm/uuid] + [:fullname :string] + [:email ::sm/email] + [:is-active {:optional true} :boolean] + [:is-blocked {:optional true} :boolean] + [:is-demo {:optional true} :boolean] + [:is-muted {:optional true} :boolean] + [:created-at {:optional true} ::sm/inst] + [:modified-at {:optional true} ::sm/inst] + [:default-project-id {:optional true} ::sm/uuid] + [:default-team-id {:optional true} ::sm/uuid] + [:props {:optional true} + [:map-of {:title "ProfileProps"} :keyword :any]]]) -(s/def ::get-profile - (s/keys :opt [::rpc/profile-id])) +(def profile? + (sm/pred-fn schema:profile)) + +;; --- QUERY: Get profile (own) (sv/defmethod ::get-profile {::rpc/auth false - ::doc/added "1.18"} + ::doc/added "1.18" + ::sm/result schema:profile} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id]}] ;; We need to return the anonymous profile object in two cases, when ;; no profile-id is in session, and when db call raises not found. In all other ;; cases we need to reraise the exception. - (try (-> (get-profile pool profile-id) (strip-private-attrs) @@ -63,22 +80,21 @@ (-> (db/get-by-id conn :profile id attrs) (decode-row))) - ;; --- MUTATION: Update Profile (own) -(s/def ::email ::us/email) -(s/def ::fullname ::us/not-empty-string) -(s/def ::lang ::us/string) -(s/def ::theme ::us/string) - -(s/def ::update-profile - (s/keys :req [::rpc/profile-id] - :req-un [::fullname] - :opt-un [::lang ::theme])) - (sv/defmethod ::update-profile - {::doc/added "1.0"} + {::doc/added "1.0" + ::sm/params [:map {:title "UpdateProfileParams"} + [:fullname {:min 1} :string] + [:lang {:optional true} :string] + [:theme {:optional true} :string]] + ::sm/result schema:profile} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id fullname lang theme] :as params}] + + (dm/assert! + "expected valid profile data" + (profile? params)) + (db/with-atomic [conn pool] ;; NOTE: we need to retrieve the profile independently if we use ;; it or not for explicit locking and avoid concurrent updates of @@ -112,14 +128,13 @@ (declare update-profile-password!) (declare invalidate-profile-session!) -(s/def ::password ::us/not-empty-string) -(s/def ::old-password (s/nilable ::us/string)) - -(s/def ::update-profile-password - (s/keys :req [::rpc/profile-id] - :req-un [::password ::old-password])) - (sv/defmethod ::update-profile-password + {:doc/added "1.0" + ::sm/params [:map {:title "UpdateProfilePasswordParams"} + [:password :string] + [:old-password :string]] + ::sm/result :nil} + [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id password] :as params}] (db/with-atomic [conn pool] (let [cfg (assoc cfg ::db/conn conn) @@ -163,12 +178,11 @@ (declare upload-photo) (declare update-profile-photo) -(s/def ::file ::media/upload) -(s/def ::update-profile-photo - (s/keys :req [::rpc/profile-id] - :req-un [::file])) - (sv/defmethod ::update-profile-photo + {:doc/added "1.1" + ::sm/params [:map {:title "UpdateProfilePhotoParams"} + [:file ::media/upload]] + ::sm/result :nil} [cfg {:keys [::rpc/profile-id file] :as params}] ;; Validate incoming mime type (media/validate-media-type! file #{"image/jpeg" "image/png" "image/webp"}) diff --git a/backend/src/app/rpc/doc.clj b/backend/src/app/rpc/doc.clj index 1541658b53..c797ffc1ed 100644 --- a/backend/src/app/rpc/doc.clj +++ b/backend/src/app/rpc/doc.clj @@ -8,57 +8,197 @@ "API autogenerated documentation." (:require [app.common.data :as d] + [app.common.exceptions :as ex] + [app.common.pprint :as pp] + [app.common.schema :as sm] + [app.common.schema.desc-js-like :as smdj] + [app.common.schema.desc-native :as smdn] + [app.common.schema.openapi :as oapi] + [app.common.schema.registry :as sr] [app.config :as cf] [app.loggers.webhooks :as-alias webhooks] [app.rpc :as-alias rpc] + [app.util.json :as json] [app.util.services :as sv] [app.util.template :as tmpl] [clojure.java.io :as io] [clojure.spec.alpha :as s] [cuerdas.core :as str] [integrant.core :as ig] + [malli.transform :as mt] [pretty-spec.core :as ps] [yetti.response :as yrs])) -(defn- get-spec-str - [k] - (with-out-str - (ps/pprint (s/form k) - {:ns-aliases {"clojure.spec.alpha" "s" - "clojure.core.specs.alpha" "score" - "clojure.core" nil}}))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; DOC (human readable) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defn- prepare-context +(defn- prepare-doc-context [methods] - (letfn [(gen-doc [[{:keys [::sv/name] :as mdata} _f]] - {:name (d/name name) - :module (-> (:ns mdata) (str/split ".") last) + (letfn [(fmt-spec [mdata] + (when-let [spec (ex/ignoring (s/spec (::sv/spec mdata)))] + (with-out-str + (ps/pprint (s/form spec) + {:ns-aliases {"clojure.spec.alpha" "s" + "clojure.core.specs.alpha" "score" + "clojure.core" nil}})))) + + (fmt-schema [type mdata key] + (when-let [schema (get mdata key)] + (if (= type :js) + (smdj/describe (sm/schema schema) {::smdj/max-level 4}) + (-> (smdn/describe (sm/schema schema)) + (pp/pprint-str {:level 5 :width 70}))))) + + (get-context [mdata] + {:name (::sv/name mdata) + :module (or (some-> (::module mdata) d/name) + (-> (:ns mdata) (str/split ".") last)) :auth (:auth mdata true) :webhook (::webhooks/event? mdata false) :docs (::sv/docstring mdata) :deprecated (::deprecated mdata) :added (::added mdata) :changes (some->> (::changes mdata) (partition-all 2) (map vec)) - :spec (get-spec-str (::sv/spec mdata))})] + :spec (fmt-spec mdata) + :entrypoint (str (cf/get :public-uri) "/api/rpc/commands/" (::sv/name mdata)) + + :params-schema-js (fmt-schema :js mdata ::sm/params) + :result-schema-js (fmt-schema :js mdata ::sm/result) + :webhook-schema-js (fmt-schema :js mdata ::sm/webhook) + :params-schema-clj (fmt-schema :clj mdata ::sm/params) + :result-schema-clj (fmt-schema :clj mdata ::sm/result) + :webhook-schema-clj (fmt-schema :clj mdata ::sm/webhook)})] {:version (:main cf/version) :methods (->> methods (map val) - (map gen-doc) + (map first) + (map get-context) (sort-by (juxt :module :name)))})) -(defn- handler - [methods] +(defn- doc-handler + [context] (if (contains? cf/flags :backend-api-doc) - (let [context (prepare-context methods)] - (fn [_] + (fn [request] + (let [params (:query-params request) + pstyle (:type params "js") + context (assoc context :param-style pstyle)] {::yrs/status 200 ::yrs/body (-> (io/resource "app/templates/api-doc.tmpl") (tmpl/render context))})) (fn [_] {::yrs/status 404}))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; OPENAPI / SWAGGER (v3.1) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(def output-transformer + (mt/transformer + sm/default-transformer + (mt/key-transformer {:encode str/camel + :decode (comp keyword str/kebab)}))) + +(defn prepare-openapi-context + [methods] + (letfn [(gen-response-doc [tsx schema] + (let [schema (sm/schema schema) + example (sm/generate schema) + example (sm/encode schema example output-transformer)] + {:default + {:description "A default response" + :content + {"application/json" + {:schema tsx + :example example}}}})) + + (gen-params-doc [tsx schema] + (let [example (sm/generate schema) + example (sm/encode schema example output-transformer)] + {:required true + :content + {"application/json" + {:schema tsx + :example example}}})) + + (gen-method-doc [options mdata] + (let [pschema (::sm/params mdata) + rschema (::sm/result mdata) + + sparams (-> pschema (oapi/transform options) (gen-params-doc pschema)) + sresp (some-> rschema (oapi/transform options) (gen-response-doc rschema)) + + rpost {:description (::sv/docstring mdata) + :deprecated (::deprecated mdata false) + :requestBody sparams} + + rpost (cond-> rpost + (some? sresp) + (assoc :responses sresp))] + + {:name (-> mdata ::sv/name d/name) + :module (-> (:ns mdata) (str/split ".") last) + :repr {:post rpost}})) + ] + + (let [definitions (atom {}) + options {:registry sr/default-registry + ::oapi/definitions-path "#/components/schemas/" + ::oapi/definitions definitions} + + paths (binding [oapi/*definitions* definitions] + (->> methods + (map (comp first val)) + (filter ::sm/params) + (map (partial gen-method-doc options)) + (sort-by (juxt :module :name)) + (map (fn [doc] + [(str/ffmt "/commands/%" (:name doc)) (:repr doc)])) + (into {})))] + {:openapi "3.0.0" + :info {:version (:main cf/version)} + :servers [{:url (str/ffmt "%/api/rpc" (cf/get :public-uri)) + ;; :description "penpot backend" + }] + :security + {:api_key []} + + :paths paths + :components {:schemas @definitions}}))) + +(defn openapi-json-handler + [context] + (if (contains? cf/flags :backend-openapi-doc) + (fn [_] + {::yrs/status 200 + ::yrs/headers {"content-type" "application/json; charset=utf-8"} + ::yrs/body (json/encode context)}) + + (fn [_] + {::yrs/status 404}))) + +(defn openapi-handler + [] + (if (contains? cf/flags :backend-openapi-doc) + (fn [_] + (let [swagger-js (slurp (io/resource "app/assets/swagger-ui-4.18.3.js")) + swagger-cs (slurp (io/resource "app/assets/swagger-ui-4.18.3.css")) + context {:public-uri (cf/get :public-uri) + :swagger-js swagger-js + :swagger-css swagger-cs}] + {::yrs/status 200 + ::yrs/headers {"content-type" "text/html"} + ::yrs/body (-> (io/resource "app/templates/openapi.tmpl") + (tmpl/render context))})) + (fn [_] + {::yrs/status 404}))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; MODULE INIT +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (s/def ::routes vector?) (defmethod ig/pre-init-spec ::routes [_] @@ -66,6 +206,18 @@ (defmethod ig/init-key ::routes [_ {:keys [methods] :as cfg}] - ["/_doc" {:handler (handler methods) - :allowed-methods #{:get}}]) + [(let [context (prepare-doc-context methods)] + [["/_doc" + {:handler (doc-handler context) + :allowed-methods #{:get}}] + ["/doc" + {:handler (doc-handler context) + :allowed-methods #{:get}}]]) + (let [context (prepare-openapi-context methods)] + [["/openapi" + {:handler (openapi-handler) + :allowed-methods #{:get}}] + ["/openapi.json" + {:handler (openapi-json-handler context) + :allowed-methods #{:get}}]])]) diff --git a/backend/src/app/rpc/permissions.clj b/backend/src/app/rpc/permissions.clj index 7cca62d0f7..d2f1719ee6 100644 --- a/backend/src/app/rpc/permissions.clj +++ b/backend/src/app/rpc/permissions.clj @@ -8,9 +8,20 @@ "A permission checking helper factories." (:require [app.common.exceptions :as ex] + [app.common.schema :as sm] [app.common.spec :as us] [clojure.spec.alpha :as s])) +(sm/def! ::permissions + [:map {:title "Permissions"} + [:type {:gen/elements [:membership :share-link]} :keyword] + [:is-owner :boolean] + [:is-admin :boolean] + [:can-edit :boolean] + [:can-read :boolean] + [:is-logged :boolean]]) + + (s/def ::role #{:admin :owner :editor :viewer}) (defn assign-role-flags diff --git a/backend/src/app/rpc/rlimit.clj b/backend/src/app/rpc/rlimit.clj index eb48482bb0..0c0868f93c 100644 --- a/backend/src/app/rpc/rlimit.clj +++ b/backend/src/app/rpc/rlimit.clj @@ -212,10 +212,11 @@ (into [] (map #(assoc % ::service sname)) limits))) (defn- get-uid - [{:keys [::http/request] :as params}] - (or (::rpc/profile-id params) - (some-> request parse-client-ip) - uuid/zero)) + [{:keys [::rpc/profile-id] :as params}] + (let [request (-> params meta ::http/request)] + (or profile-id + (some-> request parse-client-ip) + uuid/zero))) (defn process-request! [{:keys [::rpc/rlimit ::rds/redis ::skey ::sname] :as cfg} params] diff --git a/backend/src/app/util/fressian.clj b/backend/src/app/util/fressian.clj index 335f74b75b..82e364ccb0 100644 --- a/backend/src/app/util/fressian.clj +++ b/backend/src/app/util/fressian.clj @@ -155,7 +155,7 @@ (defn write-char [n w o] (write-tag! w n 1) - (write-int! w o)) + (write-int! w (int o))) (defn read-char [rdr] @@ -259,8 +259,8 @@ :rfn (comp vec read-object!)} {:name "clj/list" - :class clojure.lang.IPersistentList - :wfn write-list-like + ;; :class clojure.lang.IPersistentList + ;; :wfn write-list-like :rfn #(apply list (read-object! %))} {:name "clj/seq" diff --git a/backend/src/app/util/time.clj b/backend/src/app/util/time.clj index b9d6f4eeb1..3fee8b93c2 100644 --- a/backend/src/app/util/time.clj +++ b/backend/src/app/util/time.clj @@ -8,8 +8,11 @@ (:require [app.common.data.macros :as dm] [app.common.exceptions :as ex] + [app.common.schema :as sm] + [app.common.schema.openapi :as-alias oapi] [app.common.time :as common-time] [clojure.spec.alpha :as s] + [clojure.test.check.generators :as tgen] [cuerdas.core :as str] [fipp.ednize :as fez]) (:import @@ -358,3 +361,27 @@ [] (let [p1 (System/nanoTime)] #(duration {:nanos (- (System/nanoTime) p1)}))) + +(sm/def! ::instant + {:type ::instant + :pred instant? + :type-properties + {:error/message "should be an instant" + :title "instant" + ::sm/decode instant + :gen/gen (tgen/fmap (fn [i] (in-past i)) tgen/pos-int) + ::oapi/type "string" + ::oapi/format "iso" + }}) + +(sm/def! ::duration + {:type :durations + :pred duration? + :type-properties + {:error/message "should be a duration" + :gen/gen (tgen/fmap duration tgen/pos-int) + :title "duration" + ::sm/decode duration + ::oapi/type "string" + ::oapi/format "duration" + }}) diff --git a/backend/test/backend_tests/rpc_audit_test.clj b/backend/test/backend_tests/rpc_audit_test.clj index b27aa0e2c9..df860ca037 100644 --- a/backend/test/backend_tests/rpc_audit_test.clj +++ b/backend/test/backend_tests/rpc_audit_test.clj @@ -37,7 +37,6 @@ proj-id (:default-project-id prof) params {::th/type :push-audit-events - :app.http/request http-request ::rpc/profile-id (:id prof) :events [{:name "navigate" :props {:project-id proj-id @@ -47,6 +46,9 @@ :profile-id (:id prof) :timestamp (dt/now) :type "action"}]} + params (with-meta params + {:app.http/request http-request}) + out (th/command! params)] ;; (th/print-result! out) (t/is (nil? (:error out))) @@ -67,7 +69,6 @@ proj-id (:default-project-id prof) params {::th/type :push-audit-events - :app.http/request http-request ::rpc/profile-id (:id prof) :events [{:name "navigate" :props {:project-id proj-id @@ -77,6 +78,8 @@ :profile-id uuid/zero :timestamp (dt/now) :type "action"}]} + params (with-meta params + {:app.http/request http-request}) out (th/command! params)] ;; (th/print-result! out) (t/is (nil? (:error out))) diff --git a/backend/test/backend_tests/rpc_file_test.clj b/backend/test/backend_tests/rpc_file_test.clj index 87e18ef50e..743bbdb406 100644 --- a/backend/test/backend_tests/rpc_file_test.clj +++ b/backend/test/backend_tests/rpc_file_test.clj @@ -132,6 +132,7 @@ :components-v2 true :changes changes} out (th/command! params)] + ;; (th/print-result! out) (t/is (nil? (:error out))) (:result out)))] @@ -165,7 +166,6 @@ (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})] (t/is (= 2 (count rows)))) - ;; Check the number of fragments (let [rows (th/db-query :file-data-fragment {:file-id (:id file)})] (t/is (= 2 (count rows)))) @@ -646,10 +646,11 @@ :components-v2 true} out (th/command! data)] + ;; (th/print-result! out) (t/is (not (th/success? out))) (let [{:keys [type code]} (-> out :error ex-data)] (t/is (= :validation type)) - (t/is (= :spec-validation code)))) + (t/is (= :params-validation code)))) ) diff --git a/backend/test/backend_tests/util_objects_map_test.clj b/backend/test/backend_tests/util_objects_map_test.clj index d9fa1b3d02..7d75191e7f 100644 --- a/backend/test/backend_tests/util_objects_map_test.clj +++ b/backend/test/backend_tests/util_objects_map_test.clj @@ -6,19 +6,16 @@ (ns backend-tests.util-objects-map-test (:require - [backend-tests.helpers :as th] - [app.common.spec :as us] + [app.common.schema.generators :as sg] [app.common.transit :as transit] [app.common.types.shape :as cts] [app.common.uuid :as uuid] [app.util.fressian :as fres] [app.util.objects-map :as omap] + [backend-tests.helpers :as th] [clojure.pprint :refer [pprint]] - [clojure.spec.alpha :as s] [clojure.test :as t] - [clojure.test.check.clojure-test :refer [defspec]] - [clojure.test.check.generators :as gen] - [clojure.test.check.properties :as props])) + [clojure.test.check.generators :as cg])) (t/deftest basic-operations (t/testing "assoc" @@ -89,55 +86,55 @@ (t/is (= (hash obj1) (hash obj2))))) ) -(defspec internal-encode-decode 25 - (props/for-all - [data (->> (gen/map gen/uuid (s/gen ::cts/shape)) - (gen/not-empty))] - (let [obj1 (omap/wrap data) - obj2 (omap/create (deref obj1)) - obj3 (assoc obj2 uuid/zero 1) - obj4 (omap/create (deref obj3))] - ;; (app.common.pprint/pprint data) +(t/deftest internal-encode-decode + (sg/check! + (sg/for [data (->> (cg/map cg/uuid (sg/generator ::cts/shape)) + (cg/not-empty))] + (let [obj1 (omap/wrap data) + obj2 (omap/create (deref obj1)) + obj3 (assoc obj2 uuid/zero 1) + obj4 (omap/create (deref obj3))] + ;; (app.common.pprint/pprint data) (t/is (= (hash obj1) (hash obj2))) (t/is (not= (hash obj2) (hash obj3))) (t/is (bytes? (deref obj3))) (t/is (pos? (alength (deref obj3)))) - (t/is (= (hash obj3) (hash obj4)))))) + (t/is (= (hash obj3) (hash obj4))))))) -(defspec fressian-encode-decode 25 - (props/for-all - [data (->> (gen/map gen/uuid (s/gen ::cts/shape)) - (gen/not-empty) - (gen/fmap omap/wrap) - (gen/fmap (fn [o] {:objects o})))] - (let [res (-> data fres/encode fres/decode)] - (t/is (contains? res :objects)) - (t/is (omap/objects-map? (:objects res))) - (t/is (= (count (:objects data)) - (count (:objects res)))) - (t/is (= (hash (:objects data)) - (hash (:objects res))))))) +(t/deftest fressian-encode-decode + (sg/check! + (sg/for [data (->> (cg/map cg/uuid (sg/generator ::cts/shape)) + (cg/not-empty) + (cg/fmap omap/wrap) + (cg/fmap (fn [o] {:objects o})))] -(defspec transit-encode-decode 25 - (props/for-all - [data (->> (gen/map gen/uuid (s/gen ::cts/shape)) - (gen/not-empty) - (gen/fmap omap/wrap) - (gen/fmap (fn [o] {:objects o})))] - (let [res (-> data transit/encode transit/decode)] - ;; (app.common.pprint/pprint data) - ;; (app.common.pprint/pprint res) - (doseq [[k v] (:objects res)] - (t/is (= v (get-in data [:objects k])))) + (let [res (-> data fres/encode fres/decode)] + (t/is (contains? res :objects)) + (t/is (omap/objects-map? (:objects res))) + (t/is (= (count (:objects data)) + (count (:objects res)))) + (t/is (= (hash (:objects data)) + (hash (:objects res)))))))) - (t/is (contains? res :objects)) - (t/is (contains? data :objects)) +(t/deftest transit-encode-decode + (sg/check! + (sg/for [data (->> (cg/map cg/uuid (sg/generator ::cts/shape)) + (cg/not-empty) + (cg/fmap omap/wrap) + (cg/fmap (fn [o] {:objects o})))] + (let [res (-> data transit/encode transit/decode)] + ;; (app.common.pprint/pprint data) + ;; (app.common.pprint/pprint res) + (doseq [[k v] (:objects res)] + (t/is (= v (get-in data [:objects k])))) - (t/is (omap/objects-map? (:objects data))) - (t/is (not (omap/objects-map? (:objects res)))) - - (t/is (= (count (:objects data)) - (count (:objects res))))))) + (t/is (contains? res :objects)) + (t/is (contains? data :objects)) + (t/is (omap/objects-map? (:objects data))) + (t/is (not (omap/objects-map? (:objects res)))) + + (t/is (= (count (:objects data)) + (count (:objects res)))))))) diff --git a/common/deps.edn b/common/deps.edn index 54d4237ee2..e70f6c4546 100644 --- a/common/deps.edn +++ b/common/deps.edn @@ -18,6 +18,8 @@ selmer/selmer {:mvn/version "1.12.55"} criterium/criterium {:mvn/version "0.4.6"} + metosin/malli {:mvn/version "0.11.0"} + expound/expound {:mvn/version "0.9.0"} com.cognitect/transit-clj {:mvn/version "1.0.329"} com.cognitect/transit-cljs {:mvn/version "0.8.280"} diff --git a/common/src/app/common/data.cljc b/common/src/app/common/data.cljc index 6007e5a6d2..f7316a274d 100644 --- a/common/src/app/common/data.cljc +++ b/common/src/app/common/data.cljc @@ -18,7 +18,6 @@ :clj [clojure.edn :as r]) #?(:cljs [cljs.core :as c] :clj [clojure.core :as c]) - [app.common.exceptions :as ex] [app.common.math :as mth] [clojure.set :as set] [cuerdas.core :as str] @@ -539,7 +538,10 @@ (defn parse-uuid [v] - (ex/ignoring (c/parse-uuid v))) + (try + (c/parse-uuid v) + (catch #?(:clj Throwable :cljs :default) _ + nil))) (defn num-string? [v] ;; https://stackoverflow.com/questions/175739/built-in-way-in-javascript-to-check-if-a-string-is-a-valid-number @@ -748,6 +750,51 @@ [key (delay (generator-fn key))])) keys)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; String Functions +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(def stylize-re1 (re-pattern "(?u)(\\p{Lu}+[\\p{Ll}\\u0027\\p{Ps}\\p{Pe}]*)")) +(def stylize-re2 (re-pattern "(?u)[^\\p{L}\\p{N}\\u0027\\p{Ps}\\p{Pe}\\?!]+")) + +(defn- stylize-split + [s] + (some-> s + (name) + (str/replace stylize-re1 "-$1") + (str/split stylize-re2) + (seq))) + +(defn- stylize-join + ([coll every-fn join-with] + (when (seq coll) + (str/join join-with (map every-fn coll)))) + ([[fst & rst] first-fn rest-fn join-with] + (when (string? fst) + (str/join join-with (cons (first-fn fst) (map rest-fn rst)))))) + +(defn stylize + ([s every-fn join-with] + (stylize s every-fn every-fn join-with)) + ([s first-fn rest-fn join-with] + (let [remove-empty #(seq (remove empty? %))] + (some-> (stylize-split s) + (remove-empty) + (stylize-join first-fn rest-fn join-with))))) + +(defn camel + "Output will be: lowerUpperUpperNoSpaces + accepts strings and keywords" + [s] + (stylize s str/lower str/capital "")) + +(defn kebab + "Output will be: lower-cased-and-separated-with-dashes + accepts strings and keywords" + [s] + (stylize s str/lower "-")) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Util protocols ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/common/src/app/common/data/macros.cljc b/common/src/app/common/data/macros.cljc index c8a8e5db93..5ee0151106 100644 --- a/common/src/app/common/data/macros.cljc +++ b/common/src/app/common/data/macros.cljc @@ -127,3 +127,32 @@ (if (:ns &env) (list (symbol ".") (with-meta obj {:tag 'js}) (symbol (str "-" (c/name prop)))) `(c/get ~obj ~prop))) + +(def ^:dynamic *assert-context* nil) + +(defmacro assert! + ([expr] + `(assert! nil ~expr)) + ([hint expr] + (let [hint (cond + (vector? hint) + `(str/ffmt ~@hint) + + (some? hint) + hint + + :else + (str "expr assert: " (pr-str expr)))] + (when *assert* + `(binding [*assert-context* true] + (when-not ~expr + (let [hint# ~hint + params# {:type :assertion + :code :expr-validation + :hint hint#}] + (throw (ex-info hint# params#))))))))) + +(defmacro verify! + [& params] + (binding [*assert* true] + `(assert! ~@params))) diff --git a/common/src/app/common/exceptions.cljc b/common/src/app/common/exceptions.cljc index 8a3d90ae29..2efdb30bd4 100644 --- a/common/src/app/common/exceptions.cljc +++ b/common/src/app/common/exceptions.cljc @@ -10,6 +10,7 @@ (:require #?(:clj [clojure.stacktrace :as strace]) [app.common.pprint :as pp] + [app.common.schema :as sm] [clojure.spec.alpha :as s] [cuerdas.core :as str] [expound.alpha :as expound]) @@ -31,6 +32,7 @@ [& params] `(throw (error ~@params))) +;; FIXME deprecate (defn try* [f on-error] (try (f) (catch #?(:clj Throwable :cljs :default) e (on-error e)))) @@ -40,11 +42,15 @@ (defmacro ignoring [& exprs] - `(try* (^:once fn* [] ~@exprs) (constantly nil))) + (if (:ns &env) + `(try ~@exprs (catch :default e# nil)) + `(try ~@exprs (catch Throwable e# nil)))) (defmacro try! [& exprs] - `(try* (^:once fn* [] ~@exprs) identity)) + (if (:ns &env) + `(try ~@exprs (catch :default e# e#)) + `(try ~@exprs (catch Throwable e# e#)))) (defn ex-info? [v] @@ -65,7 +71,7 @@ (defn explain ([data] (explain data nil)) - ([data {:keys [max-problems] :or {max-problems 10} :as opts}] + ([data {:keys [level length] :or {level 8 length 10} :as opts}] (cond ;; ;; NOTE: a special case for spec validation errors on integrant (and (= (:reason data) :integrant.core/build-failed-spec) @@ -77,7 +83,11 @@ (contains? data ::s/spec)) (binding [s/*explain-out* expound/printer] (with-out-str - (s/explain-out (update data ::s/problems #(take max-problems %)))))))) + (s/explain-out (update data ::s/problems #(take length %))))) + + (contains? data ::sm/explain) + (-> (sm/humanize-data (::sm/explain data)) + (pp/pprint-str {:level level :length length}))))) #?(:clj (defn format-throwable @@ -89,7 +99,7 @@ explain? true chain? true data-length 10 - data-level 3}}] + data-level 8}}] (letfn [(print-trace-element [^StackTraceElement e] (let [class (.getClassName e) @@ -157,9 +167,9 @@ (print-trace cause) (when-let [data (ex-data cause)] (when data? - (print-data (dissoc data ::s/problems ::s/spec ::s/value))) + (print-data (dissoc data ::s/problems ::s/spec ::s/value ::sm/explain))) (when explain? - (if-let [explain (explain data)] + (if-let [explain (explain data {:length data-length :level data-level})] (print-explain explain))))) (print-all [^Throwable cause] diff --git a/common/src/app/common/file_builder.cljc b/common/src/app/common/file_builder.cljc index 53b8b2e376..915959ac65 100644 --- a/common/src/app/common/file_builder.cljc +++ b/common/src/app/common/file_builder.cljc @@ -14,8 +14,8 @@ [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] [app.common.pages.changes :as ch] - [app.common.pages.changes-spec :as pcs] - [app.common.spec :as us] + [app.common.pprint :as pp] + [app.common.schema :as sm] [app.common.types.components-list :as ctkl] [app.common.types.container :as ctn] [app.common.types.file :as ctf] @@ -23,7 +23,6 @@ [app.common.types.pages-list :as ctpl] [app.common.types.shape :as cts] [app.common.uuid :as uuid] - [clojure.spec.alpha :as spec] [cuerdas.core :as str])) (def root-frame uuid/zero) @@ -53,20 +52,13 @@ :frame-id (:current-frame-id file)))] (when fail-on-spec? - (us/verify ::pcs/change change)) + (dm/verify! (ch/change? change))) + + (let [valid? (ch/change? change)] + (when-not valid? + (pp/pprint change {:level 100}) + (sm/pretty-explain ::ch/change change)) - (let [valid? (us/valid? ::pcs/change change) - explain (spec/explain-str ::pcs/change change)] - #?(:cljs - (when-not valid? - (do - (.warn js/console "Invalid shape" (clj->js change)) - (.warn js/console explain))) - :clj - (when-not valid? - (do - (prn "Invalid shape" change) - (prn explain)))) (cond-> file valid? @@ -79,8 +71,8 @@ (defn- lookup-objects ([file] (if (some? (:current-component-id file)) - (get-in file [:data :components (:current-component-id file) :objects]) - (get-in file [:data :pages-index (:current-page-id file) :objects])))) + (dm/get-in file [:data :components (:current-component-id file) :objects]) + (dm/get-in file [:data :pages-index (:current-page-id file) :objects])))) (defn lookup-shape [file shape-id] (-> (lookup-objects file) @@ -146,7 +138,7 @@ (defn- generate-name [type data] (if (= type :svg-raw) - (let [tag (get-in data [:content :tag])] + (let [tag (dm/get-in data [:content :tag])] (str "svg-" (cond (string? tag) tag (keyword? tag) (d/name tag) (nil? tag) "node" @@ -164,7 +156,7 @@ [name file] (let [container-id (or (:current-component-id file) (:current-page-id file)) - unames (get-in file [:unames container-id])] + unames (dm/get-in file [:unames container-id])] (d/unique-name name (or unames #{})))) (defn clear-names [file] @@ -198,8 +190,7 @@ (defn add-page [file data] - - (assert (nil? (:current-component-id file))) + (dm/assert! (nil? (:current-component-id file))) (let [page-id (or (:id data) (uuid/next)) page (-> (ctp/make-empty-page page-id "Page 1") (d/deep-merge data))] @@ -221,7 +212,7 @@ (assoc :last-id nil)))) (defn close-page [file] - (assert (nil? (:current-component-id file))) + (dm/assert! (nil? (:current-component-id file))) (-> file (dissoc :current-page-id) (dissoc :parent-stack) @@ -411,7 +402,7 @@ ;; First :content is the the shape attribute, the other content is the ;; XML children - (reduce create-child file (get-in data [:content :content])))) + (reduce create-child file (dm/get-in data [:content :content])))) (defn close-svg-raw [file] (-> file @@ -763,7 +754,7 @@ (defn get-current-page [file] (let [page-id (:current-page-id file)] - (-> file (get-in [:data :pages-index page-id])))) + (dm/get-in file [:data :pages-index page-id]))) (defn add-guide [file guide] @@ -772,7 +763,7 @@ (nil? (:id guide)) (assoc :id (uuid/next))) page-id (:current-page-id file) - old-guides (or (get-in file [:data :pages-index page-id :options :guides]) {}) + old-guides (or (dm/get-in file [:data :pages-index page-id :options :guides]) {}) new-guides (assoc old-guides (:id guide) guide)] (-> file (commit-change @@ -786,7 +777,7 @@ [file id] (let [page-id (:current-page-id file) - old-guides (or (get-in file [:data :pages-index page-id :options :guides]) {}) + old-guides (or (dm/get-in file [:data :pages-index page-id :options :guides]) {}) new-guides (dissoc old-guides id)] (-> file (commit-change @@ -799,7 +790,7 @@ [file guide] (let [page-id (:current-page-id file) - old-guides (or (get-in file [:data :pages-index page-id :options :guides]) {}) + old-guides (or (dm/get-in file [:data :pages-index page-id :options :guides]) {}) new-guides (assoc old-guides (:id guide) guide)] (-> file (commit-change diff --git a/common/src/app/common/geom/align.cljc b/common/src/app/common/geom/align.cljc index 82afa4232f..6a881d0b8f 100644 --- a/common/src/app/common/geom/align.cljc +++ b/common/src/app/common/geom/align.cljc @@ -7,12 +7,12 @@ (ns app.common.geom.align (:require [app.common.geom.shapes :as gsh] - [app.common.pages.helpers :refer [get-children]] - [clojure.spec.alpha :as s])) + [app.common.pages.helpers :refer [get-children]])) ;; --- Alignment -(s/def ::align-axis #{:hleft :hcenter :hright :vtop :vcenter :vbottom}) +(def valid-align-axis + #{:hleft :hcenter :hright :vtop :vcenter :vbottom}) (declare calc-align-pos) @@ -65,7 +65,8 @@ ;; --- Distribute -(s/def ::dist-axis #{:horizontal :vertical}) +(def valid-dist-axis + #{:horizontal :vertical}) (defn distribute-space "Distribute equally the space between shapes in the given axis. If diff --git a/common/src/app/common/geom/matrix.cljc b/common/src/app/common/geom/matrix.cljc index efafebfce0..c298154b08 100644 --- a/common/src/app/common/geom/matrix.cljc +++ b/common/src/app/common/geom/matrix.cljc @@ -12,9 +12,11 @@ [app.common.data.macros :as dm] [app.common.geom.point :as gpt] [app.common.math :as mth] + [app.common.schema :as sm] + [app.common.schema.generators :as sg] + [app.common.schema.openapi :as-alias oapi] [app.common.spec :as us] - [clojure.spec.alpha :as s] - [clojure.test.check.generators :as tgen])) + [clojure.spec.alpha :as s])) (def precision 6) @@ -47,6 +49,58 @@ ([a b c d e f] (Matrix. a b c d e f))) +(def number-regex #"[+-]?\d*(\.\d+)?(e[+-]?\d+)?") + +(defn str->matrix + [matrix-str] + (let [params (->> (re-seq number-regex matrix-str) + (filter #(-> % first seq)) + (map (comp d/parse-double first)))] + (apply matrix params))) + +(sm/def! ::matrix-map + [:map {:title "MatrixMap"} + [:a ::sm/safe-double] + [:b ::sm/safe-double] + [:c ::sm/safe-double] + [:d ::sm/safe-double] + [:e ::sm/safe-double] + [:f ::sm/safe-double]]) + +(sm/def! ::matrix + (letfn [(decode [o] + (if (map? o) + (map->Matrix o) + (if (string? o) + (str->matrix o) + o))) + (encode [o] + (dm/str (dm/get-prop o :a) "," + (dm/get-prop o :b) "," + (dm/get-prop o :c) "," + (dm/get-prop o :d) "," + (dm/get-prop o :e) "," + (dm/get-prop o :f) ","))] + + {:type ::matrix + :pred matrix? + :type-properties + {:title "matrix" + :description "Matrix instance" + :error/message "expected a valid point" + :gen/gen (->> (sg/tuple (sg/small-double) + (sg/small-double) + (sg/small-double) + (sg/small-double) + (sg/small-double) + (sg/small-double) ) + (sg/fmap #(apply ->Matrix %))) + ::oapi/type "string" + ::oapi/format "matrix" + ::oapi/decode decode + ::oapi/encode encode}})) + +;; FIXME: deprecated (s/def ::a ::us/safe-float) (s/def ::b ::us/safe-float) (s/def ::c ::us/safe-float) @@ -58,18 +112,8 @@ (s/keys :req-un [::a ::b ::c ::d ::e ::f])) (s/def ::matrix - (s/with-gen - (s/and ::matrix-attrs matrix?) - #(tgen/fmap map->Matrix (s/gen ::matrix-attrs)))) + (s/and ::matrix-attrs matrix?)) -(def number-regex #"[+-]?\d*(\.\d+)?(e[+-]?\d+)?") - -(defn str->matrix - [matrix-str] - (let [params (->> (re-seq number-regex matrix-str) - (filter #(-> % first seq)) - (map (comp d/parse-double first)))] - (apply matrix params))) (defn close? [^Matrix m1 ^Matrix m2] diff --git a/common/src/app/common/geom/point.cljc b/common/src/app/common/geom/point.cljc index a0df8413db..949ae2ba4d 100644 --- a/common/src/app/common/geom/point.cljc +++ b/common/src/app/common/geom/point.cljc @@ -15,9 +15,12 @@ [app.common.data.macros :as dm] [app.common.exceptions :as ex] [app.common.math :as mth] + [app.common.schema :as sm] + [app.common.schema.generators :as sg] + [app.common.schema.openapi :as-alias oapi] [app.common.spec :as us] [clojure.spec.alpha :as s] - [clojure.test.check.generators :as tgen])) + [cuerdas.core :as str])) ;; --- Point Impl @@ -32,6 +35,13 @@ [v] (instance? Point v)) +(sm/def! ::point-map + [:map {:title "PointMap"} + [:x ::sm/safe-number] + [:y ::sm/safe-number]]) + + +;; FIXME: deprecated (s/def ::x ::us/safe-number) (s/def ::y ::us/safe-number) @@ -39,8 +49,33 @@ (s/keys :req-un [::x ::y])) (s/def ::point - (s/with-gen (s/and ::point-attrs point?) - #(tgen/fmap map->Point (s/gen ::point-attrs)))) + (s/and ::point-attrs point?)) + +(sm/def! ::point + (letfn [(decode [p] + (if (map? p) + (map->Point p) + (if (string? p) + (let [[x y] (->> (str/split p #",") (mapv parse-double))] + (Point. x y)) + p))) + + (encode [p] + (dm/str (dm/get-prop p :x) "," + (dm/get-prop p :y)))] + + {:type ::point + :pred point? + :type-properties + {:title "point" + :description "Point" + :error/message "expected a valid point" + :gen/gen (->> (sg/tuple (sg/small-int) (sg/small-int)) + (sg/fmap #(apply ->Point %))) + ::oapi/type "string" + ::oapi/format "point" + ::oapi/decode decode + ::oapi/encode encode}})) (defn point-like? [{:keys [x y] :as v}] diff --git a/common/src/app/common/geom/shapes/modifiers.cljc b/common/src/app/common/geom/shapes/modifiers.cljc index 17879b7659..cbd4c431c2 100644 --- a/common/src/app/common/geom/shapes/modifiers.cljc +++ b/common/src/app/common/geom/shapes/modifiers.cljc @@ -17,7 +17,6 @@ [app.common.geom.shapes.points :as gpo] [app.common.geom.shapes.transforms :as gtr] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.types.modifiers :as ctm] [app.common.types.shape.layout :as ctl] [app.common.uuid :as uuid])) @@ -43,10 +42,7 @@ (defn resolve-tree-sequence "Given the ids that have changed search for layout roots to recalculate" [ids objects] - - (us/assert! - :expr (or (nil? ids) (set? ids)) - :hint (dm/str "tree sequence from not set: " ids)) + (dm/assert! (or (nil? ids) (set? ids))) (let [get-tree-root (fn ;; Finds the tree root for the current id diff --git a/common/src/app/common/pages/changes.cljc b/common/src/app/common/pages/changes.cljc index d95ec61100..df19f0829b 100644 --- a/common/src/app/common/pages/changes.cljc +++ b/common/src/app/common/pages/changes.cljc @@ -14,18 +14,223 @@ [app.common.math :as mth] [app.common.pages.common :refer [component-sync-attrs]] [app.common.pages.helpers :as cph] + [app.common.schema :as sm] + [app.common.schema.desc-native :as smd] [app.common.spec :as us] - [app.common.pages.changes-spec :as pcs] + [app.common.types.colors-list :as ctcl] [app.common.types.component :as ctk] [app.common.types.components-list :as ctkl] [app.common.types.container :as ctn] - [app.common.types.colors-list :as ctcl] [app.common.types.file :as ctf] [app.common.types.page :as ctp] [app.common.types.pages-list :as ctpl] [app.common.types.shape :as cts] [app.common.types.shape-tree :as ctst] - [app.common.types.typographies-list :as ctyl])) + [app.common.types.typographies-list :as ctyl] + [app.common.types.typography :as ctt])) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMAS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(sm/def! ::operation + [:multi {:dispatch :type :title "Operation" ::smd/simplified true} + [:set + [:map {:title "SetOperation"} + [:type [:= :set]] + [:attr :keyword] + [:val :any] + [:ignore-touched {:optional true} :boolean] + [:ignore-geometry {:optional true} :boolean]]] + [:set-touched + [:map {:title "SetTouchedOperation"} + [:type [:= :set-touched]] + [:touched [:maybe [:set :keyword]]]]] + [:set-remote-synced + [:map {:title "SetRemoteSyncedOperation"} + [:type [:= :set-remote-synced]] + [:remote-synced? [:maybe :boolean]]]]]) + +(sm/def! ::change + [:schema + [:multi {:dispatch :type :title "Change" ::smd/simplified true} + [:set-option + [:map {:title "SetOptionChange"} + [:type [:= :set-option]] + [:page-id ::sm/uuid] + [:option [:union + [:keyword] + [:vector {:gen/max 10} :keyword]]] + [:value :any]]] + + [:add-obj + [:map {:title "AddObjChange"} + [:type [:= :add-obj]] + [:id ::sm/uuid] + [:obj [:map-of {:gen/max 10} :keyword :any]] + [:page-id {:optional true} ::sm/uuid] + [:component-id {:optional true} ::sm/uuid] + [:frame-id {:optional true} ::sm/uuid] + [:parent-id {:optional true} ::sm/uuid] + [:index {:optional true} [:maybe :int]] + [:ignore-touched {:optional true} :boolean] + ]] + + [:mod-obj + [:map {:title "ModObjChange"} + [:type [:= :mod-obj]] + [:id ::sm/uuid] + [:page-id {:optional true} ::sm/uuid] + [:component-id {:optional true} ::sm/uuid] + [:operations [:vector {:gen/max 5} ::operation]]]] + + [:del-obj + [:map {:title "DelObjChange"} + [:type [:= :del-obj]] + [:id ::sm/uuid] + [:page-id {:optional true} ::sm/uuid] + [:component-id {:optional true} ::sm/uuid] + [:ignore-touched {:optional true} :boolean]]] + + [:mov-objects + [:map {:title "MovObjectsChange"} + [:type [:= :mov-objects]] + [:page-id {:optional true} ::sm/uuid] + [:component-id {:optional true} ::sm/uuid] + [:ignore-touched {:optional true} :boolean] + [:parent-id ::sm/uuid] + [:shapes :any] + [:index {:optional true} :int] + [:after-shape {:optional true} :any]]] + + [:add-page + [:map {:title "AddPageChange"} + [:type [:= :add-page]] + [:id {:optional true} ::sm/uuid] + [:name {:optional true} :string] + [:page {:optional true} :any]]] + + [:mod-page + [:map {:title "ModPageChange"} + [:type [:= :mod-page]] + [:id ::sm/uuid] + [:name :string]]] + + [:del-page + [:map {:title "DelPageChange"} + [:type [:= :del-page]] + [:id ::sm/uuid]]] + + [:mov-page + [:map {:title "MovPageChange"} + [:type [:= :mov-page]] + [:id ::sm/uuid] + [:index :int]]] + + [:reg-objects + [:map {:title "RegObjectsChange"} + [:type [:= :reg-objects]] + [:page-id {:optional true} ::sm/uuid] + [:component-id {:optional true} ::sm/uuid] + [:shapes [:vector {:gen/max 5} ::sm/uuid]]]] + + [:add-color + [:map {:title "AddColorChange"} + [:type [:= :add-color]] + [:color :any]]] + + [:mod-color + [:map {:title "ModColorChange"} + [:type [:= :mod-color]] + [:color :any]]] + + [:del-color + [:map {:title "DelColorChange"} + [:type [:= :del-color]] + [:id ::sm/uuid]]] + + [:add-recent-color + [:map {:title "AddRecentColorChange"} + [:type [:= :add-recent-color]] + [:color :any]]] + + [:add-media + [:map {:title "AddMediaChange"} + [:type [:= :add-media]] + [:object ::ctf/media-object]]] + + [:mod-media + [:map {:title "ModMediaChange"} + [:type [:= :mod-media]] + [:object ::ctf/media-object]]] + + [:del-media + [:map {:title "DelMediaChange"} + [:type [:= :del-media]] + [:id ::sm/uuid]]] + + [:add-component + [:map {:title "AddComponentChange"} + [:type [:= :add-component]] + [:id ::sm/uuid] + [:name :string] + [:shapes {:optional true} [:vector {:gen/max 3} :any]] + [:path {:optional true} :string]]] + + [:mod-component + [:map {:title "ModCompoenentChange"} + [:type [:= :mod-component]] + [:id ::sm/uuid] + [:shapes {:optional true} [:vector {:gen/max 3} :any]] + [:name {:optional true} :string]]] + + [:del-component + [:map {:title "DelComponentChange"} + [:type [:= :del-component]] + [:id ::sm/uuid] + [:skip-undelete? {:optional true} :boolean]]] + + [:restore-component + [:map {:title "RestoreComponentChange"} + [:type [:= :restore-component]] + [:id ::sm/uuid]]] + + [:purge-component + [:map {:title "PurgeComponentChange"} + [:type [:= :purge-component]] + [:id ::sm/uuid]]] + + [:add-typography + [:map {:title "AddTypogrphyChange"} + [:type [:= :add-typography]] + [:typography ::ctt/typography]]] + + [:mod-typography + [:map {:title "ModTypogrphyChange"} + [:type [:= :mod-typography]] + [:typography ::ctt/typography]]] + + [:del-typography + [:map {:title "DelTypogrphyChange"} + [:type [:= :del-typography]] + [:id ::sm/uuid]]] + + ]]) + +(def change? + (sm/pred-fn ::change)) + +(def changes? + (sm/pred-fn [:sequential ::change])) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Specific helpers +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defn- without-obj + "Clear collection from specified obj and without nil values." + [coll o] + (into [] (filter #(not= % o)) coll)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Page Transformation Changes @@ -37,8 +242,9 @@ [data objects items] (letfn [(validate-shape! [[page-id {:keys [id] :as shape}]] (when-not (= shape (dm/get-in data [:pages-index page-id :objects id])) - ;; If object has change verify is correct - (us/verify ::cts/shape shape)))] + ;; If object has changed verify is correct + (dm/verify! (cts/shape? shape))))] + (let [lookup (d/getf objects)] (->> (into #{} (map :page-id) items) (mapcat (fn [page-id] @@ -64,7 +270,7 @@ ;; When verify? false we spec the schema validation. Currently used to make just ;; 1 validation even if the changes are applied twice (when verify? - (us/assert ::pcs/changes items)) + (dm/verify! (changes? items))) (let [result (reduce #(or (process-change %1 %2) %1) data items)] ;; Validate result shapes (only on the backend) @@ -110,7 +316,7 @@ (let [result (reduce (partial process-operation on-touched) obj operations)] (assoc objects id result)) objects)) - + modify-components (fn [data] (reduce ctkl/set-component-modified data @modified-component-ids))] @@ -127,6 +333,7 @@ (d/update-in-when data [:pages-index page-id] ctst/delete-shape id ignore-touched) (d/update-in-when data [:components component-id] ctst/delete-shape id ignore-touched))) +;; FIXME: remove, seems like this method is already unused ;; reg-objects operation "regenerates" the geometry and selrect of the parent groups (defmethod process-change :reg-objects [data {:keys [page-id component-id shapes]}] @@ -412,9 +619,8 @@ (and in-copy? group (not ignore) (not equal?) (not root-name?) (not (and ignore-geometry is-geometry?))) - (-> - (update :touched cph/set-touched-group group) - (dissoc :remote-synced?)) + (-> (update :touched cph/set-touched-group group) + (dissoc :remote-synced?)) (nil? val) (dissoc attr) @@ -444,7 +650,6 @@ :code :operation-not-implemented :context {:type (:type op)})) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Component changes detection ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/common/src/app/common/pages/changes_builder.cljc b/common/src/app/common/pages/changes_builder.cljc index f947ad9be0..37626cf8f8 100644 --- a/common/src/app/common/pages/changes_builder.cljc +++ b/common/src/app/common/pages/changes_builder.cljc @@ -613,7 +613,7 @@ :main-instance-id main-instance-id :main-instance-page main-instance-page} (some? new-shapes) ;; this will be null in components-v2 - (assoc :shapes new-shapes))) + (assoc :shapes (vec new-shapes)))) (into (map mk-change) updated-shapes)))) (update :undo-changes (fn [undo-changes] diff --git a/common/src/app/common/pages/changes_spec.cljc b/common/src/app/common/pages/changes_spec.cljc deleted file mode 100644 index 7d817a7705..0000000000 --- a/common/src/app/common/pages/changes_spec.cljc +++ /dev/null @@ -1,187 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC - -(ns app.common.pages.changes-spec - (:require - [app.common.spec :as us] - [app.common.types.color :as ctc] - [app.common.types.file.media-object :as ctfm] - [app.common.types.page :as ctp] - [app.common.types.shape :as cts] - [app.common.types.typography :as ctt] - [app.common.uuid :as uuid] - [clojure.spec.alpha :as s])) - -(s/def ::index integer?) -(s/def ::id uuid?) -(s/def ::parent-id uuid?) -(s/def ::frame-id uuid?) -(s/def ::page-id uuid?) -(s/def ::component-id uuid?) -(s/def ::name string?) -(s/def ::path (s/nilable string?)) -(s/def ::annotation (s/nilable string?)) - -(defmulti operation-spec :type) - -(s/def :internal.operations.set/attr keyword?) -(s/def :internal.operations.set/val any?) - -(s/def :internal.operations.set/touched - (s/nilable (s/every keyword? :kind set?))) - -(s/def :internal.operations.set/remote-synced? - (s/nilable boolean?)) - -(defmethod operation-spec :set [_] - (s/keys :req-un [:internal.operations.set/attr - :internal.operations.set/val])) - -(defmethod operation-spec :set-touched [_] - (s/keys :req-un [:internal.operations.set/touched])) - -(defmethod operation-spec :set-remote-synced [_] - (s/keys :req-un [:internal.operations.set/remote-synced?])) - -(defmulti change-spec :type) - -(s/def :internal.changes.set-option/option any?) -(s/def :internal.changes.set-option/value any?) - -(defmethod change-spec :set-option [_] - (s/keys :req-un [:internal.changes.set-option/option - :internal.changes.set-option/value])) - -(s/def :internal.changes.add-obj/obj ::cts/shape) - -(defn- valid-container-id-frame? - [o] - (or (and (contains? o :page-id) - (not (contains? o :component-id)) - (some? (:frame-id o))) - (and (contains? o :component-id) - (not (contains? o :page-id)) - (not= (:frame-id o) uuid/zero)))) - -(defn- valid-container-id? - [o] - (or (and (contains? o :page-id) - (not (contains? o :component-id))) - (and (contains? o :component-id) - (not (contains? o :page-id))))) - -(defmethod change-spec :add-obj [_] - (s/and (s/keys :req-un [::id :internal.changes.add-obj/obj] - :opt-un [::page-id ::component-id ::parent-id ::frame-id]) - valid-container-id-frame?)) - -(s/def ::operation (s/multi-spec operation-spec :type)) -(s/def ::operations (s/coll-of ::operation)) - -(defmethod change-spec :mod-obj [_] - (s/and (s/keys :req-un [::id ::operations] - :opt-un [::page-id ::component-id]) - valid-container-id?)) - -(defmethod change-spec :del-obj [_] - (s/and (s/keys :req-un [::id] - :opt-un [::page-id ::component-id]) - valid-container-id?)) - -(defmethod change-spec :reg-objects [_] - (s/and (s/keys :req-un [::cts/shapes] - :opt-un [::page-id ::component-id]) - valid-container-id?)) - -(defmethod change-spec :mov-objects [_] - (s/and (s/keys :req-un [::parent-id ::cts/shapes] - :opt-un [::page-id ::component-id ::index]) - valid-container-id?)) - -(defmethod change-spec :add-page [_] - (s/or :empty (s/keys :req-un [::id ::name]) - :complete (s/keys :req-un [::ctp/page]))) - -(defmethod change-spec :mod-page [_] - (s/keys :req-un [::id ::name])) - -(defmethod change-spec :del-page [_] - (s/keys :req-un [::id])) - -(defmethod change-spec :mov-page [_] - (s/keys :req-un [::id ::index])) - -(defmethod change-spec :add-color [_] - (s/keys :req-un [::ctc/color])) - -(defmethod change-spec :mod-color [_] - (s/keys :req-un [::ctc/color])) - -(defmethod change-spec :del-color [_] - (s/keys :req-un [::id])) - -(s/def :internal.changes.add-recent-color/color ::ctc/recent-color) - -(defmethod change-spec :add-recent-color [_] - (s/keys :req-un [:internal.changes.add-recent-color/color])) - - -(s/def :internal.changes.add-media/object ::ctfm/media-object) -(defmethod change-spec :add-media [_] - (s/keys :req-un [:internal.changes.add-media/object])) - - -(s/def :internal.changes.mod-media/width ::us/safe-integer) -(s/def :internal.changes.mod-media/height ::us/safe-integer) -(s/def :internal.changes.mod-media/path (s/nilable string?)) -(s/def :internal.changes.mod-media/mtype string?) -(s/def :internal.changes.mod-media/object - (s/keys :req-un [::id] - :opt-un [:internal.changes.mod-media/width - :internal.changes.mod-media/height - :internal.changes.mod-media/path - :internal.changes.mod-media/mtype])) - -(defmethod change-spec :mod-media [_] - (s/keys :req-un [:internal.changes.mod-media/object])) - -(defmethod change-spec :del-media [_] - (s/keys :req-un [::id])) - -(s/def :internal.changes.add-component/shapes - (s/coll-of ::cts/shape)) - -(defmethod change-spec :add-component [_] - (s/keys :req-un [::id ::name] - :opt-un [::path :internal.changes.add-component/shapes])) - -(defmethod change-spec :mod-component [_] - (s/keys :req-un [::id] - :opt-un [::name ::path ::annotation :internal.changes.add-component/shapes])) - -(s/def :internal.changes.del-component/skip-undelete? boolean?) - -(defmethod change-spec :del-component [_] - (s/keys :req-un [::id] - :opt-un [:internal.changes.del-component/skip-undelete?])) - -(defmethod change-spec :restore-component [_] - (s/keys :req-un [::id])) - -(defmethod change-spec :purge-component [_] - (s/keys :req-un [::id])) - -(defmethod change-spec :add-typography [_] - (s/keys :req-un [::ctt/typography])) - -(defmethod change-spec :mod-typography [_] - (s/keys :req-un [::ctt/typography])) - -(defmethod change-spec :del-typography [_] - (s/keys :req-un [::ctt/id])) - -(s/def ::change (s/multi-spec change-spec :type)) -(s/def ::changes (s/coll-of ::change)) diff --git a/common/src/app/common/pages/common.cljc b/common/src/app/common/pages/common.cljc index e49c0eed1b..49e922632c 100644 --- a/common/src/app/common/pages/common.cljc +++ b/common/src/app/common/pages/common.cljc @@ -8,9 +8,9 @@ (:require [app.common.colors :as clr] [app.common.data :as d] - [app.common.spec :as us] - [app.common.uuid :as uuid] - [clojure.spec.alpha :as s])) + [app.common.data.macros :as dm] + [app.common.schema :as sm] + [app.common.uuid :as uuid])) (def file-version 20) (def default-color clr/gray-20) @@ -601,14 +601,16 @@ [p1 (+ 1 (d/parse-integer p2))] [basename 1])) -(s/def ::set-of-strings - (s/every ::us/string :kind set?)) - (defn generate-unique-name "A unique name generator" [used basename] - (us/assert! ::set-of-strings used) - (us/assert! ::us/string basename) + (dm/assert! + "expected a set of strings" + (sm/set-of-strings? used)) + + (dm/assert! + "expected a string for `basename`." + (string? basename)) (if-not (contains? used basename) basename (let [[prefix initial] (extract-numeric-suffix basename)] diff --git a/common/src/app/common/pages/helpers.cljc b/common/src/app/common/pages/helpers.cljc index 58cc81bfa6..7e0158c958 100644 --- a/common/src/app/common/pages/helpers.cljc +++ b/common/src/app/common/pages/helpers.cljc @@ -8,7 +8,6 @@ (:require [app.common.data :as d] [app.common.data.macros :as dm] - [app.common.spec :as us] [app.common.types.components-list :as ctkl] [app.common.types.pages-list :as ctpl] [app.common.types.shape.layout :as ctl] @@ -286,9 +285,9 @@ (defn get-container [file type id] - (us/assert map? file) - (us/assert keyword? type) - (us/assert uuid? id) + (dm/assert! (map? file)) + (dm/assert! (keyword? type)) + (dm/assert! (uuid? id)) (-> (if (= type :page) (ctpl/get-page file id) @@ -375,7 +374,7 @@ (map second))) (defn get-index-replacement - "Given a collection of shapes, calculate their positions + "Given a collection of shapes, calculate their positions in the parent, find first index and return next one" [shapes objects] (->> shapes diff --git a/common/src/app/common/schema.cljc b/common/src/app/common/schema.cljc new file mode 100644 index 0000000000..8a62947dfb --- /dev/null +++ b/common/src/app/common/schema.cljc @@ -0,0 +1,505 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.common.schema + (:refer-clojure :exclude [deref merge parse-uuid]) + #?(:cljs (:require-macros [app.common.schema :refer [ignoring]])) + (:require + [app.common.data.macros :as dm] + [app.common.schema.generators :as sg] + [app.common.schema.openapi :as-alias oapi] + [app.common.schema.registry :as sr] + [app.common.uri :as u] + [app.common.uuid :as uuid] + [clojure.test.check.generators :as tgen] + [cuerdas.core :as str] + [malli.core :as m] + [malli.dev.pretty :as mdp] + [malli.error :as me] + [malli.generator :as mg] + [malli.registry :as mr] + [malli.transform :as mt] + [malli.util :as mu])) + +(defn validate + [s value] + (m/validate s value {:registry sr/default-registry})) + +(defn explain + [s value] + (m/explain s value {:registry sr/default-registry})) + +(defn explain-data + [s value] + (mu/explain-data s value {:registry sr/default-registry})) + +(defn schema? + [o] + (m/schema? o)) + +(defn schema + [s] + (m/schema s {:registry sr/default-registry})) + +(defn humanize + [exp] + (me/humanize exp)) + +(defn generate + ([s] + (mg/generate (schema s))) + ([s o] + (mg/generate (schema s) o))) + +(defn form + [s] + (m/form s {:registry sr/default-registry})) + +(defn merge + [& items] + (apply mu/merge (map schema items))) + +(defn ref? + [s] + (m/-ref-schema? s)) + +(defn deref + [s] + (m/deref s)) + +(defn error-values + [exp] + (malli.error/error-value exp {:malli.error/mask-valid-values '...})) + +(def default-transformer + (let [default-decoder + {:compile (fn [s _registry] + (let [props (m/type-properties s)] + (or (::oapi/decode props) + (::decode props))))} + + default-encoder + {:compile (fn [s _] + (let [props (m/type-properties s)] + (or (::oapi/encode props) + (::encode props))))} + + coders {:vector mt/-sequential-or-set->vector + :sequential mt/-sequential-or-set->seq + :set mt/-sequential->set + :tuple mt/-sequential->vector}] + + (mt/transformer + {:name :penpot + :default-decoder default-decoder + :default-encoder default-encoder} + {:name :string + :decoders (mt/-string-decoders) + :encoders (mt/-string-encoders)} + {:name :collections + :decoders coders + :encoders coders} + + ))) + +(defn validator + [s] + (-> s schema m/validator)) + +(defn explainer + [s] + (-> s schema m/explainer)) + +(defn lazy-validator + [s] + (let [vfn (delay (validator s))] + (fn [v] (@vfn v)))) + +(defn lazy-explainer + [s] + (let [vfn (delay (explainer s))] + (fn [v] (@vfn v)))) + +(defn encode + ([s val transformer] + (m/encode s val {:registry sr/default-registry} transformer)) + ([s val options transformer] + (m/encode s val options transformer))) + +(defn decode + ([s val transformer] + (m/decode s val {:registry sr/default-registry} transformer)) + ([s val options transformer] + (m/decode s val options transformer))) + +(defn decoder + ([s transformer] + (m/decoder s {:registry sr/default-registry} transformer)) + ([s options transformer] + (m/decoder s options transformer))) + +(defn humanize-data + [explain-data] + (-> explain-data + (update :schema form) + (update :errors (fn [errors] (map #(update % :schema form) errors))))) + +(defn pretty-explain + [s d] + (mdp/explain (schema s) d)) + +(defmacro ignoring + [expr] + (if (:ns &env) + `(try ~expr (catch :default e# nil)) + `(try ~expr (catch Throwable e# nil)))) + +(defn simple-schema + [& {:keys [pred] :as options}] + (cond-> options + (contains? options :type-properties) + (update :type-properties (fn [props] + (cond-> props + (contains? props :decode/string) + (update :decode/string (fn [decode-fn] + (fn [s] + (if (pred s) + s + (or (ignoring (decode-fn s)) s))))) + (contains? props ::decode) + (update ::decode (fn [decode-fn] + (fn [s] + (if (pred s) + s + (or (ignoring (decode-fn s)) s)))))))) + :always + (m/-simple-schema))) + +(defn lookup + "Lookups schema from registry." + ([s] (lookup sr/default-registry s)) + ([registry s] (schema (mr/schema registry s)))) + +(defn pred-fn + [s] + (let [s (schema s) + v-fn (lazy-validator s) + e-fn (lazy-explainer s)] + (fn [v] + (let [result (v-fn v)] + (when (and (not result) (true? dm/*assert-context*)) + (let [hint (str "schema assert: " (pr-str (form s))) + exp (e-fn v)] + (throw (ex-info hint {:type :assertion + :code :data-validation + :hint hint + ::explain exp})))) + result)))) + + +(defn valid? + [s v] + (let [result (validate s v)] + (when (and (not result) (true? dm/*assert-context*)) + (let [hint (str "schema assert: " (pr-str (form s))) + exp (explain s v)] + (throw (ex-info hint {:type :assertion + :code :data-validation + :hint hint + ::explain exp})))) + result)) + +(defn assert-fn + [s] + (let [f (pred-fn s)] + (fn [v] + (dm/assert! (f v))))) + +(defmacro verify-fn + [s] + (let [f (pred-fn s)] + (fn [v] + (dm/verify! (f v))))) + +(defn register! [type s] + (let [s (if (map? s) (simple-schema s) s)] + (swap! sr/registry assoc type s))) + +(defn def! [type s] + (register! type s) + nil) + +;; --- GENERATORS + +;; FIXME: replace with sg/subseq +(defn gen-set-from-choices + [choices] + (->> tgen/nat + (tgen/fmap (fn [i] + (into #{} + (map (fn [_] (rand-nth choices))) + (range i)))))) + + +;; --- BUILTIN SCHEMAS + +(def! :merge (mu/-merge)) +(def! :union (mu/-union)) + +(def uuid-rx + #"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$") + +(defn parse-uuid + [s] + (if (string? s) + (some->> (re-matches uuid-rx s) uuid/uuid) + s)) + +(def! ::uuid + {:type ::uuid + :pred uuid? + :type-properties + {:title "uuid" + :description "UUID formatted string" + :error/message "should be an uuid" + :gen/gen (sg/uuid) + ::oapi/type "string" + ::oapi/format "uuid" + ::oapi/decode parse-uuid}}) + +(def email-re #"[a-zA-Z0-9_.+-\\\\]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+") + +(defn parse-email + [s] + (if (string? s) + (re-matches email-re s) + s)) + +;; FIXME: add proper email generator +(def! ::email + {:type ::email + :pred (fn [s] + (and (string? s) (re-seq email-re s))) + :type-properties + {:title "email" + :description "string with valid email address" + :error/message "expected valid email" + :gen/gen (-> :string sg/generator) + ::oapi/type "string" + ::oapi/format "email" + ::oapi/decode parse-email}}) + +(def non-empty-strings-xf + (comp + (filter string?) + (remove str/empty?) + (remove str/blank?))) + +(def! ::set-of-strings + {:type ::set-of-strings + :pred #(and (set? %) (every? string? %)) + :type-properties + {:title "set[string]" + :description "Set of Strings" + :error/message "should be a set of strings" + :gen/gen (-> :string sg/generator sg/set) + ::oapi/type "array" + ::oapi/format "set" + ::oapi/items {:type "string"} + ::oapi/unique-items true + ::oapi/decode (fn [v] + (let [v (if (string? v) (str/split v #"[\s,]+") v)] + (into #{} non-empty-strings-xf v)))}}) + +(def! ::set-of-emails + {:type ::set-of-emails + :pred #(and (set? %) (every? string? %)) + :type-properties + {:title "set[email]" + :description "Set of Emails" + :error/message "should be a set of emails" + :gen/gen (-> ::email sg/generator sg/set) + ::oapi/type "array" + ::oapi/format "set" + ::oapi/items {:type "string" :format "email"} + ::oapi/unique-items true + ::decode (fn [v] + (let [v (if (string? v) (str/split v #"[\s,]+") v)] + (into #{} (keep parse-email) v)))}}) + +(def! ::set-of-uuid + {:type ::set-of-uuid + :pred #(and (set? %) (every? uuid? %)) + :type-properties + {:title "set[uuid]" + :description "Set of UUID" + :error/message "should be a set of UUID instances" + :gen/gen (-> ::uuid sg/generator sg/set) + ::oapi/type "array" + ::oapi/format "set" + ::oapi/items {:type "string" :format "uuid"} + ::oapi/unique-items true + ::oapi/decode (fn [v] + (let [v (if (string? v) (str/split v #"[\s,]+") v)] + (into #{} (keep parse-uuid) v)))}}) + +(def! ::coll-of-uuid + {:type ::set-of-uuid + :pred (partial every? uuid?) + :type-properties + {:title "[uuid]" + :description "Coll of UUID" + :error/message "should be a coll of UUID instances" + :gen/gen (-> ::uuid sg/generator sg/set) + ::oapi/type "array" + ::oapi/format "array" + ::oapi/items {:type "string" :format "uuid"} + ::oapi/unique-items false + ::oapi/decode (fn [v] + (let [v (if (string? v) (str/split v #"[\s,]+") v)] + (into [] (keep parse-uuid) v)))}}) + +(def! ::one-of + {:type ::one-of + :min 1 + :max 1 + :compile (fn [props children _] + (let [options (into #{} (last children)) + format (:format props "keyword")] + {:pred #(contains? options %) + :type-properties + {:title "one-of" + :description "One of the Set" + :gen/gen (sg/elements options) + ::oapi/type "string" + ::oapi/format (:format props "keyword") + ::oapi/decode (if (= format "keyword") + keyword + identity)}}))}) + +(def max-safe-int (int 1e6)) +(def min-safe-int (int -1e6)) + +(def! ::safe-int + {:type ::safe-int + :pred #(and (int? %) (>= max-safe-int %) (>= % min-safe-int)) + :type-properties + {:title "int" + :description "Safe Integer" + :error/message "expected to be int in safe range" + :gen/gen (sg/small-int) + ::oapi/type "integer" + ::oapi/format "int64" + ::oapi/decode (fn [s] + (if (string? s) + (parse-long s) + s))}}) + +(def! ::safe-number + {:type ::safe-number + :pred #(and (number? %) (>= max-safe-int %) (>= % min-safe-int)) + :type-properties + {:title "number" + :description "Safe Number" + :error/message "expected to be number in safe range" + :gen/gen (sg/one-of (sg/small-int) + (sg/small-double)) + ::oapi/type "number" + ::oapi/format "double" + ::oapi/decode (fn [s] + (if (string? s) + (parse-double s) + s))}}) + +(def! ::safe-double + {:type ::safe-double + :pred #(and (double? %) (>= max-safe-int %) (>= % min-safe-int)) + :type-properties + {:title "number" + :description "Safe Number" + :error/message "expected to be number in safe range" + :gen/gen (sg/small-double) + ::oapi/type "number" + ::oapi/format "double" + ::oapi/decode (fn [s] + (if (string? s) + (parse-double s) + s))}}) + +(def! ::contains-any + {:type ::contains-any + :min 1 + :max 1 + :compile (fn [props children _] + (let [choices (last children) + pred (if (:strict props) + #(some (fn [prop] + (some? (get % prop))) + choices) + #(some (fn [prop] + (contains? % prop)) + choices))] + {:pred pred + :type-properties + {:title "contains" + :description "contains predicate"}}))}) + +(def! ::inst + {:type ::inst + :pred inst? + :type-properties + {:title "inst" + :description "Satisfies Inst protocol" + :error/message "expected to be number in safe range" + :gen/gen (sg/small-int) + ::oapi/type "number" + ::oapi/format "int64"}}) + +(def! ::fn + [:schema fn?]) + +(def! ::word-string + {:type ::word-string + :pred #(and (string? %) (not (str/blank? %))) + :type-properties + {:title "string" + :description "string" + :error/message "expected a non empty string" + :gen/gen (sg/word-string) + ::oapi/type "string" + ::oapi/format "string"}}) + +(def! ::uri + {:type ::uri + :pred u/uri? + :type-properties + {:title "uri" + :description "URI formatted string" + :error/message "expected URI instance" + :gen/gen (sg/uri) + ::oapi/type "string" + ::oapi/format "uri" + ::oapi/decode (comp u/uri str/trim)}}) + +;; ---- PREDICATES + +(def safe-int? + (pred-fn ::safe-int)) + +(def set-of-strings? + (pred-fn ::set-of-strings)) + +(def set-of-emails? + (pred-fn ::set-of-emails)) + +(def set-of-uuid? + (pred-fn ::set-of-uuid)) + +(def coll-of-uuid? + (pred-fn ::coll-of-uuid)) + +(def email? + (pred-fn ::email)) diff --git a/common/src/app/common/schema/desc_js_like.cljc b/common/src/app/common/schema/desc_js_like.cljc new file mode 100644 index 0000000000..58ff05d0ae --- /dev/null +++ b/common/src/app/common/schema/desc_js_like.cljc @@ -0,0 +1,285 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.common.schema.desc-js-like + (:require + [app.common.data :as d] + [cuerdas.core :as str] + [malli.core :as m] + [malli.util :as mu])) + +(def ^:dynamic *definitions* nil) + +(declare describe) +(declare describe*) + +(defn -diamond [s] (str "<" s ">")) +(defn -titled [schema] (if-let [t (-> schema m/properties :title)] (str " :: " t "") "")) + +(defn minmax-suffix [schema] + (let [{:keys [min max]} (-> schema m/properties)] + (cond + (and min max) (str "[min=" min ",max=" max "]") + min (str "[min=" min "]") + max (str "[max=" max "]")))) + +(defn -min-max-suffix [schema] + (let [{:keys [min max]} (-> schema m/properties)] + (cond + (and min max) (str " between " min " and " max " inclusive") + min (str " greater than " min) + max (str " less than " max) + :else ""))) + +(defn -length-suffix [schema] + (let [{:keys [min max]} (-> schema m/properties)] + (cond + (and min max) (str " with length between " min " and " max " inclusive") + min (str " with length <= " min) + max (str " with length >= " max) + :else ""))) + +(defn -pluralize-times [n] + (when n + (if (= 1 n) "time" "times"))) + +(defn -repeat-suffix [schema] + (let [{:keys [min max]} (-> schema m/properties) + min-timez (-pluralize-times min) + max-timez (-pluralize-times max)] + (cond + (and min max) (str " at least " min " " min-timez ", up to " max " " max-timez) + min (str " at least " min " " min-timez) + max (str " at most " max " " max-timez) + :else ""))) + +(defn -min-max-suffix-number [schema] + (let [{:keys [min max]} (merge (-> schema m/properties) (-> schema m/type-properties))] + (cond + (and min max) (str " between " min " and " max " inclusive") + min (str " greater than or equal to " min) + max (str " less than or equal to " max) + :else ""))) + +(defmulti visit (fn [name _schema _children _options] name) :default ::default) + +(defmethod visit :ref [_ _schema children _] (pr-str (first children))) + +(defmethod visit :> [_ _ [value] _] (str "> " value)) +(defmethod visit :>= [_ _ [value] _] (str ">= " value)) +(defmethod visit :< [_ _ [value] _] (str "< " value)) +(defmethod visit :<= [_ _ [value] _] (str "<= " value)) +(defmethod visit := [_ _ [value] _] (str "== '" (name value) "'")) +(defmethod visit :not= [_ _ [value] _] (str "not equal " value)) +(defmethod visit :not [_ _ children _] {:not (last children)}) + +(defn -of-clause [children] (when children (str " of " (first children)))) + +(defmethod visit :sequential [_ schema children _] (str "sequence" (-titled schema) (-length-suffix schema) (-of-clause children))) +(defmethod visit :string [_ schema _ _] (str "string" (-titled schema) (-length-suffix schema))) +(defmethod visit :number [_ schema _ _] (str "number" (-titled schema) (-min-max-suffix schema))) +(defmethod visit :pos-int [_ schema _ _] (str "integer greater than 0" (-titled schema) (-min-max-suffix schema))) +(defmethod visit :neg-int [_ schema _ _] (str "integer less than 0" (-titled schema) (-min-max-suffix schema))) +(defmethod visit :nat-int [_ schema _ _] (str "natural integer" (-titled schema) (-min-max-suffix schema))) +(defmethod visit :float [_ schema _ _] (str "float" (-titled schema) (-min-max-suffix schema))) +(defmethod visit :pos [_ schema _ _] (str "number greater than 0" (-titled schema) (-min-max-suffix schema))) +(defmethod visit :neg [_ schema _ _] (str "number less than 0" (-titled schema) (-min-max-suffix schema))) +(defmethod visit :int [_ schema _ _] (str "integer" (-titled schema) (-min-max-suffix-number schema))) +(defmethod visit :double [_ schema _ _] (str "double" (-titled schema) (-min-max-suffix-number schema))) +(defmethod visit :select-keys [_ schema _ options] (describe* (m/deref schema) options)) +(defmethod visit :and [_ s children _] (str (str/join ", and " children) (-titled s))) +(defmethod visit :enum [_ s children _options] (str "enum" (-titled s) " of " (str/join ", " children))) +(defmethod visit :maybe [_ _ children _] (str (first children) "?")) +(defmethod visit :tuple [_ s children _] (str "vector " (-titled s) "with exactly " (count children) " items of type: " (str/join ", " children))) +(defmethod visit :re [_ s _ options] (str "regex pattern " (-titled s) "matching " (pr-str (first (m/children s options))))) +(defmethod visit :any [_ s _ _] (str "anything" (-titled s))) +(defmethod visit :some [_ _ _ _] "anything but null") +(defmethod visit :nil [_ _ _ _] "null") +(defmethod visit :qualified-ident [_ _ _ _] "qualified-ident") +(defmethod visit :simple-keyword [_ _ _ _] "simple-keyword") +(defmethod visit :simple-symbol [_ _ _ _] "simple-symbol") +(defmethod visit :qualified-keyword [_ _ _ _] "qualified keyword") +(defmethod visit :symbol [_ _ _ _] "symbol") +(defmethod visit :qualified-symbol [_ _ _ _] "qualified symbol") +(defmethod visit :uuid [_ _ _ _] "uuid") +(defmethod visit :boolean [_ _ _ _] "boolean") +(defmethod visit :keyword [_ _ _ _] "keyword") + +(defmethod visit :vector [_ _ children _] + (str "[" (last children) "]")) + +(defn -tagged [children] (map (fn [[tag _ c]] (str c " (tag: " tag ")")) children)) + +(defmethod visit :or [_ _ children _] (str/join ", or " children)) +(defmethod visit :orn [_ _ children _] (str/join ", or " (-tagged children))) +(defmethod visit :cat [_ _ children _] (str/join ", " children)) +(defmethod visit :catn [_ _ children _] (str/join ", and " (-tagged children))) +(defmethod visit :alt [_ _ children _] (str/join ", or " children)) +(defmethod visit :altn [_ _ children _] (str/join ", or " (-tagged children))) + +(defmethod visit :repeat [_ schema children _] + (str "repeat " (-diamond (first children)) (-repeat-suffix schema))) + + +(defmethod visit :set [_ schema children _] + (str "set[" (first children) "]" (minmax-suffix schema))) + +(defmethod visit ::m/val [_ schema children _] + (let [suffix (minmax-suffix schema)] + (cond-> (first children) + (some? suffix) + (str suffix)))) + +(defmethod visit :map-of [_ _ children _] + (str "map[" (first children) "," (second children) "]")) + +(defmethod visit :union [_ _ children _] + (str/join " | " children)) + +(defn pad + [data n] + (let [prefix (apply str (take n (repeat " ")))] + (->> (str/lines data) + (map (fn [s] (str prefix s))) + (str/join "\n")))) + + +(defmethod visit ::default [_ schema _ _] + (let [props (m/type-properties schema)] + (or (:title props) + "*"))) + + +(defmethod visit :map + [_ schema children {:keys [::level ::max-level] :as options}] + (let [props (m/properties schema) + closed? (:closed props) + title (some->> (:title props) str/camel str/capital)] + + (if (>= level max-level) + (or (some-> title str) + "") + (let [optional (into #{} (comp (filter (m/-comp :optional second)) + (map first)) + children) + entries (->> children + (map (fn [[k _ s]] + (str (pad " " level) (str/camel k) + (when (contains? optional k) "?") + ": " s ))) + (str/join ",\n")) + + header (cond-> (if (zero? level) + (str "type " title) + (str title)) + closed? (str "!") + (some? title) (str " ") + )] + + (str header "{\n" entries "\n" (pad "}" level)))))) + +(defmethod visit :multi + [_ s children {:keys [::level ::max-level] :as options}] + (let [props (m/properties s) + title (some-> (:title props) str/camel str/capital)] + (if (>= level max-level) + title + (let [dispatcher (or (-> s m/properties :dispatch-description) + (-> s m/properties :dispatch)) + + prefix (apply str (take (inc level) (repeat " "))) + + entries (->> children + (map (fn [[_ _ shape]] + (str prefix shape))) + (str/join ",\n")) + + header (cond-> "multi" + (some? title) (str " " title) + :always (str " [dispatch=" (d/name dispatcher) "]"))] + + (str header " {\n" entries "\n" (pad "}" level)))))) + + +(defmethod visit :merge + [_ schema children _] + (let [entries (str/join " , " children) + props (m/properties schema) + title (or (some-> (:title props) str/camel str/capital) + "")] + (str "merge object " title " { " entries " }"))) + +(defmethod visit :app.common.schema/one-of + [_ _ children _] + (let [elems (last children)] + (str "OneOf[" (->> elems + (map d/name) + (str/join ",")) "]"))) + +(defmethod visit :schema [_ schema children options] + (visit ::m/schema schema children options)) + +(defmethod visit ::m/schema + [_ schema _ {:keys [::level ::limit ::max-level] :as options}] + (let [schema' (m/deref schema) + props (merge + (m/properties schema) + (m/properties schema')) + ref (m/-ref schema) + title (:title props)] + + (cond + (::inline props) + (do + (if (>= limit max-level) + title + (describe* schema' options))) + + (and ref title) + (do + (when (<= limit max-level) + (swap! *definitions* conj (describe* schema' (assoc options ::base-limit limit)))) + + title) + + (>= limit max-level) + (or title + (some-> ref d/name str/camel str/capital) + "") + + :else + (describe* schema' (assoc options ::base-level level ::base-limit limit))))) + +(defn describe* [s options] + (letfn [(walk-fn [schema path children {:keys [::base-level ::base-limit] :or {base-level 0 base-limit 0} :as options}] + (let [options (assoc options + ::limit (+ base-limit (count path)) + ::level (+ base-level (count path)))] + (visit (m/type schema) schema children options)))] + (m/walk s walk-fn options))) + +(defn describe + "Given a schema, returns a string explaiaing the required shape in English" + ([s] + (describe s nil)) + ([s options] + (let [type (m/type s) + defs (atom (d/ordered-set)) + s (cond-> s + (= type ::m/schema) + (m/deref) + :always + (mu/update-properties assoc ::root true)) + + options (into {::m/walk-entry-vals true + ::level 0 + ::max-level 300} + options)] + + (binding [*definitions* defs] + (str (str/trim (describe* s options)) + (when-let [defs @*definitions*] + (str "\n\n" (str/join "\n\n" defs)))))))) diff --git a/common/src/app/common/schema/desc_native.cljc b/common/src/app/common/schema/desc_native.cljc new file mode 100644 index 0000000000..de82c406e0 --- /dev/null +++ b/common/src/app/common/schema/desc_native.cljc @@ -0,0 +1,73 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.common.schema.desc-native + (:require + [app.common.data :as d] + [app.common.schema :as sm] + [malli.core :as m])) + +(declare describe*) + +(defmulti visit (fn [name _schema _children _options] name) :default ::default) + +(defmethod visit ::default [_ schema _ options] + (m/form schema options)) + +(defmethod visit :vector [_ _ children _] + (apply vector :vector children)) + +(defmethod visit :map [_ _ children _] + (let [childs (map (fn [[k p c]] + (if (nil? p) + [k c] + [k (d/without-qualified p) c])) + children) + props nil #_(m/properties schema) + + params (cond->> childs + (some? props) + (cons props))] + + (apply vector :map params))) + +(defmethod visit :multi [_ schema children options] + (let [props (m/properties schema)] + (if (::simplified props) + [:multi (-> props + (dissoc ::simplified) + (assoc :options (into #{} (map first children))))] + (m/form schema options)))) + +(defmethod visit :merge [_ _ children _] + (apply vector :merge children)) + +(defmethod visit :schema [_ schema children options] + (visit ::m/schema schema children options)) + +(defmethod visit ::m/val [_ _ children _] + (last children)) + +(defmethod visit ::m/schema [_ schema _ options] + (let [schema' (m/deref schema)] + (describe* schema' (update options ::level inc)))) + +(defn describe* [s options] + (letfn [(walk-fn [schema _ children options] + (visit (m/type schema) schema children options))] + (m/walk s walk-fn options))) + +(defn describe + "Given a schema, returns a string explaiaing the required shape in English" + ([s] + (describe s nil)) + ([s options] + (let [s (sm/schema s) + s (cond-> s + (= (m/type s) ::m/schema) + (m/deref)) + options (assoc options ::m/walk-entry-vals true ::level 0)] + (describe* s options)))) diff --git a/common/src/app/common/schema/generators.cljc b/common/src/app/common/schema/generators.cljc new file mode 100644 index 0000000000..f9955b49d8 --- /dev/null +++ b/common/src/app/common/schema/generators.cljc @@ -0,0 +1,125 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.common.schema.generators + (:refer-clojure :exclude [set subseq uuid for]) + #?(:cljs (:require-macros [app.common.schema.generators])) + (:require + [app.common.schema.registry :as sr] + [app.common.uri :as u] + [app.common.uuid :as uuid] + [clojure.test.check :as tc] + [clojure.test.check.generators :as tg] + [clojure.test.check.properties :as tp] + [cuerdas.core :as str] + [malli.generator :as mg])) + +(defn default-reporter-fn + [{:keys [type result] :as args}] + (case type + :complete + (prn (select-keys args [:result :num-tests :seed "time-elapsed-ms"])) + + :failure + (do + (prn (select-keys args [:num-tests :seed :failed-after-ms])) + (when #?(:clj (instance? Throwable result) + :cljs (instance? js/Error result)) + (throw result))) + + nil)) + +(defmacro for + [& params] + `(tp/for-all ~@params)) + +(defn check! + [p & {:keys [num] :or {num 20} :as options}] + (tc/quick-check num p (assoc options :reporter-fn default-reporter-fn))) + +(defn sample + ([g] + (mg/sample g {:registry sr/default-registry})) + ([g opts] + (mg/sample g (assoc opts :registry sr/default-registry)))) + +(defn generate + ([g] + (mg/generate g {:registry sr/default-registry})) + ([g opts] + (mg/generate g (assoc opts :registry sr/default-registry)))) + +(defn generator + ([s] + (mg/generator s {:registry sr/default-registry})) + ([s opts] + (mg/generator s (assoc opts :registry sr/default-registry)))) + +(defn small-double + [& {:keys [min max] :or {min -100 max 100}}] + (tg/double* {:min min, :max max, :infinite? false, :NaN? false})) + +(defn small-int + [& {:keys [min max] :or {min -100 max 100}}] + (tg/large-integer* {:min min, :max max})) + +(defn word-string + [] + (->> (tg/such-that #(re-matches #"\w+" %) + tg/string-alphanumeric + 50) + (tg/such-that (complement str/blank?)))) + +(defn uri + [] + (tg/let [scheme (tg/elements ["http" "https"]) + domain (as-> (word-string) $ + (tg/such-that (fn [x] (> (count x) 5)) $ 100) + (tg/fmap str/lower $)) + ext (tg/elements ["net" "com" "org" "app" "io"])] + (u/uri (str scheme "://" domain "." ext)))) + +;; FIXME: revisit +(defn uuid + [] + (->> tg/small-integer + (tg/fmap (fn [_] (uuid/next))))) + +(defn subseq + "Given a collection, generates \"subsequences\" which are sequences + of (not necessarily contiguous) elements from the original + collection, in the same order. For collections of distinct elements + this is effectively a subset generator, with an ordering guarantee." + ([elements] + (subseq [] elements)) + ([dest elements] + (->> (apply tg/tuple (repeat (count elements) tg/boolean)) + (tg/fmap (fn [bools] + (into dest + (comp + (filter first) + (map second)) + (map list bools elements))))))) + +(defn set + [g] + (tg/set g)) + +(defn elements + [s] + (tg/elements s)) + +(defn one-of + [& gens] + (tg/one-of (into [] gens))) + +(defn fmap + [f g] + (tg/fmap f g)) + +(defn tuple + [& opts] + (apply tg/tuple opts)) diff --git a/common/src/app/common/schema/openapi.cljc b/common/src/app/common/schema/openapi.cljc new file mode 100644 index 0000000000..f571408269 --- /dev/null +++ b/common/src/app/common/schema/openapi.cljc @@ -0,0 +1,154 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.common.schema.openapi + (:require + [clojure.set :as set] + [cuerdas.core :as str] + [malli.core :as m])) + +(def ^:dynamic *definitions* nil) + +(declare transform*) + +(defmulti visit (fn [name _schema _children _options] name) :default ::default) +(defmethod visit ::default [_ _ _ _] {}) +(defmethod visit :> [_ _ [value] _] {:type "number" :exclusiveMinimum value}) +(defmethod visit :>= [_ _ [value] _] {:type "number" :minimum value}) +(defmethod visit :< [_ _ [value] _] {:type "number" :exclusiveMaximum value}) +(defmethod visit :<= [_ _ [value] _] {:type "number" :maximum value}) +(defmethod visit := [_ _ [value] _] {:const value}) +(defmethod visit :not= [_ _ _ _] {}) + +(defmethod visit :not [_ _ children _] {:not (last children)}) +(defmethod visit :and [_ _ children _] {:allOf children}) +(defmethod visit :or [_ _ children _] {:anyOf children}) +(defmethod visit :orn [_ _ children _] {:anyOf (map last children)}) + +(defmethod visit ::m/val [_ _ children _] (first children)) + +(def ^:private required-xf + (comp + (filter (m/-comp not :optional second)) + (map first) + (map str/camel))) + +(defmethod visit :map [_ schema children _] + (let [required (into [] required-xf children) + props (->> children + (remove :hidden) + (mapcat (fn [[k _ s]] [(str/camel k) s])) + (apply array-map)) + + closed? (:closed (m/properties schema)) + object {:type "object" :properties props}] + (cond-> object + (seq required) + (assoc :required required) + + closed? + (assoc :additionalProperties false)))) + +(defmethod visit :multi [_ _ children _] {:oneOf (mapv last children)}) + +(defn- minmax-properties + [m schema kmin kmax] + (merge + m + (-> schema + m/properties + (select-keys [:min :max]) + (set/rename-keys {:min kmin, :max kmax})))) + +(defmethod visit :map-of [_ schema children _] + (minmax-properties + {:type "object", + :additionalProperties (second children)} + schema + :minProperties + :maxProperties)) + +(defmethod visit :vector [_ schema children _] + (let [child (-> schema m/children first) + props (m/properties (m/deref child))] + (minmax-properties + {:type "array", :items (first children) :title (:title props)} + schema + :minItems + :maxItems))) + +(defmethod visit :sequential [_ schema children _] + (minmax-properties + {:type "array", :items (first children)} + schema + :minItems + :maxItems)) + +(defmethod visit :set [_ schema children _] + (minmax-properties + {:type "array", :items (first children), :uniqueItems true} + schema + :minItems + :maxItems)) + +(defmethod visit :enum [_ _ children options] (merge (some-> (m/-infer children) (transform* options)) {:enum children})) +(defmethod visit :maybe [_ _ children _] {:oneOf (conj children {:type "null"})}) +(defmethod visit :tuple [_ _ children _] {:type "array", :items children, :additionalItems false}) +(defmethod visit :re [_ schema _ options] {:type "string", :pattern (first (m/children schema options))}) +(defmethod visit :nil [_ _ _ _] {:type "null"}) + +(defmethod visit :string [_ schema _ _] + (merge {:type "string"} (-> schema m/properties (select-keys [:min :max]) (set/rename-keys {:min :minLength, :max :maxLength})))) + +(defmethod visit :int [_ schema _ _] + (merge {:type "integer"} (-> schema m/properties (select-keys [:min :max]) (set/rename-keys {:min :minimum, :max :maximum})))) + +(defmethod visit :double [_ schema _ _] + (merge {:type "number"} + (-> schema m/properties (select-keys [:min :max]) (set/rename-keys {:min :minimum, :max :maximum})))) + +(defmethod visit :boolean [_ _ _ _] {:type "boolean"}) +(defmethod visit :keyword [_ _ _ _] {:type "string"}) +(defmethod visit :qualified-keyword [_ _ _ _] {:type "string"}) +(defmethod visit :symbol [_ _ _ _] {:type "string"}) +(defmethod visit :qualified-symbol [_ _ _ _] {:type "string"}) +(defmethod visit :uuid [_ _ _ _] {:type "string" :format "uuid"}) + +(defmethod visit :schema [_ schema children options] + (visit ::m/schema schema children options)) + +(defmethod visit ::m/schema [_ schema _ options] + (let [result (transform* (m/deref schema) options) + defpath (::definitions-path options "#/definitions/")] + (if-let [ref (m/-ref schema)] + (let [rkey (str/concat (str/camel (namespace ref)) "$" (name ref))] + (some-> *definitions* (swap! assoc rkey result)) + {"$ref" (str/concat defpath rkey)}) + result))) + +(defmethod visit :merge [_ schema _ options] (transform* (m/deref schema) options)) +(defmethod visit :union [_ schema _ options] (transform* (m/deref schema) options)) +(defmethod visit :select-keys [_ schema _ options] (transform* (m/deref schema) options)) + +(defn- unlift-keys + [m prefix] + (reduce-kv #(if (= (name prefix) (namespace %2)) (assoc %1 (keyword (str/camel (name %2))) %3) %1) {} m)) + +(defn transform* + [s options] + (letfn [(walk-fn [schema _ children options] + (let [p (merge (m/type-properties schema) + (m/properties schema))] + (merge (select-keys p [:title :description :default]) + (visit (m/type schema) schema children options) + (unlift-keys p :app.common.openapi))))] + (m/walk s walk-fn options))) + +(defn transform + ([s] (transform s nil)) + ([s options] + (let [options (assoc options ::m/walk-entry-vals true)] + (transform* s options)))) diff --git a/common/src/app/common/schema/registry.cljc b/common/src/app/common/schema/registry.cljc new file mode 100644 index 0000000000..46e4662a16 --- /dev/null +++ b/common/src/app/common/schema/registry.cljc @@ -0,0 +1,20 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.common.schema.registry + (:require + [malli.core :as m] + [malli.registry :as mr] + [malli.util :as mu])) + +(defonce registry (atom {})) + +(def default-registry + (mr/composite-registry + m/default-registry + (mu/schemas) + (mr/mutable-registry registry))) + diff --git a/common/src/app/common/types/color.cljc b/common/src/app/common/types/color.cljc index 68c221c64b..d18447b846 100644 --- a/common/src/app/common/types/color.cljc +++ b/common/src/app/common/types/color.cljc @@ -7,97 +7,103 @@ (ns app.common.types.color (:require [app.common.data :as d] - [app.common.spec :as us] + [app.common.schema :as sm] + [app.common.schema.openapi :as-alias oapi] [app.common.text :as txt] [app.common.types.color.generic :as-alias color-generic] [app.common.types.color.gradient :as-alias color-gradient] [app.common.types.color.gradient.stop :as-alias color-gradient-stop] - [clojure.spec.alpha :as s])) + [clojure.test.check.generators :as tgen])) -;; TODO: maybe define ::color-hex-string with proper hex color spec? +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMAS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; --- GRADIENTS +(def rgb-color-re + #"^#(?:[0-9a-fA-F]{3}){1,2}$") -(s/def ::id uuid?) +(defn- random-rgb-color + [] + #?(:clj (format "#%06x" (rand-int 16rFFFFFF)) + :cljs + (let [r (rand-int 255) + g (rand-int 255) + b (rand-int 255)] + (str "#" + (.. r (toString 16) (padStart 2 "0")) + (.. g (toString 16) (padStart 2 "0")) + (.. b (toString 16) (padStart 2 "0")))))) -(s/def ::color-gradient/type #{:linear :radial}) -(s/def ::color-gradient/start-x ::us/safe-number) -(s/def ::color-gradient/start-y ::us/safe-number) -(s/def ::color-gradient/end-x ::us/safe-number) -(s/def ::color-gradient/end-y ::us/safe-number) -(s/def ::color-gradient/width ::us/safe-number) +(sm/def! ::rgb-color + {:type ::rgb-color + :pred #(and (string? %) (some? (re-matches rgb-color-re %))) + :type-properties + {:title "rgb-color" + :description "RGB Color String" + :error/message "expected a valid RGB color" + :gen/gen (->> tgen/any (tgen/fmap (fn [_] (random-rgb-color)))) -(s/def ::color-gradient-stop/color ::us/rgb-color-str) -(s/def ::color-gradient-stop/opacity ::us/safe-number) -(s/def ::color-gradient-stop/offset ::us/safe-number) + ::oapi/type "integer" + ::oapi/format "int64"}}) -(s/def ::color-gradient/stop - (s/keys :req-un [::color-gradient-stop/color - ::color-gradient-stop/opacity - ::color-gradient-stop/offset])) +(sm/def! ::gradient + [:map {:title "Gradient"} + [:type [::sm/one-of #{:linear :radial}]] + [:start-x ::sm/safe-number] + [:start-y ::sm/safe-number] + [:end-x ::sm/safe-number] + [:end-y ::sm/safe-number] + [:width ::sm/safe-number] + [:stops + [:vector {:min 1 :gen/max 2} + [:map {:title "GradientStop"} + [:color ::rgb-color] + [:opacity ::sm/safe-number] + [:offset ::sm/safe-number]]]]]) -(s/def ::color-gradient/stops - (s/coll-of ::color-gradient/stop :kind vector?)) +(sm/def! ::color + [:map + [:id {:optional true} ::sm/uuid] + [:name {:optional true} :string] + [:path {:optional true} [:maybe :string]] + [:value {:optional true} [:maybe :string]] + [:color {:optional true} [:maybe ::rgb-color]] + [:opacity {:optional true} [:maybe ::sm/safe-number]] + [:modified-at {:optional true} ::sm/inst] + [:ref-id {:optional true} ::sm/uuid] + [:ref-file {:optional true} ::sm/uuid] + [:gradient {:optional true} [:maybe ::gradient]]]) -(s/def ::gradient - (s/keys :req-un [::color-gradient/type - ::color-gradient/start-x - ::color-gradient/start-y - ::color-gradient/end-x - ::color-gradient/end-y - ::color-gradient/width - ::color-gradient/stops])) -;; --- COLORS +;; FIXME: incomplete schema +(sm/def! ::recent-color + [:and + [:map {:title "RecentColot"} + [:opacity {:optional true} [:maybe ::sm/safe-number]] + [:color {:optional true} [:maybe ::rgb-color]] + [:gradient {:optional true} [:maybe ::gradient]]] + [::sm/contains-any {:strict true} [:color :gradient]]]) -(s/def ::color-generic/name string?) -(s/def ::color-generic/path (s/nilable string?)) -(s/def ::color-generic/value (s/nilable string?)) -(s/def ::color-generic/color (s/nilable ::us/rgb-color-str)) -(s/def ::color-generic/opacity (s/nilable ::us/safe-number)) -(s/def ::color-generic/gradient (s/nilable ::gradient)) -(s/def ::color-generic/ref-id uuid?) -(s/def ::color-generic/ref-file uuid?) -(s/def ::color-generic/modified-at ::us/inst) +(def color? + (sm/pred-fn ::color)) -(s/def ::shape-color - (s/keys :req-un [:us/color - ::color-generic/opacity] - :opt-un [::color-generic/gradient - ::color-generic/ref-id - ::color-generic/ref-file])) +(def recent-color? + (sm/pred-fn ::recent-color)) -(s/def ::color - (s/keys :opt-un [::id - ::color-generic/name - ::color-generic/path - ::color-generic/value - ::color-generic/color - ::color-generic/opacity - ::color-generic/gradient - ::color-generic/modified-at])) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; HELPERS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::recent-color - (s/and - (s/keys :opt-un [::color-generic/value - ::color-generic/color - ::color-generic/opacity - ::color-generic/gradient]) - (fn [o] - (or (contains? o :gradient) - (contains? o :color))))) - -;; --- Helpers for color in different parts of a shape - -;; fill +;; --- fill (defn fill->shape-color [fill] - (d/without-nils {:color (:fill-color fill) - :opacity (:fill-opacity fill) - :gradient (:fill-color-gradient fill) - :ref-id (:fill-color-ref-id fill) - :ref-file (:fill-color-ref-file fill)})) + (d/without-nils + {:color (:fill-color fill) + :opacity (:fill-opacity fill) + :gradient (:fill-color-gradient fill) + :ref-id (:fill-color-ref-id fill) + :ref-file (:fill-color-ref-file fill)})) (defn set-fill-color [shape position color opacity gradient] diff --git a/common/src/app/common/types/container.cljc b/common/src/app/common/types/container.cljc index ceeff8b948..7d66711e3d 100644 --- a/common/src/app/common/types/container.cljc +++ b/common/src/app/common/types/container.cljc @@ -6,26 +6,42 @@ (ns app.common.types.container (:require + [app.common.data.macros :as dm] [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] [app.common.pages.common :as common] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.types.component :as ctk] [app.common.types.components-list :as ctkl] [app.common.types.pages-list :as ctpl] + [app.common.types.shape :as cts] [app.common.types.shape-tree :as ctst] - [app.common.uuid :as uuid] - [clojure.spec.alpha :as s])) + [app.common.uuid :as uuid])) -(s/def ::type #{:page :component}) -(s/def ::id uuid?) -(s/def ::name ::us/string) -(s/def ::path (s/nilable ::us/string)) -(s/def ::modified-at ::us/inst) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::container - (s/keys :req-un [::id ::name] - :opt-un [::type ::path ::modified-at ::ctst/objects])) +(def valid-container-types + #{:page :component}) + +(sm/def! ::container + [:map + [:id ::sm/uuid] + [:type {:optional true} + [::sm/one-of valid-container-types]] + [:name :string] + [:path {:optional true} [:maybe :string]] + [:modified-at {:optional true} ::sm/inst] + [:objects {:optional true} + [:map-of {:gen/max 10} ::sm/uuid ::cts/shape]]]) + +(def container? + (sm/pred-fn ::container)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; HELPERS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defn make-container [page-or-component type] @@ -41,9 +57,9 @@ (defn get-container [file type id] - (us/assert map? file) - (us/assert ::type type) - (us/assert uuid? id) + (dm/assert! (map? file)) + (dm/assert! (contains? valid-container-types type)) + (dm/assert! (uuid? id)) (-> (if (= type :page) (ctpl/get-page file id) @@ -52,8 +68,14 @@ (defn get-shape [container shape-id] - (us/assert ::container container) - (us/assert ::us/uuid shape-id) + (dm/assert! + "expected valid container" + (container? container)) + + (dm/assert! + "expected valid uuid for `shape-id`" + (uuid? shape-id)) + (-> container (get :objects) (get shape-id))) diff --git a/common/src/app/common/types/file.cljc b/common/src/app/common/types/file.cljc index 06e606849b..c72d628e06 100644 --- a/common/src/app/common/types/file.cljc +++ b/common/src/app/common/types/file.cljc @@ -13,54 +13,59 @@ [app.common.geom.shapes :as gsh] [app.common.pages.common :refer [file-version]] [app.common.pages.helpers :as cph] + [app.common.schema :as sm] [app.common.types.color :as ctc] [app.common.types.colors-list :as ctcl] [app.common.types.component :as ctk] [app.common.types.components-list :as ctkl] [app.common.types.container :as ctn] - [app.common.types.file.media-object :as ctfm] [app.common.types.page :as ctp] [app.common.types.pages-list :as ctpl] [app.common.types.shape-tree :as ctst] [app.common.types.typographies-list :as ctyl] [app.common.types.typography :as cty] [app.common.uuid :as uuid] - [clojure.spec.alpha :as s] [cuerdas.core :as str])) -;; Specs +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::colors - (s/map-of uuid? ::ctc/color)) +(sm/def! ::media-object + [:map {:title "FileMediaObject"} + [:id ::sm/uuid] + [:name :string] + [:width ::sm/safe-int] + [:height ::sm/safe-int] + [:mtype :string] + [:path {:optional true} [:maybe :string]]]) -(s/def ::recent-colors - (s/coll-of ::ctc/recent-color :kind vector?)) +(sm/def! ::data + [:map {:title "FileData"} + [:pages [:vector ::sm/uuid]] + [:pages-index + [:map-of {:gen/max 5} ::sm/uuid ::ctp/page]] + [:colors {:optional true} + [:map-of {:gen/max 5} ::sm/uuid ::ctc/color]] + [:components {:optional true} + [:map-of {:gen/max 5} ::sm/uuid ::ctn/container]] + [:recent-colors {:optional true} + [:vector {:gen/max 3} ::ctc/recent-color]] + [:typographies {:optional true} + [:map-of {:gen/max 2} ::sm/uuid ::cty/typography]] + [:media {:optional true} + [:map-of {:gen/max 5} ::sm/uuid ::media-object]] + ]) -(s/def ::typographies - (s/map-of uuid? ::cty/typography)) +(def file-data? + (sm/pred-fn ::data)) -(s/def ::pages - (s/coll-of uuid? :kind vector?)) +(def media-object? + (sm/pred-fn ::media-object)) -(s/def ::media - (s/map-of uuid? ::ctfm/media-object)) - -(s/def ::pages-index - (s/map-of uuid? ::ctp/page)) - -(s/def ::components - (s/map-of uuid? ::ctn/container)) - -(s/def ::data - (s/keys :req-un [::pages-index - ::pages] - :opt-un [::colors - ::components - ::recent-colors - ::typographies - ::media])) - -;; Initialization +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; INITIALIZATION +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (def empty-file-data {:version file-version @@ -429,6 +434,7 @@ (some? (:component-file %)) (assoc :component-file (:id file-data))) main-instance-shapes) + ; Add all shapes of the main instance to the library page add-main-instance-shapes (fn [page] diff --git a/common/src/app/common/types/file/media_object.cljc b/common/src/app/common/types/file/media_object.cljc deleted file mode 100644 index c5174c5051..0000000000 --- a/common/src/app/common/types/file/media_object.cljc +++ /dev/null @@ -1,30 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC - -(ns app.common.types.file.media-object - (:require - [app.common.spec :as us] - [clojure.spec.alpha :as s])) - -(s/def ::id uuid?) -(s/def ::name string?) -(s/def ::width ::us/safe-integer) -(s/def ::height ::us/safe-integer) -(s/def ::mtype string?) - -;; NOTE: This is marked as nilable for backward compatibility, but -;; right now is just exists or not exists. We can thin in a gradual -;; migration and then mark it as not nilable. -(s/def ::path (s/nilable string?)) - -(s/def ::media-object - (s/keys :req-un [::id - ::name - ::width - ::height - ::mtype] - :opt-un [::path])) - diff --git a/common/src/app/common/types/grid.cljc b/common/src/app/common/types/grid.cljc new file mode 100644 index 0000000000..5643f983e0 --- /dev/null +++ b/common/src/app/common/types/grid.cljc @@ -0,0 +1,59 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; Copyright (c) KALEIDOS INC + +(ns app.common.types.grid + (:require + [app.common.schema :as sm] + [app.common.types.color :as ctc])) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(sm/def! ::grid-color + [:map {:title "PageGridColor"} + [:color ::ctc/rgb-color] + [:opacity ::sm/safe-number]]) + +(sm/def! ::column-params + [:map + [:color ::grid-color] + [:type [::sm/one-of #{:stretch :left :center :right}]] + [:size {:optional true} ::sm/safe-number] + [:margin {:optional true} [:maybe ::sm/safe-number]] + [:item-length {:optional true} [:maybe ::sm/safe-number]] + [:gutter {:optional true} [:maybe ::sm/safe-number]]]) + +(sm/def! ::square-params + [:map + [:size ::sm/safe-number] + [:color ::grid-color]]) + +(sm/def! ::grid + [:multi {:dispatch :type} + [:column + [:map + [:type [:= :column]] + [:display :boolean] + [:params ::column-params]]] + + [:row + [:map + [:type [:= :row]] + [:display :boolean] + [:params ::column-params]]] + + [:square + [:map + [:type [:= :square]] + [:display :boolean] + [:params ::square-params]]]]) + +(sm/def! ::saved-grids + [:map {:title "PageGrid"} + [:square {:optional true} ::square-params] + [:row {:optional true} ::column-params] + [:column {:optional true} ::column-params]]) diff --git a/common/src/app/common/types/modifiers.cljc b/common/src/app/common/types/modifiers.cljc index 33e73ccdb8..2dc84309cb 100644 --- a/common/src/app/common/types/modifiers.cljc +++ b/common/src/app/common/types/modifiers.cljc @@ -17,7 +17,6 @@ [app.common.geom.shapes.strokes :as gss] [app.common.math :as mth] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.text :as txt] [app.common.types.shape.layout :as ctl] #?(:cljs [cljs.core :as c] @@ -264,7 +263,7 @@ (resize-vec? vector) (update :geometry-child maybe-add-resize (resize-op order vector origin))))) - ([modifiers vector origin transform transform-inverse] + ([modifiers vector origin transform transform-inverse] (resize modifiers vector origin transform transform-inverse nil)) ;; `precise?` works so we don't remove almost empty resizes. This will be used in the pixel-precision @@ -462,9 +461,9 @@ (change-dimensions-modifiers shape attr value nil)) ([{:keys [transform transform-inverse] :as shape} attr value {:keys [ignore-lock?] :or {ignore-lock? false}}] - (us/assert map? shape) - (us/assert #{:width :height} attr) - (us/assert number? value) + (dm/assert! (map? shape)) + (dm/assert! (#{:width :height} attr)) + (dm/assert! (number? value)) (let [{:keys [proportion proportion-lock]} shape size (select-keys (:selrect shape) [:width :height]) @@ -491,8 +490,11 @@ (defn change-orientation-modifiers [shape orientation] - (us/assert map? shape) - (us/verify #{:horiz :vert} orientation) + (dm/assert! (map? shape)) + (dm/assert! + "expected a valid orientation" + (#{:horiz :vert} orientation)) + (let [width (:width shape) height (:height shape) new-width (if (= orientation :horiz) (max width height) (min width height)) @@ -672,17 +674,17 @@ [shape value] (cond-> shape (cph/text-shape? shape) - (update-text-content scale-text-content value) - + (update-text-content scale-text-content value) + :always (gsc/update-corners-scale value) - + (d/not-empty? (:strokes shape)) (gss/update-strokes-width value) - + (d/not-empty? (:shadow shape)) (gse/update-shadows-scale value) - + (some? (:blur shape)) (gse/update-blur-scale value) diff --git a/common/src/app/common/types/page.cljc b/common/src/app/common/types/page.cljc index 835df4b37c..f7a3081925 100644 --- a/common/src/app/common/types/page.cljc +++ b/common/src/app/common/types/page.cljc @@ -8,34 +8,56 @@ (:require [app.common.data :as d] [app.common.files.features :as ffeat] - [app.common.spec :as us] - [app.common.types.page.flow :as ctpf] - [app.common.types.page.grid :as ctpg] - [app.common.types.page.guide :as ctpu] + [app.common.schema :as sm] + [app.common.types.color :as-alias ctc] + [app.common.types.grid :as ctg] [app.common.types.shape :as cts] - [app.common.uuid :as uuid] - [clojure.spec.alpha :as s])) + [app.common.uuid :as uuid])) -;; --- Background color +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMAS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::background ::us/rgb-color-str) +(sm/def! ::flow + [:map {:title "PageFlow"} + [:id ::sm/uuid] + [:name :string] + [:starting-frame ::sm/uuid]]) -;; --- Page options +(def flow? + (sm/pred-fn ::flow)) -(s/def ::options - (s/keys :opt-un [::background - ::ctpg/saved-grids - ::ctpf/flows - ::ctpu/guides])) +(sm/def! ::guide + [:map {:title "PageGuide"} + [:id ::sm/uuid] + [:axis [::sm/one-of #{:x :y}]] + [:position ::sm/safe-number] + [:frame-id {:optional true} [:maybe ::sm/uuid]]]) -;; --- Page +(def guide? + (sm/pred-fn ::guide)) -(s/def ::id uuid?) -(s/def ::name string?) -(s/def ::objects (s/map-of uuid? ::cts/shape)) +(sm/def! ::page + [:map {:title "FilePage"} + [:id ::sm/uuid] + [:name :string] + [:objects + [:map-of {:gen/max 5} ::sm/uuid ::cts/shape]] + [:options + [:map {:title "PageOptions"} + [:background {:optional true} ::ctc/rgb-color] + [:saved-grids {:optional true} ::ctg/saved-grids] + [:flows {:optional true} + [:vector {:gen/max 2} ::flow]] + [:guides {:optional true} + [:map-of {:gen/max 2} ::sm/uuid ::guide]]]]]) -(s/def ::page - (s/keys :req-un [::id ::name ::objects ::options])) +(def page? + (sm/pred-fn ::page)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; INIT & HELPERS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; --- Initialization @@ -80,6 +102,3 @@ (defn get-frame-flow [flows frame-id] (d/seek #(= (:starting-frame %) frame-id) flows)) - - - diff --git a/common/src/app/common/types/page/flow.cljc b/common/src/app/common/types/page/flow.cljc deleted file mode 100644 index 62f2b15048..0000000000 --- a/common/src/app/common/types/page/flow.cljc +++ /dev/null @@ -1,24 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC - -(ns app.common.types.page.flow - (:require - [clojure.spec.alpha :as s])) - -;; --- Interaction Flows - -(s/def ::id uuid?) -(s/def ::name string?) -(s/def ::starting-frame uuid?) - -(s/def ::flow - (s/keys :req-un [::id - ::name - ::starting-frame])) - -(s/def ::flows - (s/coll-of ::flow :kind vector?)) - diff --git a/common/src/app/common/types/page/grid.cljc b/common/src/app/common/types/page/grid.cljc deleted file mode 100644 index ea2640be1f..0000000000 --- a/common/src/app/common/types/page/grid.cljc +++ /dev/null @@ -1,46 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC - -(ns app.common.types.page.grid - (:require - [app.common.spec :as us] - [app.common.types.page.grid.color :as-alias grid-color] - [clojure.spec.alpha :as s])) - -;; --- Board grids - - -(s/def ::grid-color/color string?) -(s/def ::grid-color/opacity ::us/safe-number) - -(s/def ::size (s/nilable ::us/safe-integer)) -(s/def ::item-length (s/nilable ::us/safe-number)) - -(s/def ::color (s/keys :req-un [::grid-color/color - ::grid-color/opacity])) -(s/def ::type #{:stretch :left :center :right}) -(s/def ::gutter (s/nilable ::us/safe-integer)) -(s/def ::margin (s/nilable ::us/safe-integer)) - -(s/def ::square - (s/keys :req-un [::size - ::color])) - -(s/def ::column - (s/keys :req-un [::color] - :opt-un [::size - ::type - ::item-length - ::margin - ::gutter])) - -(s/def ::row ::column) - -(s/def ::saved-grids - (s/keys :opt-un [::square - ::row - ::column])) - diff --git a/common/src/app/common/types/page/guide.cljc b/common/src/app/common/types/page/guide.cljc deleted file mode 100644 index d7a5eca815..0000000000 --- a/common/src/app/common/types/page/guide.cljc +++ /dev/null @@ -1,27 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC - -(ns app.common.types.page.guide - (:require - [app.common.spec :as us] - [clojure.spec.alpha :as s])) - -;; --- Page guides - -(s/def ::id uuid?) -(s/def ::axis #{:x :y}) -(s/def ::position ::us/safe-number) -(s/def ::frame-id (s/nilable uuid?)) - -(s/def ::guide - (s/keys :req-un [::id - ::axis - ::position] - :opt-un [::frame-id])) - -(s/def ::guides - (s/map-of uuid? ::guide)) - diff --git a/common/src/app/common/types/shape.cljc b/common/src/app/common/types/shape.cljc index 4ff5430ee9..ebb35990aa 100644 --- a/common/src/app/common/types/shape.cljc +++ b/common/src/app/common/types/shape.cljc @@ -13,142 +13,24 @@ [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] [app.common.pages.common :refer [default-color]] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.types.color :as ctc] + [app.common.types.grid :as ctg] [app.common.types.shape.blur :as ctsb] [app.common.types.shape.export :as ctse] [app.common.types.shape.interactions :as ctsi] - [app.common.types.shape.layout :as ctsl] - [app.common.types.shape.path :as ctsp] - [app.common.types.shape.radius :as ctsr] + ;; FIXME: missing spec -> schema + #_[app.common.types.shape.layout :as ctsl] [app.common.types.shape.shadow :as ctss] [app.common.types.shape.text :as ctsx] [app.common.uuid :as uuid] - [clojure.set :as set] - [clojure.spec.alpha :as s] - [clojure.test.check.generators :as tgen])) - -;; --- Specs - -(s/def ::frame-id uuid?) -(s/def ::id uuid?) -(s/def ::name ::us/string) -(s/def ::path (s/nilable ::us/string)) -(s/def ::page-id uuid?) -(s/def ::parent-id uuid?) -(s/def ::string ::us/string) -(s/def ::type #{:frame :text :rect :path :image :circle :group :bool :svg-raw}) -(s/def ::uuid uuid?) - -(s/def ::component-id uuid?) -(s/def ::component-file uuid?) -(s/def ::component-root? boolean?) -(s/def ::shape-ref uuid?) - -;; Size constraints - -(s/def ::constraints-h #{:left :right :leftright :center :scale}) -(s/def ::constraints-v #{:top :bottom :topbottom :center :scale}) -(s/def ::fixed-scroll boolean?) - -;; Page Data related -(s/def ::blocked boolean?) -(s/def ::collapsed boolean?) - -(s/def ::fill-color ::us/rgb-color-str) -(s/def ::fill-opacity ::us/safe-number) -(s/def ::fill-color-gradient (s/nilable ::ctc/gradient)) -(s/def ::fill-color-ref-file (s/nilable uuid?)) -(s/def ::fill-color-ref-id (s/nilable uuid?)) - -(s/def ::hide-fill-on-export boolean?) -(s/def ::show-content boolean?) -(s/def ::hide-in-viewer boolean?) - -(s/def ::file-thumbnail boolean?) -(s/def ::masked-group? boolean?) -(s/def ::font-family ::us/string) -(s/def ::font-size ::us/safe-integer) -(s/def ::font-style ::us/string) -(s/def ::font-weight ::us/string) -(s/def ::hidden boolean?) -(s/def ::letter-spacing ::us/safe-number) -(s/def ::line-height ::us/safe-number) -(s/def ::locked boolean?) -(s/def ::page-id uuid?) -(s/def ::proportion ::us/safe-number) -(s/def ::proportion-lock boolean?) -(s/def ::stroke-color ::us/string) -(s/def ::stroke-color-gradient (s/nilable ::ctc/gradient)) -(s/def ::stroke-color-ref-file (s/nilable uuid?)) -(s/def ::stroke-color-ref-id (s/nilable uuid?)) -(s/def ::stroke-opacity ::us/safe-number) -(s/def ::stroke-style #{:solid :dotted :dashed :mixed :none :svg}) + [clojure.set :as set])) (def stroke-caps-line #{:round :square}) (def stroke-caps-marker #{:line-arrow :triangle-arrow :square-marker :circle-marker :diamond-marker}) (def stroke-caps (set/union stroke-caps-line stroke-caps-marker)) -(s/def ::stroke-cap-start stroke-caps) -(s/def ::stroke-cap-end stroke-caps) - -(s/def ::stroke-width ::us/safe-number) -(s/def ::stroke-alignment #{:center :inner :outer}) -(s/def ::text-align #{"left" "right" "center" "justify"}) -(s/def ::x ::us/safe-number) -(s/def ::y ::us/safe-number) -(s/def ::cx ::us/safe-number) -(s/def ::cy ::us/safe-number) -(s/def ::width ::us/safe-number) -(s/def ::height ::us/safe-number) -(s/def ::index integer?) - -(s/def ::x1 ::us/safe-number) -(s/def ::y1 ::us/safe-number) -(s/def ::x2 ::us/safe-number) -(s/def ::y2 ::us/safe-number) - -(s/def ::selrect - (s/keys :req-un [::x ::y ::x1 ::y1 ::x2 ::y2 ::width ::height])) - -(s/def ::exports - (s/coll-of ::ctse/export :kind vector?)) - -(s/def ::points - (s/every ::gpt/point :kind vector?)) - -(s/def ::shapes - (s/every uuid? :kind vector?)) - -(s/def ::fill - (s/and (s/keys :opt-un [::fill-color - ::fill-opacity - ::fill-color-gradient - ::fill-color-ref-file - ::fill-color-ref-id]) - (comp boolean seq))) - -(s/def ::fills - (s/coll-of ::fill :kind vector?)) - -(s/def ::stroke - (s/keys :opt-un [::stroke-color - ::stroke-color-ref-file - ::stroke-color-ref-id - ::stroke-opacity - ::stroke-style - ::stroke-width - ::stroke-alignment - ::stroke-cap-start - ::stroke-cap-end])) - -(s/def ::strokes - (s/coll-of ::stroke :kind vector?)) - -(s/def ::transform ::gmt/matrix) -(s/def ::transform-inverse ::gmt/matrix) -(s/def ::opacity ::us/safe-number) -(s/def ::blend-mode +(def blend-mode #{:normal :darken :multiply @@ -166,102 +48,235 @@ :color :luminosity}) -(s/def ::shape-base-attrs - (s/keys :opt-un [::id - ::name - ::component-id - ::component-file - ::component-root? - ::shape-ref - ::selrect - ::points - ::blocked - ::collapsed - ::fills - ::hide-fill-on-export - ::font-family - ::font-size - ::font-style - ::font-weight - ::hidden - ::letter-spacing - ::line-height - ::locked - ::proportion - ::proportion-lock - ::constraints-h - ::constraints-v - ::fixed-scroll - ::ctsr/rx - ::ctsr/ry - ::ctsr/r1 - ::ctsr/r2 - ::ctsr/r3 - ::ctsr/r4 - ::x - ::y - ::exports - ::shapes - ::strokes - ::text-align - ::transform - ::transform-inverse - ::width - ::height - ::masked-group? - ::ctsi/interactions - ::ctss/shadow - ::ctsb/blur - ::opacity - ::blend-mode])) +(def horizontal-constraint-types + #{:left :right :leftright :center :scale}) -(s/def ::shape-attrs - (s/with-gen - (s/merge - ::shape-base-attrs - ::ctsl/layout-container-props - ::ctsl/layout-child-props +(def vertical-constraint-types + #{:top :bottom :topbottom :center :scale}) - ;; For BACKWARD COMPATIBILITY we need to spec fill and stroke - ;; attrs as shape toplevel attrs - ::fill - ::stroke) - #(tgen/let [attrs1 (s/gen ::shape-base-attrs) - attrs2 (s/gen ::ctsl/layout-container-props) - attrs3 (s/gen ::ctsl/layout-child-props)] - (merge attrs1 attrs2 attrs3)))) +(def text-align-types + #{"left" "right" "center" "justify"}) -(defmulti shape-spec :type) +(sm/def! ::selrect + [:map {:title "Selrect"} + [:x ::sm/safe-number] + [:y ::sm/safe-number] + [:x1 ::sm/safe-number] + [:x2 ::sm/safe-number] + [:y1 ::sm/safe-number] + [:y2 ::sm/safe-number] + [:width ::sm/safe-number] + [:height ::sm/safe-number]]) -(defmethod shape-spec :default [_] - (s/spec ::shape-attrs)) +(sm/def! ::points + [:vector {:gen/max 5} ::gpt/point]) -(defmethod shape-spec :text [_] - (s/merge ::shape-attrs - (s/keys :opt-un [::ctsx/content - ::ctsx/position-data]))) +(sm/def! ::fill + [:map {:title "Fill" :min 1} + [:fill-color {:optional true} ::ctc/rgb-color] + [:fill-opacity {:optional true} ::sm/safe-number] + [:fill-color-gradient {:optional true} ::ctc/gradient] + [:fill-color-ref-file {:optional true} [:maybe ::sm/uuid]] + [:fill-color-ref-id {:optional true} [:maybe ::sm/uuid]]]) -(defmethod shape-spec :path [_] - (s/merge ::shape-attrs - (s/keys :opt-un [::ctsp/content]))) +(sm/def! ::stroke + [:map {:title "Stroke"} + [:stroke-color {:optional true} :string] + [:stroke-color-ref-file {:optional true} ::sm/uuid] + [:stroke-color-ref-id {:optional true} ::sm/uuid] + [:stroke-opacity {:optional true} ::sm/safe-number] + [:stroke-style {:optional true} + [::sm/one-of #{:solid :dotted :dashed :mixed :none :svg}]] + [:stroke-width {:optional true} ::sm/safe-number] + [:stroke-alignment {:optional true} + [::sm/one-of #{:center :inner :outer}]] + [:stroke-cap-start {:optional true} + [::sm/one-of stroke-caps]] + [:stroke-cap-end {:optional true} + [::sm/one-of stroke-caps]] + [:stroke-color-gradient {:optional true} ::ctc/gradient]]) -(defmethod shape-spec :frame [_] - (s/merge ::shape-attrs - (s/keys :opt-un [::file-thumbnail - ::hide-fill-on-export - ::show-content - ::hide-in-viewer]))) +(sm/def! ::shape-attrs + [:map {:title "ShapeAttrs"} + [:name {:optional true} :string] + [:component-id {:optional true} ::sm/uuid] + [:component-file {:optional true} ::sm/uuid] + [:component-root {:optional true} :boolean] + [:shape-ref {:optional true} ::sm/uuid] + [:selrect {:optional true} ::selrect] + [:points {:optional true} ::points] + [:blocked {:optional true} :boolean] + [:collapsed {:optional true} :boolean] + [:locked {:optional true} :boolean] + [:hidden {:optional true} :boolean] + [:masked-group? {:optional true} :boolean] + [:fills {:optional true} + [:vector {:gen/max 2} ::fill]] + [:hide-fill-on-export {:optional true} :boolean] + [:proportion {:optional true} ::sm/safe-number] + [:proportion-lock {:optional true} :boolean] + [:constraints-h {:optional true} + [::sm/one-of horizontal-constraint-types]] + [:constraints-v {:optional true} + [::sm/one-of vertical-constraint-types]] + [:fixed-scroll {:optional true} :boolean] + [:rx {:optional true} ::sm/safe-number] + [:ry {:optional true} ::sm/safe-number] + [:r1 {:optional true} ::sm/safe-number] + [:r2 {:optional true} ::sm/safe-number] + [:r3 {:optional true} ::sm/safe-number] + [:r4 {:optional true} ::sm/safe-number] + [:x {:optional true} ::sm/safe-number] + [:y {:optional true} ::sm/safe-number] + [:width {:optional true} ::sm/safe-number] + [:height {:optional true} ::sm/safe-number] + [:opacity {:optional true} ::sm/safe-number] + [:grids {:optional true} + [:vector {:gen/max 2} ::ctg/grid]] + [:exports {:optional true} + [:vector {:gen/max 2} ::ctse/export]] + [:strokes {:optional true} + [:vector {:gen/max 2} ::stroke]] + [:transform {:optional true} ::gmt/matrix] + [:transform-inverse {:optional true} ::gmt/matrix] + [:blend-mode {:optional true} [::sm/one-of blend-mode]] + [:interactions {:optional true} + [:vector {:gen/max 2} ::ctsi/interaction]] + [:shadow {:optional true} + [:vector {:gen/max 1} ::ctss/shadow]] + [:blur {:optional true} ::ctsb/blur] + [:grow-type {:optional true} + [::sm/one-of #{:auto-width :auto-height :fixed}]] + ]) -(s/def ::shape - (s/with-gen - (s/merge - (s/keys :req-un [::type ::name]) - (s/multi-spec shape-spec :type)) - (fn [] - (tgen/let [type (s/gen ::type) - name (s/gen ::name) - attrs (s/gen ::shape-attrs)] - (assoc attrs :type type :name name))))) +(def shape-attrs? + (sm/pred-fn ::shape-attrs)) + +(sm/def! ::group-attrs + [:map {:title "GroupAttrs"} + [:type [:= :group]] + [:id ::sm/uuid] + [:shapes [:vector {:min 1 :gen/max 10 :gen/min 1} ::sm/uuid]]]) + +(sm/def! ::frame-attrs + [:map {:title "FrameAttrs"} + [:type [:= :frame]] + [:id ::sm/uuid] + [:shapes {:optional true} [:vector {:gen/max 10 :gen/min 1} ::sm/uuid]] + [:file-thumbnail {:optional true} :boolean] + [:hide-fill-on-export {:optional true} :boolean] + [:show-content {:optional true} :boolean] + [:hide-in-viewer {:optional true} :boolean]]) + +(sm/def! ::bool-attrs + [:map {:title "BoolAttrs"} + [:type [:= :bool]] + [:id ::sm/uuid] + [:shapes [:vector {:min 1 :gen/max 10 :gen/min 1} ::sm/uuid]] + + ;; FIXME: improve this schema + [:bool-type :keyword] + + ;; FIXME: improve this schema + [:bool-content + [:vector {:gen/max 2} + [:map + [:command :keyword] + [:relative :boolean] + [:params [:map-of {:gen/max 5} :keyword ::sm/safe-number]]]]]]) + +(sm/def! ::rect-attrs + [:map {:title "RectAttrs"} + [:type [:= :rect]] + [:id ::sm/uuid]]) + +(sm/def! ::circle-attrs + [:map {:title "CircleAttrs"} + [:type [:= :circle]] + [:id ::sm/uuid]]) + +(sm/def! ::svg-raw-attrs + [:map {:title "SvgRawAttrs"} + [:type [:= :svg-raw]] + [:id ::sm/uuid]]) + +(sm/def! ::image-attrs + [:map {:title "ImageAttrs"} + [:type [:= :image]] + [:id ::sm/uuid] + [:metadata + [:map + [:width :int] + [:height :int] + [:mtype :string] + [:id ::sm/uuid]]]]) + +(sm/def! ::path-attrs + [:map {:title "PathAttrs"} + [:type [:= :path]] + [:id ::sm/uuid] + [:content + [:vector + [:map + [:command :keyword] + [:params {:optional true} [:maybe :map]]]]]]) + +(sm/def! ::text-attrs + [:map {:title "TextAttrs"} + [:id ::sm/uuid] + [:type [:= :text]] + [:content ::ctsx/content]]) + +(sm/def! ::shape + [:multi {:dispatch :type :title "Shape"} + [:group + [:merge {:title "GroupShape"} + ::shape-attrs + ::group-attrs]] + + [:frame + [:merge {:title "FrameShape"} + ::shape-attrs + ::frame-attrs]] + + [:bool + [:merge {:title "BoolShape"} + ::shape-attrs + ::bool-attrs]] + + [:rect + [:merge {:title "RectShape"} + ::shape-attrs + ::rect-attrs]] + + [:circle + [:merge {:title "CircleShape"} + ::shape-attrs + ::circle-attrs]] + + [:image + [:merge {:title "ImageShape"} + ::shape-attrs + ::image-attrs]] + + [:svg-raw + [:merge {:title "SvgRawShape"} + ::shape-attrs + ::svg-raw-attrs]] + + [:path + [:merge {:title "PathShape"} + ::shape-attrs + ::path-attrs]] + + [:text + [:merge {:title "TextShape"} + ::shape-attrs + ::text-attrs]] + ]) + +(def shape? + (sm/pred-fn ::shape)) ;; --- Initialization @@ -311,11 +326,6 @@ :fills [{:fill-color clr/white :fill-opacity 1}] :strokes [] - :stroke-style :none - :stroke-alignment :center - :stroke-width 0 - :stroke-color clr/black - :stroke-opacity 0 :rx 0 :ry 0} diff --git a/common/src/app/common/types/shape/blur.cljc b/common/src/app/common/types/shape/blur.cljc index f10a935037..2c4ce5ab4b 100644 --- a/common/src/app/common/types/shape/blur.cljc +++ b/common/src/app/common/types/shape/blur.cljc @@ -6,9 +6,14 @@ (ns app.common.types.shape.blur (:require + [app.common.schema :as sm] [app.common.spec :as us] [clojure.spec.alpha :as s])) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SPEC +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + (s/def ::id uuid?) (s/def ::type #{:layer-blur}) (s/def ::value ::us/safe-number) @@ -17,3 +22,13 @@ (s/def ::blur (s/keys :req-un [::id ::type ::value ::hidden])) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(sm/def! ::blur + [:map {:title "Blur"} + [:id ::sm/uuid] + [:type [:= :layer-blur]] + [:value ::sm/safe-number] + [:hidden :boolean]]) diff --git a/common/src/app/common/types/shape/export.cljc b/common/src/app/common/types/shape/export.cljc index 084ee6f54b..6d7953a88e 100644 --- a/common/src/app/common/types/shape/export.cljc +++ b/common/src/app/common/types/shape/export.cljc @@ -6,15 +6,10 @@ (ns app.common.types.shape.export (:require - [app.common.spec :as us] - [clojure.spec.alpha :as s])) - -(s/def ::suffix ::us/string) -(s/def ::scale ::us/safe-number) -(s/def ::type ::us/keyword) - -(s/def ::export - (s/keys :req-un [::type - ::suffix - ::scale])) + [app.common.schema :as sm])) +(sm/def! ::export + [:map {:title "ShapeExport"} + [:type :keyword] + [:scale ::sm/safe-number] + [:suffix :string]]) diff --git a/common/src/app/common/types/shape/interactions.cljc b/common/src/app/common/types/shape/interactions.cljc index d06a059bc4..5bfa90681d 100644 --- a/common/src/app/common/types/shape/interactions.cljc +++ b/common/src/app/common/types/shape/interactions.cljc @@ -7,11 +7,11 @@ (ns app.common.types.shape.interactions (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.geom.point :as gpt] [app.common.geom.shapes.bounds :as gsb] [app.common.pages.helpers :as cph] - [app.common.spec :as us] - [clojure.spec.alpha :as s])) + [app.common.schema :as sm])) ;; WARNING: options are not deleted when changing event or action type, so it can be ;; restored if the user changes it back later. @@ -22,9 +22,11 @@ ;; So make sure to use has-delay/has-destination... functions, or similar, ;; before reading them. -;; -- Options depending on event type +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::event-type +(def event-types #{:click :mouse-press :mouse-over @@ -32,65 +34,15 @@ :mouse-leave :after-delay}) -(s/def ::delay ::us/safe-integer) - -(defmulti event-opts-spec :event-type) - -(defmethod event-opts-spec :after-delay [_] - (s/keys :req-un [::delay])) - -(defmethod event-opts-spec :default [_] - (s/keys :req-un [])) - -(s/def ::event-opts - (s/multi-spec event-opts-spec :event-type)) - -;; -- Animation options - -(s/def ::animation-type #{:dissolve :slide :push}) -(s/def ::duration ::us/safe-integer) -(s/def ::way #{:in :out}) -(s/def ::direction #{:right :left :up :down}) -(s/def ::offset-effect ::us/boolean) -(s/def ::easing - #{:linear - :ease - :ease-in - :ease-out - :ease-in-out}) - -(defmulti animation-spec :animation-type) - -(defmethod animation-spec :dissolve [_] - (s/keys :req-un [::duration - ::easing])) - -(defmethod animation-spec :slide [_] - (s/keys :req-un [::duration - ::easing - ::way - ::direction - ::offset-effect])) - -(defmethod animation-spec :push [_] - (s/keys :req-un [::duration - ::easing - ::direction])) - -(s/def ::animation - (s/multi-spec animation-spec :animation-type)) - -;; -- Options depending on action type - -(s/def ::action-type +(def action-types #{:navigate :open-overlay :toggle-overlay :close-overlay :prev-screen :open-url}) -(s/def ::position-relative-to (s/nilable ::us/uuid)) -(s/def ::overlay-pos-type + +(def overlay-positioning-types #{:manual :center :top-left @@ -100,65 +52,101 @@ :bottom-right :bottom-center}) -(s/def ::destination (s/nilable ::us/uuid)) -(s/def ::overlay-position ::gpt/point) -(s/def ::url ::us/string) -(s/def ::close-click-outside ::us/boolean) -(s/def ::background-overlay ::us/boolean) -(s/def ::preserve-scroll ::us/boolean) +(def easing-types + #{:linear + :ease + :ease-in + :ease-out + :ease-in-out}) -(defmulti action-opts-spec :action-type) +(def direction-types + #{:right + :left + :up + :down}) -(defmethod action-opts-spec :navigate [_] - (s/keys :opt-un [::destination - ::preserve-scroll - ::animation])) +(def way-types + #{:in :out}) -(defmethod action-opts-spec :open-overlay [_] - (s/keys :req-un [::overlay-position - ::overlay-pos-type] - :opt-un [::destination - ::close-click-outside - ::background-overlay - ::animation - ::position-relative-to])) +(def animation-types + #{:dissolve :slide :push}) -(defmethod action-opts-spec :toggle-overlay [_] - (s/keys :req-un [::overlay-position - ::overlay-pos-type] - :opt-un [::destination - ::close-click-outside - ::background-overlay - ::animation - ::position-relative-to])) +(sm/def! ::animation + [:multi {:dispatch :animation-type :title "Animation"} + [:dissolve + [:map {:title "AnimationDisolve"} + [:animation-type [:= :dissolve]] + [:duration ::sm/safe-int] + [:easing [::sm/one-of easing-types]]]] + [:slide + [:map {:title "AnimationSlide"} + [:animation-type [:= :slide]] + [:duration ::sm/safe-int] + [:easing [::sm/one-of easing-types]] + [:way [::sm/one-of way-types]] + [:direction [::sm/one-of direction-types]] + [:offset-effect :boolean]]] + [:push + [:map {:title "AnimationPush"} + [:animation-type [:= :push]] + [:duration ::sm/safe-int] + [:easing [::sm/one-of easing-types]] + [:direction [::sm/one-of direction-types]]]]]) -(defmethod action-opts-spec :close-overlay [_] - (s/keys :opt-un [::destination - ::animation - ::position-relative-to])) +(def animation? + (sm/pred-fn ::animation)) -(defmethod action-opts-spec :prev-screen [_] - (s/keys :req-un [])) +(sm/def! ::interaction + [:multi {:dispatch :action-type} + [:navigate + [:map + [:action-type [:= :navigate]] + [:event-type [::sm/one-of event-types]] + [:destination {:optional true} [:maybe ::sm/uuid]] + [:preserve-scroll {:optional true} :boolean] + [:animation {:optional true} ::animation]]] + [:open-overlay + [:map + [:action-type [:= :open-overlay]] + [:event-type [::sm/one-of event-types]] + [:overlay-position ::gpt/point] + [:overlay-pos-type [::sm/one-of overlay-positioning-types]] + [:destination {:optional true} [:maybe ::sm/uuid]] + [:close-click-outside {:optional true} :boolean] + [:background-overlay {:optional true} :boolean] + [:animation {:optional true} ::animation] + [:position-relative-to {:optional true} [:maybe ::sm/uuid]]]] + [:toggle-overlay + [:map + [:action-type [:= :toggle-overlay]] + [:event-type [::sm/one-of event-types]] + [:overlay-position ::gpt/point] + [:overlay-pos-type [::sm/one-of overlay-positioning-types]] + [:destination {:optional true} [:maybe ::sm/uuid]] + [:close-click-outside {:optional true} :boolean] + [:background-overlay {:optional true} :boolean] + [:animation {:optional true} ::animation] + [:position-relative-to {:optional true} [:maybe ::sm/uuid]]]] + [:close-overlay + [:map + [:action-type [:= :close-overlay]] + [:event-type [::sm/one-of event-types]] + [:destination {:optional true} [:maybe ::sm/uuid]] + [:animation {:optional true} ::animation] + [:position-relative-to {:optional true} [:maybe ::sm/uuid]]]] + [:prev-screen + [:map + [:action-type [:= :prev-screen]] + [:event-type [::sm/one-of event-types]]]] + [:open-url + [:map + [:action-type [:= :open-url]] + [:event-type [::sm/one-of event-types]] + [:url :string]]]]) -(defmethod action-opts-spec :open-url [_] - (s/keys :req-un [::url])) - -(s/def ::action-opts - (s/multi-spec action-opts-spec :action-type)) - -;; -- Interaction - -(s/def ::classifier - (s/keys :req-un [::event-type - ::action-type])) - -(s/def ::interaction - (s/merge ::classifier - ::event-opts - ::action-opts)) - -(s/def ::interactions - (s/coll-of ::interaction :kind vector?)) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; HELPERS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (def default-interaction {:event-type :click @@ -169,17 +157,33 @@ (def default-delay 600) + ;; -- Helpers for interaction +(def interaction? + (sm/pred-fn ::interaction)) + +;; (def destination? +;; (sm/pred-fn [:maybe ::sm/uuid])) + (declare calc-overlay-pos-initial) (declare allowed-animation?) (defn set-event-type [interaction event-type shape] - (us/verify ::interaction interaction) - (us/verify ::event-type event-type) - (assert (or (not= event-type :after-delay) - (= (:type shape) :frame))) + (dm/assert! + "Should be an interraction map" + ^boolean (interaction? interaction)) + + (dm/assert! + "Should be a valid event type" + (contains? event-types event-type)) + + (dm/assert! + "The `:after-delay` event type incompatible with frame shapes" + (or (not= event-type :after-delay) + (= (:type shape) :frame))) + (if (= (:event-type interaction) event-type) interaction (case event-type @@ -194,8 +198,15 @@ (defn set-action-type [interaction action-type] - (us/verify ::interaction interaction) - (us/verify ::action-type action-type) + + (dm/assert! + "Should be an interraction map" + (interaction? interaction)) + + (dm/assert! + "Should be a valid event type" + (contains? action-types action-type)) + (let [new-interaction (if (= (:action-type interaction) action-type) interaction @@ -233,17 +244,33 @@ (-> new-interaction :animation :animation-type))) (dissoc :animation-type :animation)))) +;; FIXME: should be renamed to has-delay? + (defn has-delay [interaction] (= (:event-type interaction) :after-delay)) (defn set-delay [interaction delay] - (us/verify ::interaction interaction) - (us/verify ::delay delay) - (assert (has-delay interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid delay" + (sm/safe-int? delay)) + + (dm/assert! + "expected compatible interaction event type" + (has-delay interaction)) + (assoc interaction :delay delay)) +;; FIXME: rename to proper name, very confusing one because it does +;; not checks if interaction has distination, it checks if it can have +;; one. + (defn has-destination [interaction] (#{:navigate :open-overlay :toggle-overlay :close-overlay} @@ -256,9 +283,15 @@ (defn set-destination [interaction destination] - (us/verify ::interaction interaction) - (us/verify ::destination destination) - (assert (has-destination interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected compatible interaction event type" + (has-destination interaction)) + (cond-> interaction :always (assoc :destination destination) @@ -274,9 +307,19 @@ (defn set-preserve-scroll [interaction preserve-scroll] - (us/verify ::interaction interaction) - (us/verify ::us/boolean preserve-scroll) - (assert (has-preserve-scroll interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected boolean for `preserve-scroll`" + (boolean? preserve-scroll)) + + (dm/assert! + "expected compatible interaction map with preserve-scroll" + (has-preserve-scroll interaction)) + (assoc interaction :preserve-scroll preserve-scroll)) (defn has-url @@ -285,9 +328,19 @@ (defn set-url [interaction url] - (us/verify ::interaction interaction) - (us/verify ::url url) - (assert (has-url interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected a string for `url`" + (string? url)) + + (dm/assert! + "expected compatible interaction map with url param" + (has-url interaction)) + (assoc interaction :url url)) (defn has-overlay-opts @@ -296,9 +349,19 @@ (defn set-overlay-pos-type [interaction overlay-pos-type shape objects] - (us/verify ::interaction interaction) - (us/verify ::overlay-pos-type overlay-pos-type) - (assert (has-overlay-opts interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid overlay positioning type" + (contains? overlay-positioning-types overlay-pos-type)) + + (dm/assert! + "expected compatible interaction map" + (has-overlay-opts interaction)) + (assoc interaction :overlay-pos-type overlay-pos-type :overlay-position (calc-overlay-pos-initial (:destination interaction) @@ -307,9 +370,19 @@ overlay-pos-type))) (defn toggle-overlay-pos-type [interaction overlay-pos-type shape objects] - (us/verify ::interaction interaction) - (us/verify ::overlay-pos-type overlay-pos-type) - (assert (has-overlay-opts interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid overlay positioning type" + (contains? overlay-positioning-types overlay-pos-type)) + + (dm/assert! + "expected compatible interaction map" + (has-overlay-opts interaction)) + (let [new-pos-type (if (= (:overlay-pos-type interaction) overlay-pos-type) :manual overlay-pos-type)] @@ -321,32 +394,73 @@ new-pos-type)))) (defn set-overlay-position [interaction overlay-position] - (us/verify ::interaction interaction) - (us/verify ::overlay-position overlay-position) - (assert (has-overlay-opts interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid overlay position" + (gpt/point? overlay-position)) + + (dm/assert! + "expected compatible interaction map" + (has-overlay-opts interaction)) + (assoc interaction :overlay-pos-type :manual :overlay-position overlay-position)) (defn set-close-click-outside [interaction close-click-outside] - (us/verify ::interaction interaction) - (us/verify ::us/boolean close-click-outside) - (assert (has-overlay-opts interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected boolean value for `close-click-outside`" + (boolean? close-click-outside)) + + (dm/assert! + "expected compatible interaction map" + (has-overlay-opts interaction)) + (assoc interaction :close-click-outside close-click-outside)) (defn set-background-overlay [interaction background-overlay] - (us/verify ::interaction interaction) - (us/verify ::us/boolean background-overlay) - (assert (has-overlay-opts interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected boolean value for `background-overlay`" + (boolean? background-overlay)) + + (dm/assert! + "expected compatible interaction map" + (has-overlay-opts interaction)) + (assoc interaction :background-overlay background-overlay)) (defn set-position-relative-to [interaction position-relative-to] - (us/verify ::interaction interaction) - (us/verify ::position-relative-to position-relative-to) - (assert (has-overlay-opts interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid uuid for `position-relative-to`" + (or (nil? position-relative-to) + (uuid? position-relative-to))) + + (dm/assert! + "expected compatible interaction map" + (has-overlay-opts interaction)) + (assoc interaction :position-relative-to position-relative-to)) (defn- calc-overlay-pos-initial @@ -363,16 +477,24 @@ (gpt/point 0 0))) (defn calc-overlay-position - [interaction ;; interaction data - shape ;; Shape with the interaction - objects ;; the objects tree - relative-to-shape ;; the interaction position is realtive to this sape - base-frame ;; the base frame of the current interaction - dest-frame ;; the frame to display with this interaction - frame-offset] ;; if this interaction starts in a frame opened on another interaction, this is the position of that frame + [interaction ;; interaction data + shape ;; Shape with the interaction + objects ;; the objects tree + relative-to-shape ;; the interaction position is realtive to this + ;; sape + base-frame ;; the base frame of the current interaction + dest-frame ;; the frame to display with this interaction + frame-offset] ;; if this interaction starts in a frame opened + ;; on another interaction, this is the position + ;; of that frame + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected compatible interaction map" + (has-overlay-opts interaction)) - (us/verify ::interaction interaction) - (assert (has-overlay-opts interaction)) (let [ ;; When the interactive item is inside a nested frame we need to add to the offset the position ;; of the parent-frame otherwise the position won't match @@ -455,10 +577,22 @@ (defn set-animation-type [interaction animation-type] - (us/verify ::interaction interaction) - (us/verify (s/nilable ::animation-type) animation-type) - (assert (has-animation? interaction)) - (assert (allowed-animation? (:action-type interaction) animation-type)) + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid value for `animation-type`" + (or (nil? animation-type) + (contains? animation-types animation-type))) + + (dm/assert! + "expected interaction map compatible with animation" + (has-animation? interaction)) + + (dm/assert! + "expected allowed animation type" + (allowed-animation? (:action-type interaction) animation-type)) (if (= (-> interaction :animation :animation-type) animation-type) interaction @@ -493,9 +627,19 @@ (defn set-duration [interaction duration] - (us/verify ::interaction interaction) - (us/verify ::duration duration) - (assert (has-duration? interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid duration" + (sm/safe-int? duration)) + + (dm/assert! + "expected compatible interaction map" + (has-duration? interaction)) + (update interaction :animation assoc :duration duration)) (defn has-easing? @@ -504,9 +648,19 @@ (defn set-easing [interaction easing] - (us/verify ::interaction interaction) - (us/verify ::easing easing) - (assert (has-easing? interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid easing" + (contains? easing-types easing)) + + (dm/assert! + "expected compatible interaction map" + (has-easing? interaction)) + (update interaction :animation assoc :easing easing)) (defn has-way? @@ -517,9 +671,19 @@ (defn set-way [interaction way] - (us/verify ::interaction interaction) - (us/verify ::way way) - (assert (has-way? interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid way" + (contains? way-types way)) + + (dm/assert! + "expected compatible interaction map" + (has-way? interaction)) + (update interaction :animation assoc :way way)) (defn has-direction? @@ -528,14 +692,28 @@ (defn set-direction [interaction direction] - (us/verify ::interaction interaction) - (us/verify ::direction direction) - (assert (has-direction? interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid direction" + (contains? direction-types direction)) + + (dm/assert! + "expected compatible interaction map" + (has-direction? interaction)) + (update interaction :animation assoc :direction direction)) (defn invert-direction [animation] - (us/verify (s/nilable ::animation) animation) + (dm/assert! + "expected valid animation map" + (or (nil? animation) + (animation? animation))) + (case (:direction animation) :right (assoc animation :direction :left) @@ -545,6 +723,7 @@ (assoc animation :direction :down) :down (assoc animation :direction :up) + animation)) (defn has-offset-effect? @@ -555,9 +734,19 @@ (defn set-offset-effect [interaction offset-effect] - (us/verify ::interaction interaction) - (us/verify ::offset-effect offset-effect) - (assert (has-offset-effect? interaction)) + + (dm/assert! + "expected valid interaction map" + (interaction? interaction)) + + (dm/assert! + "expected valid boolean for `offset-effect`" + (boolean? offset-effect)) + + (dm/assert! + "expected compatible interaction map" + (has-offset-effect? interaction)) + (update interaction :animation assoc :offset-effect offset-effect)) (defn dest-to? diff --git a/common/src/app/common/types/shape/layout.cljc b/common/src/app/common/types/shape/layout.cljc index 6ae3ca0ed3..3f4003e649 100644 --- a/common/src/app/common/types/shape/layout.cljc +++ b/common/src/app/common/types/shape/layout.cljc @@ -8,9 +8,10 @@ (:require [app.common.data :as d] [app.common.data.macros :as dm] - [app.common.spec :as us] - [app.common.uuid :as uuid] - [clojure.spec.alpha :as s])) + [app.common.schema :as sm] + [app.common.uuid :as uuid])) + +;; FIXME: need proper schemas ;; :layout ;; :flex, :grid in the future ;; :layout-flex-dir ;; :row, :row-reverse, :column, :column-reverse @@ -40,114 +41,144 @@ ;; :layout-item-absolute ;; :layout-item-z-index -(s/def ::layout #{:flex :grid}) +(def layout-types + #{:flex :grid}) -(s/def ::layout-flex-dir #{:row :reverse-row :row-reverse :column :reverse-column :column-reverse}) ;;TODO remove reverse-column and reverse-row after script -(s/def ::layout-grid-dir #{:row :column}) -(s/def ::layout-gap-type #{:simple :multiple}) -(s/def ::layout-gap ::us/safe-number) +(def flex-direction-types + #{:row :reverse-row :row-reverse :column :reverse-column :column-reverse}) ;;TODO remove reverse-column and reverse-row after script -(s/def ::layout-align-items #{:start :end :center :stretch}) -(s/def ::layout-justify-items #{:start :end :center :stretch}) -(s/def ::layout-align-content #{:start :end :center :space-between :space-around :space-evenly :stretch}) -(s/def ::layout-justify-content #{:start :center :end :space-between :space-around :space-evenly}) -(s/def ::layout-wrap-type #{:wrap :nowrap :no-wrap}) ;;TODO remove no-wrap after script -(s/def ::layout-padding-type #{:simple :multiple}) +(def gap-types + #{:simple :multiple}) -(s/def :grid/type #{:percent :flex :auto :fixed}) -(s/def :grid/value (s/nilable ::us/safe-number)) -(s/def ::grid-definition (s/keys :req-un [:grid/type] - :opt-un [:grid/value])) -(s/def ::layout-grid-rows (s/coll-of ::grid-definition :kind vector?)) -(s/def ::layout-grid-columns (s/coll-of ::grid-definition :kind vector?)) +(def wrap-types + #{:wrap :nowrap :no-wrap}) ;;TODO remove no-wrap after script -(s/def :grid-cell/id uuid?) -(s/def :grid-cell/area-name ::us/string) -(s/def :grid-cell/row-start ::us/safe-integer) -(s/def :grid-cell/row-span ::us/safe-integer) -(s/def :grid-cell/column-start ::us/safe-integer) -(s/def :grid-cell/column-span ::us/safe-integer) -(s/def :grid-cell/position #{:auto :manual :area}) -(s/def :grid-cell/align-self #{:auto :start :end :center :stretch}) -(s/def :grid-cell/justify-self #{:auto :start :end :center :stretch}) -(s/def :grid-cell/shapes (s/coll-of uuid?)) +(def padding-type + #{:simple :multiple}) -(s/def ::grid-cell (s/keys :opt-un [:grid-cell/id - :grid-cell/area-name - :grid-cell/row-start - :grid-cell/row-span - :grid-cell/column-start - :grid-cell/column-span - :grid-cell/position ;; auto, manual, area - :grid-cell/align-self - :grid-cell/justify-self - :grid-cell/shapes])) -(s/def ::layout-grid-cells (s/map-of uuid? ::grid-cell)) +(def justify-content-types + #{:start :center :end :space-between :space-around :space-evenly}) -(s/def ::p1 ::us/safe-number) -(s/def ::p2 ::us/safe-number) -(s/def ::p3 ::us/safe-number) -(s/def ::p4 ::us/safe-number) +(def align-content-types + #{:start :end :center :space-between :space-around :space-evenly :stretch}) -(s/def ::layout-padding - (s/keys :opt-un [::p1 ::p2 ::p3 ::p4])) +(def align-items-types + #{:start :end :center :stretch}) -(s/def ::row-gap ::us/safe-number) -(s/def ::column-gap ::us/safe-number) +(def justify-items-types + #{:start :end :center :stretch}) -(s/def ::layout-gap - (s/keys :opt-un [::row-gap ::column-gap])) +(sm/def! ::layout-attrs + [:map {:title "LayoutAttrs"} + [:layout {:optional true} [::sm/one-of layout-types]] + [:layout-flex-dir {:optional true} [::sm/one-of flex-direction-types]] + [:layout-gap {:optional true} + [:map + [:row-gap {:optional true} ::sm/safe-number] + [:column-gap {:optional true} ::sm/safe-number]]] + [:layout-gap-type {:optional true} [::sm/one-of gap-types]] + [:layout-wrap-type {:optional true} [::sm/one-of wrap-types]] + [:layout-padding-type {:optional true} [::sm/one-of padding-type]] + [:layout-padding {:optional true} + [:map + [:p1 ::sm/safe-number] + [:p2 ::sm/safe-number] + [:p3 ::sm/safe-number] + [:p4 ::sm/safe-number]]] + [:layout-justify-content {:optional true} [::sm/one-of justify-content-types]] + [:layout-justify-items {:optional true} [::sm/one-of justify-items-types]] + [:layout-align-content {:optional true} [::sm/one-of align-content-types]] + [:layout-align-items {:optional true} [::sm/one-of align-items-types]]]) -(s/def ::layout-container-props - (s/keys :opt-un [::layout - ::layout-flex-dir - ::layout-gap - ::layout-gap-type - ::layout-wrap-type - ::layout-padding-type - ::layout-padding - ::layout-justify-content - ::layout-align-items - ::layout-align-content +;; (s/def :grid/type #{:percent :flex :auto :fixed}) +;; (s/def :grid/value (s/nilable ::us/safe-number)) +;; (s/def ::grid-definition (s/keys :req-un [:grid/type] +;; :opt-un [:grid/value])) +;; (s/def ::layout-grid-rows (s/coll-of ::grid-definition :kind vector?)) +;; (s/def ::layout-grid-columns (s/coll-of ::grid-definition :kind vector?)) - ;; grid - ::layout-grid-dir - ::layout-justify-items - ::layout-grid-rows - ::layout-grid-columns - ::layout-grid-cells - ])) +;; (s/def :grid-cell/id uuid?) +;; (s/def :grid-cell/area-name ::us/string) +;; (s/def :grid-cell/row-start ::us/safe-integer) +;; (s/def :grid-cell/row-span ::us/safe-integer) +;; (s/def :grid-cell/column-start ::us/safe-integer) +;; (s/def :grid-cell/column-span ::us/safe-integer) +;; (s/def :grid-cell/position #{:auto :manual :area}) +;; (s/def :grid-cell/align-self #{:auto :start :end :center :stretch}) +;; (s/def :grid-cell/justify-self #{:auto :start :end :center :stretch}) +;; (s/def :grid-cell/shapes (s/coll-of uuid?)) -(s/def ::m1 ::us/safe-number) -(s/def ::m2 ::us/safe-number) -(s/def ::m3 ::us/safe-number) -(s/def ::m4 ::us/safe-number) +;; (s/def ::grid-cell (s/keys :opt-un [:grid-cell/id +;; :grid-cell/area-name +;; :grid-cell/row-start +;; :grid-cell/row-span +;; :grid-cell/column-start +;; :grid-cell/column-span +;; :grid-cell/position ;; auto, manual, area +;; :grid-cell/align-self +;; :grid-cell/justify-self +;; :grid-cell/shapes])) +;; (s/def ::layout-grid-cells (s/map-of uuid? ::grid-cell)) -(s/def ::layout-item-margin (s/keys :opt-un [::m1 ::m2 ::m3 ::m4])) +;; (s/def ::layout-container-props +;; (s/keys :opt-un [ +;; ;; grid +;; ::layout-grid-dir +;; ::layout-justify-items +;; ::layout-grid-rows +;; ::layout-grid-columns +;; ::layout-grid-cells +;; ])) -(s/def ::layout-item-margin-type #{:simple :multiple}) -(s/def ::layout-item-h-sizing #{:fill :fix :auto}) -(s/def ::layout-item-v-sizing #{:fill :fix :auto}) -(s/def ::layout-item-align-self #{:start :end :center :stretch}) -(s/def ::layout-item-max-h ::us/safe-number) -(s/def ::layout-item-min-h ::us/safe-number) -(s/def ::layout-item-max-w ::us/safe-number) -(s/def ::layout-item-min-w ::us/safe-number) -(s/def ::layout-item-absolute boolean?) -(s/def ::layout-item-z-index ::us/safe-integer) -(s/def ::layout-child-props - (s/keys :opt-un [::layout-item-margin - ::layout-item-margin-type - ::layout-item-h-sizing - ::layout-item-v-sizing - ::layout-item-max-h - ::layout-item-min-h - ::layout-item-max-w - ::layout-item-min-w - ::layout-item-align-self - ::layout-item-absolute - ::layout-item-z-index])) +(def item-margin-types + #{:simple :multiple}) + +(def item-h-sizing-types + #{:fill :fix :auto}) + +(def item-v-sizing-types + #{:fill :fix :auto}) + +(def item-align-self-types + #{:start :end :center :stretch}) + +(sm/def! ::layout-child-attrs + [:map {:title "LayoutChildAttrs"} + [:layout-item-margin-type {:optional true} [::sm/one-of item-margin-types]] + [:layout-item-margin {:optional true} + [:map + [:m1 {:optional true} ::sm/safe-number] + [:m2 {:optional true} ::sm/safe-number] + [:m3 {:optional true} ::sm/safe-number] + [:m4 {:optional true} ::sm/safe-number]]] + [:layout-item-max-h {:optional true} ::sm/safe-number] + [:layout-item-min-h {:optional true} ::sm/safe-number] + [:layout-item-max-w {:optional true} ::sm/safe-number] + [:layout-item-min-w {:optional true} ::sm/safe-number] + [:layout-item-h-sizing {:optional true} [::sm/one-of item-h-sizing-types]] + [:layout-item-v-sizing {:optional true} [::sm/one-of item-v-sizing-types]] + [:layout-item-align-self {:optional true} [::sm/one-of item-align-self-types]] + [:layout-item-absolute {:optional true} :boolean] + [:layout-item-z-index {:optional true} ::sm/safe-number]]) + +(def schema:grid-definition + [:map {:title "LayoutGridDefinition"} + [:type [::sm/one-of #{:percent :flex :auto :fixed}]] + [:value {:optional true} [:maybe ::sm/safe-int]]]) + +(def grid-definition? + (sm/pred-fn schema:grid-definition)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMAS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(def valid-layouts + #{:flex :grid}) + +(sm/def! ::layout + [::sm/one-of valid-layouts]) (defn flex-layout? ([objects id] @@ -536,7 +567,10 @@ ;; Adding a track creates the cells. We should check the shapes that are not tracked (with default values) and assign to the correct tracked values (defn add-grid-column [parent value] - (us/assert ::grid-definition value) + (dm/assert! + "expected a valid grid definition for `value`" + (grid-definition? value)) + (let [rows (:layout-grid-rows parent) new-col-num (count (:layout-grid-columns parent)) @@ -557,7 +591,10 @@ (defn add-grid-row [parent value] - (us/assert ::grid-definition value) + (dm/assert! + "expected a valid grid definition for `value`" + (grid-definition? value)) + (let [cols (:layout-grid-columns parent) new-row-num (inc (count (:layout-grid-rows parent))) diff --git a/common/src/app/common/types/shape/path.cljc b/common/src/app/common/types/shape/path.cljc deleted file mode 100644 index ef0163711d..0000000000 --- a/common/src/app/common/types/shape/path.cljc +++ /dev/null @@ -1,20 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC - -(ns app.common.types.shape.path - (:require - [clojure.spec.alpha :as s])) - -(s/def ::command keyword?) -(s/def ::params (s/nilable (s/map-of keyword? any?))) - -(s/def ::command-item - (s/keys :req-un [::command] - :opt-un [::params])) - -(s/def ::content - (s/coll-of ::command-item :kind vector?)) - diff --git a/common/src/app/common/types/shape/radius.cljc b/common/src/app/common/types/shape/radius.cljc index 94651847fc..054c93a463 100644 --- a/common/src/app/common/types/shape/radius.cljc +++ b/common/src/app/common/types/shape/radius.cljc @@ -6,16 +6,7 @@ (ns app.common.types.shape.radius (:require - [app.common.pages.common :refer [editable-attrs]] - [app.common.spec :as us] - [clojure.spec.alpha :as s])) - -(s/def ::rx ::us/safe-number) -(s/def ::ry ::us/safe-number) -(s/def ::r1 ::us/safe-number) -(s/def ::r2 ::us/safe-number) -(s/def ::r3 ::us/safe-number) -(s/def ::r4 ::us/safe-number) + [app.common.pages.common :refer [editable-attrs]])) ;; There are some shapes that admit border radius, as rectangles ;; frames and images. Those shapes may define the radius of the corners in two modes: @@ -27,8 +18,8 @@ ;; A shape never will have both :rx and :r1 simultaneously -;; All operations take into account that the shape may not be a one of those -;; shapes that has border radius, and so it hasn't :rx nor :r1. +;; All operations take into account that the shape may not be a one of those +;; shapes that has border radius, and so it hasn't :rx nor :r1. ;; In this case operations must leave shape untouched. (defn has-radius? diff --git a/common/src/app/common/types/shape/shadow.cljc b/common/src/app/common/types/shape/shadow.cljc index e2ffe0c88f..d04886fa3a 100644 --- a/common/src/app/common/types/shape/shadow.cljc +++ b/common/src/app/common/types/shape/shadow.cljc @@ -6,44 +6,26 @@ (ns app.common.types.shape.shadow (:require - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.types.color :as ctc] - [app.common.types.shape.shadow.color :as-alias shadow-color] - [clojure.spec.alpha :as s])) + [app.common.types.shape.shadow.color :as-alias shadow-color])) -;;; SHADOW EFFECT - -(s/def ::id (s/nilable uuid?)) -(s/def ::style #{:drop-shadow :inner-shadow}) -(s/def ::offset-x ::us/safe-number) -(s/def ::offset-y ::us/safe-number) -(s/def ::blur ::us/safe-number) -(s/def ::spread ::us/safe-number) -(s/def ::hidden boolean?) - -(s/def ::color string?) -(s/def ::opacity ::us/safe-number) -(s/def ::gradient (s/nilable ::ctc/gradient)) -(s/def ::file-id (s/nilable uuid?)) -(s/def ::ref-id (s/nilable uuid?)) - -(s/def ::shadow-color/color - (s/keys :opt-un [::color - ::opacity - ::gradient - ::file-id - ::id])) - -(s/def ::shadow-props - (s/keys :req-un [::id - ::style - ::shadow-color/color - ::offset-x - ::offset-y - ::blur - ::spread - ::hidden])) - -(s/def ::shadow - (s/coll-of ::shadow-props :kind vector?)) +(def styles #{:drop-shadow :inner-shadow}) +(sm/def! ::shadow + [:map {:title "Shadow"} + [:id [:maybe ::sm/uuid]] + [:style [::sm/one-of styles]] + [:offset-x ::sm/safe-number] + [:offset-y ::sm/safe-number] + [:blur ::sm/safe-number] + [:spread ::sm/safe-number] + [:hidden :boolean] + ;;FIXME: reuse color? + [:color + [:map + [:color {:optional true} :string] + [:opacity {:optional true} ::sm/safe-number] + [:gradient {:optional true} [:maybe ::ctc/gradient]] + [:file-id {:optional true} [:maybe ::sm/uuid]] + [:id {:optional true} [:maybe ::sm/uuid]]]]]) diff --git a/common/src/app/common/types/shape/text.cljc b/common/src/app/common/types/shape/text.cljc index 2d3ed43686..837b67ac9e 100644 --- a/common/src/app/common/types/shape/text.cljc +++ b/common/src/app/common/types/shape/text.cljc @@ -6,68 +6,73 @@ (ns app.common.types.shape.text (:require - [app.common.spec :as us] - [app.common.types.color :as ctc] - [app.common.types.shape.text.position-data :as-alias position-data] - [clojure.spec.alpha :as s])) + [app.common.schema :as sm] + [app.common.types.shape :as-alias shape] + [app.common.types.shape.text.position-data :as-alias position-data])) -(s/def ::type #{"root" "paragraph-set" "paragraph"}) -(s/def ::text string?) -(s/def ::key string?) -(s/def ::fill-color string?) -(s/def ::fill-opacity ::us/safe-number) -(s/def ::fill-color-gradient (s/nilable ::ctc/gradient)) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::content - (s/nilable - (s/or :text-container - (s/keys :req-un [::type] - :opt-un [::key - ::children]) - :text-content - (s/keys :req-un [::text])))) +(def node-types #{"root" "paragraph-set" "paragraph"}) -(s/def ::children - (s/coll-of ::content - :kind vector? - :min-count 1)) +(sm/def! ::content + [:map + [:type [:= "root"]] + [:key {:optional true} :string] + [:children + [:vector {:min 1 :gen/max 2 :gen/min 1} + [:map + [:type [:= "paragraph-set"]] + [:key {:optional true} :string] + [:children + [:vector {:min 1 :gen/max 2 :gen/min 1} + [:map + [:type [:= "paragraph"]] + [:key {:optional true} :string] + [:fills {:optional true} + [:vector {:gen/max 2} ::shape/fill]] + [:font-family {:optional true} :string] + [:font-size {:optional true} :string] + [:font-style {:optional true} :string] + [:font-weight {:optional true} :string] + [:direction {:optional true} :string] + [:text-decoration {:optional true} :string] + [:text-transform {:optional true} :string] + [:typography-ref-id {:optional true} [:maybe ::sm/uuid]] + [:typography-ref-file {:optional true} [:maybe ::sm/uuid]] + [:children + [:vector {:min 1 :gen/max 2 :gen/min 1} + [:map + [:text :string] + [:key {:optional true} :string] + [:fills [:vector {:gen/max 2} ::shape/fill]] + [:font-family {:optional true} :string] + [:font-size {:optional true} :string] + [:font-style {:optional true} :string] + [:font-weight {:optional true} :string] + [:direction {:optional true} :string] + [:text-decoration {:optional true} :string] + [:text-transform {:optional true} :string] + [:typography-ref-id {:optional true} [:maybe ::sm/uuid]] + [:typography-ref-file {:optional true} [:maybe ::sm/uuid]]]]]]]]]]]]) -(s/def ::position-data - (s/coll-of ::position-data-element - :kind vector? - :min-count 1)) -(s/def ::position-data-element - (s/keys :req-un [::position-data/x - ::position-data/y - ::position-data/width - ::position-data/height] - :opt-un [::position-data/fill-color - ::position-data/fill-opacity - ::position-data/font-family - ::position-data/font-size - ::position-data/font-style - ::position-data/font-weight - ::position-data/rtl - ::position-data/text - ::position-data/text-decoration - ::position-data/text-transform])) -(s/def ::position-data/x ::us/safe-number) -(s/def ::position-data/y ::us/safe-number) -(s/def ::position-data/width ::us/safe-number) -(s/def ::position-data/height ::us/safe-number) - -(s/def ::position-data/fill-color ::fill-color) -(s/def ::position-data/fill-opacity ::fill-opacity) -(s/def ::position-data/fill-color-gradient ::fill-color-gradient) - -(s/def ::position-data/font-family string?) -(s/def ::position-data/font-size string?) -(s/def ::position-data/font-style string?) -(s/def ::position-data/font-weight string?) -(s/def ::position-data/rtl boolean?) -(s/def ::position-data/text string?) -(s/def ::position-data/text-decoration string?) -(s/def ::position-data/text-transform string?) +(sm/def! ::position-data + [:vector {:min 1 :gen/max 2} + [:map + [:x ::sm/safe-number] + [:y ::sm/safe-number] + [:width ::sm/safe-number] + [:height ::sm/safe-number] + [:fills [:vector {:gen/max 2} ::shape/fill]] + [:font-family {:optional true} :string] + [:font-size {:optional true} :string] + [:font-style {:optional true} :string] + [:font-weight {:optional true} :string] + [:rtl {:optional true} :boolean] + [:text {:optional true} :string] + [:text-decoration {:optional true} :string] + [:text-transform {:optional true} :string]]]) diff --git a/common/src/app/common/types/shape_tree.cljc b/common/src/app/common/types/shape_tree.cljc index 335efb7f81..9b10e3b030 100644 --- a/common/src/app/common/types/shape_tree.cljc +++ b/common/src/app/common/types/shape_tree.cljc @@ -12,14 +12,9 @@ [app.common.geom.shapes :as gsh] [app.common.math :as mth] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.types.component :as ctk] - [app.common.types.shape :as cts] [app.common.types.shape.layout :as ctl] - [app.common.uuid :as uuid] - [clojure.spec.alpha :as s])) - -(s/def ::objects (s/map-of uuid? ::cts/shape)) + [app.common.uuid :as uuid])) (defn add-shape "Insert a shape in the tree, at the given index below the given parent or frame. @@ -367,7 +362,7 @@ (let [child-id (first child-ids) child (get objects child-id) - _ (us/assert! ::us/some child) + _ (dm/assert! (some? child)) [new-child new-child-objects updated-child-objects] (clone-object child new-id objects update-new-object update-original-object)] diff --git a/common/src/app/common/types/typography.cljc b/common/src/app/common/types/typography.cljc index 6a6f51595c..db33681734 100644 --- a/common/src/app/common/types/typography.cljc +++ b/common/src/app/common/types/typography.cljc @@ -6,38 +6,35 @@ (ns app.common.types.typography (:require - [app.common.spec :as us] - [app.common.text :as txt] - [clojure.spec.alpha :as s])) + [app.common.schema :as sm] + [app.common.text :as txt])) -(s/def ::id uuid?) -(s/def ::name string?) -(s/def ::path (s/nilable string?)) -(s/def ::font-id string?) -(s/def ::font-family string?) -(s/def ::font-variant-id string?) -(s/def ::font-size string?) -(s/def ::font-weight string?) -(s/def ::font-style string?) -(s/def ::line-height string?) -(s/def ::letter-spacing string?) -(s/def ::text-transform string?) -(s/def ::modified-at ::us/inst) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; SCHEMA +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::typography - (s/keys :req-un [::id - ::name - ::font-id - ::font-family - ::font-variant-id - ::font-size - ::font-weight - ::font-style - ::line-height - ::letter-spacing - ::text-transform] - :opt-un [::path - ::modified-at])) +(sm/def! ::typography + [:map {:title "Typography"} + [:id ::sm/uuid] + [:name :string] + [:font-id :string] + [:font-family :string] + [:font-variant-id :string] + [:font-size :string] + [:font-weight :string] + [:font-style :string] + [:line-height :string] + [:letter-spacing :string] + [:text-transform :string] + [:modified-at {:optional true} ::sm/inst] + [:path {:optional true} [:maybe :string]]]) + +(def typography? + (sm/pred-fn ::typography)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; HELPERS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defn uses-library-typographies? "Check if the shape uses any typography in the given library." diff --git a/common/test/common_tests/types_file_test.cljc b/common/test/common_tests/types_file_test.cljc index bf8a044237..7aad113d85 100644 --- a/common/test/common_tests/types_file_test.cljc +++ b/common/test/common_tests/types_file_test.cljc @@ -195,6 +195,7 @@ typographies (ctyl/typographies-seq (ctf/file-data absorbed-file)) page (ctpl/get-page (ctf/file-data absorbed-file) file-page-id) + shape1 (ctn/get-shape page (thf/id :shape1)) text-node (d/seek #(some? (:text %)) (txt/node-seq (:content shape1)))] diff --git a/common/test/common_tests/types_test.cljc b/common/test/common_tests/types_test.cljc index 5ed39ab1b5..ff8ed5fef6 100644 --- a/common/test/common_tests/types_test.cljc +++ b/common/test/common_tests/types_test.cljc @@ -6,54 +6,27 @@ (ns common-tests.types-test (:require - [clojure.spec.alpha :as s] [clojure.test :as t] - [clojure.test.check.clojure-test :refer [defspec]] - [clojure.test.check.generators :as gen] - [clojure.test.check.properties :as props] - [app.common.spec :as us] + [app.common.schema :as sm] + [app.common.schema.generators :as sg] [app.common.transit :as transit] [app.common.types.shape :as cts] [app.common.types.page :as ctp] [app.common.types.file :as ctf])) -(defspec transit-encode-decode-with-shape 10 - (props/for-all - [fdata (s/gen ::cts/shape)] - (let [res (-> fdata transit/encode-str transit/decode-str)] - (t/is (= res fdata))))) +(t/deftest transit-encode-decode-with-shape + (sg/check! + (sg/for [fdata (sg/generator ::cts/shape)] + (let [res (-> fdata transit/encode-str transit/decode-str)] + (t/is (= res fdata)))) + {:num 18 :seed 1683548002439})) -(defspec types-shape-spec 5 - (props/for-all - [fdata (s/gen ::cts/shape)] - (t/is (us/valid? ::cts/shape fdata)))) +(t/deftest types-shape-spec + (sg/check! + (sg/for [fdata (sg/generator ::cts/shape)] + (t/is (sm/validate ::cts/shape fdata))))) -(defspec types-page-spec 5 - (props/for-all - [fdata (s/gen ::ctp/page)] - (t/is (us/valid? ::ctp/page fdata)))) - -(defspec types-file-colors-spec 10 - (props/for-all - [fdata (s/gen ::ctf/colors)] - (t/is (us/valid? ::ctf/colors fdata)))) - -(defspec types-file-recent-colors-spec 10 - (props/for-all - [fdata (s/gen ::ctf/recent-colors)] - (t/is (us/valid? ::ctf/recent-colors fdata)))) - -(defspec types-file-typographies-spec 10 - (props/for-all - [fdata (s/gen ::ctf/typographies)] - (t/is (us/valid? ::ctf/typographies fdata)))) - -(defspec types-file-media-spec 10 - (props/for-all - [fdata (s/gen ::ctf/media)] - (t/is (us/valid? ::ctf/media fdata)))) - -(defspec types-file-components-spec 1 - (props/for-all - [fdata (s/gen ::ctf/components)] - (t/is (us/valid? ::ctf/components fdata)))) +(t/deftest types-page-spec + (-> (sg/for [fdata (sg/generator ::ctp/page)] + (t/is (sm/validate ::ctp/page fdata))) + (sg/check! {:num 30}))) diff --git a/common/test/common_tests/uuid_test.cljc b/common/test/common_tests/uuid_test.cljc index d189ec717c..c747b82dbe 100644 --- a/common/test/common_tests/uuid_test.cljc +++ b/common/test/common_tests/uuid_test.cljc @@ -6,16 +6,13 @@ (ns common-tests.uuid-test (:require - [app.common.spec :as us] - [app.common.uuid :as uuid] - [clojure.spec.alpha :as s] - [clojure.test :as t] - [clojure.test.check.clojure-test :refer [defspec]] - [clojure.test.check.generators :as gen] - [clojure.test.check.properties :as props])) + [app.common.schema :as sm] + [app.common.schema.generators :as sg] + [clojure.test :as t])) -(defspec non-repeating-uuid-next-1 100 - (props/for-all - [uuid1 (s/gen ::us/uuid) - uuid2 (s/gen ::us/uuid)] - (t/is (not= uuid1 uuid2)))) +(t/deftest non-repeating-uuid-next-1-schema + (sg/check! + (sg/for [uuid1 (sg/generator ::sm/uuid) + uuid2 (sg/generator ::sm/uuid)] + (t/is (not= uuid1 uuid2))) + {:num 100})) diff --git a/exporter/scripts/wait-and-start.sh b/exporter/scripts/wait-and-start.sh index c049353672..7a96d4dd06 100755 --- a/exporter/scripts/wait-and-start.sh +++ b/exporter/scripts/wait-and-start.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +export PENPOT_TENANT=dev + bb -i '(babashka.wait/wait-for-port "localhost" 9630)'; bb -i '(babashka.wait/wait-for-path "target/app.js")'; sleep 2; diff --git a/frontend/src/app/config.cljs b/frontend/src/app/config.cljs index 3966cfae85..495ad20cba 100644 --- a/frontend/src/app/config.cljs +++ b/frontend/src/app/config.cljs @@ -6,23 +6,25 @@ (ns app.config (:require + [app.common.data.macros :as dm] [app.common.flags :as flags] - [app.common.spec :as us] [app.common.uri :as u] [app.common.version :as v] [app.util.avatars :as avatars] [app.util.dom :as dom] [app.util.globals :refer [global location]] [app.util.object :as obj] - [clojure.spec.alpha :as s] [cuerdas.core :as str])) (set! *assert* js/goog.DEBUG) ;; --- Auxiliar Functions -(s/def ::platform #{:windows :linux :macos :other}) -(s/def ::browser #{:chrome :firefox :safari :edge :other}) +(def valid-browsers + #{:chrome :firefox :safari :edge :other}) + +(def valid-platforms + #{:windows :linux :macos :other}) (defn- parse-browser [] @@ -114,11 +116,11 @@ ;; --- Helper Functions (defn ^boolean check-browser? [candidate] - (us/verify! ::browser candidate) + (dm/assert! (contains? valid-browsers candidate)) (= candidate @browser)) (defn ^boolean check-platform? [candidate] - (us/verify! ::platform candidate) + (dm/assert! (contains? valid-platforms candidate)) (= candidate @platform)) (defn resolve-profile-photo-url diff --git a/frontend/src/app/main/data/comments.cljs b/frontend/src/app/main/data/comments.cljs index ae5aa4fc0b..e85e04f3ac 100644 --- a/frontend/src/app/main/data/comments.cljs +++ b/frontend/src/app/main/data/comments.cljs @@ -7,70 +7,55 @@ (ns app.main.data.comments (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.geom.point :as gpt] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.types.shape-tree :as ctst] [app.common.uuid :as uuid] [app.main.data.workspace.state-helpers :as wsh] [app.main.repo :as rp] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) -(s/def ::content ::us/string) -(s/def ::count-comments ::us/integer) -(s/def ::count-unread-comments ::us/integer) -(s/def ::created-at ::us/inst) -(s/def ::file-id ::us/uuid) -(s/def ::file-name ::us/string) -(s/def ::modified-at ::us/inst) -(s/def ::owner-id ::us/uuid) -(s/def ::page-id ::us/uuid) -(s/def ::page-name ::us/string) -(s/def ::participants (s/every ::us/uuid :kind set?)) -(s/def ::position ::gpt/point) -(s/def ::project-id ::us/uuid) -(s/def ::seqn ::us/integer) -(s/def ::thread-id ::us/uuid) +(def schema:comment-thread + [:map {:title "CommentThread"} + [:id ::sm/uuid] + [:page-id ::sm/uuid] + [:file-id ::sm/uuid] + [:project-id ::sm/uuid] + [:owner-id ::sm/uuid] + [:page-name :string] + [:file-name :string] + [:seqn :int] + [:content :string] + [:participants ::sm/set-of-uuid] + [:created-at ::sm/inst] + [:modified-at ::sm/inst] + [:position ::gpt/point] + [:count-unread-comments {:optional true} :int] + [:count-comments {:optional true} :int]]) -(s/def ::comment-thread - (s/keys :req-un [::us/id - ::page-id - ::file-id - ::project-id - ::page-name - ::file-name - ::seqn - ::content - ::participants - ::created-at - ::modified-at - ::owner-id - ::position] - :opt-un [::count-unread-comments - ::count-comments])) +(def schema:comment + [:map {:title "CommentThread"} + [:id ::sm/uuid] + [:thread-id ::sm/uuid] + [:owner-id ::sm/uuid] + [:created-at ::sm/inst] + [:modified-at ::sm/inst] + [:content :string]]) -(s/def ::comment - (s/keys :req-un [::us/id - ::thread-id - ::owner-id - ::created-at - ::modified-at - ::content])) +(def comment-thread? + (sm/pred-fn schema:comment-thread)) + +(def comment? + (sm/pred-fn schema:comment)) (declare create-draft-thread) (declare retrieve-comment-threads) (declare refresh-comment-thread) -(s/def ::create-thread-on-workspace-params - (s/keys :req-un [::page-id ::file-id ::position ::content])) - -(s/def ::create-thread-on-viewer-params - (s/keys :req-un [::page-id ::file-id ::position ::content ::frame-id])) - (defn created-thread-on-workspace [{:keys [id comment page-id] :as thread}] - (ptk/reify ::created-thread-on-workspace ptk/UpdateEvent (update [_ state] @@ -82,10 +67,17 @@ (update :workspace-drawing dissoc :comment) (update-in [:comments id] assoc (:id comment) comment))))) + +(def schema:create-thread-on-workspace + [:map + [:page-id ::sm/uuid] + [:file-id ::sm/uuid] + [:position ::gpt/point] + [:content :string]]) + (defn create-thread-on-workspace [params] - (us/assert ::create-thread-on-workspace-params params) - + (dm/assert! (sm/valid? schema:create-thread-on-workspace params)) (ptk/reify ::create-thread-on-workspace ptk/WatchEvent (watch [_ state _] @@ -115,9 +107,17 @@ (update :workspace-drawing dissoc :comment) (update-in [:comments id] assoc (:id comment) comment))))) +(def schema:create-thread-on-viewer + [:map + [:page-id ::sm/uuid] + [:file-id ::sm/uuid] + [:frame-id ::sm/uuid] + [:position ::gpt/point] + [:content :string]]) + (defn create-thread-on-viewer [params] - (us/assert! ::create-thread-on-viewer-params params) + (dm/assert! (sm/valid? schema:create-thread-on-viewer params)) (ptk/reify ::create-thread-on-viewer ptk/WatchEvent (watch [_ state _] @@ -135,7 +135,7 @@ (defn update-comment-thread-status [{:keys [id] :as thread}] - (us/assert ::comment-thread thread) + (dm/assert! (comment-thread? thread)) (ptk/reify ::update-comment-thread-status ptk/WatchEvent (watch [_ state _] @@ -147,7 +147,7 @@ (defn update-comment-thread [{:keys [id is-resolved] :as thread}] - (us/assert ::comment-thread thread) + (dm/assert! (comment-thread? thread)) (ptk/reify ::update-comment-thread IDeref (-deref [_] {:is-resolved is-resolved}) @@ -169,8 +169,9 @@ (defn add-comment [thread content] - (us/assert ::comment-thread thread) - (us/assert ::us/string content) + (dm/assert! (comment-thread? thread)) + (dm/assert! (string? content)) + (letfn [(created [comment state] (update-in state [:comments (:id thread)] assoc (:id comment) comment))] (ptk/reify ::create-comment @@ -189,7 +190,7 @@ (defn update-comment [{:keys [id content thread-id] :as comment}] - (us/assert ::comment comment) + (dm/assert! (comment? comment)) (ptk/reify ::update-comment ptk/UpdateEvent (update [_ state] @@ -204,7 +205,7 @@ (defn delete-comment-thread-on-workspace [{:keys [id] :as thread}] - (us/assert ::comment-thread thread) + (dm/assert! (comment-thread? thread)) (ptk/reify ::delete-comment-thread-on-workspace ptk/UpdateEvent (update [_ state] @@ -222,7 +223,7 @@ (defn delete-comment-thread-on-viewer [{:keys [id] :as thread}] - (us/assert ::comment-thread thread) + (dm/assert! (comment-thread? thread)) (ptk/reify ::delete-comment-thread-on-viewer ptk/UpdateEvent (update [_ state] @@ -241,7 +242,7 @@ (defn delete-comment [{:keys [id thread-id] :as comment}] - (us/assert ::comment comment) + (dm/assert! (comment? comment)) (ptk/reify ::delete-comment ptk/UpdateEvent (update [_ state] @@ -256,7 +257,7 @@ (defn refresh-comment-thread [{:keys [id file-id] :as thread}] - (us/assert ::comment-thread thread) + (dm/assert! (comment-thread? thread)) (letfn [(fetched [thread state] (assoc-in state [:comment-threads id] thread))] (ptk/reify ::refresh-comment-thread @@ -269,7 +270,7 @@ (defn retrieve-comment-threads [file-id] - (us/assert ::us/uuid file-id) + (dm/assert! (uuid? file-id)) (letfn [(set-comment-threds [state comment-thread] (let [path [:workspace-data :pages-index (:page-id comment-thread) :options :comment-threads-position (:id comment-thread)] thread-position (get-in state path)] @@ -296,7 +297,7 @@ (defn retrieve-comments [thread-id] - (us/assert ::us/uuid thread-id) + (dm/assert! (uuid? thread-id)) (letfn [(fetched [comments state] (update state :comments assoc thread-id (d/index-by :id comments)))] (ptk/reify ::retrieve-comments @@ -310,7 +311,7 @@ (defn retrieve-unread-comment-threads "A event used mainly in dashboard for retrieve all unread threads of a team." [team-id] - (us/assert ::us/uuid team-id) + (dm/assert! (uuid? team-id)) (ptk/reify ::retrieve-unread-comment-threads ptk/WatchEvent (watch [_ _ _] @@ -326,7 +327,7 @@ (defn open-thread [{:keys [id] :as thread}] - (us/assert ::comment-thread thread) + (dm/assert! (comment-thread? thread)) (ptk/reify ::open-comment-thread ptk/UpdateEvent (update [_ state] @@ -367,12 +368,15 @@ (update [_ state] (update state :comments-local merge params)))) -(s/def ::create-draft-params - (s/keys :req-un [::page-id ::file-id ::position])) +(def schema:create-draft + [:map + [:page-id ::sm/uuid] + [:file-id ::sm/uuid] + [:position ::gpt/point]]) (defn create-draft [params] - (us/assert ::create-draft-params params) + (dm/assert! (sm/valid? schema:create-draft params)) (ptk/reify ::create-draft ptk/UpdateEvent (update [_ state] @@ -441,7 +445,7 @@ (update-comment-thread-frame thread uuid/zero)) ([thread frame-id] - (us/assert ::comment-thread thread) + (dm/assert! (comment-thread? thread)) (ptk/reify ::update-comment-thread-frame ptk/UpdateEvent (update [_ state] @@ -458,8 +462,7 @@ (defn detach-comment-thread "Detach comment threads that are inside a frame when that frame is deleted" [ids] - (us/assert! ::us/coll-of-uuid ids) - + (dm/assert! (sm/coll-of-uuid? ids)) (ptk/reify ::detach-comment-thread ptk/WatchEvent (watch [_ state _] diff --git a/frontend/src/app/main/data/dashboard.cljs b/frontend/src/app/main/data/dashboard.cljs index 98420e033b..4e3c3e3774 100644 --- a/frontend/src/app/main/data/dashboard.cljs +++ b/frontend/src/app/main/data/dashboard.cljs @@ -7,8 +7,10 @@ (ns app.main.data.dashboard (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.pages :as cp] - [app.common.spec :as us] + [app.common.schema :as sm] + [app.common.uri :as u] [app.common.uuid :as uuid] [app.config :as cf] [app.main.data.events :as ev] @@ -23,41 +25,8 @@ [app.util.timers :as tm] [app.util.webapi :as wapi] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) -;; --- Specs - -(s/def ::id ::us/uuid) -(s/def ::name string?) -(s/def ::team-id ::us/uuid) -(s/def ::profile-id ::us/uuid) -(s/def ::project-id ::us/uuid) -(s/def ::created-at ::us/inst) -(s/def ::modified-at ::us/inst) -(s/def ::is-pinned ::us/boolean) - -(s/def ::team - (s/keys :req-un [::id - ::name - ::created-at - ::modified-at])) - -(s/def ::project - (s/keys :req-un [::id - ::name - ::team-id - ::created-at - ::modified-at - ::is-pinned])) - -(s/def ::file - (s/keys :req-un [::id - ::name - ::project-id] - :opt-un [::created-at - ::modified-at])) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Initialization ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -68,7 +37,7 @@ (defn initialize [{:keys [id] :as params}] - (us/assert! ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::initialize ptk/UpdateEvent (update [_ state] @@ -199,13 +168,13 @@ (update [_ state] (assoc state :dashboard-search-result result)))) -(s/def ::search-term (s/nilable ::us/string)) -(s/def ::search - (s/keys :req-un [::search-term ])) +(def schema:search-params + [:map {:closed true} + [:search-term [:maybe :string]]]) (defn search [params] - (us/assert! ::search params) + (dm/assert! schema:search-params params) (ptk/reify ::search ptk/UpdateEvent (update [_ state] @@ -240,7 +209,7 @@ (defn fetch-files [{:keys [project-id] :as params}] - (us/assert! ::us/uuid project-id) + (dm/assert! (uuid? project-id)) (ptk/reify ::fetch-files ptk/WatchEvent (watch [_ _ _] @@ -351,7 +320,6 @@ (defn toggle-file-select [{:keys [id project-id] :as file}] - (us/assert! ::file file) (ptk/reify ::toggle-file-select ptk/UpdateEvent (update [_ state] @@ -381,7 +349,7 @@ (defn create-team [{:keys [name] :as params}] - (us/assert! ::us/string name) + (dm/assert! (string? name)) (ptk/reify ::create-team ptk/WatchEvent (watch [_ _ _] @@ -397,7 +365,6 @@ (defn create-team-with-invitations [{:keys [name emails role] :as params}] - (us/assert! ::us/string name) (ptk/reify ::create-team-with-invitations ptk/WatchEvent (watch [_ _ _] @@ -416,7 +383,6 @@ (defn update-team [{:keys [id name] :as params}] - (us/assert! ::team params) (ptk/reify ::update-team ptk/UpdateEvent (update [_ state] @@ -429,7 +395,9 @@ (defn update-team-photo [file] - (us/assert! ::di/blob file) + (dm/assert! + "expected a valid blob for `file` param" + (di/blob? file)) (ptk/reify ::update-team-photo ptk/WatchEvent (watch [_ state _] @@ -450,8 +418,8 @@ (defn update-team-member-role [{:keys [role member-id] :as params}] - (us/assert! ::us/uuid member-id) - (us/assert! ::us/keyword role) + (dm/assert! (uuid? member-id)) + (dm/assert! (keyword? role)) ; FIXME: validate proper role? (ptk/reify ::update-team-member-role ptk/WatchEvent (watch [_ state _] @@ -464,7 +432,7 @@ (defn delete-team-member [{:keys [member-id] :as params}] - (us/assert! ::us/uuid member-id) + (dm/assert! (uuid? member-id)) (ptk/reify ::delete-team-member ptk/WatchEvent (watch [_ state _] @@ -477,9 +445,9 @@ (defn leave-team [{:keys [reassign-to] :as params}] - (us/assert! - :spec (s/nilable ::us/uuid) - :val reassign-to) + (dm/assert! (or (nil? reassign-to) + (uuid? reassign-to))) + (ptk/reify ::leave-team ptk/WatchEvent (watch [_ state _] @@ -496,9 +464,10 @@ (defn invite-team-members [{:keys [emails role team-id resend?] :as params}] - (us/assert! ::us/set-of-valid-emails emails) - (us/assert! ::us/keyword role) - (us/assert! ::us/uuid team-id) + (dm/assert! (keyword? role)) + (dm/assert! (uuid? team-id)) + (dm/assert! (sm/set-of-emails? emails)) + (ptk/reify ::invite-team-members IDeref (-deref [_] {:role role :team-id team-id :resend? resend?}) @@ -516,14 +485,13 @@ (defn copy-invitation-link [{:keys [email team-id] :as params}] - (us/assert! ::us/email email) - (us/assert! ::us/uuid team-id) + (dm/assert! (sm/email? email)) + (dm/assert! (uuid? team-id)) (ptk/reify ::copy-invitation-link IDeref (-deref [_] {:email email :team-id team-id}) - ptk/WatchEvent (watch [_ state _] (let [{:keys [on-success on-error] @@ -545,9 +513,10 @@ (defn update-team-invitation-role [{:keys [email team-id role] :as params}] - (us/assert! ::us/email email) - (us/assert! ::us/uuid team-id) - (us/assert! ::us/keyword role) + (dm/assert! (sm/email? email)) + (dm/assert! (uuid? team-id)) + (dm/assert! (keyword? role)) ;; FIXME validate role + (ptk/reify ::update-team-invitation-role IDeref (-deref [_] {:role role}) @@ -563,8 +532,8 @@ (defn delete-team-invitation [{:keys [email team-id] :as params}] - (us/assert! ::us/email email) - (us/assert! ::us/uuid team-id) + (dm/assert! (sm/email? email)) + (dm/assert! (uuid? team-id)) (ptk/reify ::delete-team-invitation ptk/WatchEvent (watch [_ _ _] @@ -577,7 +546,7 @@ (defn delete-team-webhook [{:keys [id] :as params}] - (us/assert! ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::delete-team-webhook ptk/WatchEvent (watch [_ state _] @@ -590,17 +559,17 @@ (rx/tap on-success) (rx/catch on-error)))))) -(s/def ::mtype +(def valid-mtypes #{"application/json" "application/x-www-form-urlencoded" "application/transit+json"}) (defn update-team-webhook [{:keys [id uri mtype is-active] :as params}] - (us/assert! ::us/uuid id) - (us/assert! ::us/uri uri) - (us/assert! ::mtype mtype) - (us/assert! ::us/boolean is-active) + (dm/assert! (uuid? id)) + (dm/assert! (contains? valid-mtypes mtype)) + (dm/assert! (boolean? is-active)) + (dm/assert! (u/uri? uri)) (ptk/reify ::update-team-webhook ptk/WatchEvent (watch [_ state _] @@ -615,9 +584,10 @@ (defn create-team-webhook [{:keys [uri mtype is-active] :as params}] - (us/assert! ::us/uri uri) - (us/assert! ::mtype mtype) - (us/assert! ::us/boolean is-active) + (dm/assert! (contains? valid-mtypes mtype)) + (dm/assert! (boolean? is-active)) + (dm/assert! (u/uri? uri)) + (ptk/reify ::create-team-webhook ptk/WatchEvent (watch [_ state _] @@ -636,7 +606,6 @@ (defn delete-team [{:keys [id] :as params}] - (us/assert! ::team params) (ptk/reify ::delete-team ptk/WatchEvent (watch [_ _ _] @@ -691,7 +660,7 @@ (defn duplicate-project [{:keys [id name] :as params}] - (us/assert! ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::duplicate-project ptk/WatchEvent (watch [_ _ _] @@ -708,8 +677,8 @@ (defn move-project [{:keys [id team-id] :as params}] - (us/assert! ::us/uuid id) - (us/assert! ::us/uuid team-id) + (dm/assert! (uuid? id)) + (dm/assert! (uuid? team-id)) (ptk/reify ::move-project IDeref (-deref [_] @@ -727,7 +696,6 @@ (defn toggle-project-pin [{:keys [id is-pinned] :as project}] - (us/assert! ::project project) (ptk/reify ::toggle-project-pin ptk/UpdateEvent (update [_ state] @@ -744,7 +712,6 @@ (defn rename-project [{:keys [id name] :as params}] - (us/assert! ::project params) (ptk/reify ::rename-project ptk/UpdateEvent (update [_ state] @@ -762,7 +729,6 @@ (defn delete-project [{:keys [id] :as params}] - (us/assert! ::project params) (ptk/reify ::delete-project ptk/UpdateEvent (update [_ state] @@ -784,7 +750,6 @@ (defn delete-file [{:keys [id project-id] :as params}] - (us/assert! ::file params) (ptk/reify ::delete-file ptk/UpdateEvent (update [_ state] @@ -803,7 +768,6 @@ (defn rename-file [{:keys [id name] :as params}] - (us/assert! ::file params) (ptk/reify ::rename-file IDeref (-deref [_] @@ -826,7 +790,6 @@ (defn set-file-shared [{:keys [id is-shared] :as params}] - (us/assert! ::file params) (ptk/reify ::set-file-shared IDeref (-deref [_] @@ -853,7 +816,6 @@ (defn file-created [{:keys [id project-id] :as file}] - (us/verify ::file file) (ptk/reify ::file-created IDeref (-deref [_] {:file-id id @@ -868,7 +830,7 @@ (defn create-file [{:keys [project-id] :as params}] - (us/assert! ::us/uuid project-id) + (dm/assert! (uuid? project-id)) (ptk/reify ::create-file IDeref @@ -899,8 +861,8 @@ (defn duplicate-file [{:keys [id name] :as params}] - (us/assert! ::us/uuid id) - (us/assert! ::name name) + (dm/assert! (uuid? id)) + (dm/assert! (string? name)) (ptk/reify ::duplicate-file ptk/WatchEvent (watch [_ _ _] @@ -919,8 +881,8 @@ (defn move-files [{:keys [ids project-id] :as params}] - (us/assert! ::us/set-of-uuid ids) - (us/assert! ::us/uuid project-id) + (dm/assert! ::sm/set-of-uuid ids) + (dm/assert! (uuid? project-id)) (ptk/reify ::move-files IDeref (-deref [_] @@ -947,7 +909,7 @@ ;; --- EVENT: clone-template (defn clone-template [{:keys [template-id project-id] :as params}] - (us/assert! ::us/uuid project-id) + (dm/assert! (uuid? project-id)) (ptk/reify ::clone-template IDeref (-deref [_] @@ -969,7 +931,6 @@ (defn go-to-workspace [{:keys [id project-id] :as file}] - (us/assert! ::file file) (ptk/reify ::go-to-workspace ptk/WatchEvent (watch [_ _ _] diff --git a/frontend/src/app/main/data/fonts.cljs b/frontend/src/app/main/data/fonts.cljs index 5e45a4db04..d3a499ebac 100644 --- a/frontend/src/app/main/data/fonts.cljs +++ b/frontend/src/app/main/data/fonts.cljs @@ -8,11 +8,11 @@ (:require ["opentype.js" :as ot] [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.logging :as log] [app.common.media :as cm] - [app.common.spec :as us] [app.common.uuid :as uuid] - [app.main.data.messages :as dm] + [app.main.data.messages :as msg] [app.main.fonts :as fonts] [app.main.repo :as rp] [app.main.store :as st] @@ -96,18 +96,17 @@ ;; If the useTypoMetrics is not set, Firefox will also use metrics from the hhea table. ;; On Windows, all browsers use the usWin metrics, but respect the useTypoMetrics setting and if set will use the OS/2 values. - hhea-ascender (abs (-> font .-tables .-hhea .-ascender)) - hhea-descender (abs (-> font .-tables .-hhea .-descender)) + hhea-ascender (abs (-> ^js font .-tables .-hhea .-ascender)) + hhea-descender (abs (-> ^js font .-tables .-hhea .-descender)) - win-ascent (abs (-> font .-tables .-os2 .-usWinAscent)) - win-descent (abs (-> font .-tables .-os2 .-usWinDescent)) + win-ascent (abs (-> ^js font .-tables .-os2 .-usWinAscent)) + win-descent (abs (-> ^js font .-tables .-os2 .-usWinDescent)) - os2-ascent (abs (-> font .-tables .-os2 .-sTypoAscender)) - os2-descent (abs (-> font .-tables .-os2 .-sTypoDescender)) + os2-ascent (abs (-> ^js font .-tables .-os2 .-sTypoAscender)) + os2-descent (abs (-> ^js font .-tables .-os2 .-sTypoDescender)) ;; useTypoMetrics can be read from the 7th bit - f-selection (-> (-> font .-tables .-os2 .-fsSelection) - (bit-test 7)) + f-selection (-> ^js font .-tables .-os2 .-fsSelection (bit-test 7)) height-warning? (or (not= hhea-ascender win-ascent) (not= hhea-descender win-descent) @@ -183,7 +182,7 @@ #(when (not-empty %) (st/emit! - (dm/error + (msg/error (if (> (count %) 1) (tr "errors.bad-font-plural" (str/join ", " %)) (tr "errors.bad-font" (first %))))))) @@ -246,8 +245,8 @@ (defn update-font [{:keys [id name] :as params}] - (us/assert ::us/uuid id) - (us/assert ::us/not-empty-string name) + (dm/assert! (uuid? id)) + (dm/assert! (string? name)) (ptk/reify ::update-font ptk/UpdateEvent (update [_ state] @@ -270,7 +269,7 @@ (defn delete-font "Delete all variants related to the provided `font-id`." [font-id] - (us/assert ::us/uuid font-id) + (dm/assert! (uuid? font-id)) (ptk/reify ::delete-font ptk/UpdateEvent (update [_ state] @@ -286,7 +285,7 @@ (defn delete-font-variant [id] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::delete-font-variants ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/messages.cljs b/frontend/src/app/main/data/messages.cljs index ed06838e89..bc1c7c7ad9 100644 --- a/frontend/src/app/main/data/messages.cljs +++ b/frontend/src/app/main/data/messages.cljs @@ -7,9 +7,9 @@ (ns app.main.data.messages (:require [app.common.data :as d] - [app.common.spec :as us] + [app.common.data.macros :as dm] + [app.common.schema :as sm] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) (declare hide) @@ -18,32 +18,34 @@ (def default-animation-timeout 600) (def default-timeout 5000) -(s/def ::type #{:success :error :info :warning}) -(s/def ::position #{:fixed :floating :inline}) -(s/def ::status #{:visible :hide}) -(s/def ::controls #{:none :close :inline-actions :bottom-actions}) +(def schema:message + [:map {:title "Message"} + [:type [::sm/one-of #{:success :error :info :warning}]] + [:status {:optional true} + [::sm/one-of #{:visible :hide}]] + [:position {:optional true} + [::sm/one-of #{:fixed :floating :inline}]] + [:controls {:optional true} + [::sm/one-of #{:none :close :inline-actions :bottom-actions}]] + [:tag {:optional true} + [:or :string :keyword]] + [:timeout {:optional true} + [:maybe :int]] + [:actions {:optional true} + [:vector + [:map + [:label :string] + [:callback ::sm/fn]]]]]) -(s/def ::tag (s/or :str ::us/string :kw ::us/keyword)) -(s/def ::label ::us/string) -(s/def ::callback fn?) -(s/def ::action (s/keys :req-un [::label ::callback])) -(s/def ::actions (s/every ::action :kind vector?)) -(s/def ::timeout (s/nilable ::us/integer)) -(s/def ::content ::us/string) - -(s/def ::message - (s/keys :req-un [::type] - :opt-un [::status - ::position - ::controls - ::tag - ::timeout - ::actions - ::status])) +(def message? + (sm/pred-fn schema:message)) (defn show [data] - (us/verify ::message data) + (dm/assert! + "expected valid message map" + (message? data)) + (ptk/reify ::show ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/shortcuts.cljs b/frontend/src/app/main/data/shortcuts.cljs index 2b99bbeb84..f5cef666bf 100644 --- a/frontend/src/app/main/data/shortcuts.cljs +++ b/frontend/src/app/main/data/shortcuts.cljs @@ -8,10 +8,10 @@ (:refer-clojure :exclude [meta reset!]) (:require ["./shortcuts_impl.js$default" :as mousetrap] + [app.common.data.macros :as dm] [app.common.logging :as log] - [app.common.spec :as us] + [app.common.schema :as sm] [app.config :as cf] - [cljs.spec.alpha :as s] [cuerdas.core :as str] [potok.core :as ptk])) @@ -127,21 +127,16 @@ ;; --- EVENT: push -(s/def ::tooltip ::us/string) -(s/def ::fn fn?) +(def schema:shortcuts + [:map-of + :keyword + [:map + [:command [:or :string [:vector :any]]] + [:fn {:optional true} fn?] + [:tooltip {:optional true} :string]]]) -(s/def ::command - (s/or :str ::us/string - :vec vector?)) - -(s/def ::shortcut - (s/keys :req-un [::command] - :opt-un [::fn - ::tooltip])) - -(s/def ::shortcuts - (s/map-of ::us/keyword - ::shortcut)) +(def shortcuts? + (sm/pred-fn schema:shortcuts)) (defn- wrap-cb [key cb] @@ -174,8 +169,9 @@ (defn push-shortcuts [key shortcuts] - (us/assert ::us/keyword key) - (us/assert ::shortcuts shortcuts) + (dm/assert! (keyword? key)) + (dm/assert! (shortcuts? shortcuts)) + (ptk/reify ::push-shortcuts ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/users.cljs b/frontend/src/app/main/data/users.cljs index 0f86b3c634..9c3d4ce9a9 100644 --- a/frontend/src/app/main/data/users.cljs +++ b/frontend/src/app/main/data/users.cljs @@ -7,7 +7,9 @@ (ns app.main.data.users (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.exceptions :as ex] + [app.common.schema :as sm] [app.common.spec :as us] [app.common.uuid :as uuid] [app.config :as cf] @@ -19,36 +21,28 @@ [app.util.router :as rt] [app.util.storage :refer [storage]] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) -;; --- COMMON SPECS +;; --- SCHEMAS + +(def schema:profile + [:map {:title "Profile"} + [:id ::sm/uuid] + [:created-at {:optional true} :any] + [:fullname {:optional true} :string] + [:email {:optional true} :string] + [:lang {:optional true} :string] + [:theme {:optional true} :string]]) + +(def profile? + (sm/pred-fn schema:profile)) + +;; --- HELPERS (defn is-authenticated? [{:keys [id]}] (and (uuid? id) (not= id uuid/zero))) -(s/def ::id ::us/uuid) -(s/def ::fullname ::us/string) -(s/def ::email ::us/email) -(s/def ::password ::us/string) -(s/def ::lang (s/nilable ::us/string)) -(s/def ::theme (s/nilable ::us/string)) -(s/def ::created-at ::us/inst) -(s/def ::password-1 ::us/string) -(s/def ::password-2 ::us/string) -(s/def ::password-old (s/nilable ::us/string)) - -(s/def ::profile - (s/keys :req-un [::id] - :opt-un [::created-at - ::fullname - ::email - ::lang - ::theme])) - -;; --- HELPERS - (defn get-current-team-id [profile] (let [team-id (::current-team-id @storage)] @@ -98,7 +92,6 @@ (defn profile-fetched [{:keys [id] :as profile}] - (us/verify ::profile profile) (ptk/reify ::profile-fetched IDeref (-deref [_] profile) @@ -174,16 +167,10 @@ (get-redirect-event)) (rx/observe-on :async))))))) -(s/def ::invitation-token ::us/not-empty-string) -(s/def ::login-params - (s/keys :req-un [::email ::password] - :opt-un [::invitation-token])) - (declare login-from-register) (defn login [{:keys [email password invitation-token] :as data}] - (us/verify ::login-params data) (ptk/reify ::login ptk/WatchEvent (watch [_ _ stream] @@ -299,7 +286,7 @@ (defn update-profile [data] - (us/assert ::profile data) + (dm/assert! (profile? data)) (ptk/reify ::update-profile ptk/WatchEvent (watch [_ _ stream] @@ -307,7 +294,6 @@ on-success (:on-success mdata identity) on-error (:on-error mdata rx/throw)] (->> (rp/cmd! :update-profile (dissoc data :props)) - (rx/catch on-error) (rx/mapcat (fn [_] (rx/merge @@ -316,14 +302,16 @@ (rx/take 1) (rx/tap on-success) (rx/ignore)) - (rx/of (profile-fetched data)))))))))) + (rx/of (profile-fetched data))))) + (rx/catch on-error)))))) + ;; --- Request Email Change (defn request-email-change [{:keys [email] :as data}] - (us/assert ::us/email email) + (dm/assert! ::us/email email) (ptk/reify ::request-email-change ptk/WatchEvent (watch [_ _ _] @@ -345,14 +333,15 @@ ;; --- Update Password (Form) -(s/def ::update-password - (s/keys :req-un [::password-1 - ::password-2 - ::password-old])) +(def schema:update-password + [:map {:closed true} + [:password-1 :string] + [:password-2 :string] + [:password-old :string]]) (defn update-password [data] - (us/verify ::update-password data) + (dm/assert! (sm/valid? schema:update-password data)) (ptk/reify ::update-password ptk/WatchEvent (watch [_ _ _] @@ -412,7 +401,10 @@ (defn update-photo [file] - (us/verify ::di/blob file) + (dm/assert! + "expected a valid blob for `file` param" + (di/blob? file)) + (ptk/reify ::update-photo ptk/WatchEvent (watch [_ _ _] @@ -434,8 +426,8 @@ (rx/catch on-error)))))) (defn fetch-users - [{:keys [team-id] :as params}] - (us/assert ::us/uuid team-id) + [{:keys [team-id]}] + (dm/assert! (uuid? team-id)) (letfn [(fetched [users state] (->> users (d/index-by :id) @@ -447,8 +439,8 @@ (rx/map #(partial fetched %))))))) (defn fetch-file-comments-users - [{:keys [team-id] :as params}] - (us/assert ::us/uuid team-id) + [{:keys [team-id]}] + (dm/assert! (uuid? team-id)) (letfn [(fetched [users state] (->> users (d/index-by :id) @@ -479,12 +471,14 @@ ;; --- EVENT: request-profile-recovery -(s/def ::request-profile-recovery - (s/keys :req-un [::email])) +(def schema:request-profile-recovery + [:map {:closed true} + [:email ::sm/email]]) +;; FIXME: check if we can use schema for proper filter (defn request-profile-recovery [data] - (us/verify ::request-profile-recovery data) + (dm/assert! (sm/valid? schema:request-profile-recovery data)) (ptk/reify ::request-profile-recovery ptk/WatchEvent (watch [_ _ _] @@ -498,13 +492,14 @@ ;; --- EVENT: recover-profile (Password) -(s/def ::token string?) -(s/def ::recover-profile - (s/keys :req-un [::password ::token])) +(def schema:recover-profile + [:map {:closed true} + [:password :string] + [:token :string]]) (defn recover-profile [data] - (us/verify ::recover-profile data) + (dm/assert! (sm/valid? ::recover-profile data)) (ptk/reify ::recover-profile ptk/WatchEvent (watch [_ _ _] diff --git a/frontend/src/app/main/data/viewer.cljs b/frontend/src/app/main/data/viewer.cljs index 264533655f..76f5ba42e4 100644 --- a/frontend/src/app/main/data/viewer.cljs +++ b/frontend/src/app/main/data/viewer.cljs @@ -11,7 +11,7 @@ [app.common.files.features :as ffeat] [app.common.geom.point :as gpt] [app.common.pages.helpers :as cph] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.transit :as t] [app.common.types.shape-tree :as ctt] [app.common.types.shape.interactions :as ctsi] @@ -22,12 +22,8 @@ [app.util.globals :as ug] [app.util.router :as rt] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) -(s/def ::nilable-boolean (s/nilable ::us/boolean)) -(s/def ::nilable-animation (s/nilable ::ctsi/animation)) - ;; --- Local State Initialization (def ^:private @@ -50,19 +46,15 @@ (declare zoom-to-fill) (declare zoom-to-fit) -(s/def ::file-id ::us/uuid) -(s/def ::index ::us/integer) -(s/def ::page-id (s/nilable ::us/uuid)) -(s/def ::share-id (s/nilable ::us/uuid)) -(s/def ::section ::us/string) - -(s/def ::initialize-params - (s/keys :req-un [::file-id] - :opt-un [::share-id ::page-id])) +(def schema:initialize + [:map + [:file-id ::sm/uuid] + [:share-id {:optional true} [:maybe ::sm/uuid]] + [:page-id {:optional true} ::sm/uuid]]) (defn initialize [{:keys [file-id share-id] :as params}] - (us/assert ::initialize-params params) + (dm/assert! (sm/valid? schema:initialize params)) (ptk/reify ::initialize ptk/UpdateEvent (update [_ state] @@ -77,7 +69,7 @@ ptk/WatchEvent (watch [_ _ _] - (rx/of (fetch-bundle params) + (rx/of (fetch-bundle (d/without-nils params)) (fetch-comment-threads params))) ptk/EffectEvent @@ -99,14 +91,15 @@ ;; --- Data Fetching -(s/def ::fetch-bundle - (s/keys :req-un [::page-id ::file-id] - :opt-un [::share-id])) +(def schema:fetch-bundle + [:map + [:page-id ::sm/uuid] + [:file-id ::sm/uuid] + [:share-id {:optional true} ::sm/uuid]]) (defn- fetch-bundle [{:keys [file-id share-id] :as params}] - (us/assert! ::fetch-bundle params) - + (dm/assert! (sm/valid? schema:fetch-bundle params)) (ptk/reify ::fetch-bundle ptk/WatchEvent (watch [_ state _] @@ -227,7 +220,7 @@ (defn fetch-comments [{:keys [thread-id]}] - (us/assert ::us/uuid thread-id) + (dm/assert! (uuid thread-id)) (letfn [(fetched [comments state] (update state :comments assoc thread-id (d/index-by :id comments)))] (ptk/reify ::retrieve-comments @@ -391,11 +384,14 @@ (dcm/close-thread) (rt/nav :viewer pparams (assoc qparams :index 0))))))) -(s/def ::interactions-mode #{:hide :show :show-on-click}) +(def valid-interaction-modes + #{:hide :show :show-on-click}) (defn set-interactions-mode [mode] - (us/verify ::interactions-mode mode) + (dm/assert! + "expected valid interaction mode" + (contains? valid-interaction-modes mode)) (ptk/reify ::set-interactions-mode ptk/UpdateEvent (update [_ state] @@ -471,8 +467,9 @@ (go-to-frame frame-id nil)) ([frame-id animation] - (us/assert! ::us/uuid frame-id) - (us/assert! ::nilable-animation animation) + (dm/assert! (uuid? frame-id)) + (dm/assert! (or (nil? animation) + (ctsi/animation? animation))) (ptk/reify ::go-to-frame ptk/UpdateEvent @@ -563,12 +560,14 @@ (defn open-overlay [frame-id position close-click-outside background-overlay animation] - (us/assert! ::us/uuid frame-id) - (us/assert! ::gpt/point position) - (us/assert! ::nilable-boolean close-click-outside) - (us/assert! ::nilable-boolean background-overlay) - (us/assert! ::nilable-animation animation) - + (dm/assert! (uuid? frame-id)) + (dm/assert! (gpt/point? position)) + (dm/assert! (or (nil? close-click-outside) + (boolean? close-click-outside))) + (dm/assert! (or (nil? background-overlay) + (boolean? background-overlay))) + (dm/assert! (or (nil? animation) + (ctsi/animation? animation))) (ptk/reify ::open-overlay ptk/UpdateEvent (update [_ state] @@ -590,11 +589,14 @@ (defn toggle-overlay [frame-id position close-click-outside background-overlay animation] - (us/assert! ::us/uuid frame-id) - (us/assert! ::gpt/point position) - (us/assert! ::nilable-boolean close-click-outside) - (us/assert! ::nilable-boolean background-overlay) - (us/assert! ::nilable-animation animation) + (dm/assert! (uuid? frame-id)) + (dm/assert! (gpt/point? position)) + (dm/assert! (or (nil? close-click-outside) + (boolean? close-click-outside))) + (dm/assert! (or (nil? background-overlay) + (boolean? background-overlay))) + (dm/assert! (or (nil? animation) + (ctsi/animation? animation))) (ptk/reify ::toggle-overlay ptk/UpdateEvent @@ -619,8 +621,9 @@ (defn close-overlay ([frame-id] (close-overlay frame-id nil)) ([frame-id animation] - (us/assert! ::us/uuid frame-id) - (us/assert! ::nilable-animation animation) + (dm/assert! (uuid? frame-id)) + (dm/assert! (or (nil? animation) + (ctsi/animation? animation))) (ptk/reify ::close-overlay ptk/UpdateEvent diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index e0722c1890..1f95b2d0ce 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -18,7 +18,6 @@ [app.common.pages :as cp] [app.common.pages.changes-builder :as pcb] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.text :as txt] [app.common.transit :as t] [app.common.types.components-list :as ctkl] @@ -84,10 +83,6 @@ (def default-workspace-local {:zoom 1}) -(s/def ::layout-name (s/nilable ::us/keyword)) -(s/def ::coll-of-uuids (s/coll-of ::us/uuid)) - - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Workspace Initialization ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -101,7 +96,11 @@ (defn initialize-layout [lname] - (us/assert! ::layout-name lname) + ;; (dm/assert! + ;; "expected valid layout" + ;; (and (keyword? lname) + ;; (contains? layout/presets lname))) + (ptk/reify ::initialize-layout ptk/UpdateEvent (update [_ state] @@ -298,8 +297,8 @@ (defn initialize-file [project-id file-id] - (us/assert! ::us/uuid project-id) - (us/assert! ::us/uuid file-id) + (dm/assert! (uuid? project-id)) + (dm/assert! (uuid? file-id)) (ptk/reify ::initialize-file ptk/UpdateEvent @@ -350,7 +349,7 @@ (defn initialize-page [page-id] - (us/assert! ::us/uuid page-id) + (dm/assert! (uuid? page-id)) (ptk/reify ::initialize-page ptk/UpdateEvent (update [_ state] @@ -384,7 +383,7 @@ (defn finalize-page [page-id] - (us/assert! ::us/uuid page-id) + (dm/assert! (uuid? page-id)) (ptk/reify ::finalize-page ptk/UpdateEvent (update [_ state] @@ -465,8 +464,8 @@ (defn rename-page [id name] - (us/verify ::us/uuid id) - (us/verify string? name) + (dm/assert! (uuid? id)) + (dm/assert! (string? name)) (ptk/reify ::rename-page ptk/WatchEvent (watch [it state _] @@ -567,8 +566,8 @@ (defn update-shape [id attrs] - (us/verify ::us/uuid id) - (us/verify ::cts/shape-attrs attrs) + (dm/assert! (uuid? id)) + (dm/assert! (cts/shape-attrs? attrs)) (ptk/reify ::update-shape ptk/WatchEvent (watch [_ _ _] @@ -577,7 +576,7 @@ (defn start-rename-shape [id] - (us/verify ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::start-rename-shape ptk/UpdateEvent (update [_ state] @@ -594,7 +593,7 @@ (defn update-selected-shapes [attrs] - (us/verify ::cts/shape-attrs attrs) + (dm/assert! (cts/shape-attrs? attrs)) (ptk/reify ::update-selected-shapes ptk/WatchEvent (watch [_ state _] @@ -621,11 +620,14 @@ ;; --- Shape Vertical Ordering -(s/def ::loc #{:up :down :bottom :top}) +(def valid-vertical-locations + #{:up :down :bottom :top}) (defn vertical-order-selected [loc] - (us/verify ::loc loc) + (dm/assert! + "expected valid location" + (contains? valid-vertical-locations loc)) (ptk/reify ::vertical-order-selected ptk/WatchEvent (watch [it state _] @@ -746,9 +748,9 @@ (defn relocate-shapes [ids parent-id to-index & [ignore-parents?]] - (us/verify (s/coll-of ::us/uuid) ids) - (us/verify ::us/uuid parent-id) - (us/verify number? to-index) + (dm/assert! (every? uuid? ids)) + (dm/assert! (uuid? parent-id)) + (dm/assert! (number? to-index)) (ptk/reify ::relocate-shapes ptk/WatchEvent @@ -935,7 +937,10 @@ (defn align-objects [axis] - (us/verify ::gal/align-axis axis) + (dm/assert! + "expected valid align axis value" + (contains? gal/valid-align-axis axis)) + (ptk/reify ::align-objects ptk/WatchEvent (watch [_ state _] @@ -976,7 +981,10 @@ (defn distribute-objects [axis] - (us/verify ::gal/dist-axis axis) + (dm/assert! + "expected valid distribute axis value" + (contains? gal/valid-dist-axis axis)) + (ptk/reify ::distribute-objects ptk/WatchEvent (watch [_ state _] @@ -1055,7 +1063,7 @@ qparams {:page-id page-id}] (rx/of (rt/nav' :workspace pparams qparams)))))) ([page-id] - (us/assert! ::us/uuid page-id) + (dm/assert! (uuid? page-id)) (ptk/reify ::go-to-page-2 ptk/WatchEvent (watch [_ state _] @@ -1067,7 +1075,6 @@ (defn go-to-layout [layout] - (us/verify ::layout/flag layout) (ptk/reify ::go-to-layout IDeref (-deref [_] {:layout layout}) @@ -1120,8 +1127,8 @@ :typographies #{}})))) (defn go-to-main-instance [page-id shape-id] - (us/verify ::us/uuid page-id) - (us/verify ::us/uuid shape-id) + (dm/assert! (uuid? page-id)) + (dm/assert! (uuid? shape-id)) (ptk/reify ::go-to-main-instance ptk/WatchEvent (watch [_ state stream] @@ -1243,12 +1250,9 @@ ;; Context Menu ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::point gpt/point?) - - (defn show-context-menu [{:keys [position] :as params}] - (us/verify ::point position) + (dm/assert! (gpt/point? position)) (ptk/reify ::show-context-menu ptk/UpdateEvent (update [_ state] @@ -1282,7 +1286,7 @@ (defn show-page-item-context-menu [{:keys [position page] :as params}] - (us/verify ::point position) + (dm/assert! (gpt/point? position)) (ptk/reify ::show-page-item-context-menu ptk/WatchEvent (watch [_ _ _] @@ -1729,7 +1733,7 @@ (defn paste-text [text] - (us/assert! (string? text) "expected string as first argument") + (dm/assert! (string? text)) (ptk/reify ::paste-text ptk/WatchEvent (watch [_ state _] @@ -1756,7 +1760,7 @@ ;; TODO: why not implement it in terms of upload-media-workspace? (defn- paste-svg [text] - (us/assert! (string? text) "expected string as first argument") + (dm/assert! (string? text)) (ptk/reify ::paste-svg ptk/WatchEvent (watch [_ state _] @@ -2067,8 +2071,8 @@ (defn update-component-annotation "Update the component with the given annotation" [id annotation] - (us/assert ::us/uuid id) - (us/assert ::us/string annotation) + (dm/assert! (uuid? id)) + (dm/assert! (string? annotation)) (ptk/reify ::update-component-annotation ptk/WatchEvent (watch [it state _] diff --git a/frontend/src/app/main/data/workspace/changes.cljs b/frontend/src/app/main/data/workspace/changes.cljs index d5f39e26a1..94530b4f82 100644 --- a/frontend/src/app/main/data/workspace/changes.cljs +++ b/frontend/src/app/main/data/workspace/changes.cljs @@ -7,12 +7,13 @@ (ns app.main.data.workspace.changes (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.logging :as log] [app.common.pages :as cp] + [app.common.pages.changes :as cpc] [app.common.pages.changes-builder :as pcb] - [app.common.pages.changes-spec :as pcs] [app.common.pages.helpers :as cph] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.types.shape-tree :as ctst] [app.common.uuid :as uuid] [app.main.data.workspace.state-helpers :as wsh] @@ -20,15 +21,11 @@ [app.main.store :as st] [app.main.worker :as uw] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) ;; Change this to :info :debug or :trace to debug this module (log/set-level! :warn) -(s/def ::coll-of-uuid - (s/every ::us/uuid)) - (defonce page-change? #{:add-page :mod-page :del-page :mov-page}) (defonce update-layout-attr? #{:hidden}) @@ -56,8 +53,8 @@ ([ids update-fn] (update-shapes ids update-fn nil)) ([ids update-fn {:keys [reg-objects? save-undo? stack-undo? attrs ignore-tree page-id ignore-remote?] :or {reg-objects? false save-undo? true stack-undo? false ignore-remote? false}}] - (us/assert ::coll-of-uuid ids) - (us/assert fn? update-fn) + (dm/assert! (sm/coll-of-uuid? ids)) + (dm/assert! (fn? update-fn)) (ptk/reify ::update-shapes ptk/WatchEvent @@ -75,7 +72,7 @@ changes (reduce (fn [changes id] (let [opts {:attrs attrs :ignore-geometry? (get ignore-tree id)}] - (pcb/update-shapes changes [id] update-fn opts))) + (pcb/update-shapes changes [id] update-fn (d/without-nils opts)))) (-> (pcb/empty-changes it page-id) (pcb/set-save-undo? save-undo?) (pcb/set-stack-undo? stack-undo?) @@ -204,8 +201,10 @@ [:workspace-data] [:workspace-libraries file-id :data])] (try - (us/assert ::pcs/changes redo-changes) - (us/assert ::pcs/changes undo-changes) + (dm/assert! + "expect valid vector of changes" + (and (cpc/changes? redo-changes) + (cpc/changes? undo-changes))) (update-in state path (fn [file] (-> file diff --git a/frontend/src/app/main/data/workspace/comments.cljs b/frontend/src/app/main/data/workspace/comments.cljs index 5ce52aee39..c7d9eb118f 100644 --- a/frontend/src/app/main/data/workspace/comments.cljs +++ b/frontend/src/app/main/data/workspace/comments.cljs @@ -6,10 +6,11 @@ (ns app.main.data.workspace.comments (:require + [app.common.data.macros :as dm] [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] [app.common.pages.changes-builder :as pcb] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.types.shape-tree :as ctst] [app.main.data.comments :as dcm] [app.main.data.workspace.changes :as dwc] @@ -28,7 +29,7 @@ (defn initialize-comments [file-id] - (us/assert ::us/uuid file-id) + (dm/assert! (uuid? file-id)) (ptk/reify ::initialize-comments ptk/WatchEvent (watch [_ _ stream] @@ -80,7 +81,7 @@ (defn center-to-comment-thread [{:keys [position] :as thread}] - (us/assert ::dcm/comment-thread thread) + (dm/assert! (dcm/comment-thread? thread)) (ptk/reify ::center-to-comment-thread ptk/UpdateEvent (update [_ state] @@ -96,7 +97,7 @@ (defn navigate [thread] - (us/assert ::dcm/comment-thread thread) + (dm/assert! (dcm/comment-thread? thread)) (ptk/reify ::open-comment-thread ptk/WatchEvent (watch [_ _ stream] @@ -117,7 +118,7 @@ (update-comment-thread-position thread [new-x new-y] nil)) ([thread [new-x new-y] frame-id] - (us/assert ::dcm/comment-thread thread) + (dm/assert! (dcm/comment-thread? thread)) (ptk/reify ::update-comment-thread-position ptk/WatchEvent (watch [it state _] @@ -146,7 +147,7 @@ ;; Move comment threads that are inside a frame when that frame is moved" (defmethod ptk/resolve ::move-frame-comment-threads [_ ids] - (us/assert! ::us/coll-of-uuid ids) + (dm/assert! (sm/coll-of-uuid? ids)) (ptk/reify ::move-frame-comment-threads ptk/WatchEvent (watch [_ state _] diff --git a/frontend/src/app/main/data/workspace/edition.cljs b/frontend/src/app/main/data/workspace/edition.cljs index 79d46d8160..01be4c72ec 100644 --- a/frontend/src/app/main/data/workspace/edition.cljs +++ b/frontend/src/app/main/data/workspace/edition.cljs @@ -6,7 +6,7 @@ (ns app.main.data.workspace.edition (:require - [app.common.spec :as us] + [app.common.data.macros :as dm] [app.main.data.workspace.state-helpers :as wsh] [beicon.core :as rx] [potok.core :as ptk])) @@ -17,7 +17,7 @@ (defn start-edition-mode [id] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::start-edition-mode ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/workspace/grid.cljs b/frontend/src/app/main/data/workspace/grid.cljs index 0b0a2c7ee7..b9e0427fb2 100644 --- a/frontend/src/app/main/data/workspace/grid.cljs +++ b/frontend/src/app/main/data/workspace/grid.cljs @@ -8,8 +8,8 @@ (:require [app.common.colors :as clr] [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.pages.changes-builder :as pcb] - [app.common.spec :as us] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.state-helpers :as wsh] [beicon.core :as rx] @@ -40,7 +40,7 @@ (defn add-frame-grid [frame-id] - (us/assert ::us/uuid frame-id) + (dm/assert! (uuid? frame-id)) (ptk/reify ::add-frame-grid ptk/WatchEvent (watch [_ state _] diff --git a/frontend/src/app/main/data/workspace/guides.cljs b/frontend/src/app/main/data/workspace/guides.cljs index 45a27b757e..b6e585811e 100644 --- a/frontend/src/app/main/data/workspace/guides.cljs +++ b/frontend/src/app/main/data/workspace/guides.cljs @@ -6,11 +6,11 @@ (ns app.main.data.workspace.guides (:require + [app.common.data.macros :as dm] [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] [app.common.pages.changes-builder :as pcb] - [app.common.spec :as us] - [app.common.types.page.guide :as ctpg] + [app.common.types.page :as ctp] [app.main.data.workspace.changes :as dwc] [app.main.data.workspace.state-helpers :as wsh] [beicon.core :as rx] @@ -23,7 +23,10 @@ (merge guide)))) (defn update-guides [guide] - (us/verify ::ctpg/guide guide) + (dm/assert! + "expected valid guide" + (ctp/guide? guide)) + (ptk/reify ::update-guides ptk/WatchEvent (watch [it state _] @@ -35,7 +38,10 @@ (rx/of (dwc/commit-changes changes)))))) (defn remove-guide [guide] - (us/verify ::ctpg/guide guide) + (dm/assert! + "expected valid guide" + (ctp/guide? guide)) + (ptk/reify ::remove-guide ptk/UpdateEvent (update [_ state] @@ -62,10 +68,11 @@ guides (-> (select-keys guides ids) (vals))] (rx/from (->> guides (mapv #(remove-guide %)))))))) - (defmethod ptk/resolve ::move-frame-guides [_ ids] - (us/assert! ::us/coll-of-uuid ids) + (dm/assert! + "expected a coll of uuids" + (every? uuid? ids)) (ptk/reify ::move-frame-guides ptk/WatchEvent (watch [_ state _] diff --git a/frontend/src/app/main/data/workspace/highlight.cljs b/frontend/src/app/main/data/workspace/highlight.cljs index 6e77bb8648..f9191ccebd 100644 --- a/frontend/src/app/main/data/workspace/highlight.cljs +++ b/frontend/src/app/main/data/workspace/highlight.cljs @@ -6,7 +6,7 @@ (ns app.main.data.workspace.highlight (:require - [app.common.spec :as us] + [app.common.data.macros :as dm] [clojure.set :as set] [potok.core :as ptk])) @@ -14,7 +14,7 @@ (defn highlight-shape [id] - (us/verify ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::highlight-shape ptk/UpdateEvent (update [_ state] @@ -22,7 +22,7 @@ (defn dehighlight-shape [id] - (us/verify ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::dehighlight-shape ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/workspace/interactions.cljs b/frontend/src/app/main/data/workspace/interactions.cljs index b9f080a8a6..ee38af28b7 100644 --- a/frontend/src/app/main/data/workspace/interactions.cljs +++ b/frontend/src/app/main/data/workspace/interactions.cljs @@ -7,11 +7,11 @@ (ns app.main.data.workspace.interactions (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.geom.point :as gpt] [app.common.pages :as cp] [app.common.pages.changes-builder :as pcb] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.types.page :as ctp] [app.common.types.shape-tree :as ctst] [app.common.types.shape.interactions :as ctsi] @@ -55,7 +55,7 @@ (defn remove-flow [flow-id] - (us/verify ::us/uuid flow-id) + (dm/assert! (uuid? flow-id)) (ptk/reify ::remove-flow ptk/WatchEvent (watch [it state _] @@ -67,8 +67,8 @@ (defn rename-flow [flow-id name] - (us/verify ::us/uuid flow-id) - (us/verify ::us/string name) + (dm/assert! (uuid? flow-id)) + (dm/assert! (string? name)) (ptk/reify ::rename-flow ptk/WatchEvent (watch [it state _] @@ -81,7 +81,7 @@ (defn start-rename-flow [id] - (us/verify ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::start-rename-flow ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/workspace/layout.cljs b/frontend/src/app/main/data/workspace/layout.cljs index ac2fd9cbd4..16fdb7f281 100644 --- a/frontend/src/app/main/data/workspace/layout.cljs +++ b/frontend/src/app/main/data/workspace/layout.cljs @@ -7,13 +7,12 @@ (ns app.main.data.workspace.layout "Workspace layout management events and helpers." (:require - [app.common.spec :as us] + [app.common.data.macros :as dm] [app.util.storage :refer [storage]] - [cljs.spec.alpha :as s] [clojure.set :as set] [potok.core :as ptk])) -(s/def ::flag +(def valid-flags #{:sitemap :layers :comments @@ -44,7 +43,8 @@ {:del #{:document-history :assets} :add #{:sitemap :layers}}}) -(s/def ::options-mode #{:design :prototype :inspect}) +(def valid-options-mode + #{:design :prototype :inspect}) (def default-layout #{:sitemap @@ -114,7 +114,7 @@ (defn set-options-mode [mode] - (us/assert ::options-mode mode) + (dm/assert! (contains? valid-options-mode mode)) (ptk/reify ::set-options-mode ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs index c39a0191ce..6c4e612820 100644 --- a/frontend/src/app/main/data/workspace/libraries.cljs +++ b/frontend/src/app/main/data/workspace/libraries.cljs @@ -7,26 +7,23 @@ (ns app.main.data.workspace.libraries (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.files.features :as ffeat] [app.common.geom.point :as gpt] [app.common.logging :as log] [app.common.pages :as cp] [app.common.pages.changes :as ch] [app.common.pages.changes-builder :as pcb] - [app.common.pages.changes-spec :as pcs] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.types.color :as ctc] [app.common.types.component :as ctk] [app.common.types.components-list :as ctkl] [app.common.types.container :as ctn] [app.common.types.file :as ctf] - [app.common.types.file.media-object :as ctfm] [app.common.types.typography :as ctt] [app.common.uuid :as uuid] - [app.main.data.dashboard :as dd] [app.main.data.events :as ev] - [app.main.data.messages :as dm] + [app.main.data.messages :as msg] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.groups :as dwg] [app.main.data.workspace.libraries-helpers :as dwlh] @@ -42,14 +39,11 @@ [app.util.router :as rt] [app.util.time :as dt] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) ;; Change this to :info :debug or :trace to debug this module, or :warn to reset to default (log/set-level! :warn) -(s/def ::file ::dd/file) - (defn- log-changes [changes file] (let [extract-change @@ -116,7 +110,7 @@ color (-> color (assoc :id id) (assoc :name (default-color-name color)))] - (us/assert ::ctc/color color) + (dm/assert! (ctc/color? color)) (ptk/reify ::add-color IDeref (-deref [_] color) @@ -130,7 +124,7 @@ (defn add-recent-color [color] - (us/assert! ::ctc/recent-color color) + (dm/assert! (ctc/recent-color? color)) (ptk/reify ::add-recent-color ptk/WatchEvent (watch [it _ _] @@ -160,8 +154,9 @@ (defn update-color [color file-id] - (us/assert ::ctc/color color) - (us/assert ::us/uuid file-id) + (dm/assert! (ctc/color? color)) + (dm/assert! (uuid? file-id)) + (ptk/reify ::update-color ptk/WatchEvent (watch [it state _] @@ -169,9 +164,10 @@ (defn rename-color [file-id id new-name] - (us/assert ::us/uuid file-id) - (us/assert ::us/uuid id) - (us/assert ::us/string new-name) + (dm/assert! (uuid? file-id)) + (dm/assert! (uuid? id)) + (dm/assert! (string? new-name)) + (ptk/reify ::rename-color ptk/WatchEvent (watch [it state _] @@ -183,7 +179,7 @@ (defn delete-color [{:keys [id] :as params}] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::delete-color ptk/WatchEvent (watch [it state _] @@ -195,7 +191,7 @@ (defn add-media [media] - (us/assert ::ctfm/media-object media) + (dm/assert! (ctf/media-object? media)) (ptk/reify ::add-media ptk/WatchEvent (watch [it _ _] @@ -206,8 +202,8 @@ (defn rename-media [id new-name] - (us/assert ::us/uuid id) - (us/assert ::us/string new-name) + (dm/assert! (uuid? id)) + (dm/assert! (string? new-name)) (ptk/reify ::rename-media ptk/WatchEvent (watch [it state _] @@ -224,7 +220,7 @@ (defn delete-media [{:keys [id] :as params}] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::delete-media ptk/WatchEvent (watch [it state _] @@ -238,7 +234,7 @@ ([typography] (add-typography typography true)) ([typography edit?] (let [typography (update typography :id #(or % (uuid/next)))] - (us/assert ::ctt/typography typography) + (dm/assert! (ctt/typography? typography)) (ptk/reify ::add-typography IDeref (-deref [_] typography) @@ -267,8 +263,9 @@ (defn update-typography [typography file-id] - (us/assert ::ctt/typography typography) - (us/assert ::us/uuid file-id) + (dm/assert! (ctt/typography? typography)) + (dm/assert! (uuid? file-id)) + (ptk/reify ::update-typography ptk/WatchEvent (watch [it state _] @@ -276,9 +273,9 @@ (defn rename-typography [file-id id new-name] - (us/assert ::us/uuid file-id) - (us/assert ::us/uuid id) - (us/assert ::us/string new-name) + (dm/assert! (uuid? file-id)) + (dm/assert! (uuid? id)) + (dm/assert! (string? new-name)) (ptk/reify ::rename-typography ptk/WatchEvent (watch [it state _] @@ -291,7 +288,7 @@ (defn delete-typography [id] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::delete-typography ptk/WatchEvent (watch [it state _] @@ -341,8 +338,8 @@ (defn rename-component "Rename the component with the given id, in the current file library." [id new-name] - (us/assert ::us/uuid id) - (us/assert ::us/string new-name) + (dm/assert! (uuid? id)) + (dm/assert! (string? new-name)) (ptk/reify ::rename-component ptk/WatchEvent (watch [it state _] @@ -414,7 +411,7 @@ (defn delete-component "Delete the component with the given id, from the current file library." [{:keys [id] :as params}] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::delete-component ptk/WatchEvent (watch [it state _] @@ -432,8 +429,8 @@ (defn restore-component "Restore a deleted component, with the given id, in the given file library." [library-id component-id] - (us/assert ::us/uuid library-id) - (us/assert ::us/uuid component-id) + (dm/assert! (uuid? library-id)) + (dm/assert! (uuid? component-id)) (ptk/reify ::restore-component ptk/WatchEvent (watch [it state _] @@ -460,9 +457,10 @@ "Create a new shape in the current page, from the component with the given id in the given file library. Then selects the newly created instance." [file-id component-id position] - (us/assert ::us/uuid file-id) - (us/assert ::us/uuid component-id) - (us/assert ::gpt/point position) + (dm/assert! (uuid? file-id)) + (dm/assert! (uuid? component-id)) + (dm/assert! (gpt/point? position)) + (ptk/reify ::instantiate-component ptk/WatchEvent (watch [it state _] @@ -489,7 +487,7 @@ "Remove all references to components in the shape with the given id, and all its children, at the current page." [id] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::detach-component ptk/WatchEvent (watch [it state _] @@ -528,7 +526,7 @@ (defn nav-to-component-file [file-id] - (us/assert ::us/uuid file-id) + (dm/assert! (uuid? file-id)) (ptk/reify ::nav-to-component-file ptk/WatchEvent (watch [_ state _] @@ -543,8 +541,8 @@ (defn ext-library-changed [file-id modified-at revn changes] - (us/assert ::us/uuid file-id) - (us/assert ::pcs/changes changes) + (dm/assert! (uuid? file-id)) + (dm/assert! (ch/changes? changes)) (ptk/reify ::ext-library-changed ptk/UpdateEvent (update [_ state] @@ -559,7 +557,7 @@ the current page. Set all attributes equal to the ones in the linked component, and untouched." [id] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::reset-component ptk/WatchEvent (watch [it state _] @@ -595,7 +593,7 @@ different of that the one we are currently editing." ([id] (update-component id nil)) ([id undo-group] - (us/assert ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::update-component ptk/WatchEvent (watch [it state _] @@ -680,6 +678,9 @@ (declare sync-file-2nd-stage) +(def valid-asset-types + #{:colors :components :typographies}) + (defn sync-file "Synchronize the given file from the given library. Walk through all shapes in all pages in the file that use some color, typography or @@ -694,10 +695,12 @@ ([file-id library-id asset-type asset-id] (sync-file file-id library-id asset-type asset-id nil)) ([file-id library-id asset-type asset-id undo-group] - (us/assert ::us/uuid file-id) - (us/assert ::us/uuid library-id) - (us/assert (s/nilable #{:colors :components :typographies}) asset-type) - (us/assert (s/nilable ::us/uuid) asset-id) + (dm/assert! (uuid? file-id)) + (dm/assert! (uuid? library-id)) + (dm/assert! (or (nil? asset-type) + (contains? valid-asset-types asset-type))) + (dm/assert! (or (nil? asset-id) + (uuid? asset-id))) (ptk/reify ::sync-file ptk/UpdateEvent (update [_ state] @@ -748,7 +751,7 @@ (:redo-changes changes) file)) (rx/concat - (rx/of (dm/hide-tag :sync-dialog)) + (rx/of (msg/hide-tag :sync-dialog)) (when (seq (:redo-changes changes)) (rx/of (dch/commit-changes (assoc changes ;; TODO a ver qué pasa con esto :file-id file-id)))) @@ -777,9 +780,10 @@ ;; implement updated-at at component level, to detect what components have ;; not changed, and then not to apply sync and terminate the loop. [file-id library-id asset-id undo-group] - (us/assert ::us/uuid file-id) - (us/assert ::us/uuid library-id) - (us/assert (s/nilable ::us/uuid) asset-id) + (dm/assert! (uuid? file-id)) + (dm/assert! (uuid? library-id)) + (dm/assert! (or (nil? asset-id) + (uuid? asset-id))) (ptk/reify ::sync-file-2nd-stage ptk/WatchEvent (watch [it state _] @@ -818,7 +822,7 @@ "Get a lazy sequence of all the assets of each type in the library that have been modified after the last sync of the library. The sync date may be overriden by providing a ignore-until parameter. - + The sequence items are tuples of (page-id shape-id asset-id asset-type)." ([library file-data] (assets-need-sync library file-data nil)) ([library file-data ignore-until] @@ -828,7 +832,7 @@ (defn notify-sync-file [file-id] - (us/assert ::us/uuid file-id) + (dm/assert! (uuid? file-id)) (ptk/reify ::notify-sync-file ptk/WatchEvent (watch [_ state _] @@ -839,12 +843,12 @@ (sync-file (:current-file-id state) (:id library))) libraries-need-sync)) - (st/emit! dm/hide)) + (st/emit! msg/hide)) do-dismiss #(do (st/emit! ignore-sync) - (st/emit! dm/hide))] + (st/emit! msg/hide))] (when (seq libraries-need-sync) - (rx/of (dm/info-dialog + (rx/of (msg/info-dialog (tr "workspace.updates.there-are-updates") :inline-actions [{:label (tr "workspace.updates.update") @@ -921,7 +925,6 @@ (defn- shared-files-fetched [files] - (us/verify (s/every ::file) files) (ptk/reify ::shared-files-fetched ptk/UpdateEvent (update [_ state] @@ -930,7 +933,7 @@ (defn fetch-shared-files [{:keys [team-id] :as params}] - (us/assert ::us/uuid team-id) + (dm/assert! (uuid? team-id)) (ptk/reify ::fetch-shared-files ptk/WatchEvent (watch [_ _ _] diff --git a/frontend/src/app/main/data/workspace/media.cljs b/frontend/src/app/main/data/workspace/media.cljs index 73f175cfd7..266afb7f42 100644 --- a/frontend/src/app/main/data/workspace/media.cljs +++ b/frontend/src/app/main/data/workspace/media.cljs @@ -6,18 +6,19 @@ (ns app.main.data.workspace.media (:require + [app.common.data.macros :as dm] [app.common.exceptions :as ex] [app.common.logging :as log] [app.common.math :as mth] [app.common.pages.changes-builder :as pcb] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.types.container :as ctn] [app.common.types.shape :as cts] [app.common.types.shape-tree :as ctst] [app.common.uuid :as uuid] [app.config :as cfg] [app.main.data.media :as dmm] - [app.main.data.messages :as dm] + [app.main.data.messages :as msg] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.libraries :as dwl] [app.main.data.workspace.shapes :as dwsh] @@ -28,7 +29,6 @@ [app.util.http :as http] [app.util.i18n :refer [tr]] [beicon.core :as rx] - [cljs.spec.alpha :as s] [cuerdas.core :as str] [potok.core :as ptk] [promesa.core :as p] @@ -136,47 +136,46 @@ (rx/merge-map svg->clj) (rx/do on-svg))))) -(s/def ::local? ::us/boolean) -(s/def ::blobs ::dmm/blobs) -(s/def ::name ::us/string) -(s/def ::uris (s/coll-of ::us/string)) -(s/def ::mtype ::us/string) - -(s/def ::process-media-objects - (s/and - (s/keys :req-un [::file-id ::local?] - :opt-un [::name ::data ::uris ::mtype]) - (fn [props] - (or (contains? props :blobs) - (contains? props :uris))))) +(def schema:process-media-objects + [:map + [:file-id ::sm/uuid] + [:local? :boolean] + [:name {:optional true} :string] + [:data {:optional true} :any] ; FIXME + [:uris {:optional true} [:vector :string]] + [:mtype {:optional true} :string]]) (defn- process-media-objects [{:keys [uris on-error] :as params}] - (us/assert ::process-media-objects params) + (dm/assert! + (and (sm/valid? schema:process-media-objects params) + (or (contains? params :blobs) + (contains? params :uris)))) + (letfn [(handle-error [error] (if (ex/ex-info? error) (handle-error (ex-data error)) (cond (= (:code error) :invalid-svg-file) - (rx/of (dm/error (tr "errors.media-type-not-allowed"))) + (rx/of (msg/error (tr "errors.media-type-not-allowed"))) (= (:code error) :media-type-not-allowed) - (rx/of (dm/error (tr "errors.media-type-not-allowed"))) + (rx/of (msg/error (tr "errors.media-type-not-allowed"))) (= (:code error) :unable-to-access-to-url) - (rx/of (dm/error (tr "errors.media-type-not-allowed"))) + (rx/of (msg/error (tr "errors.media-type-not-allowed"))) (= (:code error) :invalid-image) - (rx/of (dm/error (tr "errors.media-type-not-allowed"))) + (rx/of (msg/error (tr "errors.media-type-not-allowed"))) (= (:code error) :media-max-file-size-reached) - (rx/of (dm/error (tr "errors.media-too-large"))) + (rx/of (msg/error (tr "errors.media-too-large"))) (= (:code error) :media-type-mismatch) - (rx/of (dm/error (tr "errors.media-type-mismatch"))) + (rx/of (msg/error (tr "errors.media-type-mismatch"))) (= (:code error) :unable-to-optimize) - (rx/of (dm/error (:hint error))) + (rx/of (msg/error (:hint error))) (fn? on-error) (on-error error) @@ -188,10 +187,10 @@ ptk/WatchEvent (watch [_ _ _] (rx/concat - (rx/of (dm/show {:content (tr "media.loading") - :type :info - :timeout nil - :tag :media-loading})) + (rx/of (msg/show {:content (tr "media.loading") + :type :info + :timeout nil + :tag :media-loading})) (->> (if (seq uris) ;; Media objects is a list of URL's pointing to the path (process-uris params) @@ -201,7 +200,7 @@ ;; Every stream has its own sideeffect. We need to ignore the result (rx/ignore) (rx/catch handle-error) - (rx/finalize #(st/emit! (dm/hide-tag :media-loading))))))))) + (rx/finalize #(st/emit! (msg/hide-tag :media-loading))))))))) ;; Deprecated in components-v2 (defn upload-media-asset @@ -235,9 +234,9 @@ (rx/map #(vector (:name media-obj) %)) (rx/merge-map svg->clj) (rx/catch ; When error downloading media-obj, skip it and continue with next one - #(log/error :msg (str "Error downloading " (:name media-obj) " from " path) - :hint (ex-message %) - :error %))))) + #(log/error :msg (str "Error downloading " (:name media-obj) " from " path) + :hint (ex-message %) + :error %))))) (defn create-shapes-svg "Convert svg elements into penpot shapes." @@ -339,14 +338,14 @@ :on-svg #(st/emit! (process-svg-component %)))] (process-media-objects params))) -(s/def ::object-id ::us/uuid) - -(s/def ::clone-media-objects-params - (s/keys :req-un [::file-id ::object-id])) +(def schema:clone-media-object + [:map + [:file-id ::sm/uuid] + [:object-id ::sm/uuid]]) (defn clone-media-object [{:keys [file-id object-id] :as params}] - (us/assert ::clone-media-objects-params params) + (dm/assert! (sm/valid? schema:clone-media-object params)) (ptk/reify ::clone-media-objects ptk/WatchEvent (watch [_ _ _] @@ -358,12 +357,12 @@ :id object-id}] (rx/concat - (rx/of (dm/show {:content (tr "media.loading") - :type :info - :timeout nil - :tag :media-loading})) + (rx/of (msg/show {:content (tr "media.loading") + :type :info + :timeout nil + :tag :media-loading})) (->> (rp/cmd! :clone-file-media-object params) (rx/do on-success) (rx/catch on-error) - (rx/finalize #(st/emit! (dm/hide-tag :media-loading))))))))) + (rx/finalize #(st/emit! (msg/hide-tag :media-loading))))))))) diff --git a/frontend/src/app/main/data/workspace/modifiers.cljs b/frontend/src/app/main/data/workspace/modifiers.cljs index d7ae841ebc..a27f9c4d1b 100644 --- a/frontend/src/app/main/data/workspace/modifiers.cljs +++ b/frontend/src/app/main/data/workspace/modifiers.cljs @@ -14,7 +14,6 @@ [app.common.math :as mth] [app.common.pages.common :as cpc] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.types.container :as ctn] [app.common.types.modifiers :as ctm] [app.common.types.shape.layout :as ctl] @@ -25,7 +24,6 @@ [app.main.data.workspace.state-helpers :as wsh] [app.main.data.workspace.undo :as dwu] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) ;; -- temporary modifiers ------------------------------------------- @@ -96,7 +94,6 @@ ignore-geometry? (and (and (< (:x distance) 1) (< (:y distance) 1)) (mth/close? (:width selrect) (:width transformed-selrect)) (mth/close? (:height selrect) (:height transformed-selrect)))] - [root transformed-root ignore-geometry?])) (defn- get-ignore-tree @@ -157,12 +154,16 @@ (defn create-modif-tree [ids modifiers] - (us/verify (s/coll-of uuid?) ids) + (dm/assert! + "expected valid coll of uuids" + (every? uuid? ids)) (into {} (map #(vector % {:modifiers modifiers})) ids)) (defn build-modif-tree [ids objects get-modifier] - (us/verify (s/coll-of uuid?) ids) + (dm/assert! + "expected valid coll of uuids" + (every? uuid? ids)) (into {} (map #(vector % {:modifiers (get-modifier (get objects %))})) ids)) (defn modifier-remove-from-parent diff --git a/frontend/src/app/main/data/workspace/notifications.cljs b/frontend/src/app/main/data/workspace/notifications.cljs index 3a70a1b88d..840d1aec9a 100644 --- a/frontend/src/app/main/data/workspace/notifications.cljs +++ b/frontend/src/app/main/data/workspace/notifications.cljs @@ -7,8 +7,9 @@ (ns app.main.data.workspace.notifications (:require [app.common.data :as d] - [app.common.pages.changes-spec :as pcs] - [app.common.spec :as us] + [app.common.data.macros :as dm] + [app.common.pages.changes :as cpc] + [app.common.schema :as sm] [app.main.data.websocket :as dws] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.libraries :as dwl] @@ -18,7 +19,6 @@ [app.util.object :as obj] [app.util.time :as dt] [beicon.core :as rx] - [cljs.spec.alpha :as s] [clojure.set :as set] [potok.core :as ptk])) @@ -183,19 +183,18 @@ :updated-at (dt/now) :page-id page-id)))))) -(s/def ::type keyword?) -(s/def ::profile-id uuid?) -(s/def ::file-id uuid?) -(s/def ::session-id uuid?) -(s/def ::revn integer?) -(s/def ::changes ::pcs/changes) - -(s/def ::file-change-event - (s/keys :req-un [::type ::profile-id ::file-id ::session-id ::revn ::changes])) +(def schema:handle-file-change + [:map + [:type :keyword] + [:profile-id ::sm/uuid] + [:file-id ::sm/uuid] + [:session-id ::sm/uuid] + [:revn :int] + [:changes ::cpc/changes]]) (defn handle-file-change [{:keys [file-id changes] :as msg}] - (us/assert ::file-change-event msg) + (dm/assert! (sm/valid? schema:handle-file-change msg)) (ptk/reify ::handle-file-change IDeref (-deref [_] {:changes changes}) @@ -241,18 +240,19 @@ (when-not (empty? changes-by-pages) (rx/from (map process-page-changes changes-by-pages)))))))) -(s/def ::library-change-event - (s/keys :req-un [::type - ::profile-id - ::file-id - ::session-id - ::revn - ::modified-at - ::changes])) +(def schema:handle-library-change + [:map + [:type :keyword] + [:profile-id ::sm/uuid] + [:file-id ::sm/uuid] + [:session-id ::sm/uuid] + [:revn :int] + [:modified-at ::sm/inst] + [:changes ::cpc/changes]]) (defn handle-library-change [{:keys [file-id modified-at changes revn] :as msg}] - (us/assert ::library-change-event msg) + (dm/assert! (sm/valid? schema:handle-library-change msg)) (ptk/reify ::handle-library-change ptk/WatchEvent (watch [_ state _] diff --git a/frontend/src/app/main/data/workspace/path/changes.cljs b/frontend/src/app/main/data/workspace/path/changes.cljs index dde171a125..8c1e1f758e 100644 --- a/frontend/src/app/main/data/workspace/path/changes.cljs +++ b/frontend/src/app/main/data/workspace/path/changes.cljs @@ -6,11 +6,11 @@ (ns app.main.data.workspace.path.changes (:require + [app.common.data.macros :as dm] [app.common.pages.changes-builder :as pcb] - [app.common.spec :as us] [app.main.data.workspace.changes :as dch] + [app.main.data.workspace.path.common :refer [content?]] [app.main.data.workspace.path.helpers :as helpers] - [app.main.data.workspace.path.spec :as spec] [app.main.data.workspace.path.state :as st] [app.main.data.workspace.state-helpers :as wsh] [beicon.core :as rx] @@ -19,8 +19,8 @@ (defn generate-path-changes "Generates changes to update the new content of the shape" [it objects page-id shape old-content new-content] - (us/verify ::spec/content old-content) - (us/verify ::spec/content new-content) + (dm/assert! (content? old-content)) + (dm/assert! (content? new-content)) (let [shape-id (:id shape) [old-points old-selrect] diff --git a/frontend/src/app/main/data/workspace/path/common.cljs b/frontend/src/app/main/data/workspace/path/common.cljs index 077add2acb..ee526a9404 100644 --- a/frontend/src/app/main/data/workspace/path/common.cljs +++ b/frontend/src/app/main/data/workspace/path/common.cljs @@ -6,9 +6,40 @@ (ns app.main.data.workspace.path.common (:require + [app.common.schema :as sm] [app.main.data.workspace.path.state :as st] [potok.core :as ptk])) +(def valid-commands + #{:move-to + :line-to + :line-to-horizontal + :line-to-vertical + :curve-to + :smooth-curve-to + :quadratic-bezier-curve-to + :smooth-quadratic-bezier-curve-to + :elliptical-arc + :close-path}) + +(def schema:content + [:vector {:title "PathContent"} + [:map {:title "PathContentEntry"} + [:command [::sm/one-of valid-commands]] + ;; FIXME: remove the `?` from prop name + [:relative? {:optional true} :boolean] + [:params {:optional true} + [:map {:title "PathContentEntryParams"} + [:x :double] + [:y :double] + [:c1x {:optional true} :double] + [:c1y {:optional true} :double] + [:c2x {:optional true} :double] + [:c2y {:optional true} :double]]]]]) + +(def content? + (sm/pred-fn schema:content)) + (defn init-path [] (ptk/reify ::init-path)) diff --git a/frontend/src/app/main/data/workspace/path/drawing.cljs b/frontend/src/app/main/data/workspace/path/drawing.cljs index 873d9d95d8..1620a8a41a 100644 --- a/frontend/src/app/main/data/workspace/path/drawing.cljs +++ b/frontend/src/app/main/data/workspace/path/drawing.cljs @@ -6,20 +6,19 @@ (ns app.main.data.workspace.path.drawing (:require + [app.common.data.macros :as dm] [app.common.geom.point :as gpt] [app.common.geom.shapes.flex-layout :as gsl] [app.common.path.commands :as upc] [app.common.path.shapes-to-path :as upsp] - [app.common.spec :as us] [app.common.types.shape-tree :as ctst] [app.common.types.shape.layout :as ctl] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.drawing.common :as dwdc] [app.main.data.workspace.edition :as dwe] [app.main.data.workspace.path.changes :as changes] - [app.main.data.workspace.path.common :as common] + [app.main.data.workspace.path.common :as common :refer [content?]] [app.main.data.workspace.path.helpers :as helpers] - [app.main.data.workspace.path.spec :as spec] [app.main.data.workspace.path.state :as st] [app.main.data.workspace.path.streams :as streams] [app.main.data.workspace.path.undo :as undo] @@ -256,7 +255,7 @@ ptk/UpdateEvent (update [_ state] (let [content (get-in state [:workspace-drawing :object :content] [])] - (us/verify ::spec/content content) + (dm/assert! (content? content)) (if (> (count content) 1) (assoc-in state [:workspace-drawing :object :initialized?] true) state))) diff --git a/frontend/src/app/main/data/workspace/path/spec.cljs b/frontend/src/app/main/data/workspace/path/spec.cljs deleted file mode 100644 index ce7fdbb8dd..0000000000 --- a/frontend/src/app/main/data/workspace/path/spec.cljs +++ /dev/null @@ -1,49 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC - -(ns app.main.data.workspace.path.spec - (:require - [clojure.spec.alpha :as s])) - -;; SCHEMAS - -(s/def ::command #{:move-to - :line-to - :line-to-horizontal - :line-to-vertical - :curve-to - :smooth-curve-to - :quadratic-bezier-curve-to - :smooth-quadratic-bezier-curve-to - :elliptical-arc - :close-path}) - -(s/def :paths.params/x number?) -(s/def :paths.params/y number?) -(s/def :paths.params/c1x number?) -(s/def :paths.params/c1y number?) -(s/def :paths.params/c2x number?) -(s/def :paths.params/c2y number?) - -(s/def ::relative? boolean?) - -(s/def ::params - (s/keys :req-un [:path.params/x - :path.params/y] - :opt-un [:path.params/c1x - :path.params/c1y - :path.params/c2x - :path.params/c2y])) - -(s/def ::content-entry - (s/keys :req-un [::command] - :opt-un [::params - ::relative?])) -(s/def ::content - (s/coll-of ::content-entry :kind vector?)) - - - diff --git a/frontend/src/app/main/data/workspace/persistence.cljs b/frontend/src/app/main/data/workspace/persistence.cljs index 61942fd5d7..cf74bbf1fd 100644 --- a/frontend/src/app/main/data/workspace/persistence.cljs +++ b/frontend/src/app/main/data/workspace/persistence.cljs @@ -9,8 +9,7 @@ [app.common.data.macros :as dm] [app.common.logging :as log] [app.common.pages :as cp] - [app.common.pages.changes-spec :as pcs] - [app.common.spec :as us] + [app.common.pages.changes :as cpc] [app.common.types.shape-tree :as ctst] [app.common.uuid :as uuid] [app.main.data.workspace.changes :as dch] @@ -21,7 +20,6 @@ [app.util.router :as rt] [app.util.time :as dt] [beicon.core :as rx] - [cljs.spec.alpha :as s] [okulary.core :as l] [potok.core :as ptk])) @@ -137,7 +135,7 @@ (defn persist-changes [file-id file-revn changes pending-commits] (log/debug :hint "persist changes" :changes (count changes)) - (us/verify ::us/uuid file-id) + (dm/assert! (uuid? file-id)) (ptk/reify ::persist-changes ptk/WatchEvent (watch [_ state _] @@ -197,7 +195,7 @@ (defn persist-synchronous-changes [{:keys [file-id changes]}] - (us/verify ::us/uuid file-id) + (dm/assert! (uuid? file-id)) (ptk/reify ::persist-synchronous-changes ptk/WatchEvent (watch [_ state _] @@ -229,17 +227,16 @@ :status status :updated-at (dt/now))))))) -(s/def ::revn ::us/integer) -(s/def ::shapes-changes-persisted - (s/keys :req-un [::revn ::pcs/changes])) (defn shapes-persisted-event? [event] (= (ptk/type event) ::changes-persisted)) (defn shapes-changes-persisted - [file-id {:keys [revn changes] :as params}] - (us/verify! ::us/uuid file-id) - (us/verify! ::shapes-changes-persisted params) + [file-id {:keys [revn changes]}] + (dm/assert! (uuid? file-id)) + (dm/assert! (int? revn)) + (dm/assert! (cpc/changes? changes)) + (ptk/reify ::shapes-changes-persisted ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index fb20236586..c4a97ec2cf 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -14,7 +14,6 @@ [app.common.pages :as cp] [app.common.pages.changes-builder :as pcb] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.types.file :as ctf] [app.common.types.page :as ctp] [app.common.types.shape.interactions :as ctsi] @@ -30,14 +29,10 @@ [app.main.streams :as ms] [app.main.worker :as uw] [beicon.core :as rx] - [cljs.spec.alpha :as s] [clojure.set :as set] [linked.set :as lks] [potok.core :as ptk])) -(s/def ::ordered-set-of-uuid - (s/every uuid? :kind d/ordered-set?)) - (defn interrupt? [e] (= e :interrupt)) ;; --- Selection Rect @@ -122,7 +117,7 @@ (select-shape id false)) ([id toggle?] - (us/verify ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::select-shape ptk/UpdateEvent (update [_ state] @@ -185,7 +180,7 @@ (defn deselect-shape [id] - (us/verify ::us/uuid id) + (dm/assert! (uuid? id)) (ptk/reify ::deselect-shape ptk/UpdateEvent (update [_ state] @@ -209,7 +204,11 @@ (defn select-shapes [ids] - (us/verify ::ordered-set-of-uuid ids) + (dm/assert! + "expected valid coll of uuids" + (and (every? uuid? ids) + (d/ordered-set? ids))) + (ptk/reify ::select-shapes ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/workspace/shapes.cljs b/frontend/src/app/main/data/workspace/shapes.cljs index 33318303f5..5d33139c8f 100644 --- a/frontend/src/app/main/data/workspace/shapes.cljs +++ b/frontend/src/app/main/data/workspace/shapes.cljs @@ -12,7 +12,7 @@ [app.common.geom.shapes :as gsh] [app.common.pages.changes-builder :as pcb] [app.common.pages.helpers :as cph] - [app.common.spec :as us] + [app.common.schema :as sm] [app.common.types.component :as ctk] [app.common.types.container :as ctn] [app.common.types.page :as ctp] @@ -30,11 +30,8 @@ [app.main.features :as features] [app.main.streams :as ms] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) -(s/def ::shape-attrs ::cts/shape-attrs) - (defn get-shape-layer-position [objects selected attrs] @@ -102,9 +99,8 @@ (defn add-shape ([attrs] (add-shape attrs {})) - ([attrs {:keys [no-select? no-update-layout?]}] - (us/verify ::shape-attrs attrs) + (dm/assert! (cts/shape-attrs? attrs)) (ptk/reify ::add-shape ptk/WatchEvent (watch [it state _] @@ -168,7 +164,7 @@ (defn delete-shapes ([ids] (delete-shapes nil ids)) ([page-id ids] - (us/assert ::us/set-of-uuid ids) + (dm/assert! (sm/set-of-uuid? ids)) (ptk/reify ::delete-shapes ptk/WatchEvent (watch [it state _] @@ -449,8 +445,14 @@ (defn update-shape-flags [ids {:keys [blocked hidden] :as flags}] - (us/verify (s/coll-of ::us/uuid) ids) - (us/assert ::shape-attrs flags) + (dm/assert! + "expected valid coll of uuids" + (every? uuid? ids)) + + (dm/assert! + "expected valid shape-attrs value for `flags`" + (cts/shape-attrs? flags)) + (ptk/reify ::update-shape-flags ptk/WatchEvent (watch [_ state _] diff --git a/frontend/src/app/main/data/workspace/shortcuts.cljs b/frontend/src/app/main/data/workspace/shortcuts.cljs index 5ec6448e10..cc64525c34 100644 --- a/frontend/src/app/main/data/workspace/shortcuts.cljs +++ b/frontend/src/app/main/data/workspace/shortcuts.cljs @@ -67,7 +67,7 @@ :cut {:tooltip (ds/meta "X") :command (ds/c-mod "x") :subsections [:edit] - :fn #(emit-when-no-readonly (dw/copy-selected) + :fn #(emit-when-no-readonly (dw/copy-selected) (dw/delete-selected))} :paste {:tooltip (ds/meta "V") @@ -110,7 +110,7 @@ ;; MODIFY LAYERS - + :group {:tooltip (ds/meta "G") :command (ds/c-mod "g") @@ -222,7 +222,7 @@ :fn #(emit-when-no-readonly (dwsl/toggle-layout-flex))} ;; TOOLS - + :draw-frame {:tooltip "B" :command ["b" "a"] :subsections [:tools :basics] @@ -300,7 +300,7 @@ :fn #(emit-when-no-readonly (dw/toggle-focus-mode))} ;; ITEM ALIGNMENT - + :align-left {:tooltip (ds/alt "A") :command "alt+a" :subsections [:alignment] @@ -342,7 +342,7 @@ :fn #(emit-when-no-readonly (dw/distribute-objects :vertical))} ;; MAIN MENU - + :toggle-rules {:tooltip (ds/meta-shift "R") :command (ds/c-mod "shift+r") :subsections [:main-menu] @@ -354,7 +354,7 @@ :fn #(st/emit! (dw/select-all))} :toggle-grid {:tooltip (ds/meta "'") - ;;https://github.com/ccampbell/mousetrap/issues/85 + ;;https://github.com/ccampbell/mousetrap/issues/85 :command [(ds/c-mod "'") (ds/c-mod "219")] :subsections [:main-menu] :fn #(st/emit! (toggle-layout-flag :display-grid))} @@ -402,7 +402,7 @@ :fn #(st/emit! (toggle-layout-flag :shortcuts))} ;; PANELS - + :toggle-layers {:tooltip (ds/alt "L") :command (ds/a-mod "l") :subsections [:panels] @@ -438,7 +438,7 @@ :fn #(st/emit! (toggle-layout-flag :hide-ui))} ;; ZOOM-WORKSPACE - + :increase-zoom {:tooltip "+" :command ["+" "="] :subsections [:zoom-workspace] @@ -475,7 +475,7 @@ :fn identity} ;; NAVIGATION - + :open-viewer {:tooltip "G V" :command "g v" @@ -501,14 +501,14 @@ :command "shift+tab" :subsections [:navigation-workspace] :fn #(st/emit! (dw/select-prev-shape))} - + :select-next {:tooltip ds/tab :command "tab" :subsections [:navigation-workspace] :fn #(st/emit! (dw/select-next-shape))} ;; SHAPE - + :bool-union {:tooltip (ds/meta (ds/alt "U")) :command (ds/c-mod "alt+u") diff --git a/frontend/src/app/main/data/workspace/svg_upload.cljs b/frontend/src/app/main/data/workspace/svg_upload.cljs index 0a9b3c5d08..87b7613052 100644 --- a/frontend/src/app/main/data/workspace/svg_upload.cljs +++ b/frontend/src/app/main/data/workspace/svg_upload.cljs @@ -8,6 +8,7 @@ (:require [app.common.colors :as clr] [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.geom.matrix :as gmt] [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] @@ -38,11 +39,11 @@ (defonce default-image {:x 0 :y 0 :width 1 :height 1 :rx 0 :ry 0}) (defn- assert-valid-num [attr num] - (us/verify! - :expr (and (d/num? num) - (<= num max-safe-int) - (>= num min-safe-int)) - :hint (str/ffmt "%1 attribute has invalid value: %2" (d/name attr) num)) + (dm/assert! + ["%1 attribute has invalid value: %2" (d/name attr) num] + (and (d/num? num) + (<= num max-safe-int) + (>= num min-safe-int))) ;; If the number is between 0-1 we round to 1 (same in negative form (cond @@ -52,9 +53,9 @@ (defn- assert-valid-pos-num [attr num] - (us/verify! - :expr (pos? num) - :hint (str/ffmt "%1 attribute should be positive" (d/name attr))) + (dm/assert! + ["%1 attribute should be positive" (d/name attr)] + (pos? num)) num) (defn- svg-dimensions [data] diff --git a/frontend/src/app/main/data/workspace/transforms.cljs b/frontend/src/app/main/data/workspace/transforms.cljs index 0d6ab72e16..3ea74b6f09 100644 --- a/frontend/src/app/main/data/workspace/transforms.cljs +++ b/frontend/src/app/main/data/workspace/transforms.cljs @@ -17,7 +17,6 @@ [app.common.math :as mth] [app.common.pages.changes-builder :as pcb] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.types.modifiers :as ctm] [app.common.types.shape-tree :as ctst] [app.common.types.shape.layout :as ctl] @@ -31,7 +30,6 @@ [app.main.streams :as ms] [app.util.dom :as dom] [beicon.core :as rx] - [cljs.spec.alpha :as s] [potok.core :as ptk])) ;; -- Helpers -------------------------------------------------------- @@ -237,9 +235,13 @@ "Change size of shapes, from the sideber options form. Will ignore pixel snap used in the options side panel" [ids attr value] - (us/verify (s/coll-of ::us/uuid) ids) - (us/verify #{:width :height} attr) - (us/verify ::us/number value) + (dm/assert! (number? value)) + (dm/assert! + "expected valid coll of uuids" + (every? uuid? ids)) + (dm/assert! + "expected valid attr" + (contains? #{:width :height} attr)) (ptk/reify ::update-dimensions ptk/UpdateEvent (update [_ state] @@ -261,8 +263,13 @@ "Change orientation of shapes, from the sidebar options form. Will ignore pixel snap used in the options side panel" [ids orientation] - (us/verify (s/coll-of ::us/uuid) ids) - (us/verify #{:horiz :vert} orientation) + (dm/assert! + "expected valid coll of uuids" + (every? uuid? ids)) + (dm/assert! + "expected valid orientation" + (contains? #{:horiz :vert} orientation)) + (ptk/reify ::change-orientation ptk/UpdateEvent (update [_ state] @@ -535,7 +542,8 @@ (finish-transform) (dwu/commit-undo-transaction undo-id)))))))))))))) -(s/def ::direction #{:up :down :right :left}) +(def valid-directions + #{:up :down :right :left}) (defn reorder-selected-layout-child [direction] @@ -660,8 +668,8 @@ (defn move-selected "Move shapes a fixed increment in one direction, from a keyboard action." [direction shift?] - (us/verify ::direction direction) - (us/verify boolean? shift?) + (dm/assert! (contains? valid-directions direction)) + (dm/assert! (boolean? shift?)) (ptk/reify ::move-selected ptk/WatchEvent @@ -675,16 +683,12 @@ (rx/of (reorder-selected-layout-child direction)) (rx/of (nudge-selected-shapes direction shift?))))))) -(s/def ::x number?) -(s/def ::y number?) -(s/def ::position - (s/keys :opt-un [::x ::y])) - (defn update-position "Move shapes to a new position, from the sidebar options form." [id position] - (us/verify ::us/uuid id) - (us/verify ::position position) + (js/console.log "DEBUG" (pr-str position)) + (dm/assert! (uuid? id)) + (ptk/reify ::update-position ptk/WatchEvent (watch [_ state _] diff --git a/frontend/src/app/main/data/workspace/undo.cljs b/frontend/src/app/main/data/workspace/undo.cljs index e7ee3a7f46..33cad6c230 100644 --- a/frontend/src/app/main/data/workspace/undo.cljs +++ b/frontend/src/app/main/data/workspace/undo.cljs @@ -7,19 +7,22 @@ (ns app.main.data.workspace.undo (:require [app.common.data :as d] - [app.common.pages.changes-spec :as pcs] - [app.common.spec :as us] - [cljs.spec.alpha :as s] + [app.common.data.macros :as dm] + [app.common.pages.changes :as cpc] + [app.common.schema :as sm] [potok.core :as ptk])) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Undo / Redo ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(s/def ::undo-changes ::pcs/changes) -(s/def ::redo-changes ::pcs/changes) -(s/def ::undo-entry - (s/keys :req-un [::undo-changes ::redo-changes])) +(def schema:undo-entry + [:map + [:undo-changes [:vector ::cpc/change]] + [:redo-changes [:vector ::cpc/change]]]) + +(def undo-entry? + (sm/pred-fn schema:undo-entry)) (def MAX-UNDO-SIZE 50) @@ -76,7 +79,9 @@ (defn append-undo [entry stack?] - (us/assert ::undo-entry entry) + (dm/assert! (boolean? stack?)) + (dm/assert! (undo-entry? entry)) + (ptk/reify ::append-undo ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/data/workspace/viewport.cljs b/frontend/src/app/main/data/workspace/viewport.cljs index 40c2d36895..28365db990 100644 --- a/frontend/src/app/main/data/workspace/viewport.cljs +++ b/frontend/src/app/main/data/workspace/viewport.cljs @@ -7,12 +7,12 @@ (ns app.main.data.workspace.viewport (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.geom.align :as gal] [app.common.geom.point :as gpt] [app.common.geom.shapes :as gsh] [app.common.math :as mth] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.main.data.workspace.state-helpers :as wsh] [app.main.streams :as ms] [beicon.core :as rx] @@ -69,8 +69,14 @@ (defn update-viewport-position [{:keys [x y] :or {x identity y identity}}] - (us/assert fn? x) - (us/assert fn? y) + + (dm/assert! + "expected function for `x`" + (fn? x)) + (dm/assert! + "expected function for `y`" + (fn? y)) + (ptk/reify ::update-viewport-position ptk/UpdateEvent (update [_ state] diff --git a/frontend/src/app/main/errors.cljs b/frontend/src/app/main/errors.cljs index e60790ec5e..b70a6c3677 100644 --- a/frontend/src/app/main/errors.cljs +++ b/frontend/src/app/main/errors.cljs @@ -7,12 +7,8 @@ (ns app.main.errors "Generic error handling" (:require - [app.common.data :as d] - [app.common.data.macros :as dm] - [app.common.exceptions :as ex] [app.common.pprint :as pp] - [app.common.spec :as us] - [app.config :as cf] + [app.common.schema :as sm] [app.main.data.messages :as msg] [app.main.data.modal :as modal] [app.main.data.users :as du] @@ -25,42 +21,56 @@ [cuerdas.core :as str] [potok.core :as ptk])) +(defn- print-data! + [data] + (-> data + (dissoc ::sm/explain) + (dissoc :hint) + (dissoc ::trace) + (dissoc ::instance) + (pp/pprint {:width 70}))) + +(defn- print-explain! + [data] + (when-let [explain (::sm/explain data)] + (-> (sm/humanize-data explain) + (pp/pprint {:width 70})))) + +(defn- print-trace! + [data] + (some-> data ::trace js/console.log)) + +(defn- print-group! + [message f] + (try + (js/console.group message) + (f) + (catch :default _ nil) + (finally + (js/console.groupEnd message)))) + (defn on-error "A general purpose error handler." [error] - (cond - (instance? ExceptionInfo error) - (let [data (ex-data error)] - (if (contains? data :type) - (ptk/handle-error data) - (let [hint (str/ffmt "Unexpected error: '%'" (ex-message error))] - (ts/schedule #(st/emit! (rt/assign-exception error))) - (js/console.group hint) - (js/console.log (.-stack error)) - (js/console.groupEnd hint)))) - - (map? error) + (if (map? error) (ptk/handle-error error) - - :else - (let [hint (ex-message error) - msg (dm/str "Internal Error: " hint)] - (ts/schedule #(st/emit! (rt/assign-exception error))) - - (js/console.group msg) - (ex/ignoring (js/console.error error)) - (js/console.groupEnd msg)))) + (let [data (ex-data error) + data (-> data + (assoc :hint (or (:hint data) (ex-message error))) + (assoc ::instance error) + (assoc ::trace (.-stack error)))] + (ptk/handle-error data)))) ;; Set the main potok error handler (reset! st/on-error on-error) (defmethod ptk/handle-error :default [error] - (let [hint (str/ffmt "Unhandled error: '%'" (:hint error "[no hint]"))] - (ts/schedule #(st/emit! (rt/assign-exception error))) - (js/console.group hint) - (ex/ignoring (js/console.error (pr-str error))) - (js/console.groupEnd hint))) + (ts/schedule #(st/emit! (rt/assign-exception (::instance error)))) + (print-group! "Unhandled Error" + (fn [] + (print-trace! error) + (print-data! error)))) ;; We receive a explicit authentication error; this explicitly clears ;; all profile data and redirect the user to the login page. This is @@ -85,42 +95,39 @@ :type :error :timeout 3000}))) - ;; Print to the console some debug info. - (js/console.group "Validation Error:") - (ex/ignoring - (js/console.info - (pp/pprint-str (dissoc error :explain)))) - - (when-let [explain (:explain error)] - (js/console.group "Spec explain:") - (js/console.log explain) - (js/console.groupEnd "Spec explain:")) - - (js/console.groupEnd "Validation Error:")) + (print-group! "Validation Error" + (fn [] + (print-data! error)))) -;; All the errors that happens on worker are handled here. +;; This is a pure frontend error that can be caused by an active +;; assertion (assertion that is preserved on production builds). From +;; the user perspective this should be treated as internal error. +(defmethod ptk/handle-error :assertion + [error] + (ts/schedule + #(st/emit! (msg/show {:content "Internal Assertion Error" + :type :error + :timeout 3000}))) + + (print-group! "Internal Assertion Error" + (fn [] + (print-trace! error) + (print-data! error) + (print-explain! error)))) + +;; ;; All the errors that happens on worker are handled here. (defmethod ptk/handle-error :worker-error - [{:keys [code data hint] :as error}] - (let [hint (or hint (:hint data) (:message data) (d/name code)) - info (pp/pprint-str (dissoc data :explain)) - msg (dm/str "Internal Worker Error: " hint)] + [error] + (ts/schedule + #(st/emit! + (msg/show {:content "Something wrong has happened (on worker)." + :type :error + :timeout 3000}))) - (ts/schedule - #(st/emit! - (msg/show {:content "Something wrong has happened (on worker)." - :type :error - :timeout 3000}))) - - (js/console.group msg) - (js/console.info info) - - (when-let [explain (:explain data)] - (js/console.group "Spec explain:") - (js/console.log explain) - (js/console.groupEnd "Spec explain:")) - - (js/console.groupEnd msg))) + (print-group! "Internal Worker Error" + (fn [] + (print-data! error)))) ;; Error on parsing an SVG ;; TODO: looks unused and deprecated @@ -139,30 +146,6 @@ :type :error :timeout 3000})))) -;; This is a pure frontend error that can be caused by an active -;; assertion (assertion that is preserved on production builds). From -;; the user perspective this should be treated as internal error. -(defmethod ptk/handle-error :assertion - [{:keys [message hint] :as error}] - (let [message (or message hint) - message (dm/str "Internal Assertion Error: " message) - context (dm/fmt "ns: '%'\nname: '%'\nfile: '%:%'" - (:ns error) - (:name error) - (dm/str @cf/public-uri "js/cljs-runtime/" (:file error)) - (:line error))] - - (ts/schedule - #(st/emit! (msg/show {:content "Internal error: assertion." - :type :error - :timeout 3000}))) - - ;; Print to the console some debugging info - (js/console.group message) - (js/console.info context) - (js/console.log (us/pretty-explain error)) - (js/console.groupEnd message))) - ;; That are special case server-errors that should be treated ;; differently. @@ -198,49 +181,30 @@ ;; uncontrolled error. (defmethod ptk/handle-error :server-error - [{:keys [data hint] :as error}] - (let [hint (or hint (:hint data) (:message data)) - info (pp/pprint-str (dissoc data :explain)) - msg (dm/str "Internal Server Error: " hint)] - - (ts/schedule - #(st/emit! - (msg/show {:content "Something wrong has happened (on backend)." - :type :error - :timeout 3000}))) - - (js/console.group msg) - (js/console.info info) - - (when-let [explain (:explain data)] - (js/console.group "Spec explain:") - (js/console.log explain) - (js/console.groupEnd "Spec explain:")) - - (js/console.groupEnd msg))) - -(defn on-unhandled-error [error] + (ts/schedule + #(st/emit! + (msg/show {:content "Something wrong has happened (on backend)." + :type :error + :timeout 3000}))) + + (print-group! "Server Error" + (fn [] + (print-data! error)))) + +(defonce uncaught-error-handler (letfn [(is-ignorable-exception? [cause] (let [message (ex-message cause)] (or (= message "Possible side-effect in debug-evaluate") - (= message "Unexpected end of input") true - (str/starts-with? message "Unexpected token "))))] - (if (instance? ExceptionInfo error) - (-> error ex-data ptk/handle-error) - (when-not (is-ignorable-exception? error) - (let [hint (ex-message error) - msg (dm/str "Unhandled Internal Error: " hint)] - (ts/schedule #(st/emit! (rt/assign-exception error))) - (js/console.group msg) - (ex/ignoring (js/console.error error)) - (js/console.groupEnd msg)))))) + (= message "Unexpected end of input") + (str/starts-with? message "Unexpected token ")))) -(defonce uncaught-error-handler - (letfn [(on-error [event] + (on-unhandled-error [event] (.preventDefault ^js event) - (some-> (unchecked-get event "error") - (on-unhandled-error)))] - (.addEventListener glob/window "error" on-error) + (when-let [error (unchecked-get event "error")] + (when-not (is-ignorable-exception? error) + (on-error error))))] + + (.addEventListener glob/window "error" on-unhandled-error) (fn [] - (.removeEventListener glob/window "error" on-error)))) + (.removeEventListener glob/window "error" on-unhandled-error)))) diff --git a/frontend/src/app/main/store.cljs b/frontend/src/app/main/store.cljs index e2c80b107d..04f7153008 100644 --- a/frontend/src/app/main/store.cljs +++ b/frontend/src/app/main/store.cljs @@ -48,7 +48,7 @@ :on-event on-event :on-error (fn [cause] (when cause - (log/error :hint "unexpected exception on store" :cause cause) + #_(log/error :hint "unexpected exception on store" :cause cause) (@on-error cause)))})) (defonce stream diff --git a/frontend/src/app/main/ui.cljs b/frontend/src/app/main/ui.cljs index 9d4a4673cc..b43f53b13d 100644 --- a/frontend/src/app/main/ui.cljs +++ b/frontend/src/app/main/ui.cljs @@ -31,7 +31,6 @@ (mf/defc on-main-error [{:keys [error] :as props}] (mf/with-effect - (js/console.log error) (st/emit! (rt/assign-exception error))) [:span "Internal application error"]) diff --git a/frontend/src/app/main/ui/components/context_menu_a11y/context_menu_a11y.cljs b/frontend/src/app/main/ui/components/context_menu_a11y/context_menu_a11y.cljs index 44acb27335..26c298d57e 100644 --- a/frontend/src/app/main/ui/components/context_menu_a11y/context_menu_a11y.cljs +++ b/frontend/src/app/main/ui/components/context_menu_a11y/context_menu_a11y.cljs @@ -190,7 +190,7 @@ (mf/with-effect [ids] (tm/schedule-on-idle - (dom/focus! (dom/get-element (first ids))))) + #(dom/focus! (dom/get-element (first ids))))) (when (and open? (some? (:levels @local))) [:> dropdown' props diff --git a/frontend/src/app/main/ui/dashboard/project_menu.cljs b/frontend/src/app/main/ui/dashboard/project_menu.cljs index e1def815a2..be250337a1 100644 --- a/frontend/src/app/main/ui/dashboard/project_menu.cljs +++ b/frontend/src/app/main/ui/dashboard/project_menu.cljs @@ -6,9 +6,10 @@ (ns app.main.ui.dashboard.project-menu (:require - [app.common.spec :as us] + [app.common.data.macros :as dm] + [app.common.schema :as sm] [app.main.data.dashboard :as dd] - [app.main.data.messages :as dm] + [app.main.data.messages :as msg] [app.main.data.modal :as modal] [app.main.refs :as refs] [app.main.store :as st] @@ -18,24 +19,21 @@ [app.util.dom :as dom] [app.util.i18n :as i18n :refer [tr]] [app.util.router :as rt] - [cljs.spec.alpha :as s] [rumext.v2 :as mf])) -(s/def ::project some?) -(s/def ::show? boolean?) -(s/def ::on-edit fn?) -(s/def ::on-menu-close fn?) -(s/def ::top (s/nilable ::us/number)) -(s/def ::left (s/nilable ::us/number)) -(s/def ::on-import fn?) - -(s/def ::project-menu - (s/keys :req-un [::project ::show? ::on-edit ::on-menu-close] - :opt-un [::top ::left ::on-import])) +(def schema:project-menu + [:map {:title "UIProjectMenu"} + [:project some?] + [:show? :boolean] + [:on-menu-close {:optional true} ::sm/fn] + [:on-error {:optional true} ::sm/fn] + [:top {:optional true} [:maybe :double]] + [:left {:optional true} [:maybe :double]] + [:on-import {:optional true} ::sm/fn]]) (mf/defc project-menu [{:keys [project show? on-edit on-menu-close top left on-import] :as props}] - (us/verify ::project-menu props) + (dm/assert! (sm/valid? schema:project-menu props)) (let [top (or top 0) left (or left 0) @@ -45,7 +43,7 @@ on-duplicate-success (fn [new-project] - (st/emit! (dm/success (tr "dashboard.success-duplicate-project")) + (st/emit! (msg/success (tr "dashboard.success-duplicate-project")) (rt/nav :dashboard-files {:team-id (:team-id new-project) :project-id (:id new-project)}))) @@ -66,12 +64,12 @@ (fn [team-id] (let [data {:id (:id project) :team-id team-id} mdata {:on-success #(on-move-success team-id)}] - #(st/emit! (dm/success (tr "dashboard.success-move-project")) + #(st/emit! (msg/success (tr "dashboard.success-move-project")) (dd/move-project (with-meta data mdata))))) delete-fn (fn [_] - (st/emit! (dm/success (tr "dashboard.success-delete-project")) + (st/emit! (msg/success (tr "dashboard.success-delete-project")) (dd/delete-project project) (dd/go-to-projects (:team-id project)))) diff --git a/frontend/src/app/main/ui/dashboard/team.cljs b/frontend/src/app/main/ui/dashboard/team.cljs index 9ab16f6fa7..0e1cc3693b 100644 --- a/frontend/src/app/main/ui/dashboard/team.cljs +++ b/frontend/src/app/main/ui/dashboard/team.cljs @@ -517,7 +517,7 @@ (mf/use-fn (mf/deps email team-id) (fn [] - (let [params (with-meta {:emails [email] + (let [params (with-meta {:emails #{email} :team-id team-id :resend? true :role role} diff --git a/frontend/src/app/main/ui/hooks/resize.cljs b/frontend/src/app/main/ui/hooks/resize.cljs index b01a7de450..1782048cae 100644 --- a/frontend/src/app/main/ui/hooks/resize.cljs +++ b/frontend/src/app/main/ui/hooks/resize.cljs @@ -6,9 +6,9 @@ (ns app.main.ui.hooks.resize (:require + [app.common.data.macros :as dm] [app.common.geom.point :as gpt] [app.common.logging :as log] - [app.common.spec :as us] [app.main.ui.context :as ctx] [app.main.ui.hooks :as hooks] [app.util.dom :as dom] @@ -74,7 +74,10 @@ (defn use-resize-observer [callback] - (us/assert! (some? callback) "the `callback` is mandatory") + + (dm/assert! + "expected a valid callback" + (fn? callback)) (let [prev-val-ref (mf/use-ref nil) observer-ref (mf/use-ref nil) diff --git a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs index 5dac6c294c..70ca602751 100644 --- a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs @@ -109,8 +109,9 @@ (defn setup-keyboard [alt? mod? space? z? shift?] (hooks/use-stream ms/keyboard-alt #(reset! alt? %)) - (hooks/use-stream ms/keyboard-mod #((reset! mod? %) - (when-not % (reset! z? false)))) ;; In mac after command+z there is no event for the release of the z key + (hooks/use-stream ms/keyboard-mod #(do + (reset! mod? %) + (when-not % (reset! z? false)))) ;; In mac after command+z there is no event for the release of the z key (hooks/use-stream ms/keyboard-space #(reset! space? %)) (hooks/use-stream ms/keyboard-z #(reset! z? %)) (hooks/use-stream ms/keyboard-shift #(reset! shift? %))) diff --git a/frontend/src/app/main/ui/workspace/viewport/snap_points.cljs b/frontend/src/app/main/ui/workspace/viewport/snap_points.cljs index a572608643..a614d83543 100644 --- a/frontend/src/app/main/ui/workspace/viewport/snap_points.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/snap_points.cljs @@ -7,9 +7,9 @@ (ns app.main.ui.workspace.viewport.snap-points (:require [app.common.data :as d] + [app.common.data.macros :as dm] [app.common.geom.shapes :as gsh] [app.common.pages.helpers :as cph] - [app.common.spec :as us] [app.common.types.shape.layout :as ctl] [app.main.snap :as snap] [app.util.geom.snap-points :as sp] @@ -155,7 +155,7 @@ (mf/defc snap-points {::mf/wrap [mf/memo]} [{:keys [layout zoom objects selected page-id drawing focus] :as props}] - (us/assert set? selected) + (dm/assert! (set? selected)) (let [shapes (into [] (keep (d/getf objects)) selected) filter-shapes diff --git a/frontend/src/app/util/text_editor.cljs b/frontend/src/app/util/text_editor.cljs index 157048186e..42708f63f4 100644 --- a/frontend/src/app/util/text_editor.cljs +++ b/frontend/src/app/util/text_editor.cljs @@ -155,13 +155,13 @@ (impl/insertText state text (clj->js attrs) (clj->js style)))) (defn get-style-override [state] - (.getInlineStyleOverride state)) + (.getInlineStyleOverride ^js state)) (defn set-style-override [state inline-style] (impl/setInlineStyleOverride state inline-style)) (defn content-equals [state other] - (.equals (.getCurrentContent state) (.getCurrentContent other))) + (.equals (.getCurrentContent ^js state) (.getCurrentContent ^js other))) (defn selection-equals [state other] (impl/selectionEquals (.getSelection state) (.getSelection other))) diff --git a/frontend/src/app/util/time.cljs b/frontend/src/app/util/time.cljs index cdb92386de..eb604af392 100644 --- a/frontend/src/app/util/time.cljs +++ b/frontend/src/app/util/time.cljs @@ -163,11 +163,11 @@ (extend-protocol IPrintWithWriter DateTime (-pr-writer [p writer _] - (-write writer (str/fmt "#stks/datetime \"%s\"" (format p :iso)))) + (-write writer (str/fmt "#app/instant \"%s\"" (format p :iso)))) Duration (-pr-writer [p writer _] - (-write writer (str/fmt "#stks/duration \"%s\"" (format p :iso))))) + (-write writer (str/fmt "#app/duration \"%s\"" (format p :iso))))) (defn- resolve-format [v] @@ -239,6 +239,6 @@ (when v (let [v (if (datetime? v) (format v :date) v) locale (obj/get locales locale) - f (.date (.-formatLong locale) v)] - (->> #js {:locale locale} - (dateFnsFormat v f)))))) + f (-> (.-formatLong ^js locale) + (.date v))] + (dateFnsFormat v f #js {:locale locale}))))) diff --git a/frontend/src/app/worker.cljs b/frontend/src/app/worker.cljs index 49904406c8..8b7c10a265 100644 --- a/frontend/src/app/worker.cljs +++ b/frontend/src/app/worker.cljs @@ -6,8 +6,9 @@ (ns app.worker (:require + [app.common.data.macros :as dm] [app.common.logging :as log] - [app.common.spec :as us] + [app.common.schema :as sm] [app.worker.export] [app.worker.impl :as impl] [app.worker.import] @@ -16,33 +17,29 @@ [app.worker.snaps] [app.worker.thumbnails] [beicon.core :as rx] - [cljs.spec.alpha :as s] [promesa.core :as p])) (log/setup! {:app :info}) ;; --- Messages Handling -(s/def ::cmd keyword?) +(def schema:message + [:map {:title "WorkerMessage"} + [:sender-id ::sm/uuid] + [:payload + [:map + [:cmd :keyword]]] + [:buffer? {:optional true} :boolean]]) -(s/def ::payload - (s/keys :req-un [::cmd])) - -(s/def ::sender-id uuid?) - -(s/def ::buffer? boolean?) - -(s/def ::message - (s/keys - :opt-un [::buffer?] - :req-un [::payload ::sender-id])) +(def message? + (sm/pred-fn schema:message)) (def buffer (rx/subject)) (defn- handle-message "Process the message and returns to the client" [{:keys [sender-id payload] :as message}] - (us/assert ::message message) + (dm/assert! (message? message)) (letfn [(post [msg] (let [msg (-> msg (assoc :reply-to sender-id) (wm/encode))] (.postMessage js/self msg))) @@ -88,7 +85,7 @@ (defn- drop-message "Sends to the client a notification that its messages have been dropped" [{:keys [sender-id] :as message}] - (us/assert ::message message) + (dm/assert! (message? message)) (.postMessage js/self (wm/encode {:reply-to sender-id :dropped true}))) diff --git a/frontend/test/frontend_tests/state_components_sync_test.cljs b/frontend/test/frontend_tests/state_components_sync_test.cljs index cf68400422..d8191c93e7 100644 --- a/frontend/test/frontend_tests/state_components_sync_test.cljs +++ b/frontend/test/frontend_tests/state_components_sync_test.cljs @@ -3,7 +3,7 @@ ;; file, You can obtain one at http://mozilla.org/MPL/2.0/. ;; ;; Copyright (c) KALEIDOS INC - + (ns frontend-tests.state-components-sync-test (:require [app.common.colors :as clr] @@ -49,15 +49,15 @@ ;; false true) ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1* ---> Rect 1 - ; #{:fill-group} - ; - ; [Rect 1] + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1* ---> Rect 1 + ; #{:fill-group} + ; + ; [Rect 1] ; page1 / Rect 1 ; (let [[[group shape1] [c-group c-shape1] _component] @@ -86,7 +86,7 @@ (merge shape {:fill-color clr/test :fill-opacity 0.5}))) :the/end)))) - + (t/deftest test-touched-children-add (t/async done (let [state (-> thp/initial-state @@ -109,18 +109,18 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1* #--> Rect 1 - ; #{:shapes-group} - ; Circle 1 - ; Rect 1 ---> Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 - ; + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1* #--> Rect 1 + ; #{:shapes-group} + ; Circle 1 + ; Rect 1 ---> Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 + ; (let [[[group shape1 shape2] [c-group c-shape1] _component] (thl/resolve-instance-and-main-allow-dangling new-state @@ -168,16 +168,16 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Component 1 - ; Rect 1 - ; Rect 2 + ; [Page] + ; Root Frame + ; Component 1 + ; Rect 1 + ; Rect 2 ; Component 1 #--> Component 1 ; Rect 1* ---> Rect 1 ; #{:visibility-group} ; Rect 2 ---> Rect 2 - ; + ; ; [Component 1] ; page1 / Component 1 ; @@ -236,20 +236,20 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Component 1 - ; Rect 1 - ; Rect 2 - ; Rect 3 - ; Component 1* #--> Component 1 - ; #{:shapes-group} - ; Rect 2 ---> Rect 2 - ; Rect 1 ---> Rect 1 - ; Rect 3 ---> Rect 3 - ; - ; [Component 1] - ; page1 / Component 1 + ; [Page] + ; Root Frame + ; Component 1 + ; Rect 1 + ; Rect 2 + ; Rect 3 + ; Component 1* #--> Component 1 + ; #{:shapes-group} + ; Rect 2 ---> Rect 2 + ; Rect 1 ---> Rect 1 + ; Rect 3 ---> Rect 3 + ; + ; [Component 1] + ; page1 / Component 1 ; (let [[[group shape1 shape2 shape3] [c-group c-shape1 c-shape2 c-shape3] _component] @@ -376,25 +376,25 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1* ---> Circle 1 - ; #{:fill-group} - ; - ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Group] - ; page1 / Group + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1* ---> Circle 1 + ; #{:fill-group} + ; + ; [Rect 1] + ; page1 / Rect 1 + ; + ; [Group] + ; page1 / Group ; (let [[[instance2 instance1 shape1 shape2] [c-instance2 c-instance1 c-shape1 c-shape2] _component] @@ -468,22 +468,22 @@ ; Expected shape tree: ; ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group ; Rect 1 #--> Rect 1 ; Rect 1 ---> Rect 1 - ; Circle 1 + ; Circle 1 ; Group #--> Group ; Rect 1 @--> Rect 1 ; Rect 1* ---> Rect 1 ; #{:fill-group} ; Circle 1 ---> Circle 1 - ; + ; ; [Rect 1] ; page1 / Rect 1 - ; + ; ; [Group] ; page1 / Group ; @@ -558,25 +558,25 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1* ---> Rect 1 - ; #{:fill-group} - ; Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 ---> Circle 1 - ; - ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Group] - ; page1 / Group + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1* ---> Rect 1 + ; #{:fill-group} + ; Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 ---> Circle 1 + ; + ; [Rect 1] + ; page1 / Rect 1 + ; + ; [Group] + ; page1 / Group ; (let [[[instance2 instance1 shape1 shape2] [c-instance2 c-instance1 c-shape1 c-shape2] _component] @@ -641,16 +641,16 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; - ; - ; [Rect 1] - ; page1 / Rect 1 + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [[[group shape1] [c-group c-shape1] _component] (thl/resolve-instance-and-main @@ -702,15 +702,15 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [[[group shape1] [c-group c-shape1] _component] (thl/resolve-instance-and-main @@ -758,16 +758,16 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Component 1 - ; Rect 1 - ; Rect 2 - ; Component 1 #--> Component 1 - ; Rect 1 ---> Rect 1 - ; Rect 2 ---> Rect 2 - ; - ; [Component 1] + ; [Page] + ; Root Frame + ; Component 1 + ; Rect 1 + ; Rect 2 + ; Component 1 #--> Component 1 + ; Rect 1 ---> Rect 1 + ; Rect 2 ---> Rect 2 + ; + ; [Component 1] ; page1 / Component 1 ; (let [[[group shape1 shape2] @@ -826,19 +826,19 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Component 1 - ; Rect 1 - ; Rect 2 - ; Rect 3 - ; Component 1 #--> Component 1 - ; Rect 1 ---> Rect 1 - ; Rect 2 ---> Rect 2 - ; Rect 3 ---> Rect 3 - ; - ; [Component 1] - ; page1 / Component 1 + ; [Page] + ; Root Frame + ; Component 1 + ; Rect 1 + ; Rect 2 + ; Rect 3 + ; Component 1 #--> Component 1 + ; Rect 1 ---> Rect 1 + ; Rect 2 ---> Rect 2 + ; Rect 3 ---> Rect 3 + ; + ; [Component 1] + ; page1 / Component 1 ; (let [[[group shape1 shape2 shape3] [c-group c-shape1 c-shape2 c-shape3] _component] (thl/resolve-instance-and-main @@ -964,22 +964,22 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 ---> Circle 1 - ; + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 ---> Circle 1 + ; ; [Rect 1] ; page1 / Rect 1 - ; + ; ; [Group] ; page1 / Group ; @@ -1055,23 +1055,23 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 ---> Circle 1 - ; - ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Group] + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 ---> Circle 1 + ; + ; [Rect 1] + ; page1 / Rect 1 + ; + ; [Group] ; page1 / Group ; (let [[[instance2 instance1 shape1 shape2] @@ -1147,26 +1147,26 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1* ---> Rect 1 - ; #{:fill-group} - ; Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; (remote-synced) - ; Rect 1 ---> Rect 1 - ; (remote-synced) - ; Circle 1 ---> Circle 1 - ; - ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Group] + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1* ---> Rect 1 + ; #{:fill-group} + ; Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; (remote-synced) + ; Rect 1 ---> Rect 1 + ; (remote-synced) + ; Circle 1 ---> Circle 1 + ; + ; [Rect 1] + ; page1 / Rect 1 + ; + ; [Group] ; page1 / Group ; (let [[[instance2 instance1 shape1 shape2] @@ -1235,16 +1235,16 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 <== (not updated) - ; - ; [Rect 1] + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 <== (not updated) + ; + ; [Rect 1] ; page1 / Rect 1 ; (let [[[main1 shape1] [c-main1 c-shape1] component1] @@ -1333,16 +1333,16 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; - ; [Rect 1] + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; + ; [Rect 1] ; page1 / Rect 1 ; (let [[[main1 shape1] [c-main1 c-shape1] component1] @@ -1431,18 +1431,18 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1* ---> Rect 1 - ; #{:stroke-group} - ; - ; [Rect 1] - ; page1 / Rect 1 + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1* ---> Rect 1 + ; #{:stroke-group} + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [[[main1 shape1] [c-main1 c-shape1] component1] (thl/resolve-instance-and-main @@ -1532,19 +1532,19 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Circle 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Circle 1 ---> Circle 1 - ; Rect 1 ---> Rect 1 - ; Rect 1 #--> Rect 1 - ; Circle 1 ---> Circle 1 - ; Rect 1 ---> Rect 1 - ; - ; [Rect 1] + ; [Page] + ; Root Frame + ; Rect 1 + ; Circle 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Circle 1 ---> Circle 1 + ; Rect 1 ---> Rect 1 + ; Rect 1 #--> Rect 1 + ; Circle 1 ---> Circle 1 + ; Rect 1 ---> Rect 1 + ; + ; [Rect 1] ; page1 / Rect 1 ; (let [[[main1 shape1 shape2] @@ -1637,20 +1637,20 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Component 1 - ; Rect 1 - ; Rect 2 - ; Component 1 #--> Component 1 - ; Rect 1 ---> Rect 1 - ; Rect 2 ---> Rect 2 - ; Component 1 #--> Component 1 - ; Rect 1 ---> Rect 1 - ; Rect 2 ---> Rect 2 - ; - ; [Component 1] - ; page1 / Component 1 + ; [Page] + ; Root Frame + ; Component 1 + ; Rect 1 + ; Rect 2 + ; Component 1 #--> Component 1 + ; Rect 1 ---> Rect 1 + ; Rect 2 ---> Rect 2 + ; Component 1 #--> Component 1 + ; Rect 1 ---> Rect 1 + ; Rect 2 ---> Rect 2 + ; + ; [Component 1] + ; page1 / Component 1 ; (let [[[main1 shape1 shape2] [c-main1 c-shape1 c-shape2] component1] @@ -1751,22 +1751,22 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Component 1 - ; Rect 2 - ; Rect 1 - ; Rect 3 - ; Component 1 #--> Component 1 - ; Rect 2 ---> Rect 2 - ; Rect 1 ---> Rect 1 - ; Rect 3 ---> Rect 3 - ; Component 1 #--> Component 1 - ; Rect 2 ---> Rect 2 - ; Rect 1 ---> Rect 1 - ; Rect 3 ---> Rect 3 - ; - ; [Component 1] + ; [Page] + ; Root Frame + ; Component 1 + ; Rect 2 + ; Rect 1 + ; Rect 3 + ; Component 1 #--> Component 1 + ; Rect 2 ---> Rect 2 + ; Rect 1 ---> Rect 1 + ; Rect 3 ---> Rect 3 + ; Component 1 #--> Component 1 + ; Rect 2 ---> Rect 2 + ; Rect 1 ---> Rect 1 + ; Rect 3 ---> Rect 3 + ; + ; [Component 1] ; page1 / Component 1 ; (let [[[main1 shape1 shape2 shape3] @@ -1873,7 +1873,7 @@ ; Expected shape tree: ; ; [Page] - ; Root Frame + ; Root Frame ; Rect 1 #--> Rect 1 ; Rect 1 ---> Rect 1 ; Rect 1 #--> Rect 1 @@ -1883,7 +1883,7 @@ (thl/resolve-instance-and-main new-state (thp/id :instance1)) - + [[instance2 shape2] [_c-instance2 _c-shape2] _component2] (thl/resolve-instance-and-main new-state @@ -1954,27 +1954,27 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 ---> Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 ---> Circle 1 - ; - ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Group] + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 ---> Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 ---> Circle 1 + ; + ; [Rect 1] + ; page1 / Rect 1 + ; + ; [Group] ; page1 / Group ; (let [[[instance2 instance1 shape1 shape2] @@ -1982,7 +1982,7 @@ (thl/resolve-instance-and-main new-state (thp/id :instance2)) - + [[instance4 instance3 shape3 shape4] [_c-instance4 _c-instance3 _c-shape3 _c-shape4] _component2] (thl/resolve-instance-and-main @@ -2072,27 +2072,27 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 ---> Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 ---> Circle 1 - ; - ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Group] + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 ---> Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 ---> Circle 1 + ; + ; [Rect 1] + ; page1 / Rect 1 + ; + ; [Group] ; page1 / Group ; (let [[[instance2 instance1 shape1 shape2] @@ -2100,7 +2100,7 @@ (thl/resolve-instance-and-main new-state (thp/id :instance2)) - + [[instance4 instance3 shape3 shape4] [_c-instance4 _c-instance3 _c-shape3 _c-shape4] _component2] (thl/resolve-instance-and-main @@ -2191,37 +2191,37 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; (remote-synced) - ; Rect 1 ---> Rect 1 - ; (remote-synced) - ; Circle 1 ---> Circle 1 - ; Group #--> Group - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Circle 1 ---> Circle 1 - ; - ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Group] - ; page1 / Group + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; (remote-synced) + ; Rect 1 ---> Rect 1 + ; (remote-synced) + ; Circle 1 ---> Circle 1 + ; Group #--> Group + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Circle 1 ---> Circle 1 + ; + ; [Rect 1] + ; page1 / Rect 1 + ; + ; [Group] + ; page1 / Group ; (let [[[instance2 instance1 shape1 shape2] [c-instance2 c-instance1 c-shape1 c-shape2] _component1] (thl/resolve-instance-and-main new-state (thp/id :instance2)) - + [[instance4 instance3 shape3 shape4] [_c-instance4 _c-instance3 _c-shape3 _c-shape4] _component2] (thl/resolve-instance-and-main diff --git a/frontend/test/frontend_tests/state_components_test.cljs b/frontend/test/frontend_tests/state_components_test.cljs index d3e9701e99..36286c18cb 100644 --- a/frontend/test/frontend_tests/state_components_test.cljs +++ b/frontend/test/frontend_tests/state_components_test.cljs @@ -82,14 +82,14 @@ store (the/prepare-store state done (fn [new-state] ; Expected shape tree: - ; [Page] - ; Root Frame - ; Component 1 - ; Rect 1 - ; Rect-2 - ; - ; [Component 1] - ; page1 / Component 1 + ; [Page] + ; Root Frame + ; Component 1 + ; Rect 1 + ; Rect-2 + ; + ; [Component 1] + ; page1 / Component 1 ; (let [shape1 (thp/get-shape new-state :shape1) @@ -136,14 +136,14 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Group - ; Rect 1 - ; Rect-2 - ; - ; [Group] - ; page1 / Group + ; [Page] + ; Root Frame + ; Group + ; Rect 1 + ; Rect-2 + ; + ; [Group] + ; page1 / Group ; (let [[[group shape1 shape2] [c-group c-shape1 c-shape2] @@ -184,17 +184,17 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [[[instance1 shape1] [c-instance1 c-shape1] @@ -247,13 +247,13 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; - ; [Renamed component] - ; page1 / Rect 1 + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; + ; [Renamed component] + ; page1 / Rect 1 ; (let [libs (wsh/get-libraries new-state) component (ctf/get-component libs @@ -284,18 +284,18 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 + ; page1 / Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [new-component-id (->> (get-in new-state [:workspace-data @@ -340,10 +340,10 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 #--> ? - ; Rect 1 ---> ? + ; [Page] + ; Root Frame + ; Rect 1 #--> ? + ; Rect 1 ---> ? ; (let [[main1 shape1] (thl/resolve-noninstance @@ -406,15 +406,15 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; Rect 1 - ; Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 + ; [Page] + ; Root Frame + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; Rect 1 + ; Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [[[instance1 shape2] [c-instance1 c-shape2] component1] (thl/resolve-instance-and-main @@ -459,15 +459,15 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 + ; Rect 1 ---> Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [new-instance-id (-> new-state wsh/lookup-selected @@ -563,15 +563,15 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 - ; Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 + ; Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [[instance2 shape1] (thl/resolve-noninstance @@ -598,17 +598,17 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Group - ; Rect 1 - ; Rect 1 - ; + ; [Page] + ; Root Frame + ; Group + ; Rect 1 + ; Rect 1 + ; ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Group] - ; page1 / Group + ; page1 / Rect 1 + ; + ; [Group] + ; page1 / Group ; (let [page (thp/current-page new-state) shape1 (thp/get-shape new-state :shape1) @@ -658,20 +658,20 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Rect 1 - ; Rect 1 - ; Rect 1 - ; Rect 1 #--> Rect 1 - ; Rect 1 @--> Rect 1 - ; Rect 1 ---> Rect 1 - ; + ; [Page] + ; Root Frame + ; Rect 1 + ; Rect 1 + ; Rect 1 + ; Rect 1 #--> Rect 1 + ; Rect 1 @--> Rect 1 + ; Rect 1 ---> Rect 1 + ; ; [Rect 1] - ; page1 / Rect 1 - ; - ; [Rect 1] - ; page1 / Rect 1 + ; page1 / Rect 1 + ; + ; [Rect 1] + ; page1 / Rect 1 ; (let [new-instance-id (-> new-state wsh/lookup-selected @@ -724,14 +724,14 @@ (fn [new-state] ; Expected shape tree: ; - ; [Page] - ; Root Frame - ; Group - ; Rect 1 #--> Rect 1 - ; Rect 1 ---> Rect 1 - ; - ; [Group] - ; page1 / Group + ; [Page] + ; Root Frame + ; Group + ; Rect 1 #--> Rect 1 + ; Rect 1 ---> Rect 1 + ; + ; [Group] + ; page1 / Group ; (let [instance1 (thp/get-shape new-state :instance1) diff --git a/frontend/test/frontend_tests/util_snap_data_test.cljs b/frontend/test/frontend_tests/util_snap_data_test.cljs index 31c4b03bae..f0a656cd08 100644 --- a/frontend/test/frontend_tests/util_snap_data_test.cljs +++ b/frontend/test/frontend_tests/util_snap_data_test.cljs @@ -427,4 +427,5 @@ (t/is (= (count result-zero-x-2) 1)) (t/is (= (count result-zero-y-2) 0)) (t/is (= (count result-frame-x-2) 1)) - (t/is (= (count result-frame-y-2) 0))))) + (t/is (= (count result-frame-y-2) 0)))) + )