From 5e961aad60ae8974954c1650d9777670102db520 Mon Sep 17 00:00:00 2001 From: Dark Ops Date: Mon, 12 Aug 2024 13:12:53 +0000 Subject: [PATCH] [skip ci] Automated Deploy of 988e64f1b0e0a8c4d4a1649a0f9a1060a2d71ab1 via CircleCI --- 404.html | 8 +- ...tyles.06f9df3f.css => styles.6025cdcf.css} | 2 +- assets/js/06d8c526.43407486.js | 1 + assets/js/06d8c526.9afa0afd.js | 1 - assets/js/09fa56e2.30423cec.js | 1 + assets/js/09fa56e2.811765aa.js | 1 - assets/js/0b9525aa.6ff1cbd0.js | 1 + assets/js/0b9525aa.7a309b5d.js | 1 - assets/js/1426.3c555032.js | 1 - ...b3368.85ed8c9d.js => 14eb3368.c4c20674.js} | 2 +- .../js/{1772.5c30b0a3.js => 1772.fbaa28b1.js} | 2 +- ...96441.cb1078fe.js => 17896441.23c148c7.js} | 2 +- assets/js/1a4e3797.67c5fd4f.js | 2 + assets/js/1a4e3797.67c5fd4f.js.LICENSE.txt | 1 + assets/js/1a4e3797.a4c3c677.js | 2 - assets/js/1a4e3797.a4c3c677.js.LICENSE.txt | 1 - assets/js/1a9698d7.1a107de3.js | 1 - assets/js/1a9698d7.66a63dab.js | 1 + assets/js/277ac59f.c06ad6fc.js | 1 - assets/js/277ac59f.d7bebe24.js | 1 + assets/js/28fb0ad1.87840ee0.js | 1 + assets/js/28fb0ad1.a0262e41.js | 1 - assets/js/29a0dee3.0bcf4f70.js | 1 - assets/js/29a0dee3.8150fa4b.js | 1 + assets/js/32b6348c.471b00f6.js | 1 - assets/js/32b6348c.d0356ddd.js | 1 + assets/js/4483.4eb89c89.js | 1 + assets/js/5127552d.27a4cece.js | 1 - assets/js/5127552d.3db0cba6.js | 1 + assets/js/5e95c892.37af8b01.js | 1 - assets/js/5e95c892.f71fc95c.js | 1 + assets/js/784c7ef0.608aa09c.js | 1 + assets/js/784c7ef0.b0b3f43a.js | 1 - assets/js/80e8e960.3927b593.js | 1 + assets/js/80e8e960.eba66208.js | 1 - assets/js/86245a5e.64098724.js | 1 - assets/js/86245a5e.935ebe54.js | 1 + assets/js/a7bd4aaa.4063089e.js | 1 - assets/js/a7bd4aaa.56440646.js | 1 + assets/js/a94703ab.5cb50617.js | 1 + assets/js/a94703ab.d687a6a2.js | 1 - assets/js/b42d9a9c.2b0dffd6.js | 1 - assets/js/b42d9a9c.de27a2d2.js | 1 + assets/js/b95b9c00.4944e23b.js | 1 - assets/js/b95b9c00.dcfc5214.js | 1 + assets/js/ba298920.7d84bed8.js | 1 + assets/js/ba298920.faaab3d9.js | 1 - assets/js/bcbc79f4.24c6010a.js | 1 + assets/js/bcbc79f4.8eab3181.js | 1 - assets/js/bff81009.28e403a2.js | 1 + assets/js/bff81009.91b1ce9e.js | 1 - assets/js/d15cb1ed.30ff97ae.js | 1 + assets/js/d15cb1ed.c5fb5a3e.js | 1 - assets/js/d33dcbd3.22c05f58.js | 1 + assets/js/d33dcbd3.f240e6dd.js | 1 - assets/js/e1c588c6.9cc6cb1b.js | 1 + assets/js/e1c588c6.fcfcd422.js | 1 - assets/js/f32a52c7.618290c4.js | 1 - assets/js/f32a52c7.6cb526bb.js | 1 + assets/js/f5438704.baeb859c.js | 1 - assets/js/f5438704.bdd9a463.js | 1 + assets/js/main.4c54e680.js | 2 - assets/js/main.901b2eb6.js | 2 + ...CENSE.txt => main.901b2eb6.js.LICENSE.txt} | 0 ...n.222a74c4.js => runtime~main.8b60bc70.js} | 2 +- category/discussion.html | 8 +- category/how-to.html | 8 +- category/reference.html | 8 +- category/tutorial.html | 8 +- category/walk-throughs.html | 8 +- changelog.html | 8 +- changelog/release-1.html | 112 +++++++++--------- changelog/release-10.html | 20 ++-- changelog/release-2.html | 44 +++---- changelog/release-3.html | 22 ++-- changelog/release-4.html | 18 +-- changelog/release-5.html | 24 ++-- changelog/release-6.html | 36 +++--- changelog/release-7.html | 22 ++-- changelog/release-8.html | 20 ++-- changelog/release-9.html | 20 ++-- contributing/adding-a-function.html | 16 +-- contributing/adding-a-language-feature.html | 30 ++--- contributing/adding-a-refactoring.html | 10 +- contributing/adding-your-first-test.html | 12 +- contributing/debugging.html | 18 +-- contributing/fsharp-for-dark-developers.html | 70 +++++------ contributing/general-concepts.html | 22 ++-- contributing/getting-started.html | 8 +- contributing/glossary.html | 12 +- contributing/if-you-dont-know-our-stack.html | 24 ++-- contributing/making-a-pull-request.html | 14 +-- .../making-your-first-pull-request.html | 18 +-- contributing/new-release-checklist.html | 14 +-- contributing/next-contribution.html | 20 ++-- contributing/repo-layout.html | 12 +- contributing/setting-up-the-repo.html | 8 +- contributing/tour-of-backend.html | 20 ++-- contributing/troubleshooting.html | 8 +- discussion/dark-backend-components.html | 24 ++-- discussion/error-handling.html | 28 ++--- discussion/functional-aspects.html | 30 ++--- discussion/languageoverview.html | 14 +-- discussion/queues.html | 24 ++-- discussion/structured-editing.html | 36 +++--- discussion/trace-driven-development.html | 24 ++-- discussion/unique-aspects.html | 14 +-- discussion/when-dark.html | 22 ++-- how-to/collaborate.html | 16 +-- how-to/cors.html | 28 ++--- how-to/custom-domains.html | 18 +-- how-to/feature-flags.html | 24 ++-- how-to/static-assets.html | 32 ++--- how-to/write-tests.html | 8 +- introduction.html | 14 +-- next/category/discussion.html | 8 +- next/category/how-to-guides.html | 8 +- next/category/reference.html | 8 +- next/category/step-by-step-guides.html | 8 +- next/category/tutorials.html | 8 +- next/changelog.html | 8 +- next/discussion/base.html | 8 +- next/how-to/base.html | 8 +- next/how-to/walk-throughs/base.html | 8 +- next/introduction.html | 14 +-- next/reference/cloud-framework.html | 8 +- next/reference/darklang-cli.html | 8 +- next/reference/language-reference.html | 8 +- .../language-reference/built-in-types.html | 16 +-- .../built-in-types/bool.html | 58 ++++----- .../built-in-types/enum.html | 8 +- .../built-in-types/int.html | 30 ++--- .../built-in-types/record.html | 8 +- .../language-reference/operators.html | 8 +- .../language-reference/option-result.html | 8 +- .../language-reference/type-checking.html | 8 +- next/tutorials/first-dark-application.html | 8 +- reference/backward-compatibility.html | 26 ++-- .../cheatsheets/javascript-cheatsheet.html | 22 ++-- reference/cheatsheets/python-cheatsheet.html | 22 ++-- reference/desktop-client.html | 8 +- reference/faqs.html | 42 +++---- reference/framework/cron.html | 28 ++--- reference/framework/datastores.html | 36 +++--- reference/framework/http-framework.html | 22 ++-- reference/framework/workers.html | 42 +++---- reference/function-reference.html | 10 +- reference/httpclient.html | 16 +-- reference/keyboard-mapping.html | 16 +-- reference/languagedetails.html | 80 ++++++------- reference/packages.html | 94 +++++++-------- reference/sample-canvases.html | 20 ++-- reference/sharing-dark.html | 18 +-- reference/support.html | 12 +- reference/terms-of-service.html | 16 +-- search.html | 8 +- tutorials/call-external-api.html | 8 +- tutorials/complete-first-application.html | 8 +- tutorials/create-daily-job-cron-handler.html | 8 +- tutorials/create-http-handler.html | 8 +- tutorials/create-tool-repl.html | 8 +- tutorials/extract-function.html | 8 +- tutorials/first-dark-application.html | 12 +- tutorials/handle-error-errorrail.html | 8 +- tutorials/next-steps.html | 8 +- tutorials/process-background-jobs-worker.html | 8 +- tutorials/save-data-to-datastore.html | 8 +- walk-throughs/airtable.html | 20 ++-- walk-throughs/external-db.html | 16 +-- walk-throughs/freshdesk.html | 22 ++-- walk-throughs/ifttt-events.html | 14 +-- walk-throughs/react-app.html | 36 +++--- walk-throughs/slack-app.html | 24 ++-- walk-throughs/slack-asana.html | 20 ++-- walk-throughs/slack-channel-check.html | 14 +-- walk-throughs/slack-trello.html | 20 ++-- walk-throughs/twilio-app.html | 34 +++--- 177 files changed, 1135 insertions(+), 1135 deletions(-) rename assets/css/{styles.06f9df3f.css => styles.6025cdcf.css} (54%) create mode 100644 assets/js/06d8c526.43407486.js delete mode 100644 assets/js/06d8c526.9afa0afd.js create mode 100644 assets/js/09fa56e2.30423cec.js delete mode 100644 assets/js/09fa56e2.811765aa.js create mode 100644 assets/js/0b9525aa.6ff1cbd0.js delete mode 100644 assets/js/0b9525aa.7a309b5d.js delete mode 100644 assets/js/1426.3c555032.js rename assets/js/{14eb3368.85ed8c9d.js => 14eb3368.c4c20674.js} (97%) rename assets/js/{1772.5c30b0a3.js => 1772.fbaa28b1.js} (79%) rename assets/js/{17896441.cb1078fe.js => 17896441.23c148c7.js} (66%) create mode 100644 assets/js/1a4e3797.67c5fd4f.js create mode 100644 assets/js/1a4e3797.67c5fd4f.js.LICENSE.txt delete mode 100644 assets/js/1a4e3797.a4c3c677.js delete mode 100644 assets/js/1a4e3797.a4c3c677.js.LICENSE.txt delete mode 100644 assets/js/1a9698d7.1a107de3.js create mode 100644 assets/js/1a9698d7.66a63dab.js delete mode 100644 assets/js/277ac59f.c06ad6fc.js create mode 100644 assets/js/277ac59f.d7bebe24.js create mode 100644 assets/js/28fb0ad1.87840ee0.js delete mode 100644 assets/js/28fb0ad1.a0262e41.js delete mode 100644 assets/js/29a0dee3.0bcf4f70.js create mode 100644 assets/js/29a0dee3.8150fa4b.js delete mode 100644 assets/js/32b6348c.471b00f6.js create mode 100644 assets/js/32b6348c.d0356ddd.js create mode 100644 assets/js/4483.4eb89c89.js delete mode 100644 assets/js/5127552d.27a4cece.js create mode 100644 assets/js/5127552d.3db0cba6.js delete mode 100644 assets/js/5e95c892.37af8b01.js create mode 100644 assets/js/5e95c892.f71fc95c.js create mode 100644 assets/js/784c7ef0.608aa09c.js delete mode 100644 assets/js/784c7ef0.b0b3f43a.js create mode 100644 assets/js/80e8e960.3927b593.js delete mode 100644 assets/js/80e8e960.eba66208.js delete mode 100644 assets/js/86245a5e.64098724.js create mode 100644 assets/js/86245a5e.935ebe54.js delete mode 100644 assets/js/a7bd4aaa.4063089e.js create mode 100644 assets/js/a7bd4aaa.56440646.js create mode 100644 assets/js/a94703ab.5cb50617.js delete mode 100644 assets/js/a94703ab.d687a6a2.js delete mode 100644 assets/js/b42d9a9c.2b0dffd6.js create mode 100644 assets/js/b42d9a9c.de27a2d2.js delete mode 100644 assets/js/b95b9c00.4944e23b.js create mode 100644 assets/js/b95b9c00.dcfc5214.js create mode 100644 assets/js/ba298920.7d84bed8.js delete mode 100644 assets/js/ba298920.faaab3d9.js create mode 100644 assets/js/bcbc79f4.24c6010a.js delete mode 100644 assets/js/bcbc79f4.8eab3181.js create mode 100644 assets/js/bff81009.28e403a2.js delete mode 100644 assets/js/bff81009.91b1ce9e.js create mode 100644 assets/js/d15cb1ed.30ff97ae.js delete mode 100644 assets/js/d15cb1ed.c5fb5a3e.js create mode 100644 assets/js/d33dcbd3.22c05f58.js delete mode 100644 assets/js/d33dcbd3.f240e6dd.js create mode 100644 assets/js/e1c588c6.9cc6cb1b.js delete mode 100644 assets/js/e1c588c6.fcfcd422.js delete mode 100644 assets/js/f32a52c7.618290c4.js create mode 100644 assets/js/f32a52c7.6cb526bb.js delete mode 100644 assets/js/f5438704.baeb859c.js create mode 100644 assets/js/f5438704.bdd9a463.js delete mode 100644 assets/js/main.4c54e680.js create mode 100644 assets/js/main.901b2eb6.js rename assets/js/{main.4c54e680.js.LICENSE.txt => main.901b2eb6.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.222a74c4.js => runtime~main.8b60bc70.js} (64%) diff --git a/404.html b/404.html index 7a888fc5..e2efd097 100644 --- a/404.html +++ b/404.html @@ -2,15 +2,15 @@ - + Dark Documentation - - - + + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/css/styles.06f9df3f.css b/assets/css/styles.6025cdcf.css similarity index 54% rename from assets/css/styles.06f9df3f.css rename to assets/css/styles.6025cdcf.css index 6ddc6ed4..5c3bddcd 100644 --- a/assets/css/styles.06f9df3f.css +++ b/assets/css/styles.6025cdcf.css @@ -1 +1 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,.hash-link{-webkit-user-select:none;-moz-user-select:none}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-code-font-size:95%;--ifm-color-primary:#5f3e6b;--ifm-color-primary-dark:#563860;--ifm-color-primary-darker:#51355b;--ifm-color-primary-darkest:#432b4b;--ifm-color-primary-light:#684476;--ifm-color-primary-lighter:#6d477b;--ifm-color-primary-lightest:#7b518b;--darklang-white:#f8f8f8;--darklang-black:#2f2f2f;--darklang-darkBackground-grey:#6f6f6f;--darklang-lightBackground-grey:#8f8f8f;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%;height:auto}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration);color:#6d74c5}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{-moz-column-gap:var(--ifm-avatar-intro-margin);column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:-moz-any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.logos p{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::-moz-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{-moz-column-gap:var(--ifm-pagination-page-spacing);column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.logos .darkBackground,.logos .darkBackground .spacer{color:var(--darklang-darkBackground-grey)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.302);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.logos{display:flex;flex-direction:row;flex-wrap:wrap;margin:2em 0;width:100%}.logos .colors,.logos .logo,.logos .wordmark{height:13rem;padding:1.5em;width:50%}.logos a{font-size:.8rem;font-weight:700}.logos .logo,.logos .wordmark{align-items:center;display:flex;flex-direction:column;justify-content:center;position:relative}.logos .logo img,.logos .wordmark img{height:8rem;width:auto}.logos .spacer{padding-left:.4rem;padding-right:.4rem}.logos .darkBackground{background:var(--darklang-black)}.logos .darkBackground a{color:#6d74c5}.logos .darkBackground a:hover{color:var(--darklang-white)}.logos .lightBackground{background:var(--darklang-white)}.logos .lightBackground .spacer{color:#8f8f8f}.logos .transparent{border-radius:60px;height:1.3rem;line-height:1.3rem;padding:0 .4rem .1rem;position:absolute;right:.7rem;top:.7rem}.logos .darkBackground .transparent{background:#f8f8f833;color:#c8c8c8}.logos .lightBackground .transparent{background:#28282833;color:#282828}.logos .colors{display:flex;flex-direction:row;flex-wrap:wrap;padding-top:2.5rem}.logos .colors .colorName{height:1rem;line-height:1rem;padding-right:1.5rem;text-align:right;width:50%}.logos .colors .swatch{border-radius:60px;font-size:.8rem;height:1.2rem;line-height:1rem;padding:1px 6px 2px}.logos .lightBackground.colors .black{background:var(--darklang-black);color:var(--darklang-white)}.logos .lightBackground.colors .white{background:var(--darklang-white);border:1px solid;border-color:var(--darklang-black);color:var(--darklang-black);padding-top:0}.logos .lightBackground.colors .purple{background:#955b9f;color:var(--darklang-white)}.logos .darkBackground.colors .blue,.logos .lightBackground.colors .blue{background:#747ab9;color:var(--darklang-white)}.logos .darkBackground.colors .black{background:var(--darklang-black);border:1px solid;border-color:var(--darklang-white);color:var(--darklang-white);padding-top:0}.logos .darkBackground.colors .white{background:var(--darklang-white);color:var(--darklang-black)}.logos .darkBackground.colors .purple{background:#8f5ea1;border-width:0;color:var(--darklang-white)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.navbarSearchContainer_Bca1:empty,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.DocSearch-Container a,.tag_zVej:hover{text-decoration:none}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);user-select:none}.DocSearch-Button,.DocSearch-Help{-webkit-user-select:none;-moz-user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 rgba(0,0,0,.15);transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 rgba(0,0,0,.2)}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color)}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{-moz-column-gap:.2rem;column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.containsTaskList_mC6p{list-style:none}.img_ev3q{height:auto}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::-moz-placeholder{color:var(--docsearch-muted-color)}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{color:var(--ifm-color-content-secondary);font-size:.8rem;--ifm-breadcrumb-separator-size-multiplier:1}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:rgba(255,215,142,.25);color:var(--docsearch-hit-color);padding:.09em 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PEFL{display:none;margin:0}.docSidebarContainer_YfHR,.sidebarLogo_isFc{display:none}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Input,.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;font:inherit}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:0 0;border:0;color:var(--docsearch-text-color);flex:1;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Hit-action-button,.DocSearch-Reset{-webkit-appearance:none;-moz-appearance:none;border:0;cursor:pointer}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border-radius:50%;color:var(--docsearch-icon-color);padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:0 0}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border-radius:50%;color:inherit;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}@media only screen and (min-device-width:360px) and (max-device-width:736px);@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media only screen and (min-width:1024px);@media only screen and (min-width:1400px);@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media only screen and (min-width:1500px);@media only screen and (max-width:1023px);@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,.hash-link{-webkit-user-select:none;-moz-user-select:none}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-code-font-size:95%;--ifm-color-primary:#5f3e6b;--ifm-color-primary-dark:#563860;--ifm-color-primary-darker:#51355b;--ifm-color-primary-darkest:#432b4b;--ifm-color-primary-light:#684476;--ifm-color-primary-lighter:#6d477b;--ifm-color-primary-lightest:#7b518b;--darklang-white:#f8f8f8;--darklang-black:#2f2f2f;--darklang-darkBackground-grey:#6f6f6f;--darklang-lightBackground-grey:#8f8f8f;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12);--docsearch-primary-color:var(--ifm-color-primary);--docsearch-text-color:var(--ifm-font-color-base)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%;height:auto}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration);color:#6d74c5}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{-moz-column-gap:var(--ifm-avatar-intro-margin);column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:-moz-any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.logos p{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:1rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::-moz-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{-moz-column-gap:var(--ifm-pagination-page-spacing);column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.logos .darkBackground,.logos .darkBackground .spacer{color:var(--darklang-darkBackground-grey)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec;--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.302);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.logos{display:flex;flex-direction:row;flex-wrap:wrap;margin:2em 0;width:100%}.logos .colors,.logos .logo,.logos .wordmark{height:13rem;padding:1.5em;width:50%}.logos a{font-size:.8rem;font-weight:700}.logos .logo,.logos .wordmark{align-items:center;display:flex;flex-direction:column;justify-content:center;position:relative}.logos .logo img,.logos .wordmark img{height:8rem;width:auto}.logos .spacer{padding-left:.4rem;padding-right:.4rem}.logos .darkBackground{background:var(--darklang-black)}.logos .darkBackground a{color:#6d74c5}.logos .darkBackground a:hover{color:var(--darklang-white)}.logos .lightBackground{background:var(--darklang-white)}.logos .lightBackground .spacer{color:#8f8f8f}.logos .transparent{border-radius:60px;height:1.3rem;line-height:1.3rem;padding:0 .4rem .1rem;position:absolute;right:.7rem;top:.7rem}.logos .darkBackground .transparent{background:#f8f8f833;color:#c8c8c8}.logos .lightBackground .transparent{background:#28282833;color:#282828}.logos .colors{display:flex;flex-direction:row;flex-wrap:wrap;padding-top:2.5rem}.logos .colors .colorName{height:1rem;line-height:1rem;padding-right:1.5rem;text-align:right;width:50%}.logos .colors .swatch{border-radius:60px;font-size:.8rem;height:1.2rem;line-height:1rem;padding:1px 6px 2px}.logos .lightBackground.colors .black{background:var(--darklang-black);color:var(--darklang-white)}.logos .lightBackground.colors .white{background:var(--darklang-white);border:1px solid;border-color:var(--darklang-black);color:var(--darklang-black);padding-top:0}.logos .lightBackground.colors .purple{background:#955b9f;color:var(--darklang-white)}.logos .darkBackground.colors .blue,.logos .lightBackground.colors .blue{background:#747ab9;color:var(--darklang-white)}.logos .darkBackground.colors .black{background:var(--darklang-black);border:1px solid;border-color:var(--darklang-white);color:var(--darklang-white);padding-top:0}.logos .darkBackground.colors .white{background:var(--darklang-white);color:var(--darklang-black)}.logos .darkBackground.colors .purple{background:#8f5ea1;border-width:0;color:var(--darklang-white)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.navbarSearchContainer_Bca1:empty,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.DocSearch-Container a,.tag_zVej:hover{text-decoration:none}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);user-select:none}.DocSearch-Button,.DocSearch-Help{-webkit-user-select:none;-moz-user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 rgba(0,0,0,.15);transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 rgba(0,0,0,.2)}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color)}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{-moz-column-gap:.2rem;column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.containsTaskList_mC6p{list-style:none}.img_ev3q{height:auto}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.searchQueryInput_u2C7,.searchVersionInput_m0Ui{background:var(--docsearch-searchbox-focus-background);border:2px solid var(--ifm-toc-border-color);border-radius:var(--ifm-global-radius);color:var(--docsearch-text-color);font:var(--ifm-font-size-base) var(--ifm-font-family-base);margin-bottom:.5rem;padding:.8rem;transition:border var(--ifm-transition-fast) ease;width:100%}.searchQueryInput_u2C7:focus,.searchVersionInput_m0Ui:focus{border-color:var(--docsearch-primary-color);outline:0}.searchQueryInput_u2C7::-moz-placeholder{color:var(--docsearch-muted-color)}.searchQueryInput_u2C7::placeholder{color:var(--docsearch-muted-color)}.searchResultsColumn_JPFH{font-size:.9rem;font-weight:700}.algoliaLogo_rT1R{max-width:150px}.algoliaLogoPathFill_WdUC{fill:var(--ifm-font-color-base)}.searchResultItem_Tv2o{border-bottom:1px solid var(--ifm-toc-border-color);padding:1rem 0}.searchResultItemHeading_KbCB{font-weight:400;margin-bottom:0}.searchResultItemPath_lhe1{color:var(--ifm-color-content-secondary);font-size:.8rem;--ifm-breadcrumb-separator-size-multiplier:1}.searchResultItemSummary_AEaO{font-style:italic;margin:.5rem 0 0}.loadingSpinner_XVxU{animation:1s linear infinite a;border:.4em solid #eee;border-radius:50%;border-top:.4em solid var(--ifm-color-primary);height:3rem;margin:0 auto;width:3rem}@keyframes a{to{transform:rotate(1turn)}}.loader_vvXV{margin-top:2rem}.search-result-match{background:rgba(255,215,142,.25);color:var(--docsearch-hit-color);padding:.09em 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.collapseSidebarButton_PEFL{display:none;margin:0}.docSidebarContainer_YfHR,.sidebarLogo_isFc{display:none}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.DocSearch-Button,.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Button{background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;font-weight:500;height:36px;justify-content:space-between;padding:0 8px;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:0}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Hit-Tree,.DocSearch-Hit-action,.DocSearch-Hit-icon,.DocSearch-Reset{stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Input,.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;font:inherit}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}.DocSearch--active{overflow:hidden!important}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Link{appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{appearance:none;background:0 0;border:0;color:var(--docsearch-text-color);flex:1;font-size:1.2em;height:100%;outline:0;padding:0 0 0 8px;width:80%}.DocSearch-Hit-action-button,.DocSearch-Reset{-webkit-appearance:none;-moz-appearance:none;border:0;cursor:pointer}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Cancel,.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator,.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset{animation:.1s ease-in forwards b;appearance:none;background:none;border-radius:50%;color:var(--docsearch-icon-color);padding:2px;right:0}.DocSearch-Help,.DocSearch-HitsFooter,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:0 0}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help{font-size:.9em;margin:0;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}.DocSearch-Hit--deleting{opacity:0;transition:.25s linear}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:.25s linear .25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{appearance:none;background:none;border-radius:50%;color:inherit;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:background-color .1s ease-in}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:0;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@keyframes b{0%{opacity:0}to{opacity:1}}.DocSearch-Button{margin:0;transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.DocSearch-Container{z-index:calc(var(--ifm-z-index-fixed) + 1)}@media only screen and (min-device-width:360px) and (max-device-width:736px);@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media only screen and (min-width:1024px);@media only screen and (min-width:1400px);@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media only screen and (min-width:1500px);@media only screen and (max-width:1023px);@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media only screen and (max-width:996px){.searchQueryColumn_RTkw,.searchResultsColumn_JPFH{max-width:60%!important}.searchLogoColumn_rJIA,.searchVersionColumn_ypXd{max-width:40%!important}.searchLogoColumn_rJIA{padding-left:0!important}}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder,.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%;max-height:calc(var(--docsearch-vh,1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh,1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:0;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media screen and (max-width:576px){.searchQueryColumn_RTkw{max-width:100%!important}.searchVersionColumn_ypXd{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit--deleting,.DocSearch-Hit--favoriting{transition:none}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:rgba(0,0,0,.2);transition:none}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/js/06d8c526.43407486.js b/assets/js/06d8c526.43407486.js new file mode 100644 index 00000000..07dea709 --- /dev/null +++ b/assets/js/06d8c526.43407486.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3681],{12490:(n,e,r)=>{r.r(e),r.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>o,frontMatter:()=>a,metadata:()=>t,toc:()=>h});var l=r(85893),s=r(11151);const a={},i="Darklang Release 3",t={id:"changelog/release-3",title:"Darklang Release 3",description:"July 1, 2022",source:"@site/docs-classic/changelog/release-3.md",sourceDirName:"changelog",slug:"/changelog/release-3",permalink:"/changelog/release-3",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-3.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 4 - July, 2022",permalink:"/changelog/release-4"},next:{title:"Release 2 - June 6, 2022",permalink:"/changelog/release-2"}},d={},h=[{value:"Language improvements",id:"language-improvements",level:2},{value:"Stdlib improvements",id:"stdlib-improvements",level:2},{value:"Editor improvements",id:"editor-improvements",level:2},{value:"HTTP Framework improvements",id:"http-framework-improvements",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function c(n){const e={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.a)(),...n.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(e.header,{children:(0,l.jsx)(e.h1,{id:"darklang-release-3",children:"Darklang Release 3"})}),"\n",(0,l.jsx)(e.p,{children:"July 1, 2022"}),"\n",(0,l.jsx)(e.p,{children:"Darklang Release 3 is focused primarily on taking advantage of the recent\nchanges, including new StdLib functions, small languages changes, and sunsetting\nold features."}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsxs)(e.em,{children:["See the ",(0,l.jsx)(e.a,{href:"https://blog.darklang.com/darklang-release-3/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,l.jsx)(e.h2,{id:"language-improvements",children:"Language improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["When a function is called with a runtime error as an argument, return the\nruntime error instead of a new error\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4095",children:"#4095"}),"). This was a significant\nsource of annoyance for devs trying to figure out why their code wasn't\nworking."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["64-bit ints now work end-to-end (previously we had two separate issues with\nnumbers above ",(0,l.jsx)(e.code,{children:"2^53"})," and numbers above ",(0,l.jsx)(e.code,{children:"2^63"}),")\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4209",children:"#4209"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"stdlib-improvements",children:"Stdlib improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow ",(0,l.jsx)(e.code,{children:"HttpClient::basicAuth_v0"})," and ",(0,l.jsx)(e.code,{children:"HttpClient::basicAuth_v1"})," to run in the\neditor (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4147",children:"#4147"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow ",(0,l.jsx)(e.code,{children:"Crypto::sha256_v0"}),", ",(0,l.jsx)(e.code,{children:"Crypto::sha384_v0"})," to run in the editor\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4146",children:"#4146"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["rename ",(0,l.jsx)(e.code,{children:"String::toInt"})," to ",(0,l.jsx)(e.code,{children:"Int::parse_v0"}),", making it work for 64 bit ints\n(previous version only supported 63-bit ints)\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4191",children:"#4191"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["add ",(0,l.jsx)(e.code,{children:"List::all"})," (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4150",children:"#4150"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Mark ",(0,l.jsx)(e.code,{children:"Date::today"})," as impure\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4149",children:"#4149"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add new versions of Date functions ",(0,l.jsx)(e.code,{children:"Date::hour_v1"}),", ",(0,l.jsx)(e.code,{children:"Date::minute_v1"}),", and\n",(0,l.jsx)(e.code,{children:"Date::second_v1"}),", which unlike the previous versions do not return negative\nresults for dates before 1970!\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4133",children:"#4133"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Rename the ",(0,l.jsx)(e.code,{children:"f"})," parameter of functions using first-class functions to ",(0,l.jsx)(e.code,{children:"fn"}),"\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4156",children:"#4156"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4150",children:"#4150"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Use camelCase in all standard library parameters\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4201",children:"#4201"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix typos and poor wording in a lot of error messages and functions\ndescriptions (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4096",children:"#4096"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4200",children:"#4200"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"editor-improvements",children:"Editor improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix using secrets when run in the editor\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4128",children:"#4128"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/issues/4129",children:"#4129"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix occasional crash in editor analysis\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4117",children:"#4117"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4089",children:"#4098"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4070",children:"#4070"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove the old (OCaml-based) analysis, reducing the size of the editor\ndownload and speeding up startup\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4158",children:"#4148"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove the canvas minimap which was causing a long hang when switching to edit\nfunctions (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4106",children:"#4106"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"http-framework-improvements",children:"HTTP Framework improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Load programs faster by removing 3-4 fewer DB requests during load\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4051",children:"#4051"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Make the Dark repo build on Mac with M1/M2 (arm) chips\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4237",children:"#4237"}),")."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove a lot of old OCaml code\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4140",children:"#4140"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4138",children:"#4138"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4195",children:"#4195"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4158",children:"#4158"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4074",children:"#4074"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4225",children:"#4225"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove all Rust from the codebase\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4057",children:"#4057"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove all Go from the codebase\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4039",children:"#4039"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Refactor the client (Rescript) codebase\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4199",children:"#4199"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4203",children:"#4203"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4206",children:"#4206"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4218",children:"#4218"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4220",children:"#4220"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Many steps to speed up the CI/CD pipeline\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4090",children:"#4090"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4088",children:"#4088"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4087",children:"#4087"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4083",children:"#4083"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4068",children:"#4068"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow multiple deploys more safely in our CI/CD pipeline\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4082",children:"#4082"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4076",children:"#4076"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4073",children:"#4073"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4072",children:"#4072"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4067",children:"#4067"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Refactor integration tests away from being one big file\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4167",children:"#4167"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fail deploy if assets don't upload\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4186",children:"#4186"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix flaky tests (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4205",children:"#4205"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4207",children:"#4207"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4222",children:"#4222"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove unused DarkInternal functions\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4056",children:"#4056"}),")"]}),"\n"]}),"\n"]})]})}function o(n={}){const{wrapper:e}={...(0,s.a)(),...n.components};return e?(0,l.jsx)(e,{...n,children:(0,l.jsx)(c,{...n})}):c(n)}},11151:(n,e,r)=>{r.d(e,{Z:()=>t,a:()=>i});var l=r(67294);const s={},a=l.createContext(s);function i(n){const e=l.useContext(a);return l.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function t(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:i(n.components),l.createElement(a.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/06d8c526.9afa0afd.js b/assets/js/06d8c526.9afa0afd.js deleted file mode 100644 index eef2d4b1..00000000 --- a/assets/js/06d8c526.9afa0afd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3681],{12490:(n,e,r)=>{r.r(e),r.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>o,frontMatter:()=>a,metadata:()=>t,toc:()=>h});var l=r(85893),s=r(11151);const a={},i="Darklang Release 3",t={id:"changelog/release-3",title:"Darklang Release 3",description:"July 1, 2022",source:"@site/docs-classic/changelog/release-3.md",sourceDirName:"changelog",slug:"/changelog/release-3",permalink:"/changelog/release-3",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-3.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 4 - July, 2022",permalink:"/changelog/release-4"},next:{title:"Release 2 - June 6, 2022",permalink:"/changelog/release-2"}},d={},h=[{value:"Language improvements",id:"language-improvements",level:2},{value:"Stdlib improvements",id:"stdlib-improvements",level:2},{value:"Editor improvements",id:"editor-improvements",level:2},{value:"HTTP Framework improvements",id:"http-framework-improvements",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function c(n){const e={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...n.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(e.h1,{id:"darklang-release-3",children:"Darklang Release 3"}),"\n",(0,l.jsx)(e.p,{children:"July 1, 2022"}),"\n",(0,l.jsx)(e.p,{children:"Darklang Release 3 is focused primarily on taking advantage of the recent\nchanges, including new StdLib functions, small languages changes, and sunsetting\nold features."}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsxs)(e.em,{children:["See the ",(0,l.jsx)(e.a,{href:"https://blog.darklang.com/darklang-release-3/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,l.jsx)(e.h2,{id:"language-improvements",children:"Language improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["When a function is called with a runtime error as an argument, return the\nruntime error instead of a new error\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4095",children:"#4095"}),"). This was a significant\nsource of annoyance for devs trying to figure out why their code wasn't\nworking."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["64-bit ints now work end-to-end (previously we had two separate issues with\nnumbers above ",(0,l.jsx)(e.code,{children:"2^53"})," and numbers above ",(0,l.jsx)(e.code,{children:"2^63"}),")\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4209",children:"#4209"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"stdlib-improvements",children:"Stdlib improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow ",(0,l.jsx)(e.code,{children:"HttpClient::basicAuth_v0"})," and ",(0,l.jsx)(e.code,{children:"HttpClient::basicAuth_v1"})," to run in the\neditor (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4147",children:"#4147"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow ",(0,l.jsx)(e.code,{children:"Crypto::sha256_v0"}),", ",(0,l.jsx)(e.code,{children:"Crypto::sha384_v0"})," to run in the editor\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4146",children:"#4146"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["rename ",(0,l.jsx)(e.code,{children:"String::toInt"})," to ",(0,l.jsx)(e.code,{children:"Int::parse_v0"}),", making it work for 64 bit ints\n(previous version only supported 63-bit ints)\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4191",children:"#4191"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["add ",(0,l.jsx)(e.code,{children:"List::all"})," (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4150",children:"#4150"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Mark ",(0,l.jsx)(e.code,{children:"Date::today"})," as impure\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4149",children:"#4149"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add new versions of Date functions ",(0,l.jsx)(e.code,{children:"Date::hour_v1"}),", ",(0,l.jsx)(e.code,{children:"Date::minute_v1"}),", and\n",(0,l.jsx)(e.code,{children:"Date::second_v1"}),", which unlike the previous versions do not return negative\nresults for dates before 1970!\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4133",children:"#4133"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Rename the ",(0,l.jsx)(e.code,{children:"f"})," parameter of functions using first-class functions to ",(0,l.jsx)(e.code,{children:"fn"}),"\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4156",children:"#4156"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4150",children:"#4150"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Use camelCase in all standard library parameters\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4201",children:"#4201"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix typos and poor wording in a lot of error messages and functions\ndescriptions (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4096",children:"#4096"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4200",children:"#4200"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"editor-improvements",children:"Editor improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix using secrets when run in the editor\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4128",children:"#4128"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/issues/4129",children:"#4129"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix occasional crash in editor analysis\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4117",children:"#4117"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4089",children:"#4098"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4070",children:"#4070"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove the old (OCaml-based) analysis, reducing the size of the editor\ndownload and speeding up startup\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4158",children:"#4148"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove the canvas minimap which was causing a long hang when switching to edit\nfunctions (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4106",children:"#4106"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"http-framework-improvements",children:"HTTP Framework improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Load programs faster by removing 3-4 fewer DB requests during load\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4051",children:"#4051"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Make the Dark repo build on Mac with M1/M2 (arm) chips\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4237",children:"#4237"}),")."]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove a lot of old OCaml code\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4140",children:"#4140"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4138",children:"#4138"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4195",children:"#4195"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4158",children:"#4158"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4074",children:"#4074"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4225",children:"#4225"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove all Rust from the codebase\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4057",children:"#4057"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove all Go from the codebase\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4039",children:"#4039"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Refactor the client (Rescript) codebase\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4199",children:"#4199"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4203",children:"#4203"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4206",children:"#4206"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4218",children:"#4218"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4220",children:"#4220"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Many steps to speed up the CI/CD pipeline\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4090",children:"#4090"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4088",children:"#4088"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4087",children:"#4087"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4083",children:"#4083"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4068",children:"#4068"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow multiple deploys more safely in our CI/CD pipeline\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4082",children:"#4082"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4076",children:"#4076"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4073",children:"#4073"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4072",children:"#4072"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4067",children:"#4067"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Refactor integration tests away from being one big file\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4167",children:"#4167"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fail deploy if assets don't upload\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4186",children:"#4186"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix flaky tests (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4205",children:"#4205"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4207",children:"#4207"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4222",children:"#4222"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Remove unused DarkInternal functions\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4056",children:"#4056"}),")"]}),"\n"]}),"\n"]})]})}function o(n={}){const{wrapper:e}={...(0,s.a)(),...n.components};return e?(0,l.jsx)(e,{...n,children:(0,l.jsx)(c,{...n})}):c(n)}},11151:(n,e,r)=>{r.d(e,{Z:()=>t,a:()=>i});var l=r(67294);const s={},a=l.createContext(s);function i(n){const e=l.useContext(a);return l.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function t(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(s):n.components||s:i(n.components),l.createElement(a.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/09fa56e2.30423cec.js b/assets/js/09fa56e2.30423cec.js new file mode 100644 index 00000000..9e13083a --- /dev/null +++ b/assets/js/09fa56e2.30423cec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[331],{39494:(n,e,s)=>{s.r(e),s.d(e,{assets:()=>h,contentTitle:()=>t,default:()=>o,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var l=s(85893),r=s(11151);const i={},t="Darklang Release 6",a={id:"changelog/release-6",title:"Darklang Release 6",description:"October 1, 2022",source:"@site/docs-classic/changelog/release-6.md",sourceDirName:"changelog",slug:"/changelog/release-6",permalink:"/changelog/release-6",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-6.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 7 - Oct, 2022",permalink:"/changelog/release-7"},next:{title:"Release 5 - Aug, 2022",permalink:"/changelog/release-5"}},h={},d=[{value:"Major features",id:"major-features",level:2},{value:"Support for negative ints and floats",id:"support-for-negative-ints-and-floats",level:3},{value:"Show function deprecation info",id:"show-function-deprecation-info",level:3},{value:"Expression backspacing/conversion",id:"expression-backspacingconversion",level:3},{value:"Editor improvements",id:"editor-improvements",level:2},{value:"Tuples",id:"tuples",level:3},{value:"Strings",id:"strings",level:3},{value:"Live values",id:"live-values",level:3},{value:"Autocomplete",id:"autocomplete",level:3},{value:"Misc Small fixes",id:"misc-small-fixes",level:3},{value:"Standard library changes",id:"standard-library-changes",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function c(n){const e={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...n.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(e.header,{children:(0,l.jsx)(e.h1,{id:"darklang-release-6",children:"Darklang Release 6"})}),"\n",(0,l.jsx)(e.p,{children:"October 1, 2022"}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsxs)(e.em,{children:["See the ",(0,l.jsx)(e.a,{href:"https://blog.darklang.com/darklang-release-6/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,l.jsx)(e.h2,{id:"major-features",children:"Major features"}),"\n",(0,l.jsx)(e.h3,{id:"support-for-negative-ints-and-floats",children:"Support for negative ints and floats"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Turn existing ints and floats negative by typing ",(0,l.jsx)(e.code,{children:"-"})," in front\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4498",children:"#4498"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/192357264-7ae39197-3ec8-4516-9f43-930817b80b99.gif",alt:""})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Type negative ints and floats from scratch\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Edit partials and turn them into ints and floats (including negatives)\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/192331575-d4affbb3-127c-46c0-8e88-7a74c2e877db.gif",alt:""})}),"\n",(0,l.jsx)(e.h3,{id:"show-function-deprecation-info",children:"Show function deprecation info"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Display why functions are deprecated\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/191844123-3c57f9a7-5240-4b84-8691-c91e7b8aee13.png",alt:""})}),"\n",(0,l.jsx)(e.h3,{id:"expression-backspacingconversion",children:"Expression backspacing/conversion"}),"\n",(0,l.jsxs)(e.p,{children:["When you delete an ",(0,l.jsx)(e.code,{children:"if"}),", ",(0,l.jsx)(e.code,{children:"match"}),", or lambda (",(0,l.jsx)(e.code,{children:"\\"}),") with one expression, replace\nit with that expression (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4457",children:"#4457"}),")"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/188941656-b0a584be-d115-41cc-a956-28b79646fa89.gif",alt:""})}),"\n",(0,l.jsx)(e.h2,{id:"editor-improvements",children:"Editor improvements"}),"\n",(0,l.jsx)(e.h3,{id:"tuples",children:"Tuples"}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsxs)(e.em,{children:["Tuples are in preview - enable them in ",(0,l.jsx)(e.strong,{children:"Settings/Contributor Settings"})]})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show Tuple2 and Tuple3 functions in the autocomplete\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4482",children:"#4482"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add tuple pattern autocomplete completion\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4465",children:"#4465"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/906686/189388902-82bf765f-a9f4-4629-9fda-8f99918d259c.gif",alt:""})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow copy/pasting tuple patterns\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4469",children:"#4469"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow you to press ",(0,l.jsx)(e.code,{children:")"})," to go over a tuple's closing parenthesis\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4454",children:"#4454"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Put cursor at ",(0,l.jsx)(e.em,{children:"start"})," of blank tuple pattern when removing elements\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4455",children:"#4455"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Don't allow tuple pattern parts to be overwritten by literals\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4453",children:"#4453"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h3,{id:"strings",children:"Strings"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["indent one more space to line up multiline strings\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4477",children:"#4477"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["show slight background in strings to help see how they line up (it's subtle!)\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4479",children:"#4479"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4477",children:"#4477"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/190904975-276ea41d-5880-460f-b68f-fedc70b1a0e1.png",alt:""})}),"\n",(0,l.jsx)(e.h3,{id:"live-values",children:"Live values"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show live values for lambdas properly (actually trace them and then display\nthem)) (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Display a lambda's runtime value as a live value\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/188888447-62103469-5f6b-4eec-a4d3-fcc8f0fd9764.png",alt:""})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show live values for literals instead of a spinner\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Correctly show analysis for partials (the old value)\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show the correct live value for let definitions and record field names\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show pipe live value for current pipe entry\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Don't spin when there's a pipe in a blank\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h3,{id:"autocomplete",children:"Autocomplete"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix some standard library function descriptions - typos and punctuation\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Better UI when a function has no description (affects functions in the package\nmanager) (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix fluid pattern autocomplete flashing\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4462",children:"#4462"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix bug when going further than 3 places down in the autocomplete for patterns\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4462",children:"#4462"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Don't confuse secrets and datastores\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h3,{id:"misc-small-fixes",children:"Misc Small fixes"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix a few places secrets weren't hidden\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow users to use deprecated functions they already use in more cases\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4482",children:"#4482"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Error messages use less ugly representation of dicts and lists\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Hide irrelevent GC error in analysis\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4505",children:"#4505"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4483",children:"#4483"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4449",children:"#4449"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:['When a handler\'s route changes, update "open-in-new-window" to use the new\nroute (',(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4502",children:"#4502"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["don't insert ",(0,l.jsx)(e.code,{children:"0"})," when copy/pasting from the start of ints in patterns\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4492",children:"#4492"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Don't create empty patterns when creating match\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4469",children:"#4469"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["put the cursor in right place after a string edit\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["convert partials to ints and floats\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["fix broken floats automatically\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"standard-library-changes",children:"Standard library changes"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Add ",(0,l.jsx)(e.code,{children:"Uuid::parse_v0"})," and deprecate ",(0,l.jsx)(e.code,{children:"String::toUUID"}),"\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4480",children:"#4480"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["The dark repo is now\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/tags",children:"tagged for each release"})]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add IDs to debugger AST view\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["A number of fixes related to lambdas\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Rebrand 'pattern' as 'match pattern' throughout client codebase\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4487",children:"#4487"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Refactor function representation\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4485",children:"#4485"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Use IDs more (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4480",children:"#4480"}),")"]}),"\n"]}),"\n"]})]})}function o(n={}){const{wrapper:e}={...(0,r.a)(),...n.components};return e?(0,l.jsx)(e,{...n,children:(0,l.jsx)(c,{...n})}):c(n)}},11151:(n,e,s)=>{s.d(e,{Z:()=>a,a:()=>t});var l=s(67294);const r={},i=l.createContext(r);function t(n){const e=l.useContext(i);return l.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:t(n.components),l.createElement(i.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/09fa56e2.811765aa.js b/assets/js/09fa56e2.811765aa.js deleted file mode 100644 index 5abd58bc..00000000 --- a/assets/js/09fa56e2.811765aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[331],{39494:(n,e,s)=>{s.r(e),s.d(e,{assets:()=>h,contentTitle:()=>t,default:()=>o,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var l=s(85893),r=s(11151);const i={},t="Darklang Release 6",a={id:"changelog/release-6",title:"Darklang Release 6",description:"October 1, 2022",source:"@site/docs-classic/changelog/release-6.md",sourceDirName:"changelog",slug:"/changelog/release-6",permalink:"/changelog/release-6",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-6.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 7 - Oct, 2022",permalink:"/changelog/release-7"},next:{title:"Release 5 - Aug, 2022",permalink:"/changelog/release-5"}},h={},d=[{value:"Major features",id:"major-features",level:2},{value:"Support for negative ints and floats",id:"support-for-negative-ints-and-floats",level:3},{value:"Show function deprecation info",id:"show-function-deprecation-info",level:3},{value:"Expression backspacing/conversion",id:"expression-backspacingconversion",level:3},{value:"Editor improvements",id:"editor-improvements",level:2},{value:"Tuples",id:"tuples",level:3},{value:"Strings",id:"strings",level:3},{value:"Live values",id:"live-values",level:3},{value:"Autocomplete",id:"autocomplete",level:3},{value:"Misc Small fixes",id:"misc-small-fixes",level:3},{value:"Standard library changes",id:"standard-library-changes",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function c(n){const e={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...n.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(e.h1,{id:"darklang-release-6",children:"Darklang Release 6"}),"\n",(0,l.jsx)(e.p,{children:"October 1, 2022"}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsxs)(e.em,{children:["See the ",(0,l.jsx)(e.a,{href:"https://blog.darklang.com/darklang-release-6/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,l.jsx)(e.h2,{id:"major-features",children:"Major features"}),"\n",(0,l.jsx)(e.h3,{id:"support-for-negative-ints-and-floats",children:"Support for negative ints and floats"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Turn existing ints and floats negative by typing ",(0,l.jsx)(e.code,{children:"-"})," in front\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4498",children:"#4498"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/192357264-7ae39197-3ec8-4516-9f43-930817b80b99.gif",alt:""})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Type negative ints and floats from scratch\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Edit partials and turn them into ints and floats (including negatives)\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/192331575-d4affbb3-127c-46c0-8e88-7a74c2e877db.gif",alt:""})}),"\n",(0,l.jsx)(e.h3,{id:"show-function-deprecation-info",children:"Show function deprecation info"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Display why functions are deprecated\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/191844123-3c57f9a7-5240-4b84-8691-c91e7b8aee13.png",alt:""})}),"\n",(0,l.jsx)(e.h3,{id:"expression-backspacingconversion",children:"Expression backspacing/conversion"}),"\n",(0,l.jsxs)(e.p,{children:["When you delete an ",(0,l.jsx)(e.code,{children:"if"}),", ",(0,l.jsx)(e.code,{children:"match"}),", or lambda (",(0,l.jsx)(e.code,{children:"\\"}),") with one expression, replace\nit with that expression (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4457",children:"#4457"}),")"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/188941656-b0a584be-d115-41cc-a956-28b79646fa89.gif",alt:""})}),"\n",(0,l.jsx)(e.h2,{id:"editor-improvements",children:"Editor improvements"}),"\n",(0,l.jsx)(e.h3,{id:"tuples",children:"Tuples"}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsxs)(e.em,{children:["Tuples are in preview - enable them in ",(0,l.jsx)(e.strong,{children:"Settings/Contributor Settings"})]})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show Tuple2 and Tuple3 functions in the autocomplete\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4482",children:"#4482"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add tuple pattern autocomplete completion\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4465",children:"#4465"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/906686/189388902-82bf765f-a9f4-4629-9fda-8f99918d259c.gif",alt:""})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow copy/pasting tuple patterns\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4469",children:"#4469"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow you to press ",(0,l.jsx)(e.code,{children:")"})," to go over a tuple's closing parenthesis\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4454",children:"#4454"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Put cursor at ",(0,l.jsx)(e.em,{children:"start"})," of blank tuple pattern when removing elements\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4455",children:"#4455"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Don't allow tuple pattern parts to be overwritten by literals\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4453",children:"#4453"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h3,{id:"strings",children:"Strings"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["indent one more space to line up multiline strings\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4477",children:"#4477"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["show slight background in strings to help see how they line up (it's subtle!)\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4479",children:"#4479"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4477",children:"#4477"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/190904975-276ea41d-5880-460f-b68f-fedc70b1a0e1.png",alt:""})}),"\n",(0,l.jsx)(e.h3,{id:"live-values",children:"Live values"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show live values for lambdas properly (actually trace them and then display\nthem)) (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Display a lambda's runtime value as a live value\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{src:"https://user-images.githubusercontent.com/181762/188888447-62103469-5f6b-4eec-a4d3-fcc8f0fd9764.png",alt:""})}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show live values for literals instead of a spinner\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Correctly show analysis for partials (the old value)\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show the correct live value for let definitions and record field names\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Show pipe live value for current pipe entry\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Don't spin when there's a pipe in a blank\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h3,{id:"autocomplete",children:"Autocomplete"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix some standard library function descriptions - typos and punctuation\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Better UI when a function has no description (affects functions in the package\nmanager) (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix fluid pattern autocomplete flashing\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4462",children:"#4462"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix bug when going further than 3 places down in the autocomplete for patterns\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4462",children:"#4462"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Don't confuse secrets and datastores\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h3,{id:"misc-small-fixes",children:"Misc Small fixes"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Fix a few places secrets weren't hidden\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Allow users to use deprecated functions they already use in more cases\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4482",children:"#4482"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Error messages use less ugly representation of dicts and lists\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Hide irrelevent GC error in analysis\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4505",children:"#4505"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4483",children:"#4483"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4449",children:"#4449"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:['When a handler\'s route changes, update "open-in-new-window" to use the new\nroute (',(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4502",children:"#4502"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["don't insert ",(0,l.jsx)(e.code,{children:"0"})," when copy/pasting from the start of ints in patterns\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4492",children:"#4492"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Don't create empty patterns when creating match\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4469",children:"#4469"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["put the cursor in right place after a string edit\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["convert partials to ints and floats\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["fix broken floats automatically\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4497",children:"#4497"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"standard-library-changes",children:"Standard library changes"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Add ",(0,l.jsx)(e.code,{children:"Uuid::parse_v0"})," and deprecate ",(0,l.jsx)(e.code,{children:"String::toUUID"}),"\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4480",children:"#4480"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["The dark repo is now\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/tags",children:"tagged for each release"})]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add IDs to debugger AST view\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4491",children:"#4491"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["A number of fixes related to lambdas\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4456",children:"#4456"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Rebrand 'pattern' as 'match pattern' throughout client codebase\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4487",children:"#4487"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Refactor function representation\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4485",children:"#4485"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Use IDs more (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4480",children:"#4480"}),")"]}),"\n"]}),"\n"]})]})}function o(n={}){const{wrapper:e}={...(0,r.a)(),...n.components};return e?(0,l.jsx)(e,{...n,children:(0,l.jsx)(c,{...n})}):c(n)}},11151:(n,e,s)=>{s.d(e,{Z:()=>a,a:()=>t});var l=s(67294);const r={},i=l.createContext(r);function t(n){const e=l.useContext(i);return l.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(r):n.components||r:t(n.components),l.createElement(i.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b9525aa.6ff1cbd0.js b/assets/js/0b9525aa.6ff1cbd0.js new file mode 100644 index 00000000..ecb3de3d --- /dev/null +++ b/assets/js/0b9525aa.6ff1cbd0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7932],{26289:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>h,toc:()=>o});var s=t(85893),i=t(11151);const a={},c="Python Cheat Sheet",h={id:"reference/cheatsheets/python-cheatsheet",title:"Python Cheat Sheet",description:"This guide will help you learn Darklang if you're familiar with Python.",source:"@site/docs-classic/reference/cheatsheets/python-cheatsheet.md",sourceDirName:"reference/cheatsheets",slug:"/reference/cheatsheets/python-cheatsheet",permalink:"/reference/cheatsheets/python-cheatsheet",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/cheatsheets/python-cheatsheet.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Reference",permalink:"/category/reference"},next:{title:"Javascript cheat sheet",permalink:"/reference/cheatsheets/javascript-cheatsheet"}},r={},o=[{value:"Comments",id:"comments",level:2},{value:"Strings",id:"strings",level:2},{value:"Functions",id:"functions",level:2},{value:"Standard Library/Built-in Functions",id:"standard-librarybuilt-in-functions",level:2},{value:"If/Elif/Else statements",id:"ifelifelse-statements",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"python-cheat-sheet",children:"Python Cheat Sheet"})}),"\n",(0,s.jsx)(n.p,{children:"This guide will help you learn Darklang if you're familiar with Python."}),"\n",(0,s.jsxs)(n.p,{children:["Have a tip to add to the guide?\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pulls",children:"Submit a PR"}),"!"]}),"\n",(0,s.jsx)(n.h2,{id:"comments",children:"Comments"}),"\n",(0,s.jsxs)(n.p,{children:["In Python, you use a ",(0,s.jsx)(n.code,{children:"#"})," to start a comment:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"# This is a comment\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In Darklang, you use a ",(0,s.jsx)(n.code,{children:"let _ ="})," to start a comment, and you write the comment as a\nString:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/comment.png",src:t(39718).Z+"",width:"742",height:"152"})}),"\n",(0,s.jsx)(n.h2,{id:"strings",children:"Strings"}),"\n",(0,s.jsx)(n.p,{children:"In Python, you can write a String in multiple ways:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"\"This is a string\"\n'This is also a string'\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In Darklang, you always use double quotes:\n",(0,s.jsx)(n.img,{alt:"from-python/string.png",src:t(5198).Z+"",width:"742",height:"124"})]}),"\n",(0,s.jsx)(n.h2,{id:"functions",children:"Functions"}),"\n",(0,s.jsxs)(n.p,{children:["In Python, you use the ",(0,s.jsx)(n.code,{children:"def"})," keyword to define a function:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"def say_hello():\n print('Hello World')\n"})}),"\n",(0,s.jsx)(n.p,{children:"and you call a function with the function name, followed by parentheses:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"say_hello()\n"})}),"\n",(0,s.jsx)(n.p,{children:"In Darklang, you create a function from the sidebar:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/functionside.png",src:t(28322).Z+"",width:"624",height:"250"})}),"\n",(0,s.jsx)(n.p,{children:"This will open a new function in the function space, where you can define the\nname of the function and its contents:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/function.png",src:t(64475).Z+"",width:"1046",height:"342"})}),"\n",(0,s.jsx)(n.h2,{id:"standard-librarybuilt-in-functions",children:"Standard Library/Built-in Functions"}),"\n",(0,s.jsx)(n.p,{children:"Python defines a set of built in functions that are called like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"# This returns 2 to the power of 2.\nmath.power(2,2)\n"})}),"\n",(0,s.jsx)(n.p,{children:"Darklang has a set of built in functions as well, which can be accessed via the\nautocomplete:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/power.gif",src:t(70980).Z+"",width:"930",height:"548"})}),"\n",(0,s.jsx)(n.h2,{id:"ifelifelse-statements",children:"If/Elif/Else statements"}),"\n",(0,s.jsxs)(n.p,{children:["In Python, you would write an ",(0,s.jsx)(n.code,{children:"if"})," statement like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'a = 5\nb = 10\n\nif p > a:\n print("b is greater than a")\nelif a == b:\n print("a and b are equal")\nelse\n print("a is greater than b")\n'})}),"\n",(0,s.jsx)(n.p,{children:"In Darklang, the same statement would look this this:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/ifs.png",src:t(41298).Z+"",width:"798",height:"482"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that we highlight the path your code takes - so if we were to change the\nvalues, a different piece of the ",(0,s.jsx)(n.code,{children:"if"})," statement would be highlighted:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/ifs2.png",src:t(50563).Z+"",width:"796",height:"508"})})]})}function d(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},39718:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/comment-31d6d49158d5fb9df9f157bf7aac703b.png"},64475:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/function-2a3cb08413c103bd95ff89e7cf1c1ed9.png"},28322:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/functionside-ae5554dbc3021497c1b1710b65443cc1.png"},41298:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/ifs-d21faa266d0f403b717b2278706494b6.png"},50563:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/ifs2-4559f37c703f4406dea70e90aab24161.png"},70980:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/power-a4ade5fff8ecfd57c39b737dc301fa5f.gif"},5198:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/string-170049731f56bfe52d41ac15ccc0fe50.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>h,a:()=>c});var s=t(67294);const i={},a=s.createContext(i);function c(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function h(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b9525aa.7a309b5d.js b/assets/js/0b9525aa.7a309b5d.js deleted file mode 100644 index a160ed6f..00000000 --- a/assets/js/0b9525aa.7a309b5d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7932],{26289:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>h,toc:()=>o});var s=t(85893),i=t(11151);const a={},c="Python Cheat Sheet",h={id:"reference/cheatsheets/python-cheatsheet",title:"Python Cheat Sheet",description:"This guide will help you learn Darklang if you're familiar with Python.",source:"@site/docs-classic/reference/cheatsheets/python-cheatsheet.md",sourceDirName:"reference/cheatsheets",slug:"/reference/cheatsheets/python-cheatsheet",permalink:"/reference/cheatsheets/python-cheatsheet",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/cheatsheets/python-cheatsheet.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Reference",permalink:"/category/reference"},next:{title:"Javascript cheat sheet",permalink:"/reference/cheatsheets/javascript-cheatsheet"}},r={},o=[{value:"Comments",id:"comments",level:2},{value:"Strings",id:"strings",level:2},{value:"Functions",id:"functions",level:2},{value:"Standard Library/Built-in Functions",id:"standard-librarybuilt-in-functions",level:2},{value:"If/Elif/Else statements",id:"ifelifelse-statements",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"python-cheat-sheet",children:"Python Cheat Sheet"}),"\n",(0,s.jsx)(n.p,{children:"This guide will help you learn Darklang if you're familiar with Python."}),"\n",(0,s.jsxs)(n.p,{children:["Have a tip to add to the guide?\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pulls",children:"Submit a PR"}),"!"]}),"\n",(0,s.jsx)(n.h2,{id:"comments",children:"Comments"}),"\n",(0,s.jsxs)(n.p,{children:["In Python, you use a ",(0,s.jsx)(n.code,{children:"#"})," to start a comment:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"# This is a comment\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In Darklang, you use a ",(0,s.jsx)(n.code,{children:"let _ ="})," to start a comment, and you write the comment as a\nString:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/comment.png",src:t(39718).Z+"",width:"742",height:"152"})}),"\n",(0,s.jsx)(n.h2,{id:"strings",children:"Strings"}),"\n",(0,s.jsx)(n.p,{children:"In Python, you can write a String in multiple ways:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"\"This is a string\"\n'This is also a string'\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In Darklang, you always use double quotes:\n",(0,s.jsx)(n.img,{alt:"from-python/string.png",src:t(5198).Z+"",width:"742",height:"124"})]}),"\n",(0,s.jsx)(n.h2,{id:"functions",children:"Functions"}),"\n",(0,s.jsxs)(n.p,{children:["In Python, you use the ",(0,s.jsx)(n.code,{children:"def"})," keyword to define a function:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"def say_hello():\n print('Hello World')\n"})}),"\n",(0,s.jsx)(n.p,{children:"and you call a function with the function name, followed by parentheses:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"say_hello()\n"})}),"\n",(0,s.jsx)(n.p,{children:"In Darklang, you create a function from the sidebar:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/functionside.png",src:t(28322).Z+"",width:"624",height:"250"})}),"\n",(0,s.jsx)(n.p,{children:"This will open a new function in the function space, where you can define the\nname of the function and its contents:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/function.png",src:t(64475).Z+"",width:"1046",height:"342"})}),"\n",(0,s.jsx)(n.h2,{id:"standard-librarybuilt-in-functions",children:"Standard Library/Built-in Functions"}),"\n",(0,s.jsx)(n.p,{children:"Python defines a set of built in functions that are called like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:"# This returns 2 to the power of 2.\nmath.power(2,2)\n"})}),"\n",(0,s.jsx)(n.p,{children:"Darklang has a set of built in functions as well, which can be accessed via the\nautocomplete:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/power.gif",src:t(70980).Z+"",width:"930",height:"548"})}),"\n",(0,s.jsx)(n.h2,{id:"ifelifelse-statements",children:"If/Elif/Else statements"}),"\n",(0,s.jsxs)(n.p,{children:["In Python, you would write an ",(0,s.jsx)(n.code,{children:"if"})," statement like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-python",children:'a = 5\nb = 10\n\nif p > a:\n print("b is greater than a")\nelif a == b:\n print("a and b are equal")\nelse\n print("a is greater than b")\n'})}),"\n",(0,s.jsx)(n.p,{children:"In Darklang, the same statement would look this this:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/ifs.png",src:t(41298).Z+"",width:"798",height:"482"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that we highlight the path your code takes - so if we were to change the\nvalues, a different piece of the ",(0,s.jsx)(n.code,{children:"if"})," statement would be highlighted:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/ifs2.png",src:t(50563).Z+"",width:"796",height:"508"})})]})}function d(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},39718:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/comment-31d6d49158d5fb9df9f157bf7aac703b.png"},64475:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/function-2a3cb08413c103bd95ff89e7cf1c1ed9.png"},28322:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/functionside-ae5554dbc3021497c1b1710b65443cc1.png"},41298:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/ifs-d21faa266d0f403b717b2278706494b6.png"},50563:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/ifs2-4559f37c703f4406dea70e90aab24161.png"},70980:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/power-a4ade5fff8ecfd57c39b737dc301fa5f.gif"},5198:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/string-170049731f56bfe52d41ac15ccc0fe50.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>h,a:()=>c});var s=t(67294);const i={},a=s.createContext(i);function c(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function h(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1426.3c555032.js b/assets/js/1426.3c555032.js deleted file mode 100644 index 45c61ad8..00000000 --- a/assets/js/1426.3c555032.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1426],{61426:(e,t,r)=>{function n(e,t){var r=void 0;return function(){for(var n=arguments.length,o=new Array(n),i=0;ivn});var a=function(){};function c(e){var t=e.item,r=e.items;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i,a,c=[],l=!0,u=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);l=!0);}catch(s){u=!0,o=s}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(u)throw o}}return c}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return u(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return u(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function y(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function h(e){for(var t=1;t=3||2===r&&n>=4||1===r&&n>=10);function i(t,r,n){if(o&&void 0!==n){var i=n[0].__autocomplete_algoliaCredentials,a={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(p(r),[{headers:a}]))}else e.apply(void 0,[t].concat(p(r)))}return{init:function(t,r){e("init",{appId:t,apiKey:r})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("clickedObjectIDsAfterSearch",g(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("clickedObjectIDs",g(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n0&&e.apply(void 0,["clickedFilters"].concat(r))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("convertedObjectIDsAfterSearch",g(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&i("convertedObjectIDs",g(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,r=new Array(t),n=0;n0&&e.apply(void 0,["convertedFilters"].concat(r))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&t.reduce((function(e,t){var r=t.items,n=d(t,f);return[].concat(p(e),p(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,r=[],n=0;n0&&e.apply(void 0,["viewedFilters"].concat(r))}}}function S(e){var t=e.items.reduce((function(e,t){var r;return e[t.__autocomplete_indexName]=(null!==(r=e[t.__autocomplete_indexName])&&void 0!==r?r:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function j(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function w(e){return w="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},w(e)}function E(e){return function(e){if(Array.isArray(e))return P(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return P(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return P(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0&&C({onItemsChange:o,items:r,insights:f,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,r=e.onSelect,n=e.onActive;s("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:f}}),r((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&l({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Selected"},c({item:t,items:m.current}))]})})),n((function(e){var t=e.item,r=e.state,n=e.event;j(t)&&u({state:r,event:n,insights:f,item:t,insightsEvents:[D({eventName:"Item Active"},c({item:t,items:m.current}))]})}))},onStateChange:function(e){var t=e.state;p({state:t})},__autocomplete_pluginOptions:e}}function _(e){return _="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},_(e)}function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function q(e,t,r){return(t=function(e){var t=function(e,t){if("object"!==_(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==_(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function R(e,t,r){var n,o=t.initialState;return{getState:function(){return o},dispatch:function(n,i){var a=function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r0},reshape:function(e){return e.sources}},e),{},{id:null!==(r=e.id)&&void 0!==r?r:"autocomplete-".concat(V++),plugins:o,initialState:X({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var r;null===(r=e.onStateChange)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onStateChange)||void 0===r?void 0:r.call(e,t)}))},onSubmit:function(t){var r;null===(r=e.onSubmit)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onSubmit)||void 0===r?void 0:r.call(e,t)}))},onReset:function(t){var r;null===(r=e.onReset)||void 0===r||r.call(e,t),o.forEach((function(e){var r;return null===(r=e.onReset)||void 0===r?void 0:r.call(e,t)}))},getSources:function(r){return Promise.all([].concat(Q(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var r=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,r.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));r.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:a,onResolve:a};Object.keys(t).forEach((function(e){t[e].__default=!0}));var n=$($({},t),e);return Promise.resolve(n)})))}))}(e,r)}))).then((function(e){return L(e)})).then((function(e){return e.map((function(e){return X(X({},e),{},{onSelect:function(r){e.onSelect(r),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,r)}))},onActive:function(r){e.onActive(r),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,r)}))},onResolve:function(r){e.onResolve(r),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,r)}))}})}))}))},navigator:X({navigate:function(e){var t=e.itemUrl;n.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,r=n.open(t,"_blank","noopener");null==r||r.focus()},navigateNewWindow:function(e){var t=e.itemUrl;n.open(t,"_blank","noopener")}},e.navigator)})}function te(e){return te="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},te(e)}function re(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ne(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Ie,De,Ae,ke=null,xe=(Ie=-1,De=-1,Ae=void 0,function(e){var t=++Ie;return Promise.resolve(e).then((function(e){return Ae&&t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var Me=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function He(e){return He="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},He(e)}var Fe=["props","refresh","store"],Ue=["inputElement","formElement","panelElement"],Be=["inputElement"],Ve=["inputElement","maxLength"],Ke=["sourceIndex"],$e=["sourceIndex"],Je=["item","source","sourceIndex"];function ze(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function We(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ge(e){var t=e.props,r=e.refresh,n=e.store,o=Ze(e,Fe),i=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var r=e.inputElement,o=e.formElement,i=e.panelElement;function a(e){!n.getState().isOpen&&n.pendingRequests.isEmpty()||e.target===r||!1===[o,i].some((function(t){return r=t,n=e.target,r===n||r.contains(n);var r,n}))&&(n.dispatch("blur",null),t.debug||n.pendingRequests.cancelAll())}return We({onTouchStart:a,onMouseDown:a,onTouchMove:function(e){!1!==n.getState().isOpen&&r===t.environment.document.activeElement&&e.target!==r&&r.blur()}},Ze(e,Ue))},getRootProps:function(e){return We({role:"combobox","aria-expanded":n.getState().isOpen,"aria-haspopup":"listbox","aria-owns":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return We({action:"",noValidate:!0,role:"search",onSubmit:function(i){var a;i.preventDefault(),t.onSubmit(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("submit",null),null===(a=e.inputElement)||void 0===a||a.blur()},onReset:function(i){var a;i.preventDefault(),t.onReset(We({event:i,refresh:r,state:n.getState()},o)),n.dispatch("reset",null),null===(a=e.inputElement)||void 0===a||a.focus()}},Ze(e,Be))},getLabelProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,Ke);return We({htmlFor:"".concat(i(t.id,n),"-input"),id:"".concat(i(t.id,n),"-label")},o)},getInputProps:function(e){var i;function c(e){(t.openOnFocus||Boolean(n.getState().query))&&Ce(We({event:e,props:t,query:n.getState().completion||n.getState().query,refresh:r,store:n},o)),n.dispatch("focus",null)}var l=e||{},u=(l.inputElement,l.maxLength),s=void 0===u?512:u,f=Ze(l,Ve),m=ge(n.getState()),p=function(e){return Boolean(e&&e.match(Me))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),v=null!=m&&m.itemUrl&&!p?"go":"search";return We({"aria-autocomplete":"both","aria-activedescendant":n.getState().isOpen&&null!==n.getState().activeItemId?"".concat(t.id,"-item-").concat(n.getState().activeItemId):void 0,"aria-controls":n.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:n.getState().completion||n.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:v,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:s,type:"search",onChange:function(e){Ce(We({event:e,props:t,query:e.currentTarget.value.slice(0,s),refresh:r,store:n},o))},onKeyDown:function(e){!function(e){var t=e.event,r=e.props,n=e.refresh,o=e.store,i=Le(e,_e);if("ArrowUp"===t.key||"ArrowDown"===t.key){var a=function(){var e=r.environment.document.getElementById("".concat(r.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},c=function(){var e=ge(o.getState());if(null!==o.getState().activeItemId&&e){var r=e.item,a=e.itemInputValue,c=e.itemUrl,l=e.source;l.onActive(qe({event:t,item:r,itemInputValue:a,itemUrl:c,refresh:n,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(r.openOnFocus||Boolean(o.getState().query))?Ce(qe({event:t,props:r,query:o.getState().query,refresh:n,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:r.defaultActiveItemId}),c(),setTimeout(a,0)})):(o.dispatch(t.key,{}),c(),a())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(r.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=ge(o.getState()),u=l.item,s=l.itemInputValue,f=l.itemUrl,m=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewTab({itemUrl:f,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),r.navigator.navigateNewWindow({itemUrl:f,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i)),void r.navigator.navigate({itemUrl:f,item:u,state:o.getState()});Ce(qe({event:t,nextState:{isOpen:!1},props:r,query:s,refresh:n,store:o},i)).then((function(){m.onSelect(qe({event:t,item:u,itemInputValue:s,itemUrl:f,refresh:n,source:m,state:o.getState()},i))}))}}}(We({event:e,props:t,refresh:r,store:n},o))},onFocus:c,onBlur:a,onClick:function(r){e.inputElement!==t.environment.document.activeElement||n.getState().isOpen||c(r)}},f)},getPanelProps:function(e){return We({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){n.dispatch("mouseleave",null)}},e)},getListProps:function(e){var r=e||{},n=r.sourceIndex,o=Ze(r,$e);return We({role:"listbox","aria-labelledby":"".concat(i(t.id,n),"-label"),id:"".concat(i(t.id,n),"-list")},o)},getItemProps:function(e){var a=e.item,c=e.source,l=e.sourceIndex,u=Ze(e,Je);return We({id:"".concat(i(t.id,l),"-item-").concat(a.__autocomplete_id),role:"option","aria-selected":n.getState().activeItemId===a.__autocomplete_id,onMouseMove:function(e){if(a.__autocomplete_id!==n.getState().activeItemId){n.dispatch("mousemove",a.__autocomplete_id);var t=ge(n.getState());if(null!==n.getState().activeItemId&&t){var i=t.item,c=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(We({event:e,item:i,itemInputValue:c,itemUrl:l,refresh:r,source:u,state:n.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var i=c.getItemInputValue({item:a,state:n.getState()}),l=c.getItemUrl({item:a,state:n.getState()});(l?Promise.resolve():Ce(We({event:e,nextState:{isOpen:!1},props:t,query:i,refresh:r,store:n},o))).then((function(){c.onSelect(We({event:e,item:a,itemInputValue:i,itemUrl:l,refresh:r,source:c,state:n.getState()},o))}))}},u)}}}var Xe=[{segment:"autocomplete-core",version:"1.9.3"}];function Ye(e){return Ye="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},Ye(e)}function et(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function tt(e){for(var t=1;t=r?null===n?null:0:o}function at(e){return at="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},at(e)}function ct(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function lt(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function kt(e){var t=e.translations,r=void 0===t?{}:t,n=At(e,Pt),o=r.noResultsText,i=void 0===o?"No results for":o,a=r.suggestedQueryText,c=void 0===a?"Try searching for":a,l=r.reportMissingResultsText,u=void 0===l?"Believe this query should return results?":l,s=r.reportMissingResultsLinkText,f=void 0===s?"Let us know.":s,m=n.state.context.searchSuggestions;return yt.createElement("div",{className:"DocSearch-NoResults"},yt.createElement("div",{className:"DocSearch-Screen-Icon"},yt.createElement(Et,null)),yt.createElement("p",{className:"DocSearch-Title"},i,' "',yt.createElement("strong",null,n.state.query),'"'),m&&m.length>0&&yt.createElement("div",{className:"DocSearch-NoResults-Prefill-List"},yt.createElement("p",{className:"DocSearch-Help"},c,":"),yt.createElement("ul",null,m.slice(0,3).reduce((function(e,t){return[].concat(It(e),[yt.createElement("li",{key:t},yt.createElement("button",{className:"DocSearch-Prefill",key:t,type:"button",onClick:function(){n.setQuery(t.toLowerCase()+" "),n.refresh(),n.inputRef.current.focus()}},t))])}),[]))),n.getMissingResultsUrl&&yt.createElement("p",{className:"DocSearch-Help"},"".concat(u," "),yt.createElement("a",{href:n.getMissingResultsUrl({query:n.state.query}),target:"_blank",rel:"noopener noreferrer"},f)))}var xt=function(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))};function Ct(e){switch(e.type){case"lvl1":return yt.createElement(xt,null);case"content":return yt.createElement(_t,null);default:return yt.createElement(Nt,null)}}function Nt(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}function _t(){return yt.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("path",{d:"M17 5H3h14zm0 5H3h14zm0 5H3h14z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinejoin:"round"}))}function Tt(){return yt.createElement("svg",{className:"DocSearch-Hit-Select-Icon",width:"20",height:"20",viewBox:"0 0 20 20"},yt.createElement("g",{stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},yt.createElement("path",{d:"M18 3v4c0 2-2 4-4 4H2"}),yt.createElement("path",{d:"M8 17l-6-6 6-6"})))}var qt=["hit","attribute","tagName"];function Rt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Lt(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function Ft(e,t){return t.split(".").reduce((function(e,t){return null!=e&&e[t]?e[t]:null}),e)}function Ut(e){var t=e.hit,r=e.attribute,n=e.tagName,o=void 0===n?"span":n,i=Ht(e,qt);return(0,yt.createElement)(o,Lt(Lt({},i),{},{dangerouslySetInnerHTML:{__html:Ft(t,"_snippetResult.".concat(r,".value"))||Ft(t,r)}}))}function Bt(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,o,i=[],a=!0,c=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(l){c=!0,o=l}finally{try{a||null==r.return||r.return()}finally{if(c)throw o}}return i}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Vt(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Vt(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r|<\/mark>)/g,Wt=RegExp(zt.source);function Qt(e){var t,r,n=e;if(!n.__docsearch_parent&&!e._highlightResult)return e.hierarchy.lvl0;var o=((n.__docsearch_parent?null===(t=n.__docsearch_parent)||void 0===t||null===(t=t._highlightResult)||void 0===t||null===(t=t.hierarchy)||void 0===t?void 0:t.lvl0:null===(r=e._highlightResult)||void 0===r||null===(r=r.hierarchy)||void 0===r?void 0:r.lvl0)||{}).value;return o&&Wt.test(o)?o.replace(zt,""):o}function Zt(){return Zt=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function or(e){var t=e.translations,r=void 0===t?{}:t,n=nr(e,tr),o=r.recentSearchesTitle,i=void 0===o?"Recent":o,a=r.noRecentSearchesText,c=void 0===a?"No recent searches":a,l=r.saveRecentSearchButtonTitle,u=void 0===l?"Save this search":l,s=r.removeRecentSearchButtonTitle,f=void 0===s?"Remove this search from history":s,m=r.favoriteSearchesTitle,p=void 0===m?"Favorite":m,v=r.removeFavoriteSearchButtonTitle,d=void 0===v?"Remove this search from favorites":v;return"idle"===n.state.status&&!1===n.hasCollections?n.disableUserPersonalization?null:yt.createElement("div",{className:"DocSearch-StartScreen"},yt.createElement("p",{className:"DocSearch-Help"},c)):!1===n.hasCollections?null:yt.createElement("div",{className:"DocSearch-Dropdown-Container"},yt.createElement($t,rr({},n,{title:i,collection:n.state.collections[0],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Xt,null))},renderAction:function(e){var t=e.item,r=e.runFavoriteTransition,o=e.runDeleteTransition;return yt.createElement(yt.Fragment,null,yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:u,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.add(t),n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(Yt,null))),yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:f,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),o((function(){n.recentSearches.remove(t),n.refresh()}))}},yt.createElement(er,null))))}})),yt.createElement($t,rr({},n,{title:p,collection:n.state.collections[1],renderIcon:function(){return yt.createElement("div",{className:"DocSearch-Hit-icon"},yt.createElement(Yt,null))},renderAction:function(e){var t=e.item,r=e.runDeleteTransition;return yt.createElement("div",{className:"DocSearch-Hit-action"},yt.createElement("button",{className:"DocSearch-Hit-action-button",title:d,type:"submit",onClick:function(e){e.preventDefault(),e.stopPropagation(),r((function(){n.favoriteSearches.remove(t),n.refresh()}))}},yt.createElement(er,null)))}})))}var ir=["translations"];function ar(){return ar=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var lr=yt.memo((function(e){var t=e.translations,r=void 0===t?{}:t,n=cr(e,ir);if("error"===n.state.status)return yt.createElement(wt,{translations:null==r?void 0:r.errorScreen});var o=n.state.collections.some((function(e){return e.items.length>0}));return n.state.query?!1===o?yt.createElement(kt,ar({},n,{translations:null==r?void 0:r.noResultsScreen})):yt.createElement(Gt,n):yt.createElement(or,ar({},n,{hasCollections:o,translations:null==r?void 0:r.startScreen}))}),(function(e,t){return"loading"===t.state.status||"stalled"===t.state.status}));function ur(){return yt.createElement("svg",{viewBox:"0 0 38 38",stroke:"currentColor",strokeOpacity:".5"},yt.createElement("g",{fill:"none",fillRule:"evenodd"},yt.createElement("g",{transform:"translate(1 1)",strokeWidth:"2"},yt.createElement("circle",{strokeOpacity:".3",cx:"18",cy:"18",r:"18"}),yt.createElement("path",{d:"M36 18c0-9.94-8.06-18-18-18"},yt.createElement("animateTransform",{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"})))))}var sr=r(20830),fr=["translations"];function mr(){return mr=Object.assign||function(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vr(e){var t=e.translations,r=void 0===t?{}:t,n=pr(e,fr),o=r.resetButtonTitle,i=void 0===o?"Clear the query":o,a=r.resetButtonAriaLabel,c=void 0===a?"Clear the query":a,l=r.cancelButtonText,u=void 0===l?"Cancel":l,s=r.cancelButtonAriaLabel,f=void 0===s?"Cancel":s,m=r.searchInputLabel,p=void 0===m?"Search":m,v=n.getFormProps({inputElement:n.inputRef.current}).onReset;return yt.useEffect((function(){n.autoFocus&&n.inputRef.current&&n.inputRef.current.focus()}),[n.autoFocus,n.inputRef]),yt.useEffect((function(){n.isFromSelection&&n.inputRef.current&&n.inputRef.current.select()}),[n.isFromSelection,n.inputRef]),yt.createElement(yt.Fragment,null,yt.createElement("form",{className:"DocSearch-Form",onSubmit:function(e){e.preventDefault()},onReset:v},yt.createElement("label",mr({className:"DocSearch-MagnifierLabel"},n.getLabelProps()),yt.createElement(sr.W,null),yt.createElement("span",{className:"DocSearch-VisuallyHiddenForAccessibility"},p)),yt.createElement("div",{className:"DocSearch-LoadingIndicator"},yt.createElement(ur,null)),yt.createElement("input",mr({className:"DocSearch-Input",ref:n.inputRef},n.getInputProps({inputElement:n.inputRef.current,autoFocus:n.autoFocus,maxLength:ht}))),yt.createElement("button",{type:"reset",title:i,className:"DocSearch-Reset","aria-label":c,hidden:!n.state.query},yt.createElement(er,null))),yt.createElement("button",{className:"DocSearch-Cancel",type:"reset","aria-label":f,onClick:n.onClose},u))}var dr=["_highlightResult","_snippetResult"];function yr(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function hr(e){return!1===function(){var e="__TEST_KEY__";try{return localStorage.setItem(e,""),localStorage.removeItem(e),!0}catch(t){return!1}}()?{setItem:function(){},getItem:function(){return[]}}:{setItem:function(t){return window.localStorage.setItem(e,JSON.stringify(t))},getItem:function(){var t=window.localStorage.getItem(e);return t?JSON.parse(t):[]}}}function br(e){var t=e.key,r=e.limit,n=void 0===r?5:r,o=hr(t),i=o.getItem().slice(0,n);return{add:function(e){var t=e,r=(t._highlightResult,t._snippetResult,yr(t,dr)),a=i.findIndex((function(e){return e.objectID===r.objectID}));a>-1&&i.splice(a,1),i.unshift(r),i=i.slice(0,n),o.setItem(i)},remove:function(e){i=i.filter((function(t){return t.objectID!==e.objectID})),o.setItem(i)},getAll:function(){return i}}}function gr(e){const t=`algoliasearch-client-js-${e.key}`;let r;const n=()=>(void 0===r&&(r=e.localStorage||window.localStorage),r),o=()=>JSON.parse(n().getItem(t)||"{}"),i=e=>{n().setItem(t,JSON.stringify(e))};return{get:(t,r,n={miss:()=>Promise.resolve()})=>Promise.resolve().then((()=>{(()=>{const t=e.timeToLive?1e3*e.timeToLive:null,r=o(),n=Object.fromEntries(Object.entries(r).filter((([,e])=>void 0!==e.timestamp)));if(i(n),!t)return;const a=Object.fromEntries(Object.entries(n).filter((([,e])=>{const r=(new Date).getTime();return!(e.timestamp+tPromise.all([e?e.value:r(),void 0!==e]))).then((([e,t])=>Promise.all([e,t||n.miss(e)]))).then((([e])=>e)),set:(e,r)=>Promise.resolve().then((()=>{const i=o();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:r},n().setItem(t,JSON.stringify(i)),r})),delete:e=>Promise.resolve().then((()=>{const r=o();delete r[JSON.stringify(e)],n().setItem(t,JSON.stringify(r))})),clear:()=>Promise.resolve().then((()=>{n().removeItem(t)}))}}function Or(e){const t=[...e.caches],r=t.shift();return void 0===r?{get:(e,t,r={miss:()=>Promise.resolve()})=>t().then((e=>Promise.all([e,r.miss(e)]))).then((([e])=>e)),set:(e,t)=>Promise.resolve(t),delete:e=>Promise.resolve(),clear:()=>Promise.resolve()}:{get:(e,n,o={miss:()=>Promise.resolve()})=>r.get(e,n,o).catch((()=>Or({caches:t}).get(e,n,o))),set:(e,n)=>r.set(e,n).catch((()=>Or({caches:t}).set(e,n))),delete:e=>r.delete(e).catch((()=>Or({caches:t}).delete(e))),clear:()=>r.clear().catch((()=>Or({caches:t}).clear()))}}function Sr(e={serializable:!0}){let t={};return{get(r,n,o={miss:()=>Promise.resolve()}){const i=JSON.stringify(r);if(i in t)return Promise.resolve(e.serializable?JSON.parse(t[i]):t[i]);const a=n(),c=o&&o.miss||(()=>Promise.resolve());return a.then((e=>c(e))).then((()=>a))},set:(r,n)=>(t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)),delete:e=>(delete t[JSON.stringify(e)],Promise.resolve()),clear:()=>(t={},Promise.resolve())}}function jr(e){let t=e.length-1;for(;t>0;t--){const r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function wr(e,t){return t?(Object.keys(t).forEach((r=>{e[r]=t[r](e)})),e):e}function Er(e,...t){let r=0;return e.replace(/%s/g,(()=>encodeURIComponent(t[r++])))}const Pr="4.23.3",Ir={WithinQueryParameters:0,WithinHeaders:1};function Dr(e,t){const r=e||{},n=r.data||{};return Object.keys(r).forEach((e=>{-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}const Ar={Read:1,Write:2,Any:3},kr={Up:1,Down:2,Timeouted:3},xr=12e4;function Cr(e,t=kr.Up){return{...e,status:t,lastUpdate:Date.now()}}function Nr(e){return"string"==typeof e?{protocol:"https",url:e,accept:Ar.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||Ar.Any}}const _r={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};function Tr(e,t){return Promise.all(t.map((t=>e.get(t,(()=>Promise.resolve(Cr(t))))))).then((e=>{const r=e.filter((e=>function(e){return e.status===kr.Up||Date.now()-e.lastUpdate>xr}(e))),n=e.filter((e=>function(e){return e.status===kr.Timeouted&&Date.now()-e.lastUpdate<=xr}(e))),o=[...r,...n];return{getTimeout:(e,t)=>(0===n.length&&0===e?1:n.length+3+e)*t,statelessHosts:o.length>0?o.map((e=>Nr(e))):t}}))}const qr=(e,t)=>(e=>{const t=e.status;return e.isTimedOut||(({isTimedOut:e,status:t})=>!e&&0==~~t)(e)||2!=~~(t/100)&&4!=~~(t/100)})(e)?t.onRetry(e):(({status:e})=>2==~~(e/100))(e)?t.onSuccess(e):t.onFail(e);function Rr(e,t,r,n){const o=[],i=function(e,t){if(e.method===_r.Get||void 0===e.data&&void 0===t.data)return;const r=Array.isArray(e.data)?e.data:{...e.data,...t.data};return JSON.stringify(r)}(r,n),a=function(e,t){const r={...e.headers,...t.headers},n={};return Object.keys(r).forEach((e=>{const t=r[e];n[e.toLowerCase()]=t})),n}(e,n),c=r.method,l=r.method!==_r.Get?{}:{...r.data,...n.data},u={"x-algolia-agent":e.userAgent.value,...e.queryParameters,...l,...n.queryParameters};let s=0;const f=(t,l)=>{const m=t.pop();if(void 0===m)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:Fr(o)};const p={data:i,headers:a,method:c,url:Mr(m,r.path,u),connectTimeout:l(s,e.timeouts.connect),responseTimeout:l(s,n.timeout)},v=e=>{const r={request:p,response:e,host:m,triesLeft:t.length};return o.push(r),r},d={onSuccess:e=>function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e),onRetry(r){const n=v(r);return r.isTimedOut&&s++,Promise.all([e.logger.info("Retryable failure",Ur(n)),e.hostsCache.set(m,Cr(m,r.isTimedOut?kr.Timeouted:kr.Down))]).then((()=>f(t,l)))},onFail(e){throw v(e),function({content:e,status:t},r){let n=e;try{n=JSON.parse(e).message}catch(o){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(n,t,r)}(e,Fr(o))}};return e.requester.send(p).then((e=>qr(e,d)))};return Tr(e.hostsCache,t).then((e=>f([...e.statelessHosts].reverse(),e.getTimeout)))}function Lr(e){const t={value:`Algolia for JavaScript (${e})`,add(e){const r=`; ${e.segment}${void 0!==e.version?` (${e.version})`:""}`;return-1===t.value.indexOf(r)&&(t.value=`${t.value}${r}`),t}};return t}function Mr(e,t,r){const n=Hr(r);let o=`${e.protocol}://${e.url}/${"/"===t.charAt(0)?t.substr(1):t}`;return n.length&&(o+=`?${n}`),o}function Hr(e){return Object.keys(e).map((t=>{return Er("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function Fr(e){return e.map((e=>Ur(e)))}function Ur(e){const t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return{...e,request:{...e.request,headers:{...e.request.headers,...t}}}}const Br=e=>{const t=e.appId,r=function(e,t,r){const n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:()=>e===Ir.WithinHeaders?n:{},queryParameters:()=>e===Ir.WithinQueryParameters?n:{}}}(void 0!==e.authMode?e.authMode:Ir.WithinHeaders,t,e.apiKey),n=function(e){const{hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,hosts:l,queryParameters:u,headers:s}=e,f={hostsCache:t,logger:r,requester:n,requestsCache:o,responsesCache:i,timeouts:a,userAgent:c,headers:s,queryParameters:u,hosts:l.map((e=>Nr(e))),read(e,t){const r=Dr(t,f.timeouts.read),n=()=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Read))),e,r);if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();const o={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(o,(()=>f.requestsCache.get(o,(()=>f.requestsCache.set(o,n()).then((e=>Promise.all([f.requestsCache.delete(o),e])),(e=>Promise.all([f.requestsCache.delete(o),Promise.reject(e)]))).then((([e,t])=>t))))),{miss:e=>f.responsesCache.set(o,e)})},write:(e,t)=>Rr(f,f.hosts.filter((e=>0!=(e.accept&Ar.Write))),e,Dr(t,f.timeouts.write))};return f}({hosts:[{url:`${t}-dsn.algolia.net`,accept:Ar.Read},{url:`${t}.algolia.net`,accept:Ar.Write}].concat(jr([{url:`${t}-1.algolianet.com`},{url:`${t}-2.algolianet.com`},{url:`${t}-3.algolianet.com`}])),...e,headers:{...r.headers(),"content-type":"application/x-www-form-urlencoded",...e.headers},queryParameters:{...r.queryParameters(),...e.queryParameters}}),o={transporter:n,appId:t,addAlgoliaAgent(e,t){n.userAgent.add({segment:e,version:t})},clearCache:()=>Promise.all([n.requestsCache.clear(),n.responsesCache.clear()]).then((()=>{}))};return wr(o,e.methods)},Vr=e=>(t,r)=>t.method===_r.Get?e.transporter.read(t,r):e.transporter.write(t,r),Kr=e=>(t,r={})=>wr({transporter:e.transporter,appId:e.appId,indexName:t},r.methods),$r=e=>(t,r)=>{const n=t.map((e=>({...e,params:Hr(e.params||{})})));return e.transporter.read({method:_r.Post,path:"1/indexes/*/queries",data:{requests:n},cacheable:!0},r)},Jr=e=>(t,r)=>Promise.all(t.map((t=>{const{facetName:n,facetQuery:o,...i}=t.params;return Kr(e)(t.indexName,{methods:{searchForFacetValues:Qr}}).searchForFacetValues(n,o,{...r,...i})}))),zr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n),Wr=e=>(t,r)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r),Qr=e=>(t,r,n)=>e.transporter.read({method:_r.Post,path:Er("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n),Zr={Debug:1,Info:2,Error:3};const Gr=e=>(t,r)=>{const n=t.map((e=>({...e,threshold:e.threshold||0})));return e.transporter.read({method:_r.Post,path:"1/indexes/*/recommendations",data:{requests:n},cacheable:!0},r)};function Xr(e,t,r){const n={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:e=>new Promise((t=>{const r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((t=>r.setRequestHeader(t,e.headers[t])));const n=(e,n)=>setTimeout((()=>{r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e),o=n(e.connectTimeout,"Connection timeout");let i;r.onreadystatechange=()=>{r.readyState>r.OPENED&&void 0===i&&(clearTimeout(o),i=n(e.responseTimeout,"Socket timeout"))},r.onerror=()=>{0===r.status&&(clearTimeout(o),clearTimeout(i),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=()=>{clearTimeout(o),clearTimeout(i),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))},logger:(o=Zr.Error,{debug:(e,t)=>(Zr.Debug>=o&&console.debug(e,t),Promise.resolve()),info:(e,t)=>(Zr.Info>=o&&console.info(e,t),Promise.resolve()),error:(e,t)=>(console.error(e,t),Promise.resolve())}),responsesCache:Sr(),requestsCache:Sr({serializable:!1}),hostsCache:Or({caches:[gr({key:`${Pr}-${e}`}),Sr()]}),userAgent:Lr(Pr).add({segment:"Browser",version:"lite"}),authMode:Ir.WithinQueryParameters};var o;return Br({...n,...r,methods:{search:$r,searchForFacetValues:Jr,multipleQueries:$r,multipleSearchForFacetValues:Jr,customRequest:Vr,initIndex:e=>t=>Kr(e)(t,{methods:{search:Wr,searchForFacetValues:Qr,findAnswers:zr}}),getRecommendations:Gr}})}Xr.version=Pr;const Yr=Xr;var en="3.6.0";function tn(){}function rn(e){return e}function nn(e){return 1===e.button||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey}function on(e,t,r){return e.reduce((function(e,n){var o=t(n);return e.hasOwnProperty(o)||(e[o]=[]),e[o].length<(r||5)&&e[o].push(n),e}),{})}var an=["footer","searchBox"];function cn(){return cn=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}function vn(e){var t=e.appId,r=e.apiKey,n=e.indexName,o=e.placeholder,i=void 0===o?"Search docs":o,a=e.searchParameters,c=e.maxResultsPerGroup,l=e.onClose,u=void 0===l?tn:l,s=e.transformItems,f=void 0===s?rn:s,m=e.hitComponent,p=void 0===m?St:m,v=e.resultsFooterComponent,d=void 0===v?function(){return null}:v,y=e.navigator,h=e.initialScrollY,b=void 0===h?0:h,g=e.transformSearchClient,O=void 0===g?rn:g,S=e.disableUserPersonalization,j=void 0!==S&&S,w=e.initialQuery,E=void 0===w?"":w,P=e.translations,I=void 0===P?{}:P,D=e.getMissingResultsUrl,A=e.insights,k=void 0!==A&&A,x=I.footer,C=I.searchBox,N=pn(I,an),_=fn(yt.useState({query:"",collections:[],completion:null,context:{},isOpen:!1,activeItemId:null,status:"idle"}),2),T=_[0],q=_[1],R=yt.useRef(null),L=yt.useRef(null),M=yt.useRef(null),H=yt.useRef(null),F=yt.useRef(null),U=yt.useRef(10),B=yt.useRef("undefined"!=typeof window?window.getSelection().toString().slice(0,ht):"").current,V=yt.useRef(E||B).current,K=function(e,t,r){return yt.useMemo((function(){var n=Yr(e,t);return n.addAlgoliaAgent("docsearch",en),!1===/docsearch.js \(.*\)/.test(n.transporter.userAgent.value)&&n.addAlgoliaAgent("docsearch-react",en),r(n)}),[e,t,r])}(t,r,O),$=yt.useRef(br({key:"__DOCSEARCH_FAVORITE_SEARCHES__".concat(n),limit:10})).current,J=yt.useRef(br({key:"__DOCSEARCH_RECENT_SEARCHES__".concat(n),limit:0===$.getAll().length?7:4})).current,z=yt.useCallback((function(e){if(!j){var t="content"===e.type?e.__docsearch_parent:e;t&&-1===$.getAll().findIndex((function(e){return e.objectID===t.objectID}))&&J.add(t)}}),[$,J,j]),W=yt.useCallback((function(e){if(T.context.algoliaInsightsPlugin&&e.__autocomplete_id){var t=e,r={eventName:"Item Selected",index:t.__autocomplete_indexName,items:[t],positions:[e.__autocomplete_id],queryID:t.__autocomplete_queryID};T.context.algoliaInsightsPlugin.insights.clickedObjectIDsAfterSearch(r)}}),[T.context.algoliaInsightsPlugin]),Q=yt.useMemo((function(){return dt({id:"docsearch",defaultActiveItemId:0,placeholder:i,openOnFocus:!0,initialState:{query:V,context:{searchSuggestions:[]}},insights:k,navigator:y,onStateChange:function(e){q(e.state)},getSources:function(e){var o=e.query,i=e.state,l=e.setContext,s=e.setStatus;if(!o)return j?[]:[{sourceId:"recentSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),nn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return J.getAll()}},{sourceId:"favoriteSearches",onSelect:function(e){var t=e.item,r=e.event;z(t),nn(r)||u()},getItemUrl:function(e){return e.item.url},getItems:function(){return $.getAll()}}];var m=Boolean(k);return K.search([{query:o,indexName:n,params:un({attributesToRetrieve:["hierarchy.lvl0","hierarchy.lvl1","hierarchy.lvl2","hierarchy.lvl3","hierarchy.lvl4","hierarchy.lvl5","hierarchy.lvl6","content","type","url"],attributesToSnippet:["hierarchy.lvl1:".concat(U.current),"hierarchy.lvl2:".concat(U.current),"hierarchy.lvl3:".concat(U.current),"hierarchy.lvl4:".concat(U.current),"hierarchy.lvl5:".concat(U.current),"hierarchy.lvl6:".concat(U.current),"content:".concat(U.current)],snippetEllipsisText:"\u2026",highlightPreTag:"",highlightPostTag:"",hitsPerPage:20,clickAnalytics:m},a)}]).catch((function(e){throw"RetryError"===e.name&&s("error"),e})).then((function(e){var o=e.results[0],a=o.hits,s=o.nbHits,p=on(a,(function(e){return Qt(e)}),c);i.context.searchSuggestions.length0&&(X(),F.current&&F.current.focus())}),[V,X]),yt.useEffect((function(){function e(){if(L.current){var e=.01*window.innerHeight;L.current.style.setProperty("--docsearch-vh","".concat(e,"px"))}}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[]),yt.createElement("div",cn({ref:R},G({"aria-expanded":!0}),{className:["DocSearch","DocSearch-Container","stalled"===T.status&&"DocSearch-Container--Stalled","error"===T.status&&"DocSearch-Container--Errored"].filter(Boolean).join(" "),role:"button",tabIndex:0,onMouseDown:function(e){e.target===e.currentTarget&&u()}}),yt.createElement("div",{className:"DocSearch-Modal",ref:L},yt.createElement("header",{className:"DocSearch-SearchBar",ref:M},yt.createElement(vr,cn({},Q,{state:T,autoFocus:0===V.length,inputRef:F,isFromSelection:Boolean(V)&&V===B,translations:C,onClose:u}))),yt.createElement("div",{className:"DocSearch-Dropdown",ref:H},yt.createElement(lr,cn({},Q,{indexName:n,state:T,hitComponent:p,resultsFooterComponent:d,disableUserPersonalization:j,recentSearches:J,favoriteSearches:$,inputRef:F,translations:N,getMissingResultsUrl:D,onItemClick:function(e,t){W(e),z(e),nn(t)||u()}}))),yt.createElement("footer",{className:"DocSearch-Footer"},yt.createElement(Ot,{translations:x}))))}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.85ed8c9d.js b/assets/js/14eb3368.c4c20674.js similarity index 97% rename from assets/js/14eb3368.85ed8c9d.js rename to assets/js/14eb3368.c4c20674.js index 8e32a943..661cc2e5 100644 --- a/assets/js/14eb3368.85ed8c9d.js +++ b/assets/js/14eb3368.c4c20674.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9817],{1310:(e,n,r)=>{r.d(n,{Z:()=>x});r(67294);var t=r(90512),s=r(35281),a=r(78425),i=r(48596),l=r(33692),o=r(95999),c=r(44996),d=r(85893);function u(e){return(0,d.jsx)("svg",Object.assign({viewBox:"0 0 24 24"},e,{children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})}))}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){var e=(0,c.ZP)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.Z,{"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const v={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function b(e){var n=e.children,r=e.href,t="breadcrumbs__link";return e.isLast?(0,d.jsx)("span",{className:t,itemProp:"name",children:n}):r?(0,d.jsx)(l.Z,{className:t,href:r,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:n})}):(0,d.jsx)("span",{className:t,children:n})}function g(e){var n=e.children,r=e.active,s=e.index,a=e.addMicrodata;return(0,d.jsxs)("li",Object.assign({},a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,t.Z)("breadcrumbs__item",{"breadcrumbs__item--active":r}),children:[n,(0,d.jsx)("meta",{itemProp:"position",content:String(s+1)})]}))}function x(){var e=(0,a.s1)(),n=(0,i.Ns)();return e?(0,d.jsx)("nav",{className:(0,t.Z)(s.k.docs.docBreadcrumbs,v.breadcrumbsContainer),"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[n&&(0,d.jsx)(h,{}),e.map((function(n,r){var t=r===e.length-1,s="category"===n.type&&n.linkUnlisted?void 0:n.href;return(0,d.jsx)(g,{active:t,index:r,addMicrodata:!!s,children:(0,d.jsx)(b,{href:s,isLast:t,children:n.label})},r)}))]})}):null}},34228:(e,n,r)=>{r.r(n),r.d(n,{default:()=>y});r(67294);var t=r(10833),s=r(78425),a=r(44996),i=r(90512),l=r(33692),o=r(88824),c=r(13919),d=r(95999),u=r(92503);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var h=r(85893);function v(e){var n=e.href,r=e.children;return(0,h.jsx)(l.Z,{href:n,className:(0,i.Z)("card padding--lg",m.cardContainer),children:r})}function b(e){var n=e.href,r=e.icon,t=e.title,s=e.description;return(0,h.jsxs)(v,{href:n,children:[(0,h.jsxs)(u.Z,{as:"h2",className:(0,i.Z)("text--truncate",m.cardTitle),title:t,children:[r," ",t]}),s&&(0,h.jsx)("p",{className:(0,i.Z)("text--truncate",m.cardDescription),title:s,children:s})]})}function g(e){var n,r,t=e.item,a=(0,s.LM)(t),i=(r=(0,o.c)().selectMessage,function(e){return r(e,(0,d.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:e}))});return a?(0,h.jsx)(b,{href:a,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:null!=(n=t.description)?n:i(t.items.length)}):null}function x(e){var n,r,t=e.item,a=(0,c.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",i=(0,s.xz)(null!=(n=t.docId)?n:void 0);return(0,h.jsx)(b,{href:t.href,icon:a,title:t.label,description:null!=(r=t.description)?r:null==i?void 0:i.description})}function p(e){var n=e.item;switch(n.type){case"link":return(0,h.jsx)(x,{item:n});case"category":return(0,h.jsx)(g,{item:n});default:throw new Error("unknown item type "+JSON.stringify(n))}}function f(e){var n=e.className,r=(0,s.jA)();return(0,h.jsx)(j,{items:r.items,className:n})}function j(e){var n=e.items,r=e.className;if(!n)return(0,h.jsx)(f,Object.assign({},e));var t=(0,s.MN)(n);return(0,h.jsx)("section",{className:(0,i.Z)("row",r),children:t.map((function(e,n){return(0,h.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,h.jsx)(p,{item:e})},n)}))})}var N=r(4966),Z=r(23120),L=r(44364),k=r(1310);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function T(e){var n=e.categoryGeneratedIndex;return(0,h.jsx)(t.d,{title:n.title,description:n.description,keywords:n.keywords,image:(0,a.ZP)(n.image)})}function I(e){var n=e.categoryGeneratedIndex,r=(0,s.jA)();return(0,h.jsxs)("div",{className:_.generatedIndexPage,children:[(0,h.jsx)(Z.Z,{}),(0,h.jsx)(k.Z,{}),(0,h.jsx)(L.Z,{}),(0,h.jsxs)("header",{children:[(0,h.jsx)(u.Z,{as:"h1",className:_.title,children:n.title}),n.description&&(0,h.jsx)("p",{children:n.description})]}),(0,h.jsx)("article",{className:"margin-top--lg",children:(0,h.jsx)(j,{items:r.items,className:_.list})}),(0,h.jsx)("footer",{className:"margin-top--lg",children:(0,h.jsx)(N.Z,{previous:n.navigation.previous,next:n.navigation.next})})]})}function y(e){return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(T,Object.assign({},e)),(0,h.jsx)(I,Object.assign({},e))]})}},4966:(e,n,r)=>{r.d(n,{Z:()=>o});r(67294);var t=r(95999),s=r(90512),a=r(33692),i=r(85893);function l(e){var n=e.permalink,r=e.title,t=e.subLabel,l=e.isNext;return(0,i.jsxs)(a.Z,{className:(0,s.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:n,children:[t&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:t}),(0,i.jsx)("div",{className:"pagination-nav__label",children:r})]})}function o(e){var n=e.previous,r=e.next;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,t.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,i.jsx)(l,Object.assign({},n,{subLabel:(0,i.jsx)(t.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})})),r&&(0,i.jsx)(l,Object.assign({},r,{subLabel:(0,i.jsx)(t.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0}))]})}},44364:(e,n,r)=>{r.d(n,{Z:()=>o});r(67294);var t=r(90512),s=r(95999),a=r(35281),i=r(74477),l=r(85893);function o(e){var n=e.className,r=(0,i.E)();return r.badge?(0,l.jsx)("span",{className:(0,t.Z)(n,a.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,l.jsx)(s.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:r.label},children:"Version: {versionLabel}"})}):null}},23120:(e,n,r)=>{r.d(n,{Z:()=>g});r(67294);var t=r(90512),s=r(52263),a=r(33692),i=r(95999),l=r(80143),o=r(35281),c=r(60373),d=r(74477),u=r(85893);var m={unreleased:function(e){var n=e.siteTitle,r=e.versionMetadata;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:n,versionLabel:(0,u.jsx)("b",{children:r.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){var n=e.siteTitle,r=e.versionMetadata;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:n,versionLabel:(0,u.jsx)("b",{children:r.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){var n=m[e.versionMetadata.banner];return(0,u.jsx)(n,Object.assign({},e))}function v(e){var n=e.versionLabel,r=e.to,t=e.onClick;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:n,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(a.Z,{to:r,onClick:t,children:(0,u.jsx)(i.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function b(e){var n,r=e.className,a=e.versionMetadata,i=(0,s.Z)().siteConfig.title,d=(0,l.gA)({failfast:!0}).pluginId,m=(0,c.J)(d).savePreferredVersionName,b=(0,l.Jo)(d),g=b.latestDocSuggestion,x=b.latestVersionSuggestion,p=null!=g?g:(n=x).docs.find((function(e){return e.id===n.mainDocId}));return(0,u.jsxs)("div",{className:(0,t.Z)(r,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:a})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(v,{versionLabel:x.label,to:p.path,onClick:function(){return m(x.name)}})})]})}function g(e){var n=e.className,r=(0,d.E)();return r.banner?(0,u.jsx)(b,{className:n,versionMetadata:r}):null}},88824:(e,n,r)=>{r.d(n,{c:()=>c});var t=r(67294),s=r(52263),a=["zero","one","two","few","many","other"];function i(e){return a.filter((function(n){return e.includes(n)}))}var l={locale:"en",pluralForms:i(["one","other"]),select:function(e){return 1===e?"one":"other"}};function o(){var e=(0,s.Z)().i18n.currentLocale;return(0,t.useMemo)((function(){try{return n=e,r=new Intl.PluralRules(n),{locale:n,pluralForms:i(r.resolvedOptions().pluralCategories),select:function(e){return r.select(e)}}}catch(t){return console.error('Failed to use Intl.PluralRules for locale "'+e+'".\nDocusaurus will fallback to the default (English) implementation.\nError: '+t.message+"\n"),l}var n,r}),[e])}function c(){var e=o();return{selectMessage:function(n,r){return function(e,n,r){var t=e.split("|");if(1===t.length)return t[0];t.length>r.pluralForms.length&&console.error("For locale="+r.locale+", a maximum of "+r.pluralForms.length+" plural forms are expected ("+r.pluralForms.join(",")+"), but the message contains "+t.length+": "+e);var s=r.select(n),a=r.pluralForms.indexOf(s);return t[Math.min(a,t.length-1)]}(r,n,e)}}}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9817],{1310:(e,n,r)=>{r.d(n,{Z:()=>x});r(67294);var t=r(90512),s=r(35281),a=r(91423),i=r(48596),l=r(33692),o=r(95999),c=r(44996),d=r(85893);function u(e){return(0,d.jsx)("svg",Object.assign({viewBox:"0 0 24 24"},e,{children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})}))}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){var e=(0,c.ZP)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(l.Z,{"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const v={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function b(e){var n=e.children,r=e.href,t="breadcrumbs__link";return e.isLast?(0,d.jsx)("span",{className:t,itemProp:"name",children:n}):r?(0,d.jsx)(l.Z,{className:t,href:r,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:n})}):(0,d.jsx)("span",{className:t,children:n})}function g(e){var n=e.children,r=e.active,s=e.index,a=e.addMicrodata;return(0,d.jsxs)("li",Object.assign({},a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,t.Z)("breadcrumbs__item",{"breadcrumbs__item--active":r}),children:[n,(0,d.jsx)("meta",{itemProp:"position",content:String(s+1)})]}))}function x(){var e=(0,a.s1)(),n=(0,i.Ns)();return e?(0,d.jsx)("nav",{className:(0,t.Z)(s.k.docs.docBreadcrumbs,v.breadcrumbsContainer),"aria-label":(0,o.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[n&&(0,d.jsx)(h,{}),e.map((function(n,r){var t=r===e.length-1,s="category"===n.type&&n.linkUnlisted?void 0:n.href;return(0,d.jsx)(g,{active:t,index:r,addMicrodata:!!s,children:(0,d.jsx)(b,{href:s,isLast:t,children:n.label})},r)}))]})}):null}},34228:(e,n,r)=>{r.r(n),r.d(n,{default:()=>y});r(67294);var t=r(10833),s=r(91423),a=r(44996),i=r(90512),l=r(33692),o=r(88824),c=r(13919),d=r(95999),u=r(92503);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var h=r(85893);function v(e){var n=e.href,r=e.children;return(0,h.jsx)(l.Z,{href:n,className:(0,i.Z)("card padding--lg",m.cardContainer),children:r})}function b(e){var n=e.href,r=e.icon,t=e.title,s=e.description;return(0,h.jsxs)(v,{href:n,children:[(0,h.jsxs)(u.Z,{as:"h2",className:(0,i.Z)("text--truncate",m.cardTitle),title:t,children:[r," ",t]}),s&&(0,h.jsx)("p",{className:(0,i.Z)("text--truncate",m.cardDescription),title:s,children:s})]})}function g(e){var n,r,t=e.item,a=(0,s.LM)(t),i=(r=(0,o.c)().selectMessage,function(e){return r(e,(0,d.I)({message:"1 item|{count} items",id:"theme.docs.DocCard.categoryDescription.plurals",description:"The default description for a category card in the generated index about how many items this category includes"},{count:e}))});return a?(0,h.jsx)(b,{href:a,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:null!=(n=t.description)?n:i(t.items.length)}):null}function x(e){var n,r,t=e.item,a=(0,c.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",i=(0,s.xz)(null!=(n=t.docId)?n:void 0);return(0,h.jsx)(b,{href:t.href,icon:a,title:t.label,description:null!=(r=t.description)?r:null==i?void 0:i.description})}function p(e){var n=e.item;switch(n.type){case"link":return(0,h.jsx)(x,{item:n});case"category":return(0,h.jsx)(g,{item:n});default:throw new Error("unknown item type "+JSON.stringify(n))}}function f(e){var n=e.className,r=(0,s.jA)();return(0,h.jsx)(j,{items:r.items,className:n})}function j(e){var n=e.items,r=e.className;if(!n)return(0,h.jsx)(f,Object.assign({},e));var t=(0,s.MN)(n);return(0,h.jsx)("section",{className:(0,i.Z)("row",r),children:t.map((function(e,n){return(0,h.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,h.jsx)(p,{item:e})},n)}))})}var N=r(4966),Z=r(23120),L=r(44364),k=r(1310);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function T(e){var n=e.categoryGeneratedIndex;return(0,h.jsx)(t.d,{title:n.title,description:n.description,keywords:n.keywords,image:(0,a.ZP)(n.image)})}function I(e){var n=e.categoryGeneratedIndex,r=(0,s.jA)();return(0,h.jsxs)("div",{className:_.generatedIndexPage,children:[(0,h.jsx)(Z.Z,{}),(0,h.jsx)(k.Z,{}),(0,h.jsx)(L.Z,{}),(0,h.jsxs)("header",{children:[(0,h.jsx)(u.Z,{as:"h1",className:_.title,children:n.title}),n.description&&(0,h.jsx)("p",{children:n.description})]}),(0,h.jsx)("article",{className:"margin-top--lg",children:(0,h.jsx)(j,{items:r.items,className:_.list})}),(0,h.jsx)("footer",{className:"margin-top--lg",children:(0,h.jsx)(N.Z,{previous:n.navigation.previous,next:n.navigation.next})})]})}function y(e){return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(T,Object.assign({},e)),(0,h.jsx)(I,Object.assign({},e))]})}},4966:(e,n,r)=>{r.d(n,{Z:()=>o});r(67294);var t=r(95999),s=r(90512),a=r(33692),i=r(85893);function l(e){var n=e.permalink,r=e.title,t=e.subLabel,l=e.isNext;return(0,i.jsxs)(a.Z,{className:(0,s.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:n,children:[t&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:t}),(0,i.jsx)("div",{className:"pagination-nav__label",children:r})]})}function o(e){var n=e.previous,r=e.next;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,t.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,i.jsx)(l,Object.assign({},n,{subLabel:(0,i.jsx)(t.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})})),r&&(0,i.jsx)(l,Object.assign({},r,{subLabel:(0,i.jsx)(t.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0}))]})}},44364:(e,n,r)=>{r.d(n,{Z:()=>o});r(67294);var t=r(90512),s=r(95999),a=r(35281),i=r(73797),l=r(85893);function o(e){var n=e.className,r=(0,i.E)();return r.badge?(0,l.jsx)("span",{className:(0,t.Z)(n,a.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,l.jsx)(s.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:r.label},children:"Version: {versionLabel}"})}):null}},23120:(e,n,r)=>{r.d(n,{Z:()=>g});r(67294);var t=r(90512),s=r(52263),a=r(33692),i=r(95999),l=r(80143),o=r(35281),c=r(70298),d=r(73797),u=r(85893);var m={unreleased:function(e){var n=e.siteTitle,r=e.versionMetadata;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:n,versionLabel:(0,u.jsx)("b",{children:r.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){var n=e.siteTitle,r=e.versionMetadata;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:n,versionLabel:(0,u.jsx)("b",{children:r.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){var n=m[e.versionMetadata.banner];return(0,u.jsx)(n,Object.assign({},e))}function v(e){var n=e.versionLabel,r=e.to,t=e.onClick;return(0,u.jsx)(i.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:n,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(a.Z,{to:r,onClick:t,children:(0,u.jsx)(i.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function b(e){var n,r=e.className,a=e.versionMetadata,i=(0,s.Z)().siteConfig.title,d=(0,l.gA)({failfast:!0}).pluginId,m=(0,c.J)(d).savePreferredVersionName,b=(0,l.Jo)(d),g=b.latestDocSuggestion,x=b.latestVersionSuggestion,p=null!=g?g:(n=x).docs.find((function(e){return e.id===n.mainDocId}));return(0,u.jsxs)("div",{className:(0,t.Z)(r,o.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:a})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(v,{versionLabel:x.label,to:p.path,onClick:function(){return m(x.name)}})})]})}function g(e){var n=e.className,r=(0,d.E)();return r.banner?(0,u.jsx)(b,{className:n,versionMetadata:r}):null}},88824:(e,n,r)=>{r.d(n,{c:()=>c});var t=r(67294),s=r(52263),a=["zero","one","two","few","many","other"];function i(e){return a.filter((function(n){return e.includes(n)}))}var l={locale:"en",pluralForms:i(["one","other"]),select:function(e){return 1===e?"one":"other"}};function o(){var e=(0,s.Z)().i18n.currentLocale;return(0,t.useMemo)((function(){try{return n=e,r=new Intl.PluralRules(n),{locale:n,pluralForms:i(r.resolvedOptions().pluralCategories),select:function(e){return r.select(e)}}}catch(t){return console.error('Failed to use Intl.PluralRules for locale "'+e+'".\nDocusaurus will fallback to the default (English) implementation.\nError: '+t.message+"\n"),l}var n,r}),[e])}function c(){var e=o();return{selectMessage:function(n,r){return function(e,n,r){var t=e.split("|");if(1===t.length)return t[0];t.length>r.pluralForms.length&&console.error("For locale="+r.locale+", a maximum of "+r.pluralForms.length+" plural forms are expected ("+r.pluralForms.join(",")+"), but the message contains "+t.length+": "+e);var s=r.select(n),a=r.pluralForms.indexOf(s);return t[Math.min(a,t.length-1)]}(r,n,e)}}}}}]); \ No newline at end of file diff --git a/assets/js/1772.5c30b0a3.js b/assets/js/1772.fbaa28b1.js similarity index 79% rename from assets/js/1772.5c30b0a3.js rename to assets/js/1772.fbaa28b1.js index dd5b1416..3d2bb35c 100644 --- a/assets/js/1772.5c30b0a3.js +++ b/assets/js/1772.fbaa28b1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1772],{5658:(e,t,n)=>{n.d(t,{Z:()=>a});n(67294);var i=n(90512),o=n(95999),s=n(92503),r=n(85893);function a(e){var t=e.className;return(0,r.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},51772:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(67294);var i=n(95999),o=n(10833),s=n(7372),r=n(5658),a=n(85893);function d(){var e=(0,i.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.d,{title:e}),(0,a.jsx)(s.Z,{children:(0,a.jsx)(r.Z,{})})]})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1772],{5658:(e,t,n)=>{n.d(t,{Z:()=>a});n(67294);var i=n(90512),o=n(95999),s=n(92503),r=n(85893);function a(e){var t=e.className;return(0,r.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},51772:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(67294);var i=n(95999),o=n(10833),s=n(63211),r=n(5658),a=n(85893);function d(){var e=(0,i.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.d,{title:e}),(0,a.jsx)(s.Z,{children:(0,a.jsx)(r.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/17896441.cb1078fe.js b/assets/js/17896441.23c148c7.js similarity index 66% rename from assets/js/17896441.cb1078fe.js rename to assets/js/17896441.23c148c7.js index 3c15fa45..7aa79ffd 100644 --- a/assets/js/17896441.cb1078fe.js +++ b/assets/js/17896441.23c148c7.js @@ -1 +1 @@ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7918],{1310:(e,n,t)=>{"use strict";t.d(n,{Z:()=>p});t(67294);var a=t(90512),s=t(35281),i=t(78425),r=t(48596),o=t(33692),c=t(95999),l=t(44996),d=t(85893);function u(e){return(0,d.jsx)("svg",Object.assign({viewBox:"0 0 24 24"},e,{children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})}))}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){var e=(0,l.ZP)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(o.Z,{"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const v={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function f(e){var n=e.children,t=e.href,a="breadcrumbs__link";return e.isLast?(0,d.jsx)("span",{className:a,itemProp:"name",children:n}):t?(0,d.jsx)(o.Z,{className:a,href:t,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:n})}):(0,d.jsx)("span",{className:a,children:n})}function b(e){var n=e.children,t=e.active,s=e.index,i=e.addMicrodata;return(0,d.jsxs)("li",Object.assign({},i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,a.Z)("breadcrumbs__item",{"breadcrumbs__item--active":t}),children:[n,(0,d.jsx)("meta",{itemProp:"position",content:String(s+1)})]}))}function p(){var e=(0,i.s1)(),n=(0,r.Ns)();return e?(0,d.jsx)("nav",{className:(0,a.Z)(s.k.docs.docBreadcrumbs,v.breadcrumbsContainer),"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[n&&(0,d.jsx)(h,{}),e.map((function(n,t){var a=t===e.length-1,s="category"===n.type&&n.linkUnlisted?void 0:n.href;return(0,d.jsx)(b,{active:a,index:t,addMicrodata:!!s,children:(0,d.jsx)(f,{href:s,isLast:a,children:n.label})},t)}))]})}):null}},18504:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>Pn});var a=t(67294),s=t(10833),i=t(69688),r=t(85893),o=a.createContext(null);function c(e){var n=e.children,t=function(e){return(0,a.useMemo)((function(){return{metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc}}),[e])}(e.content);return(0,r.jsx)(o.Provider,{value:t,children:n})}function l(){var e=(0,a.useContext)(o);if(null===e)throw new i.i6("DocProvider");return e}function d(){var e,n=l(),t=n.metadata,a=n.frontMatter,i=n.assets;return(0,r.jsx)(s.d,{title:t.title,description:t.description,keywords:a.keywords,image:null!=(e=i.image)?e:a.image})}var u=t(90512),m=t(87524),h=t(4966);function v(){var e=l().metadata;return(0,r.jsx)(h.Z,{previous:e.previous,next:e.next})}var f=t(23120),b=t(44364),p=t(35281),g=t(95999),j=t(33692);const x={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function N(e){var n=e.permalink,t=e.label,a=e.count,s=e.description;return(0,r.jsxs)(j.Z,{href:n,title:s,className:(0,u.Z)(x.tag,a?x.tagWithCount:x.tagRegular),children:[t,a&&(0,r.jsx)("span",{children:a})]})}const C={tags:"tags_jXut",tag:"tag_QGVx"};function k(e){var n=e.tags;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("b",{children:(0,r.jsx)(g.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,r.jsx)("ul",{className:(0,u.Z)(C.tags,"padding--none","margin-left--sm"),children:n.map((function(e){return(0,r.jsx)("li",{className:C.tag,children:(0,r.jsx)(N,Object.assign({},e))},e.permalink)}))})]})}var L=t(63366);const y={iconEdit:"iconEdit_Z9Sw"};var Z=["className"];function _(e){var n=e.className,t=(0,L.Z)(e,Z);return(0,r.jsx)("svg",Object.assign({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(y.iconEdit,n),"aria-hidden":"true"},t,{children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})}))}function B(e){var n=e.editUrl;return(0,r.jsxs)(j.Z,{to:n,className:p.k.common.editThisPage,children:[(0,r.jsx)(_,{}),(0,r.jsx)(g.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var w=t(52263);function T(e){void 0===e&&(e={});var n=(0,w.Z)().i18n.currentLocale,t=function(){var e=(0,w.Z)().i18n,n=e.currentLocale;return e.localeConfigs[n].calendar}();return new Intl.DateTimeFormat(n,Object.assign({calendar:t},e))}function O(e){var n=e.lastUpdatedAt,t=new Date(n),a=T({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(t);return(0,r.jsx)(g.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,r.jsx)("b",{children:(0,r.jsx)("time",{dateTime:t.toISOString(),itemProp:"dateModified",children:a})})},children:" on {date}"})}function E(e){var n=e.lastUpdatedBy;return(0,r.jsx)(g.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,r.jsx)("b",{children:n})},children:" by {user}"})}function H(e){var n=e.lastUpdatedAt,t=e.lastUpdatedBy;return(0,r.jsxs)("span",{className:p.k.common.lastUpdated,children:[(0,r.jsx)(g.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:n?(0,r.jsx)(O,{lastUpdatedAt:n}):"",byUser:t?(0,r.jsx)(E,{lastUpdatedBy:t}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const A={lastUpdated:"lastUpdated_JAkA"};function I(e){var n=e.className,t=e.editUrl,a=e.lastUpdatedAt,s=e.lastUpdatedBy;return(0,r.jsxs)("div",{className:(0,u.Z)("row",n),children:[(0,r.jsx)("div",{className:"col",children:t&&(0,r.jsx)(B,{editUrl:t})}),(0,r.jsx)("div",{className:(0,u.Z)("col",A.lastUpdated),children:(a||s)&&(0,r.jsx)(H,{lastUpdatedAt:a,lastUpdatedBy:s})})]})}function M(){var e=l().metadata,n=e.editUrl,t=e.lastUpdatedAt,a=e.lastUpdatedBy,s=e.tags,i=s.length>0,o=!!(n||t||a);return i||o?(0,r.jsxs)("footer",{className:(0,u.Z)(p.k.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,r.jsx)("div",{className:(0,u.Z)("row margin-top--sm",p.k.docs.docFooterTagsRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(k,{tags:s})})}),o&&(0,r.jsx)(I,{className:(0,u.Z)("margin-top--sm",p.k.docs.docFooterEditMetaRow),editUrl:n,lastUpdatedAt:t,lastUpdatedBy:a})]}):null}var S=t(86043),U=t(86668),z=["parentIndex"];function V(e){var n=e.map((function(e){return Object.assign({},e,{parentIndex:-1,children:[]})})),t=Array(7).fill(-1);n.forEach((function(e,n){var a=t.slice(2,e.level);e.parentIndex=Math.max.apply(Math,a),t[e.level]=n}));var a=[];return n.forEach((function(e){var t=e.parentIndex,s=(0,L.Z)(e,z);t>=0?n[t].children.push(s):a.push(s)})),a}function R(e){var n=e.toc,t=e.minHeadingLevel,a=e.maxHeadingLevel;return n.flatMap((function(e){var n=R({toc:e.children,minHeadingLevel:t,maxHeadingLevel:a});return function(e){return e.level>=t&&e.level<=a}(e)?[Object.assign({},e,{children:n})]:n}))}function P(e){var n=e.getBoundingClientRect();return n.top===n.bottom?P(e.parentNode):n}function D(e,n){var t,a,s=n.anchorTopOffset,i=e.find((function(e){return P(e).top>=s}));return i?function(e){return e.top>0&&e.bottom",end:""}}),Ce=Object.keys(xe);function ke(e,n){var t=e.map((function(e){var t=Ne[e],a=t.start,s=t.end;return"(?:"+a+"\\s*("+n.flatMap((function(e){var n,t;return[e.line,null==(n=e.block)?void 0:n.start,null==(t=e.block)?void 0:t.end].filter(Boolean)})).join("|")+")\\s*"+s+")"})).join("|");return new RegExp("^\\s*(?:"+t+")\\s*$")}function Le(e,n){var t=e.replace(/\n$/,""),a=n.language,s=n.magicComments,i=n.metastring;if(i&&je.test(i)){var r=i.match(je).groups.range;if(0===s.length)throw new Error("A highlight range has been given in code block's metastring (``` "+i+"), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.");var o=s[0].className,c=pe()(r).filter((function(e){return e>0})).map((function(e){return[e-1,[o]]}));return{lineClassNames:Object.fromEntries(c),code:t}}if(void 0===a)return{lineClassNames:{},code:t};for(var l=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return ke(["js","jsBlock"],n);case"jsx":case"tsx":return ke(["js","jsBlock","jsx"],n);case"html":return ke(["js","jsBlock","html"],n);case"python":case"py":case"bash":return ke(["bash"],n);case"markdown":case"md":return ke(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return ke(["tex"],n);case"lua":case"haskell":case"sql":return ke(["lua"],n);case"wasm":return ke(["wasm"],n);case"vb":case"vba":case"visual-basic":return ke(["vb","rem"],n);case"vbnet":return ke(["vbnet","rem"],n);case"batch":return ke(["rem"],n);case"basic":return ke(["rem","f90"],n);case"fsharp":return ke(["js","ml"],n);case"ocaml":case"sml":return ke(["ml"],n);case"fortran":return ke(["f90"],n);case"cobol":return ke(["cobol"],n);default:return ke(Ce,n)}}(a,s),d=t.split("\n"),u=Object.fromEntries(s.map((function(e){return[e.className,{start:0,range:""}]}))),m=Object.fromEntries(s.filter((function(e){return e.line})).map((function(e){var n=e.className;return[e.line,n]}))),h=Object.fromEntries(s.filter((function(e){return e.block})).map((function(e){var n=e.className;return[e.block.start,n]}))),v=Object.fromEntries(s.filter((function(e){return e.block})).map((function(e){var n=e.className;return[e.block.end,n]}))),f=0;f0&&r.getRangeAt(0);a.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;var c=!1;try{c=document.execCommand("copy")}catch(l){}s.remove(),o&&(r.removeAllRanges(),r.addRange(o)),i&&i.focus()}(n),o(!0),c.current=window.setTimeout((function(){o(!1)}),1e3)}),[n]);return(0,a.useEffect)((function(){return function(){return window.clearTimeout(c.current)}}),[]),(0,r.jsx)("button",{type:"button","aria-label":i?(0,g.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,g.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,g.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",t,Se.copyButton,i&&Se.copyButtonCopied),onClick:l,children:(0,r.jsxs)("span",{className:Se.copyButtonIcons,"aria-hidden":"true",children:[(0,r.jsx)(Ie,{className:Se.copyButtonIcon}),(0,r.jsx)(Me,{className:Se.copyButtonSuccessIcon})]})})}function ze(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 24 24"},e,{children:(0,r.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const Ve={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function Re(e){var n=e.className,t=e.onClick,a=e.isEnabled,s=(0,g.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,r.jsx)("button",{type:"button",onClick:t,className:(0,u.Z)("clean-btn",n,a&&Ve.wordWrapButtonEnabled),"aria-label":s,title:s,children:(0,r.jsx)(ze,{className:Ve.wordWrapButtonIcon,"aria-hidden":"true"})})}function Pe(e){var n,t,s,i,o,c,l,d,m,h,v,f=e.children,b=e.className,p=void 0===b?"":b,g=e.metastring,j=e.title,x=e.showLineNumbers,N=e.language,C=(0,U.L)().prism,k=C.defaultLanguage,L=C.magicComments,y=function(e){return null==e?void 0:e.toLowerCase()}(null!=(n=null!=N?N:null==(t=p.split(" ").find((function(e){return e.startsWith("language-")})))?void 0:t.replace(/language-/,""))?n:k),Z=ve(),_=(s=(0,a.useState)(!1),i=s[0],o=s[1],c=(0,a.useState)(!1),l=c[0],d=c[1],m=(0,a.useRef)(null),h=(0,a.useCallback)((function(){var e=m.current.querySelector("code");i?e.removeAttribute("style"):(e.style.whiteSpace="pre-wrap",e.style.overflowWrap="anywhere"),o((function(e){return!e}))}),[m,i]),v=(0,a.useCallback)((function(){var e=m.current,n=e.scrollWidth>e.clientWidth||m.current.querySelector("code").hasAttribute("style");d(n)}),[m]),Oe(m,v),(0,a.useEffect)((function(){v()}),[i,v]),(0,a.useEffect)((function(){return window.addEventListener("resize",v,{passive:!0}),function(){window.removeEventListener("resize",v)}}),[v]),{codeBlockRef:m,isEnabled:i,isCodeScrollable:l,toggle:h}),B=function(e){var n,t;return null!=(n=null==e||null==(t=e.match(ge))?void 0:t.groups.title)?n:""}(g)||j,w=Le(f,{metastring:g,language:y,magicComments:L}),T=w.lineClassNames,O=w.code,E=null!=x?x:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(g);return(0,r.jsxs)(_e,{as:"div",className:(0,u.Z)(p,y&&!p.includes("language-"+y)&&"language-"+y),children:[B&&(0,r.jsx)("div",{className:Be.codeBlockTitle,children:B}),(0,r.jsxs)("div",{className:Be.codeBlockContent,children:[(0,r.jsx)(Ee.y$,{theme:Z,code:O,language:null!=y?y:"text",children:function(e){var n=e.className,t=e.style,a=e.tokens,s=e.getLineProps,i=e.getTokenProps;return(0,r.jsx)("pre",{tabIndex:0,ref:_.codeBlockRef,className:(0,u.Z)(n,Be.codeBlock,"thin-scrollbar"),style:t,children:(0,r.jsx)("code",{className:(0,u.Z)(Be.codeBlockLines,E&&Be.codeBlockLinesWithNumbering),children:a.map((function(e,n){return(0,r.jsx)(Ae,{line:e,getLineProps:s,getTokenProps:i,classNames:T[n],showLineNumbers:E},n)}))})})}}),(0,r.jsxs)("div",{className:Be.buttonGroup,children:[(_.isEnabled||_.isCodeScrollable)&&(0,r.jsx)(Re,{className:Be.codeButton,onClick:function(){return _.toggle()},isEnabled:_.isEnabled}),(0,r.jsx)(Ue,{className:Be.codeButton,code:O})]})]})]})}var De=["children"];function We(e){var n=e.children,t=(0,L.Z)(e,De),s=(0,me.Z)(),i=function(e){return a.Children.toArray(e).some((function(e){return(0,a.isValidElement)(e)}))?e:Array.isArray(e)?e.join(""):e}(n),o="string"==typeof i?Pe:we;return(0,r.jsx)(o,Object.assign({},t,{children:i}),String(s))}function Fe(e){return(0,r.jsx)("code",Object.assign({},e))}var qe=t(28138);const Ge={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};var Je=["summary","children"];function $e(e){return!!e&&("SUMMARY"===e.tagName||$e(e.parentElement))}function Ye(e,n){return!!e&&(e===n||Ye(e.parentElement,n))}function Qe(e){var n=e.summary,t=e.children,s=(0,L.Z)(e,Je);(0,qe.Z)().collectAnchor(s.id);var i=(0,me.Z)(),o=(0,a.useRef)(null),c=(0,S.u)({initialState:!s.open}),l=c.collapsed,d=c.setCollapsed,m=(0,a.useState)(s.open),h=m[0],v=m[1],f=a.isValidElement(n)?n:(0,r.jsx)("summary",{children:null!=n?n:"Details"});return(0,r.jsxs)("details",Object.assign({},s,{ref:o,open:h,"data-collapsed":l,className:(0,u.Z)(Ge.details,i&&Ge.isBrowser,s.className),onMouseDown:function(e){$e(e.target)&&e.detail>1&&e.preventDefault()},onClick:function(e){e.stopPropagation();var n=e.target;$e(n)&&Ye(n,o.current)&&(e.preventDefault(),l?(d(!1),v(!0)):d(!0))},children:[f,(0,r.jsx)(S.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:function(e){d(e),v(!e)},children:(0,r.jsx)("div",{className:Ge.collapsibleContent,children:t})})]}))}const Xe={details:"details_b_Ee"};var Ke="alert alert--info";function en(e){var n=Object.assign({},(function(e){if(null==e)throw new TypeError("Cannot destructure "+e)}(e),e));return(0,r.jsx)(Qe,Object.assign({},n,{className:(0,u.Z)(Ke,Xe.details,n.className)}))}function nn(e){var n=a.Children.toArray(e.children),t=n.find((function(e){return a.isValidElement(e)&&"summary"===e.type})),s=(0,r.jsx)(r.Fragment,{children:n.filter((function(e){return e!==t}))});return(0,r.jsx)(en,Object.assign({},e,{summary:t,children:s}))}function tn(e){return(0,r.jsx)(le.Z,Object.assign({},e))}const an={containsTaskList:"containsTaskList_mC6p"};function sn(e){if(void 0!==e)return(0,u.Z)(e,(null==e?void 0:e.includes("contains-task-list"))&&an.containsTaskList)}const rn={img:"img_ev3q"};function on(e){var n,t=function(e){var n=a.Children.toArray(e),t=n.find((function(e){return a.isValidElement(e)&&"mdxAdmonitionTitle"===e.type})),s=n.filter((function(e){return e!==t}));return{mdxAdmonitionTitle:null==t?void 0:t.props.children,rest:s.length>0?(0,r.jsx)(r.Fragment,{children:s}):null}}(e.children),s=t.mdxAdmonitionTitle,i=t.rest,o=null!=(n=e.title)?n:s;return Object.assign({},e,o&&{title:o},{children:i})}const cn={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function ln(e){var n=e.type,t=e.className,a=e.children;return(0,r.jsx)("div",{className:(0,u.Z)(p.k.common.admonition,p.k.common.admonitionType(n),cn.admonition,t),children:a})}function dn(e){var n=e.icon,t=e.title;return(0,r.jsxs)("div",{className:cn.admonitionHeading,children:[(0,r.jsx)("span",{className:cn.admonitionIcon,children:n}),t]})}function un(e){var n=e.children;return n?(0,r.jsx)("div",{className:cn.admonitionContent,children:n}):null}function mn(e){var n=e.type,t=e.icon,a=e.title,s=e.children,i=e.className;return(0,r.jsxs)(ln,{type:n,className:i,children:[a||t?(0,r.jsx)(dn,{title:a,icon:t}):null,(0,r.jsx)(un,{children:s})]})}function hn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 14 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}var vn={icon:(0,r.jsx)(hn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function fn(e){return(0,r.jsx)(mn,Object.assign({},vn,e,{className:(0,u.Z)("alert alert--secondary",e.className),children:e.children}))}function bn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 12 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}var pn={icon:(0,r.jsx)(bn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function gn(e){return(0,r.jsx)(mn,Object.assign({},pn,e,{className:(0,u.Z)("alert alert--success",e.className),children:e.children}))}function jn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 14 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}var xn={icon:(0,r.jsx)(jn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function Nn(e){return(0,r.jsx)(mn,Object.assign({},xn,e,{className:(0,u.Z)("alert alert--info",e.className),children:e.children}))}function Cn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 16 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}var kn={icon:(0,r.jsx)(Cn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function Ln(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 12 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}var yn={icon:(0,r.jsx)(Ln,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};var Zn={icon:(0,r.jsx)(Cn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};var _n={note:fn,tip:gn,info:Nn,warning:function(e){return(0,r.jsx)(mn,Object.assign({},kn,e,{className:(0,u.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,r.jsx)(mn,Object.assign({},yn,e,{className:(0,u.Z)("alert alert--danger",e.className),children:e.children}))}},Bn={secondary:function(e){return(0,r.jsx)(fn,Object.assign({title:"secondary"},e))},important:function(e){return(0,r.jsx)(Nn,Object.assign({title:"important"},e))},success:function(e){return(0,r.jsx)(gn,Object.assign({title:"success"},e))},caution:function(e){return(0,r.jsx)(mn,Object.assign({},Zn,e,{className:(0,u.Z)("alert alert--warning",e.className),children:e.children}))}};const wn=Object.assign({},_n,Bn);function Tn(e){var n,t=on(e),a=(n=t.type,wn[n]||(console.warn('No admonition component found for admonition type "'+n+'". Using Info as fallback.'),wn.info));return(0,r.jsx)(a,Object.assign({},t))}const On={Head:ue.Z,details:nn,Details:nn,code:function(e){return function(e){return void 0!==e.children&&a.Children.toArray(e.children).every((function(e){return"string"==typeof e&&!e.includes("\n")}))}(e)?(0,r.jsx)(Fe,Object.assign({},e)):(0,r.jsx)(We,Object.assign({},e))},a:function(e){return(0,r.jsx)(j.Z,Object.assign({},e))},pre:function(e){return(0,r.jsx)(r.Fragment,{children:e.children})},ul:function(e){return(0,r.jsx)("ul",Object.assign({},e,{className:sn(e.className)}))},li:function(e){return(0,qe.Z)().collectAnchor(e.id),(0,r.jsx)("li",Object.assign({},e))},img:function(e){return(0,r.jsx)("img",Object.assign({decoding:"async",loading:"lazy"},e,{className:(n=e.className,(0,u.Z)(n,rn.img))}));var n},h1:function(e){return(0,r.jsx)(tn,Object.assign({as:"h1"},e))},h2:function(e){return(0,r.jsx)(tn,Object.assign({as:"h2"},e))},h3:function(e){return(0,r.jsx)(tn,Object.assign({as:"h3"},e))},h4:function(e){return(0,r.jsx)(tn,Object.assign({as:"h4"},e))},h5:function(e){return(0,r.jsx)(tn,Object.assign({as:"h5"},e))},h6:function(e){return(0,r.jsx)(tn,Object.assign({as:"h6"},e))},admonition:Tn,mermaid:function(){return null}};function En(e){var n=e.children;return(0,r.jsx)(de.Z,{components:On,children:n})}function Hn(e){var n,t,a,s,i=e.children,o=(n=l(),t=n.metadata,a=n.frontMatter,s=n.contentTitle,a.hide_title||void 0!==s?null:t.title);return(0,r.jsxs)("div",{className:(0,u.Z)(p.k.docs.docMarkdown,"markdown"),children:[o&&(0,r.jsx)("header",{children:(0,r.jsx)(le.Z,{as:"h1",children:o})}),(0,r.jsx)(En,{children:i})]})}var An=t(1310);function In(){return(0,r.jsx)(g.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function Mn(){return(0,r.jsx)(g.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function Sn(){return(0,r.jsx)(ue.Z,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function Un(e){var n=e.className;return(0,r.jsx)(Tn,{type:"caution",title:(0,r.jsx)(In,{}),className:(0,u.Z)(n,p.k.common.unlistedBanner),children:(0,r.jsx)(Mn,{})})}function zn(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(Sn,{}),(0,r.jsx)(Un,Object.assign({},e))]})}const Vn={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function Rn(e){var n,t,a,s,i,o,c=e.children,d=(n=l(),t=n.frontMatter,a=n.toc,s=(0,m.i)(),i=t.hide_table_of_contents,o=!i&&a.length>0,{hidden:i,mobile:o?(0,r.jsx)(te,{}):void 0,desktop:!o||"desktop"!==s&&"ssr"!==s?void 0:(0,r.jsx)(ce,{})}),h=l().metadata.unlisted;return(0,r.jsxs)("div",{className:"row",children:[(0,r.jsxs)("div",{className:(0,u.Z)("col",!d.hidden&&Vn.docItemCol),children:[h&&(0,r.jsx)(zn,{}),(0,r.jsx)(f.Z,{}),(0,r.jsxs)("div",{className:Vn.docItemContainer,children:[(0,r.jsxs)("article",{children:[(0,r.jsx)(An.Z,{}),(0,r.jsx)(b.Z,{}),d.mobile,(0,r.jsx)(Hn,{children:c}),(0,r.jsx)(M,{})]}),(0,r.jsx)(v,{})]})]}),d.desktop&&(0,r.jsx)("div",{className:"col col--3",children:d.desktop})]})}function Pn(e){var n="docs-doc-id-"+e.content.metadata.id,t=e.content;return(0,r.jsx)(c,{content:e.content,children:(0,r.jsxs)(s.FG,{className:n,children:[(0,r.jsx)(d,{}),(0,r.jsx)(Rn,{children:(0,r.jsx)(t,{})})]})})}},4966:(e,n,t)=>{"use strict";t.d(n,{Z:()=>c});t(67294);var a=t(95999),s=t(90512),i=t(33692),r=t(85893);function o(e){var n=e.permalink,t=e.title,a=e.subLabel,o=e.isNext;return(0,r.jsxs)(i.Z,{className:(0,s.Z)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:n,children:[a&&(0,r.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,r.jsx)("div",{className:"pagination-nav__label",children:t})]})}function c(e){var n=e.previous,t=e.next;return(0,r.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,a.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,r.jsx)(o,Object.assign({},n,{subLabel:(0,r.jsx)(a.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})})),t&&(0,r.jsx)(o,Object.assign({},t,{subLabel:(0,r.jsx)(a.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0}))]})}},44364:(e,n,t)=>{"use strict";t.d(n,{Z:()=>c});t(67294);var a=t(90512),s=t(95999),i=t(35281),r=t(74477),o=t(85893);function c(e){var n=e.className,t=(0,r.E)();return t.badge?(0,o.jsx)("span",{className:(0,a.Z)(n,i.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(s.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:t.label},children:"Version: {versionLabel}"})}):null}},23120:(e,n,t)=>{"use strict";t.d(n,{Z:()=>b});t(67294);var a=t(90512),s=t(52263),i=t(33692),r=t(95999),o=t(80143),c=t(35281),l=t(60373),d=t(74477),u=t(85893);var m={unreleased:function(e){var n=e.siteTitle,t=e.versionMetadata;return(0,u.jsx)(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:n,versionLabel:(0,u.jsx)("b",{children:t.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){var n=e.siteTitle,t=e.versionMetadata;return(0,u.jsx)(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:n,versionLabel:(0,u.jsx)("b",{children:t.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){var n=m[e.versionMetadata.banner];return(0,u.jsx)(n,Object.assign({},e))}function v(e){var n=e.versionLabel,t=e.to,a=e.onClick;return(0,u.jsx)(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:n,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.Z,{to:t,onClick:a,children:(0,u.jsx)(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function f(e){var n,t=e.className,i=e.versionMetadata,r=(0,s.Z)().siteConfig.title,d=(0,o.gA)({failfast:!0}).pluginId,m=(0,l.J)(d).savePreferredVersionName,f=(0,o.Jo)(d),b=f.latestDocSuggestion,p=f.latestVersionSuggestion,g=null!=b?b:(n=p).docs.find((function(e){return e.id===n.mainDocId}));return(0,u.jsxs)("div",{className:(0,a.Z)(t,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:r,versionMetadata:i})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(v,{versionLabel:p.label,to:g.path,onClick:function(){return m(p.name)}})})]})}function b(e){var n=e.className,t=(0,d.E)();return t.banner?(0,u.jsx)(f,{className:n,versionMetadata:t}):null}},87594:(e,n)=>{function t(e){let n,t=[];for(let a of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(a))t.push(parseInt(a,10));else if(n=a.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,a,s,i]=n;if(a&&i){a=parseInt(a),i=parseInt(i);const e=a{"use strict";t.d(n,{Z:()=>o,a:()=>r});var a=t(67294);const s={},i=a.createContext(s);function r(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7918],{1310:(e,n,t)=>{"use strict";t.d(n,{Z:()=>p});t(67294);var a=t(90512),s=t(35281),i=t(91423),r=t(48596),o=t(33692),c=t(95999),l=t(44996),d=t(85893);function u(e){return(0,d.jsx)("svg",Object.assign({viewBox:"0 0 24 24"},e,{children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})}))}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){var e=(0,l.ZP)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(o.Z,{"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const f={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function v(e){var n=e.children,t=e.href,a="breadcrumbs__link";return e.isLast?(0,d.jsx)("span",{className:a,itemProp:"name",children:n}):t?(0,d.jsx)(o.Z,{className:a,href:t,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:n})}):(0,d.jsx)("span",{className:a,children:n})}function b(e){var n=e.children,t=e.active,s=e.index,i=e.addMicrodata;return(0,d.jsxs)("li",Object.assign({},i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,a.Z)("breadcrumbs__item",{"breadcrumbs__item--active":t}),children:[n,(0,d.jsx)("meta",{itemProp:"position",content:String(s+1)})]}))}function p(){var e=(0,i.s1)(),n=(0,r.Ns)();return e?(0,d.jsx)("nav",{className:(0,a.Z)(s.k.docs.docBreadcrumbs,f.breadcrumbsContainer),"aria-label":(0,c.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[n&&(0,d.jsx)(h,{}),e.map((function(n,t){var a=t===e.length-1,s="category"===n.type&&n.linkUnlisted?void 0:n.href;return(0,d.jsx)(b,{active:a,index:t,addMicrodata:!!s,children:(0,d.jsx)(v,{href:s,isLast:a,children:n.label})},t)}))]})}):null}},83957:(e,n,t)=>{"use strict";t.r(n),t.d(n,{default:()=>qn});var a=t(67294),s=t(10833),i=t(69688),r=t(85893),o=a.createContext(null);function c(e){var n=e.children,t=function(e){return(0,a.useMemo)((function(){return{metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc}}),[e])}(e.content);return(0,r.jsx)(o.Provider,{value:t,children:n})}function l(){var e=(0,a.useContext)(o);if(null===e)throw new i.i6("DocProvider");return e}function d(){var e,n=l(),t=n.metadata,a=n.frontMatter,i=n.assets;return(0,r.jsx)(s.d,{title:t.title,description:t.description,keywords:a.keywords,image:null!=(e=i.image)?e:a.image})}var u=t(90512),m=t(87524),h=t(4966);function f(){var e=l().metadata;return(0,r.jsx)(h.Z,{previous:e.previous,next:e.next})}var v=t(23120),b=t(44364),p=t(35281),g=t(95999),j=t(33692);const x={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function N(e){var n=e.permalink,t=e.label,a=e.count,s=e.description;return(0,r.jsxs)(j.Z,{href:n,title:s,className:(0,u.Z)(x.tag,a?x.tagWithCount:x.tagRegular),children:[t,a&&(0,r.jsx)("span",{children:a})]})}const C={tags:"tags_jXut",tag:"tag_QGVx"};function k(e){var n=e.tags;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("b",{children:(0,r.jsx)(g.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,r.jsx)("ul",{className:(0,u.Z)(C.tags,"padding--none","margin-left--sm"),children:n.map((function(e){return(0,r.jsx)("li",{className:C.tag,children:(0,r.jsx)(N,Object.assign({},e))},e.permalink)}))})]})}var y=t(63366);const L={iconEdit:"iconEdit_Z9Sw"};var Z=["className"];function B(e){var n=e.className,t=(0,y.Z)(e,Z);return(0,r.jsx)("svg",Object.assign({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(L.iconEdit,n),"aria-hidden":"true"},t,{children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})}))}function _(e){var n=e.editUrl;return(0,r.jsxs)(j.Z,{to:n,className:p.k.common.editThisPage,children:[(0,r.jsx)(B,{}),(0,r.jsx)(g.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var w=t(52263);function T(e){void 0===e&&(e={});var n=(0,w.Z)().i18n.currentLocale,t=function(){var e=(0,w.Z)().i18n,n=e.currentLocale;return e.localeConfigs[n].calendar}();return new Intl.DateTimeFormat(n,Object.assign({calendar:t},e))}function O(e){var n=e.lastUpdatedAt,t=new Date(n),a=T({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(t);return(0,r.jsx)(g.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,r.jsx)("b",{children:(0,r.jsx)("time",{dateTime:t.toISOString(),itemProp:"dateModified",children:a})})},children:" on {date}"})}function E(e){var n=e.lastUpdatedBy;return(0,r.jsx)(g.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,r.jsx)("b",{children:n})},children:" by {user}"})}function H(e){var n=e.lastUpdatedAt,t=e.lastUpdatedBy;return(0,r.jsxs)("span",{className:p.k.common.lastUpdated,children:[(0,r.jsx)(g.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:n?(0,r.jsx)(O,{lastUpdatedAt:n}):"",byUser:t?(0,r.jsx)(E,{lastUpdatedBy:t}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const I={lastUpdated:"lastUpdated_JAkA"};function M(e){var n=e.className,t=e.editUrl,a=e.lastUpdatedAt,s=e.lastUpdatedBy;return(0,r.jsxs)("div",{className:(0,u.Z)("row",n),children:[(0,r.jsx)("div",{className:"col",children:t&&(0,r.jsx)(_,{editUrl:t})}),(0,r.jsx)("div",{className:(0,u.Z)("col",I.lastUpdated),children:(a||s)&&(0,r.jsx)(H,{lastUpdatedAt:a,lastUpdatedBy:s})})]})}function A(){var e=l().metadata,n=e.editUrl,t=e.lastUpdatedAt,a=e.lastUpdatedBy,s=e.tags,i=s.length>0,o=!!(n||t||a);return i||o?(0,r.jsxs)("footer",{className:(0,u.Z)(p.k.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,r.jsx)("div",{className:(0,u.Z)("row margin-top--sm",p.k.docs.docFooterTagsRow),children:(0,r.jsx)("div",{className:"col",children:(0,r.jsx)(k,{tags:s})})}),o&&(0,r.jsx)(M,{className:(0,u.Z)("margin-top--sm",p.k.docs.docFooterEditMetaRow),editUrl:n,lastUpdatedAt:t,lastUpdatedBy:a})]}):null}var S=t(86043),U=t(86668),V=["parentIndex"];function z(e){var n=e.map((function(e){return Object.assign({},e,{parentIndex:-1,children:[]})})),t=Array(7).fill(-1);n.forEach((function(e,n){var a=t.slice(2,e.level);e.parentIndex=Math.max.apply(Math,a),t[e.level]=n}));var a=[];return n.forEach((function(e){var t=e.parentIndex,s=(0,y.Z)(e,V);t>=0?n[t].children.push(s):a.push(s)})),a}function R(e){var n=e.toc,t=e.minHeadingLevel,a=e.maxHeadingLevel;return n.flatMap((function(e){var n=R({toc:e.children,minHeadingLevel:t,maxHeadingLevel:a});return function(e){return e.level>=t&&e.level<=a}(e)?[Object.assign({},e,{children:n})]:n}))}function P(e){var n=e.getBoundingClientRect();return n.top===n.bottom?P(e.parentNode):n}function D(e,n){var t,a,s=n.anchorTopOffset,i=e.find((function(e){return P(e).top>=s}));return i?function(e){return e.top>0&&e.bottom",end:""}}),Ce=Object.keys(xe);function ke(e,n){var t=e.map((function(e){var t=Ne[e],a=t.start,s=t.end;return"(?:"+a+"\\s*("+n.flatMap((function(e){var n,t;return[e.line,null==(n=e.block)?void 0:n.start,null==(t=e.block)?void 0:t.end].filter(Boolean)})).join("|")+")\\s*"+s+")"})).join("|");return new RegExp("^\\s*(?:"+t+")\\s*$")}function ye(e,n){var t=e.replace(/\n$/,""),a=n.language,s=n.magicComments,i=n.metastring;if(i&&je.test(i)){var r=i.match(je).groups.range;if(0===s.length)throw new Error("A highlight range has been given in code block's metastring (``` "+i+"), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.");var o=s[0].className,c=pe()(r).filter((function(e){return e>0})).map((function(e){return[e-1,[o]]}));return{lineClassNames:Object.fromEntries(c),code:t}}if(void 0===a)return{lineClassNames:{},code:t};for(var l=function(e,n){switch(e){case"js":case"javascript":case"ts":case"typescript":return ke(["js","jsBlock"],n);case"jsx":case"tsx":return ke(["js","jsBlock","jsx"],n);case"html":return ke(["js","jsBlock","html"],n);case"python":case"py":case"bash":return ke(["bash"],n);case"markdown":case"md":return ke(["html","jsx","bash"],n);case"tex":case"latex":case"matlab":return ke(["tex"],n);case"lua":case"haskell":case"sql":return ke(["lua"],n);case"wasm":return ke(["wasm"],n);case"vb":case"vba":case"visual-basic":return ke(["vb","rem"],n);case"vbnet":return ke(["vbnet","rem"],n);case"batch":return ke(["rem"],n);case"basic":return ke(["rem","f90"],n);case"fsharp":return ke(["js","ml"],n);case"ocaml":case"sml":return ke(["ml"],n);case"fortran":return ke(["f90"],n);case"cobol":return ke(["cobol"],n);default:return ke(Ce,n)}}(a,s),d=t.split("\n"),u=Object.fromEntries(s.map((function(e){return[e.className,{start:0,range:""}]}))),m=Object.fromEntries(s.filter((function(e){return e.line})).map((function(e){var n=e.className;return[e.line,n]}))),h=Object.fromEntries(s.filter((function(e){return e.block})).map((function(e){var n=e.className;return[e.block.start,n]}))),f=Object.fromEntries(s.filter((function(e){return e.block})).map((function(e){var n=e.className;return[e.block.end,n]}))),v=0;v0&&r.getRangeAt(0);a.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;var c=!1;try{c=document.execCommand("copy")}catch(l){}s.remove(),o&&(r.removeAllRanges(),r.addRange(o)),i&&i.focus()}(n),o(!0),c.current=window.setTimeout((function(){o(!1)}),1e3)}),[n]);return(0,a.useEffect)((function(){return function(){return window.clearTimeout(c.current)}}),[]),(0,r.jsx)("button",{type:"button","aria-label":i?(0,g.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,g.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,g.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",t,Se.copyButton,i&&Se.copyButtonCopied),onClick:l,children:(0,r.jsxs)("span",{className:Se.copyButtonIcons,"aria-hidden":"true",children:[(0,r.jsx)(Me,{className:Se.copyButtonIcon}),(0,r.jsx)(Ae,{className:Se.copyButtonSuccessIcon})]})})}function Ve(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 24 24"},e,{children:(0,r.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})}))}const ze={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function Re(e){var n=e.className,t=e.onClick,a=e.isEnabled,s=(0,g.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,r.jsx)("button",{type:"button",onClick:t,className:(0,u.Z)("clean-btn",n,a&&ze.wordWrapButtonEnabled),"aria-label":s,title:s,children:(0,r.jsx)(Ve,{className:ze.wordWrapButtonIcon,"aria-hidden":"true"})})}function Pe(e){var n,t,s,i,o,c,l,d,m,h,f,v=e.children,b=e.className,p=void 0===b?"":b,g=e.metastring,j=e.title,x=e.showLineNumbers,N=e.language,C=(0,U.L)().prism,k=C.defaultLanguage,y=C.magicComments,L=function(e){return null==e?void 0:e.toLowerCase()}(null!=(n=null!=N?N:null==(t=p.split(" ").find((function(e){return e.startsWith("language-")})))?void 0:t.replace(/language-/,""))?n:k),Z=fe(),B=(s=(0,a.useState)(!1),i=s[0],o=s[1],c=(0,a.useState)(!1),l=c[0],d=c[1],m=(0,a.useRef)(null),h=(0,a.useCallback)((function(){var e=m.current.querySelector("code");i?e.removeAttribute("style"):(e.style.whiteSpace="pre-wrap",e.style.overflowWrap="anywhere"),o((function(e){return!e}))}),[m,i]),f=(0,a.useCallback)((function(){var e=m.current,n=e.scrollWidth>e.clientWidth||m.current.querySelector("code").hasAttribute("style");d(n)}),[m]),Oe(m,f),(0,a.useEffect)((function(){f()}),[i,f]),(0,a.useEffect)((function(){return window.addEventListener("resize",f,{passive:!0}),function(){window.removeEventListener("resize",f)}}),[f]),{codeBlockRef:m,isEnabled:i,isCodeScrollable:l,toggle:h}),_=function(e){var n,t;return null!=(n=null==e||null==(t=e.match(ge))?void 0:t.groups.title)?n:""}(g)||j,w=ye(v,{metastring:g,language:L,magicComments:y}),T=w.lineClassNames,O=w.code,E=null!=x?x:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(g);return(0,r.jsxs)(Be,{as:"div",className:(0,u.Z)(p,L&&!p.includes("language-"+L)&&"language-"+L),children:[_&&(0,r.jsx)("div",{className:_e.codeBlockTitle,children:_}),(0,r.jsxs)("div",{className:_e.codeBlockContent,children:[(0,r.jsx)(Ee.y$,{theme:Z,code:O,language:null!=L?L:"text",children:function(e){var n=e.className,t=e.style,a=e.tokens,s=e.getLineProps,i=e.getTokenProps;return(0,r.jsx)("pre",{tabIndex:0,ref:B.codeBlockRef,className:(0,u.Z)(n,_e.codeBlock,"thin-scrollbar"),style:t,children:(0,r.jsx)("code",{className:(0,u.Z)(_e.codeBlockLines,E&&_e.codeBlockLinesWithNumbering),children:a.map((function(e,n){return(0,r.jsx)(Ie,{line:e,getLineProps:s,getTokenProps:i,classNames:T[n],showLineNumbers:E},n)}))})})}}),(0,r.jsxs)("div",{className:_e.buttonGroup,children:[(B.isEnabled||B.isCodeScrollable)&&(0,r.jsx)(Re,{className:_e.codeButton,onClick:function(){return B.toggle()},isEnabled:B.isEnabled}),(0,r.jsx)(Ue,{className:_e.codeButton,code:O})]})]})]})}var De=["children"];function We(e){var n=e.children,t=(0,y.Z)(e,De),s=(0,me.Z)(),i=function(e){return a.Children.toArray(e).some((function(e){return(0,a.isValidElement)(e)}))?e:Array.isArray(e)?e.join(""):e}(n),o="string"==typeof i?Pe:we;return(0,r.jsx)(o,Object.assign({},t,{children:i}),String(s))}function Fe(e){return(0,r.jsx)("code",Object.assign({},e))}var qe=t(28138);const Ge={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};var Je=["summary","children"];function $e(e){return!!e&&("SUMMARY"===e.tagName||$e(e.parentElement))}function Ye(e,n){return!!e&&(e===n||Ye(e.parentElement,n))}function Qe(e){var n=e.summary,t=e.children,s=(0,y.Z)(e,Je);(0,qe.Z)().collectAnchor(s.id);var i=(0,me.Z)(),o=(0,a.useRef)(null),c=(0,S.u)({initialState:!s.open}),l=c.collapsed,d=c.setCollapsed,m=(0,a.useState)(s.open),h=m[0],f=m[1],v=a.isValidElement(n)?n:(0,r.jsx)("summary",{children:null!=n?n:"Details"});return(0,r.jsxs)("details",Object.assign({},s,{ref:o,open:h,"data-collapsed":l,className:(0,u.Z)(Ge.details,i&&Ge.isBrowser,s.className),onMouseDown:function(e){$e(e.target)&&e.detail>1&&e.preventDefault()},onClick:function(e){e.stopPropagation();var n=e.target;$e(n)&&Ye(n,o.current)&&(e.preventDefault(),l?(d(!1),f(!0)):d(!0))},children:[v,(0,r.jsx)(S.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:function(e){d(e),f(!e)},children:(0,r.jsx)("div",{className:Ge.collapsibleContent,children:t})})]}))}const Xe={details:"details_b_Ee"};var Ke="alert alert--info";function en(e){var n=Object.assign({},(function(e){if(null==e)throw new TypeError("Cannot destructure "+e)}(e),e));return(0,r.jsx)(Qe,Object.assign({},n,{className:(0,u.Z)(Ke,Xe.details,n.className)}))}function nn(e){var n=a.Children.toArray(e.children),t=n.find((function(e){return a.isValidElement(e)&&"summary"===e.type})),s=(0,r.jsx)(r.Fragment,{children:n.filter((function(e){return e!==t}))});return(0,r.jsx)(en,Object.assign({},e,{summary:t,children:s}))}function tn(e){return(0,r.jsx)(le.Z,Object.assign({},e))}const an={containsTaskList:"containsTaskList_mC6p"};function sn(e){if(void 0!==e)return(0,u.Z)(e,(null==e?void 0:e.includes("contains-task-list"))&&an.containsTaskList)}const rn={img:"img_ev3q"};function on(e){var n,t=function(e){var n=a.Children.toArray(e),t=n.find((function(e){return a.isValidElement(e)&&"mdxAdmonitionTitle"===e.type})),s=n.filter((function(e){return e!==t}));return{mdxAdmonitionTitle:null==t?void 0:t.props.children,rest:s.length>0?(0,r.jsx)(r.Fragment,{children:s}):null}}(e.children),s=t.mdxAdmonitionTitle,i=t.rest,o=null!=(n=e.title)?n:s;return Object.assign({},e,o&&{title:o},{children:i})}const cn={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function ln(e){var n=e.type,t=e.className,a=e.children;return(0,r.jsx)("div",{className:(0,u.Z)(p.k.common.admonition,p.k.common.admonitionType(n),cn.admonition,t),children:a})}function dn(e){var n=e.icon,t=e.title;return(0,r.jsxs)("div",{className:cn.admonitionHeading,children:[(0,r.jsx)("span",{className:cn.admonitionIcon,children:n}),t]})}function un(e){var n=e.children;return n?(0,r.jsx)("div",{className:cn.admonitionContent,children:n}):null}function mn(e){var n=e.type,t=e.icon,a=e.title,s=e.children,i=e.className;return(0,r.jsxs)(ln,{type:n,className:i,children:[a||t?(0,r.jsx)(dn,{title:a,icon:t}):null,(0,r.jsx)(un,{children:s})]})}function hn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 14 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})}))}var fn={icon:(0,r.jsx)(hn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function vn(e){return(0,r.jsx)(mn,Object.assign({},fn,e,{className:(0,u.Z)("alert alert--secondary",e.className),children:e.children}))}function bn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 12 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})}))}var pn={icon:(0,r.jsx)(bn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function gn(e){return(0,r.jsx)(mn,Object.assign({},pn,e,{className:(0,u.Z)("alert alert--success",e.className),children:e.children}))}function jn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 14 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})}))}var xn={icon:(0,r.jsx)(jn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function Nn(e){return(0,r.jsx)(mn,Object.assign({},xn,e,{className:(0,u.Z)("alert alert--info",e.className),children:e.children}))}function Cn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 16 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})}))}var kn={icon:(0,r.jsx)(Cn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function yn(e){return(0,r.jsx)("svg",Object.assign({viewBox:"0 0 12 16"},e,{children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})}))}var Ln={icon:(0,r.jsx)(yn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};var Zn={icon:(0,r.jsx)(Cn,{}),title:(0,r.jsx)(g.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};var Bn={note:vn,tip:gn,info:Nn,warning:function(e){return(0,r.jsx)(mn,Object.assign({},kn,e,{className:(0,u.Z)("alert alert--warning",e.className),children:e.children}))},danger:function(e){return(0,r.jsx)(mn,Object.assign({},Ln,e,{className:(0,u.Z)("alert alert--danger",e.className),children:e.children}))}},_n={secondary:function(e){return(0,r.jsx)(vn,Object.assign({title:"secondary"},e))},important:function(e){return(0,r.jsx)(Nn,Object.assign({title:"important"},e))},success:function(e){return(0,r.jsx)(gn,Object.assign({title:"success"},e))},caution:function(e){return(0,r.jsx)(mn,Object.assign({},Zn,e,{className:(0,u.Z)("alert alert--warning",e.className),children:e.children}))}};const wn=Object.assign({},Bn,_n);function Tn(e){var n,t=on(e),a=(n=t.type,wn[n]||(console.warn('No admonition component found for admonition type "'+n+'". Using Info as fallback.'),wn.info));return(0,r.jsx)(a,Object.assign({},t))}const On={Head:ue.Z,details:nn,Details:nn,code:function(e){return function(e){return void 0!==e.children&&a.Children.toArray(e.children).every((function(e){return"string"==typeof e&&!e.includes("\n")}))}(e)?(0,r.jsx)(Fe,Object.assign({},e)):(0,r.jsx)(We,Object.assign({},e))},a:function(e){return(0,r.jsx)(j.Z,Object.assign({},e))},pre:function(e){return(0,r.jsx)(r.Fragment,{children:e.children})},ul:function(e){return(0,r.jsx)("ul",Object.assign({},e,{className:sn(e.className)}))},li:function(e){return(0,qe.Z)().collectAnchor(e.id),(0,r.jsx)("li",Object.assign({},e))},img:function(e){return(0,r.jsx)("img",Object.assign({decoding:"async",loading:"lazy"},e,{className:(n=e.className,(0,u.Z)(n,rn.img))}));var n},h1:function(e){return(0,r.jsx)(tn,Object.assign({as:"h1"},e))},h2:function(e){return(0,r.jsx)(tn,Object.assign({as:"h2"},e))},h3:function(e){return(0,r.jsx)(tn,Object.assign({as:"h3"},e))},h4:function(e){return(0,r.jsx)(tn,Object.assign({as:"h4"},e))},h5:function(e){return(0,r.jsx)(tn,Object.assign({as:"h5"},e))},h6:function(e){return(0,r.jsx)(tn,Object.assign({as:"h6"},e))},admonition:Tn,mermaid:function(){return null}};function En(e){var n=e.children;return(0,r.jsx)(de.Z,{components:On,children:n})}function Hn(e){var n,t,a,s,i=e.children,o=(n=l(),t=n.metadata,a=n.frontMatter,s=n.contentTitle,a.hide_title||void 0!==s?null:t.title);return(0,r.jsxs)("div",{className:(0,u.Z)(p.k.docs.docMarkdown,"markdown"),children:[o&&(0,r.jsx)("header",{children:(0,r.jsx)(le.Z,{as:"h1",children:o})}),(0,r.jsx)(En,{children:i})]})}var In=t(1310);function Mn(){return(0,r.jsx)(g.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function An(){return(0,r.jsx)(g.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function Sn(){return(0,r.jsx)(ue.Z,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function Un(){return(0,r.jsx)(g.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function Vn(){return(0,r.jsx)(g.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}function zn(e){var n=e.className;return(0,r.jsx)(Tn,{type:"caution",title:(0,r.jsx)(Un,{}),className:(0,u.Z)(n,p.k.common.draftBanner),children:(0,r.jsx)(Vn,{})})}function Rn(e){var n=e.className;return(0,r.jsx)(Tn,{type:"caution",title:(0,r.jsx)(Mn,{}),className:(0,u.Z)(n,p.k.common.unlistedBanner),children:(0,r.jsx)(An,{})})}function Pn(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(Sn,{}),(0,r.jsx)(Rn,Object.assign({},e))]})}function Dn(e){var n=e.metadata,t=n.unlisted,a=n.frontMatter;return(0,r.jsxs)(r.Fragment,{children:[(t||a.unlisted)&&(0,r.jsx)(Pn,{}),a.draft&&(0,r.jsx)(zn,{})]})}const Wn={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function Fn(e){var n,t,a,s,i,o,c=e.children,d=(n=l(),t=n.frontMatter,a=n.toc,s=(0,m.i)(),i=t.hide_table_of_contents,o=!i&&a.length>0,{hidden:i,mobile:o?(0,r.jsx)(te,{}):void 0,desktop:!o||"desktop"!==s&&"ssr"!==s?void 0:(0,r.jsx)(ce,{})}),h=l().metadata;return(0,r.jsxs)("div",{className:"row",children:[(0,r.jsxs)("div",{className:(0,u.Z)("col",!d.hidden&&Wn.docItemCol),children:[(0,r.jsx)(Dn,{metadata:h}),(0,r.jsx)(v.Z,{}),(0,r.jsxs)("div",{className:Wn.docItemContainer,children:[(0,r.jsxs)("article",{children:[(0,r.jsx)(In.Z,{}),(0,r.jsx)(b.Z,{}),d.mobile,(0,r.jsx)(Hn,{children:c}),(0,r.jsx)(A,{})]}),(0,r.jsx)(f,{})]})]}),d.desktop&&(0,r.jsx)("div",{className:"col col--3",children:d.desktop})]})}function qn(e){var n="docs-doc-id-"+e.content.metadata.id,t=e.content;return(0,r.jsx)(c,{content:e.content,children:(0,r.jsxs)(s.FG,{className:n,children:[(0,r.jsx)(d,{}),(0,r.jsx)(Fn,{children:(0,r.jsx)(t,{})})]})})}},4966:(e,n,t)=>{"use strict";t.d(n,{Z:()=>c});t(67294);var a=t(95999),s=t(90512),i=t(33692),r=t(85893);function o(e){var n=e.permalink,t=e.title,a=e.subLabel,o=e.isNext;return(0,r.jsxs)(i.Z,{className:(0,s.Z)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:n,children:[a&&(0,r.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,r.jsx)("div",{className:"pagination-nav__label",children:t})]})}function c(e){var n=e.previous,t=e.next;return(0,r.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,a.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[n&&(0,r.jsx)(o,Object.assign({},n,{subLabel:(0,r.jsx)(a.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})})),t&&(0,r.jsx)(o,Object.assign({},t,{subLabel:(0,r.jsx)(a.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0}))]})}},44364:(e,n,t)=>{"use strict";t.d(n,{Z:()=>c});t(67294);var a=t(90512),s=t(95999),i=t(35281),r=t(73797),o=t(85893);function c(e){var n=e.className,t=(0,r.E)();return t.badge?(0,o.jsx)("span",{className:(0,a.Z)(n,i.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(s.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:t.label},children:"Version: {versionLabel}"})}):null}},23120:(e,n,t)=>{"use strict";t.d(n,{Z:()=>b});t(67294);var a=t(90512),s=t(52263),i=t(33692),r=t(95999),o=t(80143),c=t(35281),l=t(70298),d=t(73797),u=t(85893);var m={unreleased:function(e){var n=e.siteTitle,t=e.versionMetadata;return(0,u.jsx)(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:n,versionLabel:(0,u.jsx)("b",{children:t.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){var n=e.siteTitle,t=e.versionMetadata;return(0,u.jsx)(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:n,versionLabel:(0,u.jsx)("b",{children:t.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){var n=m[e.versionMetadata.banner];return(0,u.jsx)(n,Object.assign({},e))}function f(e){var n=e.versionLabel,t=e.to,a=e.onClick;return(0,u.jsx)(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:n,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.Z,{to:t,onClick:a,children:(0,u.jsx)(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function v(e){var n,t=e.className,i=e.versionMetadata,r=(0,s.Z)().siteConfig.title,d=(0,o.gA)({failfast:!0}).pluginId,m=(0,l.J)(d).savePreferredVersionName,v=(0,o.Jo)(d),b=v.latestDocSuggestion,p=v.latestVersionSuggestion,g=null!=b?b:(n=p).docs.find((function(e){return e.id===n.mainDocId}));return(0,u.jsxs)("div",{className:(0,a.Z)(t,c.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:r,versionMetadata:i})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(f,{versionLabel:p.label,to:g.path,onClick:function(){return m(p.name)}})})]})}function b(e){var n=e.className,t=(0,d.E)();return t.banner?(0,u.jsx)(v,{className:n,versionMetadata:t}):null}},87594:(e,n)=>{function t(e){let n,t=[];for(let a of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(a))t.push(parseInt(a,10));else if(n=a.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,a,s,i]=n;if(a&&i){a=parseInt(a),i=parseInt(i);const e=a{"use strict";t.d(n,{Z:()=>o,a:()=>r});var a=t(67294);const s={},i=a.createContext(s);function r(e){const n=a.useContext(i);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),a.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.67c5fd4f.js b/assets/js/1a4e3797.67c5fd4f.js new file mode 100644 index 00000000..b603cfe3 --- /dev/null +++ b/assets/js/1a4e3797.67c5fd4f.js @@ -0,0 +1,2 @@ +/*! For license information please see 1a4e3797.67c5fd4f.js.LICENSE.txt */ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7920],{17331:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,s,a,c,o,u;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(s=this._events[e]))return!1;if(r(s))switch(arguments.length){case 1:s.call(this);break;case 2:s.call(this,arguments[1]);break;case 3:s.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),s.apply(this,c)}else if(n(s))for(c=Array.prototype.slice.call(arguments,1),a=(u=s.slice()).length,o=0;o0&&this._events[e].length>a&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,s,a,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(a=(i=this._events[e]).length,s=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=a;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){s=c;break}if(s<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(s,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},8131:(e,t,r)=>{"use strict";var n=r(49374),i=r(67450),s=r(43650),a=r(17775),c=r(23076);function o(e,t,r,i){return new n(e,t,r,i)}o.version=r(24336),o.AlgoliaSearchHelper=n,o.SearchParameters=a,o.RecommendParameters=i,o.SearchResults=c,o.RecommendResults=s,e.exports=o},68078:(e,t,r)=>{"use strict";var n=r(17331);function i(e,t,r){this.main=e,this.fn=t,this.recommendFn=r,this.lastResults=null,this.lastRecommendResults=null}r(14853)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},i.prototype.getModifiedRecommendState=function(e){return this.recommendFn(e)},e.exports=i},67450:e=>{"use strict";function t(e){e=e||{},this.params=e.params||[]}t.prototype={constructor:t,addParams:function(e){var r=this.params.slice();return r.push(e),new t({params:r})},removeParams:function(e){return new t({params:this.params.filter((function(t){return t.$$id!==e}))})},addFrequentlyBoughtTogether:function(e){return this.addParams(Object.assign({},e,{model:"bought-together"}))},addRelatedProducts:function(e){return this.addParams(Object.assign({},e,{model:"related-products"}))},addTrendingItems:function(e){return this.addParams(Object.assign({},e,{model:"trending-items"}))},addTrendingFacets:function(e){return this.addParams(Object.assign({},e,{model:"trending-facets"}))},addLookingSimilar:function(e){return this.addParams(Object.assign({},e,{model:"looking-similar"}))},_buildQueries:function(e,t){return this.params.filter((function(e){return void 0===t[e.$$id]})).map((function(t){var r=Object.assign({},t,{indexName:e,threshold:t.threshold||0});return delete r.$$id,r}))}},e.exports=t},43650:e=>{"use strict";function t(e,t){this._state=e,this._rawResults={};var r=this;e.params.forEach((function(e){var n=e.$$id;r[n]=t[n],r._rawResults[n]=t[n]}))}t.prototype={constructor:t},e.exports=t},82437:(e,t,r)=>{"use strict";var n=r(52344),i=r(90116),s=r(49803),a={addRefinement:function(e,t,r){if(a.isRefined(e,t,r))return e;var i=""+r,s=e[t]?e[t].concat(i):[i],c={};return c[t]=s,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return a.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return a.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return a.isRefined(e,t,r)?a.removeRefinement(e,t,r):a.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return s(e,[t]);if("function"==typeof t){var n=!1,a=Object.keys(e).reduce((function(i,s){var a=e[s]||[],c=a.filter((function(e){return!t(e,s,r)}));return c.length!==a.length&&(n=!0),i[s]=c,i}),{});return n?a:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=a},17775:(e,t,r)=>{"use strict";var n=r(52344),i=r(7888),s=r(22686),a=r(60185),c=r(90116),o=r(49803),u=r(28023),h=r(46801),f=r(82437);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return a(e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=u(r);if(this.isNumericRefined(e,t,n))return this;var i=a({},this.numericRefinements);return i[e]=a({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,u(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return o(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var s=r[i],a={};return s=s||{},Object.keys(s).forEach((function(r){var n=s[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),a[r]=c})),n[i]=a,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var s,a,c=u(r),o=void 0!==(s=this.numericRefinements[e][t],a=c,i(s,(function(e){return l(e,a)})));return n&&o},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=s(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return s(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),s=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?o(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(s)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},10210:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],u=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=s(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,s){return function(u,h,f){var l=u;if(f>0){var m=0;for(l=u;m{"use strict";var n=r(74587),i=r(52344),s=r(94039),a=r(7888),c=r(69725),o=r(82293),u=r(60185),h=r(42148),f=s.escapeFacetValue,l=s.unescapeFacetValue,m=r(10210);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var s=t[0]||{};this._rawResults=t;var o=this;Object.keys(s).forEach((function(e){o[e]=s[e]}));var h=u({persistHierarchicalRootCount:!1},r);Object.keys(h).forEach((function(e){o[e]=h[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var f=e.getRefinedDisjunctiveFacets(),v=d(e.facets),g=d(e.disjunctiveFacets),y=1,R=s.facets||{};Object.keys(R).forEach((function(t){var r,n,i=R[t],u=(r=e.hierarchicalFacets,n=t,a(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(u){var h=u.attributes.indexOf(t),f=c(e.hierarchicalFacets,(function(e){return e.name===u.name}));o.hierarchicalFacets[f][h]={attribute:t,data:i,exhaustive:s.exhaustiveFacetsCount}}else{var l,m=-1!==e.disjunctiveFacets.indexOf(t),d=-1!==e.facets.indexOf(t);m&&(l=g[t],o.disjunctiveFacets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(o.disjunctiveFacets[l],s.facets_stats,t)),d&&(l=v[t],o.facets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(o.facets[l],s.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),f.forEach((function(r){var n=t[y],a=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(a).forEach((function(t){var r,f=a[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(o.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;o.hierarchicalFacets[r][m].data=u({},o.hierarchicalFacets[r][m].data,f)}else{r=g[t];var d=s.facets&&s.facets[t]||{};o.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(o.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!o.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(o.disjunctiveFacets[r].data[n]=0)}))}})),y++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),s=e._getHierarchicalFacetSeparator(n),a=e.getHierarchicalRefinement(r);0===a.length||a[0].split(s).length<2||t.slice(y).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var u=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(o.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(a.length>0&&!o.persistHierarchicalRootCount){var m=a[0].split(s)[0];l[m]=o.hierarchicalFacets[h][f].data[m]}o.hierarchicalFacets[h][f].data=i(l,u,o.hierarchicalFacets[h][f].data)}})),y++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=v[t];o.facets[n]={name:t,data:R[t],exhaustive:s.exhaustiveFacetsCount},r.forEach((function(e){o.facets[n]=o.facets[n]||{name:t},o.facets[n].data=o.facets[n].data||{},o.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=a(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=a(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var s=a(e.hierarchicalFacets,r);if(!s)return s;var c=e._state.getHierarchicalFacetByName(t),o=e._state._getHierarchicalFacetSeparator(c),u=l(e._state.getHierarchicalRefinement(t)[0]||"");0===u.indexOf(c.rootPath)&&(u=u.replace(c.rootPath+o,""));var h=u.split(o);return h.unshift(t),y(s,h,0),s}}function y(e,t,r){e.isRefined=e.name===(t[r]&&t[r].trim()),e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var s=t.data.map((function(t){return R(e,t,r,n+1)})),a=e(s,r[n]);return i({data:a},t)}function F(e,t){var r=a(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var s=a(i,(function(e){return e.name===r})),c=s&&s.data&&s.data[n]?s.data[n]:0,o=s&&s.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:o}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return a(this.facets,t)||a(this.disjunctiveFacets,t)||a(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,s=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),a=this;if(Array.isArray(r))n=[e];else n=a._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(s.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(a,t);if(r)return function(e,t){var r=[],n=[],i=t.hide||[],s=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name,a=i.indexOf(t)>-1;a||void 0===s[t]?a||n.push(e):r[s[t]]=e})),r=r.filter((function(e){return e}));var a,c=t.sortRemainingBy;return"hidden"===c?r:(a="alpha"===c?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,a[0],a[1])))}(e,r)}if(Array.isArray(s.sortBy)){var n=o(s.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof s.sortBy)return function(e,t){return t.sort(e)}(s.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),s=e._getHierarchicalFacetSeparator(i),c=r.split(s),o=a(n,(function(e){return e.name===t})),u=c.reduce((function(e,t){var r=e&&a(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),o),h=u&&u.count||0,f=u&&u.exhaustive||!1,l=u&&u.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},49374:(e,t,r)=>{"use strict";var n=r(17331),i=r(68078),s=r(94039).escapeFacetValue,a=r(14853),c=r(60185),o=r(90116),u=r(49803),h=r(67450),f=r(43650),l=r(96394),m=r(17775),d=r(23076),p=r(97878),v=r(24336);function g(e,t,r,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+v+")"),this.setClient(e);var i=r||{};i.index=t,this.state=m.make(i),this.recommendState=new h({params:i.recommendState}),this.lastResults=null,this.lastRecommendResults=null,this._queryId=0,this._recommendQueryId=0,this._lastQueryIdReceived=-1,this._lastRecommendQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0,this._currentNbRecommendQueries=0,this._searchResultsOptions=n,this._recommendCache={}}function y(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function R(){return this.state.page}a(g,n),g.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},g.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},g.prototype.recommend=function(){return this._recommend(),this},g.prototype.getQuery=function(){var e=this.state;return l._getHitsSearchParams(e)},g.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=l._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new d(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new d(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},g.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:u(l._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),s="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(s);var a=this.client.initIndex(n.index);if("function"!=typeof a.findAnswers)throw new Error(s);return a.findAnswers(n.query,e.queryLanguages,i)},g.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),o=c.isDisjunctiveFacet(e),u=l.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var h,f=this;return i?h=this.client.searchForFacetValues([{indexName:c.index,params:u}]):a?h=this.client.initIndex(c.index).searchForFacetValues(u):(delete u.facetName,h=this.client.search([{type:"facet",facet:e,indexName:c.index,params:u}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),h.then((function(t){return f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=s(t.value),t.isRefined=o?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),e}))},g.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},g.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},g.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},g.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},g.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},g.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},g.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},g.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},g.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},g.prototype.addFrequentlyBoughtTogether=function(e){return this._recommendChange({state:this.recommendState.addFrequentlyBoughtTogether(e)}),this},g.prototype.addRelatedProducts=function(e){return this._recommendChange({state:this.recommendState.addRelatedProducts(e)}),this},g.prototype.addTrendingItems=function(e){return this._recommendChange({state:this.recommendState.addTrendingItems(e)}),this},g.prototype.addTrendingFacets=function(e){return this._recommendChange({state:this.recommendState.addTrendingFacets(e)}),this},g.prototype.addLookingSimilar=function(e){return this._recommendChange({state:this.recommendState.addLookingSimilar(e)}),this},g.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},g.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},g.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},g.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},g.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},g.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},g.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},g.prototype.removeFrequentlyBoughtTogether=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeRelatedProducts=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeTrendingItems=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeTrendingFacets=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeLookingSimilar=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},g.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},g.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},g.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},g.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},g.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},g.prototype.setCurrentPage=y,g.prototype.setPage=y,g.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},g.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},g.prototype.setState=function(e){return this._change({state:m.make(e),isPageReset:!1}),this},g.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new m(e),this},g.prototype.hasRefinements=function(e){return!!o(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},g.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},g.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},g.prototype.hasTag=function(e){return this.state.isTagRefined(e)},g.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},g.prototype.getIndex=function(){return this.state.index},g.prototype.getCurrentPage=R,g.prototype.getPage=R,g.prototype.getTags=function(){return this.state.tagRefinements},g.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},g.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},g.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},g.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=l._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?l._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),s=Array.prototype.concat.apply(n,i),a=this._queryId++;if(this._currentNbQueries++,!s.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,a));try{this.client.search(s).then(this._dispatchAlgoliaResponse.bind(this,r,a)).catch(this._dispatchAlgoliaError.bind(this,a))}catch(c){this.emit("error",{error:c})}},g.prototype._recommend=function(){var e=this.state,t=this.recommendState,r=this.getIndex(),n=[{state:t,index:r,helper:this}],i=t.params.map((function(e){return e.$$id}));this.emit("fetch",{recommend:{state:t,results:this.lastRecommendResults}});var s=this._recommendCache,a=this.derivedHelpers.map((function(t){var r=t.getModifiedState(e).index;if(!r)return[];var a=t.getModifiedRecommendState(new h);return n.push({state:a,index:r,helper:t}),i=Array.prototype.concat.apply(i,a.params.map((function(e){return e.$$id}))),t.emit("fetch",{recommend:{state:a,results:t.lastRecommendResults}}),a._buildQueries(r,s)})),c=Array.prototype.concat.apply(this.recommendState._buildQueries(r,s),a);if(0!==c.length)if(c.length>0&&void 0===this.client.getRecommendations)console.warn("Please update algoliasearch/lite to the latest version in order to use recommend widgets.");else{var o=this._recommendQueryId++;this._currentNbRecommendQueries++;try{this.client.getRecommendations(c).then(this._dispatchRecommendResponse.bind(this,o,n,i)).catch(this._dispatchRecommendError.bind(this,o))}catch(u){this.emit("error",{error:u})}}},g.prototype._dispatchAlgoliaResponse=function(e,t,r){var n=this;if(!(t0},g.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},g.prototype._recommendChange=function(e){var t=e.state;t!==this.recommendState&&(this.recommendState=t,this.emit("recommend:change",{search:{results:this.lastResults,state:this.state},recommend:{results:this.lastRecommendResults,state:this.recommendState}}))},g.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},g.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+v+")"),this.client=e),this},g.prototype.getClient=function(){return this.client},g.prototype.derive=function(e,t){var r=new i(this,e,t);return this.derivedHelpers.push(r),r},g.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},g.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=g},74587:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},52344:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},94039:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},7888:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r{e.exports=function(e){return e.reduce((function(e,t){return e.concat(t)}),[])}},82293:(e,t,r)=>{"use strict";var n=r(7888);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),s=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!s?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(s[0]),e[1].push(s[1]),e)}),[[],[]])}},14853:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},22686:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},60185:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var s=n[i],a=e[i];void 0!==a&&void 0===s||(t(a)&&t(s)?e[i]=r(a,s):e[i]="object"==typeof(c=s)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},49803:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n=0||(i[r]=e[r]);return i}},42148:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,s=null===t;if(!s&&e>t||n&&i||!r)return 1;if(!n&&e=n.length?s:"desc"===n[i]?-s:s}return e.index-r.index})),i.map((function(e){return e.value}))}},28023:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},96394:(e,t,r)=>{"use strict";var n=r(60185);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var s={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:s._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:s._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),a=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(a.length>0&&a[0].split(c).length>1){var o=a[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);o.forEach((function(n,a){var c=s._getDisjunctiveFacetSearchParams(t,n.attribute,0===a);function u(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!u(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||u(t)||e.push(t),e}),[]),f=o[a-1];a>0?c.facetFilters=h.concat(f.attribute+":"+f.value):h.length>0?c.facetFilters=h:delete c.facetFilters,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(s._getHitsHierarchicalFacetsAttributes(e)).sort(),r=s._getFacetFilters(e),a=s._getNumericFilters(e),c=s._getTagFilters(e),o={};return t.length>0&&(o.facets=t.indexOf("*")>-1?["*"]:t),c.length>0&&(o.tagFilters=c),r.length>0&&(o.facetFilters=r),a.length>0&&(o.numericFilters=a),i(n({},e.getQueryParams(),o))},_getDisjunctiveFacetSearchParams:function(e,t,r){var a=s._getFacetFilters(e,t,r),c=s._getNumericFilters(e,t),o=s._getTagFilters(e),u={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};o.length>0&&(u.tagFilters=o);var h=e.getHierarchicalFacetByName(t);return u.facets=h?s._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(u.numericFilters=c),a.length>0&&(u.facetFilters=a),i(n({},e.getQueryParams(),u))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var s=i[e]||[];t!==n&&s.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).slice().sort().forEach((function(t){n.push(e+":"+t)}))}));var s=e.facetsExcludes||{};Object.keys(s).sort().forEach((function(e){(s[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var a=e.disjunctiveFacetsRefinements||{};Object.keys(a).sort().forEach((function(e){var r=a[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.slice().sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var s=(c[i]||[])[0];if(void 0!==s){var a,o,u=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(u),f=e._getHierarchicalRootPath(u);if(t===i){if(-1===s.indexOf(h)||!f&&!0===r||f&&f.split(h).length===s.split(h).length)return;f?(o=f.split(h).length-1,s=f):(o=s.split(h).length-2,s=s.slice(0,s.lastIndexOf(h))),a=u.attributes[o]}else o=s.split(h).length-1,a=u.attributes[o];a&&n.push([a+":"+s])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),s=n.split(i).length,a=r.attributes.slice(0,s+1);return t.concat(a)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),s=0;return i&&(s=i.split(n).length),[t.attributes[s]]}var a=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,a+1)},getSearchForFacetQuery:function(e,t,r,a){var c=a.isDisjunctiveFacet(e)?a.clearRefinements(e):a,o={facetQuery:t,facetName:e};return"number"==typeof r&&(o.maxFacetHits=r),i(n({},s._getHitsSearchParams(c),o))}};e.exports=s},46801:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},97878:(e,t,r)=>{"use strict";var n=r(7888),i=r(7948);e.exports=function(e){var t={};return e.forEach((function(e){e.forEach((function(e,r){t[e.objectID]?t[e.objectID]={indexSum:t[e.objectID].indexSum+r,count:t[e.objectID].count+1}:t[e.objectID]={indexSum:r,count:1}}))})),function(e,t){var r=[];return Object.keys(e).forEach((function(n){e[n].count<2&&(e[n].indexSum+=100),r.push({objectID:n,avgOfIndices:e[n].indexSum/t})})),r.sort((function(e,t){return e.avgOfIndices>t.avgOfIndices?1:-1}))}(t,e.length).reduce((function(t,r){var s=n(i(e),(function(e){return e.objectID===r.objectID}));return s?t.concat(s):t}),[])}},24336:e=>{"use strict";e.exports="3.22.3"},70290:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,s=void 0;try{for(var a,c=e[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){i=!0,s=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw s}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return s()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],s=t[1];return Promise.all([n,s||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=s();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=s();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=s(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},s=JSON.stringify(r);if(s in t)return Promise.resolve(e.serializable?JSON.parse(t[s]):t[s]);var a=n(),c=i&&i.miss||function(){return Promise.resolve()};return a.then((function(e){return c(e)})).then((function(){return a}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function u(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function j(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(s(r),s(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function P(e,t,n,i){var a=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),o=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),u=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,s){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, please reach out to the Algolia Support team: https://alg.li/support .",transporterStackTrace:E(a)};var m={data:c,headers:o,method:u,url:x(h,n.path,f),connectTimeout:s(l,e.timeouts.connect),responseTimeout:s(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return a.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,s)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,E(a))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return j(e.hostsCache,t).then((function(e){return m(s(e.statelessHosts).reverse(),e.getTimeout)}))}function _(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function x(e,t,r){var n=O(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function O(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function E(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var S=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),s=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,s=e.requestsCache,a=e.responsesCache,c=e.timeouts,o=e.userAgent,u=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:s,responsesCache:a,timeouts:c,userAgent:o,headers:e.headers,queryParameters:h,hosts:u.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var s={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(s,(function(){return f.requestsCache.get(s,(function(){return f.requestsCache.set(s,n()).then((function(e){return Promise.all([f.requestsCache.delete(s),e])}),(function(e){return Promise.all([f.requestsCache.delete(s),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(s,e)}})},write:function(e,t){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(u([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:s,appId:t,addAlgoliaAgent:function(e,t){s.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then((function(){}))}},e.methods)},N=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},A=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},H=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:O(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},Q=function(e){return function(t,i){return Promise.all(t.map((function(t){var s=t.params,a=s.facetName,c=s.facetQuery,o=n(s,["facetName","facetQuery"]);return A(e)(t.indexName,{methods:{searchForFacetValues:I}}).searchForFacetValues(a,c,r(r({},i),o))})))}},T=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},I=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,k=2,q=3,L=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{threshold:e.threshold||0})}));return e.transporter.read({method:b,path:"1/indexes/*/recommendations",data:{requests:i},cacheable:!0},n)}};function V(e,t,n){var i,s={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},s=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(s),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(s),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(s),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return k>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:o(),requestsCache:o({serializable:!1}),hostsCache:c({caches:[a({key:"".concat("4.24.0","-").concat(e)}),o()]}),userAgent:_("4.24.0").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return S(r(r(r({},s),n),{},{methods:{search:H,searchForFacetValues:Q,multipleQueries:H,multipleSearchForFacetValues:Q,customRequest:N,initIndex:function(e){return function(t){return A(e)(t,{methods:{search:C,searchForFacetValues:I,findAnswers:T}})}},getRecommendations:L}}))}return V.version="4.24.0",V}()},88824:(e,t,r)=>{"use strict";r.d(t,{c:()=>u});var n=r(67294),i=r(52263),s=["zero","one","two","few","many","other"];function a(e){return s.filter((function(t){return e.includes(t)}))}var c={locale:"en",pluralForms:a(["one","other"]),select:function(e){return 1===e?"one":"other"}};function o(){var e=(0,i.Z)().i18n.currentLocale;return(0,n.useMemo)((function(){try{return t=e,r=new Intl.PluralRules(t),{locale:t,pluralForms:a(r.resolvedOptions().pluralCategories),select:function(e){return r.select(e)}}}catch(n){return console.error('Failed to use Intl.PluralRules for locale "'+e+'".\nDocusaurus will fallback to the default (English) implementation.\nError: '+n.message+"\n"),c}var t,r}),[e])}function u(){var e=o();return{selectMessage:function(t,r){return function(e,t,r){var n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error("For locale="+r.locale+", a maximum of "+r.pluralForms.length+" plural forms are expected ("+r.pluralForms.join(",")+"), but the message contains "+n.length+": "+e);var i=r.select(t),s=r.pluralForms.indexOf(i);return n[Math.min(s,n.length-1)]}(r,t,e)}}}},39172:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>w});var n=r(67294),i=r(90512),s=r(8131),a=r.n(s),c=r(70290),o=r.n(c),u=r(10412),h=r(35742),f=r(33692),l=r(80143),m=r(88824),d=r(66177),p=r(69688),v=r(10833),g=r(82128),y=r(95999),R=r(52263),F=r(6278),b=r(239),j=r(63211),P=r(92503);const _={searchQueryInput:"searchQueryInput_u2C7",searchVersionInput:"searchVersionInput_m0Ui",searchResultsColumn:"searchResultsColumn_JPFH",algoliaLogo:"algoliaLogo_rT1R",algoliaLogoPathFill:"algoliaLogoPathFill_WdUC",searchResultItem:"searchResultItem_Tv2o",searchResultItemHeading:"searchResultItemHeading_KbCB",searchResultItemPath:"searchResultItemPath_lhe1",searchResultItemSummary:"searchResultItemSummary_AEaO",searchQueryColumn:"searchQueryColumn_RTkw",searchVersionColumn:"searchVersionColumn_ypXd",searchLogoColumn:"searchLogoColumn_rJIA",loadingSpinner:"loadingSpinner_XVxU","loading-spin":"loading-spin_vzvp",loader:"loader_vvXV"};var x=r(85893);function O(e){var t=e.docsSearchVersionsHelpers,r=Object.entries(t.allDocsData).filter((function(e){return e[1].versions.length>1}));return(0,x.jsx)("div",{className:(0,i.Z)("col","col--3","padding-left--none",_.searchVersionColumn),children:r.map((function(e){var n=e[0],i=e[1],s=r.length>1?n+": ":"";return(0,x.jsx)("select",{onChange:function(e){return t.setSearchVersion(n,e.target.value)},defaultValue:t.searchVersions[n],className:_.searchVersionInput,children:i.versions.map((function(e,t){return(0,x.jsx)("option",{label:""+s+e.label,value:e.name},t)}))},n)}))})}function E(){var e,t,r,s,c,v,E=(0,R.Z)().i18n.currentLocale,w=(0,F.L)().algolia,S=w.appId,N=w.apiKey,A=w.indexName,H=w.contextualSearch,Q=(0,b.l)(),T=(e=(0,m.c)().selectMessage,function(t){return e(t,(0,y.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}),C=(t=(0,l._r)(),r=(0,n.useState)((function(){return Object.entries(t).reduce((function(e,t){var r,n=t[0],i=t[1];return Object.assign({},e,((r={})[n]=i.versions[0].name,r))}),{})})),s=r[0],c=r[1],v=Object.values(t).some((function(e){return e.versions.length>1})),{allDocsData:t,versioningEnabled:v,searchVersions:s,setSearchVersion:function(e,t){return c((function(r){var n;return Object.assign({},r,((n={})[e]=t,n))}))}}),I=(0,d.K)(),D=I[0],k=I[1],q={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},L=(0,n.useReducer)((function(e,t){switch(t.type){case"reset":return q;case"loading":return Object.assign({},e,{loading:!0});case"update":return D!==t.value.query?e:Object.assign({},t.value,{items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)});case"advance":var r=e.totalPages>e.lastPage+1;return Object.assign({},e,{lastPage:r?e.lastPage+1:e.lastPage,hasMore:r});default:return e}}),q),V=L[0],B=L[1],M=H?["language","docusaurus_tag"]:[],z=o()(S,N),J=a()(z,A,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:M});J.on("result",(function(e){var t=e.results,r=t.query,n=t.hits,i=t.page,s=t.nbHits,a=t.nbPages;if(""!==r&&Array.isArray(n)){var c=function(e){return e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match")},o=n.map((function(e){var t=e.url,r=e._highlightResult.hierarchy,n=e._snippetResult,i=void 0===n?{}:n,s=Object.keys(r).map((function(e){return c(r[e].value)}));return{title:s.pop(),url:Q(t),summary:i.content?c(i.content.value)+"...":"",breadcrumbs:s}}));B({type:"update",value:{items:o,query:r,totalResults:s,totalPages:a,lastPage:i,hasMore:a>i+1,loading:!1}})}else B({type:"reset"})}));var Z=(0,n.useState)(null),W=Z[0],U=Z[1],$=(0,n.useRef)(0),K=(0,n.useRef)(u.Z.canUseIntersectionObserver&&new IntersectionObserver((function(e){var t=e[0],r=t.isIntersecting,n=t.boundingClientRect.y;r&&$.current>n&&B({type:"advance"}),$.current=n}),{threshold:1})),X=function(){return D?(0,y.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:D}):(0,y.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})},G=(0,p.zX)((function(e){void 0===e&&(e=0),H&&(J.addDisjunctiveFacetRefinement("docusaurus_tag","default"),J.addDisjunctiveFacetRefinement("language",E),Object.entries(C.searchVersions).forEach((function(e){var t=e[0],r=e[1];J.addDisjunctiveFacetRefinement("docusaurus_tag","docs-"+t+"-"+r)}))),J.setQuery(D).setPage(e).search()}));return(0,n.useEffect)((function(){if(W){var e=K.current;return e?(e.observe(W),function(){return e.unobserve(W)}):function(){return!0}}}),[W]),(0,n.useEffect)((function(){B({type:"reset"}),D&&(B({type:"loading"}),setTimeout((function(){G()}),300))}),[D,C.searchVersions,G]),(0,n.useEffect)((function(){V.lastPage&&0!==V.lastPage&&G(V.lastPage)}),[G,V.lastPage]),(0,x.jsxs)(j.Z,{children:[(0,x.jsxs)(h.Z,{children:[(0,x.jsx)("title",{children:(0,g.p)(X())}),(0,x.jsx)("meta",{property:"robots",content:"noindex, follow"})]}),(0,x.jsxs)("div",{className:"container margin-vert--lg",children:[(0,x.jsx)(P.Z,{as:"h1",children:X()}),(0,x.jsxs)("form",{className:"row",onSubmit:function(e){return e.preventDefault()},children:[(0,x.jsx)("div",{className:(0,i.Z)("col",_.searchQueryColumn,{"col--9":C.versioningEnabled,"col--12":!C.versioningEnabled}),children:(0,x.jsx)("input",{type:"search",name:"q",className:_.searchQueryInput,placeholder:(0,y.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,y.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:function(e){return k(e.target.value)},value:D,autoComplete:"off",autoFocus:!0})}),H&&C.versioningEnabled&&(0,x.jsx)(O,{docsSearchVersionsHelpers:C})]}),(0,x.jsxs)("div",{className:"row",children:[(0,x.jsx)("div",{className:(0,i.Z)("col","col--8",_.searchResultsColumn),children:!!V.totalResults&&T(V.totalResults)}),(0,x.jsx)("div",{className:(0,i.Z)("col","col--4","text--right",_.searchLogoColumn),children:(0,x.jsx)(f.Z,{to:"https://www.algolia.com/","aria-label":(0,y.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"}),children:(0,x.jsx)("svg",{viewBox:"0 0 168 24",className:_.algoliaLogo,children:(0,x.jsxs)("g",{fill:"none",children:[(0,x.jsx)("path",{className:_.algoliaLogoPathFill,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),(0,x.jsx)("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),(0,x.jsx)("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})]})})})})]}),V.items.length>0?(0,x.jsx)("main",{children:V.items.map((function(e,t){var r=e.title,n=e.url,s=e.summary,a=e.breadcrumbs;return(0,x.jsxs)("article",{className:_.searchResultItem,children:[(0,x.jsx)(P.Z,{as:"h2",className:_.searchResultItemHeading,children:(0,x.jsx)(f.Z,{to:n,dangerouslySetInnerHTML:{__html:r}})}),a.length>0&&(0,x.jsx)("nav",{"aria-label":"breadcrumbs",children:(0,x.jsx)("ul",{className:(0,i.Z)("breadcrumbs",_.searchResultItemPath),children:a.map((function(e,t){return(0,x.jsx)("li",{className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}},t)}))})}),s&&(0,x.jsx)("p",{className:_.searchResultItemSummary,dangerouslySetInnerHTML:{__html:s}})]},t)}))}):[D&&!V.loading&&(0,x.jsx)("p",{children:(0,x.jsx)(y.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result",children:"No results were found"})},"no-results"),!!V.loading&&(0,x.jsx)("div",{className:_.loadingSpinner},"spinner")],V.hasMore&&(0,x.jsx)("div",{className:_.loader,ref:U,children:(0,x.jsx)(y.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results",children:"Fetching new results..."})})]})]})}function w(){return(0,x.jsx)(v.FG,{className:"search-page-wrapper",children:(0,x.jsx)(E,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.67c5fd4f.js.LICENSE.txt b/assets/js/1a4e3797.67c5fd4f.js.LICENSE.txt new file mode 100644 index 00000000..bfc7620f --- /dev/null +++ b/assets/js/1a4e3797.67c5fd4f.js.LICENSE.txt @@ -0,0 +1 @@ +/*! algoliasearch-lite.umd.js | 4.24.0 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ diff --git a/assets/js/1a4e3797.a4c3c677.js b/assets/js/1a4e3797.a4c3c677.js deleted file mode 100644 index 8060f39e..00000000 --- a/assets/js/1a4e3797.a4c3c677.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 1a4e3797.a4c3c677.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[7920],{17331:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,s,a,c,o,u;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(s=this._events[e]))return!1;if(r(s))switch(arguments.length){case 1:s.call(this);break;case 2:s.call(this,arguments[1]);break;case 3:s.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),s.apply(this,c)}else if(n(s))for(c=Array.prototype.slice.call(arguments,1),a=(u=s.slice()).length,o=0;o0&&this._events[e].length>a&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,s,a,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(a=(i=this._events[e]).length,s=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=a;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){s=c;break}if(s<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(s,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},8131:(e,t,r)=>{"use strict";var n=r(49374),i=r(67450),s=r(43650),a=r(17775),c=r(23076);function o(e,t,r,i){return new n(e,t,r,i)}o.version=r(24336),o.AlgoliaSearchHelper=n,o.SearchParameters=a,o.RecommendParameters=i,o.SearchResults=c,o.RecommendResults=s,e.exports=o},68078:(e,t,r)=>{"use strict";var n=r(17331);function i(e,t,r){this.main=e,this.fn=t,this.recommendFn=r,this.lastResults=null,this.lastRecommendResults=null}r(14853)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},i.prototype.getModifiedRecommendState=function(e){return this.recommendFn(e)},e.exports=i},67450:e=>{"use strict";function t(e){e=e||{},this.params=e.params||[]}t.prototype={constructor:t,addParams:function(e){var r=this.params.slice();return r.push(e),new t({params:r})},removeParams:function(e){return new t({params:this.params.filter((function(t){return t.$$id!==e}))})},addFrequentlyBoughtTogether:function(e){return this.addParams(Object.assign({},e,{model:"bought-together"}))},addRelatedProducts:function(e){return this.addParams(Object.assign({},e,{model:"related-products"}))},addTrendingItems:function(e){return this.addParams(Object.assign({},e,{model:"trending-items"}))},addTrendingFacets:function(e){return this.addParams(Object.assign({},e,{model:"trending-facets"}))},addLookingSimilar:function(e){return this.addParams(Object.assign({},e,{model:"looking-similar"}))},_buildQueries:function(e,t){return this.params.filter((function(e){return void 0===t[e.$$id]})).map((function(t){var r=Object.assign({},t,{indexName:e});return delete r.$$id,r}))}},e.exports=t},43650:e=>{"use strict";function t(e,t){this._state=e,this._rawResults={};var r=this;e.params.forEach((function(e){var n=e.$$id;r[n]=t[n],r._rawResults[n]=t[n]}))}t.prototype={constructor:t},e.exports=t},82437:(e,t,r)=>{"use strict";var n=r(52344),i=r(90116),s=r(49803),a={addRefinement:function(e,t,r){if(a.isRefined(e,t,r))return e;var i=""+r,s=e[t]?e[t].concat(i):[i],c={};return c[t]=s,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return a.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return a.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return a.isRefined(e,t,r)?a.removeRefinement(e,t,r):a.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return s(e,[t]);if("function"==typeof t){var n=!1,a=Object.keys(e).reduce((function(i,s){var a=e[s]||[],c=a.filter((function(e){return!t(e,s,r)}));return c.length!==a.length&&(n=!0),i[s]=c,i}),{});return n?a:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=a},17775:(e,t,r)=>{"use strict";var n=r(52344),i=r(7888),s=r(22686),a=r(60185),c=r(90116),o=r(49803),u=r(28023),h=r(46801),f=r(82437);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return a(e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=u(r);if(this.isNumericRefined(e,t,n))return this;var i=a({},this.numericRefinements);return i[e]=a({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,u(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return o(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var s=r[i],a={};return s=s||{},Object.keys(s).forEach((function(r){var n=s[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),a[r]=c})),n[i]=a,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var s,a,c=u(r),o=void 0!==(s=this.numericRefinements[e][t],a=c,i(s,(function(e){return l(e,a)})));return n&&o},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=s(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return s(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),s=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?o(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(s)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},10210:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],u=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=s(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,s){return function(u,h,f){var l=u;if(f>0){var m=0;for(l=u;m{"use strict";var n=r(74587),i=r(52344),s=r(94039),a=r(7888),c=r(69725),o=r(82293),u=r(60185),h=r(42148),f=s.escapeFacetValue,l=s.unescapeFacetValue,m=r(10210);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var s=t[0];this._rawResults=t;var o=this;Object.keys(s).forEach((function(e){o[e]=s[e]}));var h=u({persistHierarchicalRootCount:!1},r);Object.keys(h).forEach((function(e){o[e]=h[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var f=e.getRefinedDisjunctiveFacets(),v=d(e.facets),g=d(e.disjunctiveFacets),y=1,R=s.facets||{};Object.keys(R).forEach((function(t){var r,n,i=R[t],u=(r=e.hierarchicalFacets,n=t,a(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(u){var h=u.attributes.indexOf(t),f=c(e.hierarchicalFacets,(function(e){return e.name===u.name}));o.hierarchicalFacets[f][h]={attribute:t,data:i,exhaustive:s.exhaustiveFacetsCount}}else{var l,m=-1!==e.disjunctiveFacets.indexOf(t),d=-1!==e.facets.indexOf(t);m&&(l=g[t],o.disjunctiveFacets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(o.disjunctiveFacets[l],s.facets_stats,t)),d&&(l=v[t],o.facets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(o.facets[l],s.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),f.forEach((function(r){var n=t[y],a=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(a).forEach((function(t){var r,f=a[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(o.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;o.hierarchicalFacets[r][m].data=u({},o.hierarchicalFacets[r][m].data,f)}else{r=g[t];var d=s.facets&&s.facets[t]||{};o.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(o.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!o.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(o.disjunctiveFacets[r].data[n]=0)}))}})),y++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),s=e._getHierarchicalFacetSeparator(n),a=e.getHierarchicalRefinement(r);0===a.length||a[0].split(s).length<2||t.slice(y).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var u=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(o.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(a.length>0&&!o.persistHierarchicalRootCount){var m=a[0].split(s)[0];l[m]=o.hierarchicalFacets[h][f].data[m]}o.hierarchicalFacets[h][f].data=i(l,u,o.hierarchicalFacets[h][f].data)}})),y++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=v[t];o.facets[n]={name:t,data:R[t],exhaustive:s.exhaustiveFacetsCount},r.forEach((function(e){o.facets[n]=o.facets[n]||{name:t},o.facets[n].data=o.facets[n].data||{},o.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=a(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=a(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var s=a(e.hierarchicalFacets,r);if(!s)return s;var c=e._state.getHierarchicalFacetByName(t),o=e._state._getHierarchicalFacetSeparator(c),u=l(e._state.getHierarchicalRefinement(t)[0]||"");0===u.indexOf(c.rootPath)&&(u=u.replace(c.rootPath+o,""));var h=u.split(o);return h.unshift(t),y(s,h,0),s}}function y(e,t,r){e.isRefined=e.name===(t[r]&&t[r].trim()),e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var s=t.data.map((function(t){return R(e,t,r,n+1)})),a=e(s,r[n]);return i({data:a},t)}function F(e,t){var r=a(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var s=a(i,(function(e){return e.name===r})),c=s&&s.data&&s.data[n]?s.data[n]:0,o=s&&s.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:o}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return a(this.facets,t)||a(this.disjunctiveFacets,t)||a(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,s=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),a=this;if(Array.isArray(r))n=[e];else n=a._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(s.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(a,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var s,a=t.sortRemainingBy;return"hidden"===a?r:(s="alpha"===a?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,s[0],s[1])))}(e,r)}if(Array.isArray(s.sortBy)){var n=o(s.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof s.sortBy)return function(e,t){return t.sort(e)}(s.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),s=e._getHierarchicalFacetSeparator(i),c=r.split(s),o=a(n,(function(e){return e.name===t})),u=c.reduce((function(e,t){var r=e&&a(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),o),h=u&&u.count||0,f=u&&u.exhaustive||!1,l=u&&u.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},49374:(e,t,r)=>{"use strict";var n=r(17331),i=r(68078),s=r(94039).escapeFacetValue,a=r(14853),c=r(60185),o=r(90116),u=r(49803),h=r(67450),f=r(43650),l=r(96394),m=r(17775),d=r(23076),p=r(97878),v=r(24336);function g(e,t,r,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+v+")"),this.setClient(e);var i=r||{};i.index=t,this.state=m.make(i),this.recommendState=new h({params:i.recommendState}),this.lastResults=null,this.lastRecommendResults=null,this._queryId=0,this._recommendQueryId=0,this._lastQueryIdReceived=-1,this._lastRecommendQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0,this._currentNbRecommendQueries=0,this._searchResultsOptions=n,this._recommendCache={}}function y(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function R(){return this.state.page}a(g,n),g.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},g.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},g.prototype.recommend=function(){return this._recommend(),this},g.prototype.getQuery=function(){var e=this.state;return l._getHitsSearchParams(e)},g.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=l._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new d(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new d(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},g.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:u(l._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),s="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(s);var a=this.client.initIndex(n.index);if("function"!=typeof a.findAnswers)throw new Error(s);return a.findAnswers(n.query,e.queryLanguages,i)},g.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),o=c.isDisjunctiveFacet(e),u=l.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var h,f=this;return i?h=this.client.searchForFacetValues([{indexName:c.index,params:u}]):a?h=this.client.initIndex(c.index).searchForFacetValues(u):(delete u.facetName,h=this.client.search([{type:"facet",facet:e,indexName:c.index,params:u}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),h.then((function(t){return f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=s(t.value),t.isRefined=o?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw f._currentNbQueries--,0===f._currentNbQueries&&f.emit("searchQueueEmpty"),e}))},g.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},g.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},g.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},g.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},g.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},g.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},g.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},g.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},g.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},g.prototype.addFrequentlyBoughtTogether=function(e){return this._recommendChange({state:this.recommendState.addFrequentlyBoughtTogether(e)}),this},g.prototype.addRelatedProducts=function(e){return this._recommendChange({state:this.recommendState.addRelatedProducts(e)}),this},g.prototype.addTrendingItems=function(e){return this._recommendChange({state:this.recommendState.addTrendingItems(e)}),this},g.prototype.addTrendingFacets=function(e){return this._recommendChange({state:this.recommendState.addTrendingFacets(e)}),this},g.prototype.addLookingSimilar=function(e){return this._recommendChange({state:this.recommendState.addLookingSimilar(e)}),this},g.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},g.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},g.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},g.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},g.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},g.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},g.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},g.prototype.removeFrequentlyBoughtTogether=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeRelatedProducts=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeTrendingItems=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeTrendingFacets=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.removeLookingSimilar=function(e){return this._recommendChange({state:this.recommendState.removeParams(e)}),this},g.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},g.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},g.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},g.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},g.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},g.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},g.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},g.prototype.setCurrentPage=y,g.prototype.setPage=y,g.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},g.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},g.prototype.setState=function(e){return this._change({state:m.make(e),isPageReset:!1}),this},g.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new m(e),this},g.prototype.hasRefinements=function(e){return!!o(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},g.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},g.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},g.prototype.hasTag=function(e){return this.state.isTagRefined(e)},g.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},g.prototype.getIndex=function(){return this.state.index},g.prototype.getCurrentPage=R,g.prototype.getPage=R,g.prototype.getTags=function(){return this.state.tagRefinements},g.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},g.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},g.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},g.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=l._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?l._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),s=Array.prototype.concat.apply(n,i),a=this._queryId++;if(this._currentNbQueries++,!s.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,a));try{this.client.search(s).then(this._dispatchAlgoliaResponse.bind(this,r,a)).catch(this._dispatchAlgoliaError.bind(this,a))}catch(c){this.emit("error",{error:c})}},g.prototype._recommend=function(){var e=this.state,t=this.recommendState,r=this.getIndex(),n=[{state:t,index:r,helper:this}],i=t.params.map((function(e){return e.$$id}));this.emit("fetch",{recommend:{state:t,results:this.lastRecommendResults}});var s=this._recommendCache,a=this.derivedHelpers.map((function(t){var r=t.getModifiedState(e).index;if(!r)return[];var a=t.getModifiedRecommendState(new h);return n.push({state:a,index:r,helper:t}),i=Array.prototype.concat.apply(i,a.params.map((function(e){return e.$$id}))),t.emit("fetch",{recommend:{state:a,results:t.lastRecommendResults}}),a._buildQueries(r,s)})),c=Array.prototype.concat.apply(this.recommendState._buildQueries(r,s),a);if(0!==c.length)if(c.length>0&&void 0===this.client.getRecommendations)console.warn("Please update algoliasearch/lite to the latest version in order to use recommend widgets.");else{var o=this._recommendQueryId++;this._currentNbRecommendQueries++;try{this.client.getRecommendations(c).then(this._dispatchRecommendResponse.bind(this,o,n,i)).catch(this._dispatchRecommendError.bind(this,o))}catch(u){this.emit("error",{error:u})}}},g.prototype._dispatchAlgoliaResponse=function(e,t,r){var n=this;if(!(t0},g.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},g.prototype._recommendChange=function(e){var t=e.state;t!==this.recommendState&&(this.recommendState=t,this.emit("recommend:change",{search:{results:this.lastResults,state:this.state},recommend:{results:this.lastRecommendResults,state:this.recommendState}}))},g.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},g.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+v+")"),this.client=e),this},g.prototype.getClient=function(){return this.client},g.prototype.derive=function(e,t){var r=new i(this,e,t);return this.derivedHelpers.push(r),r},g.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},g.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=g},74587:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},52344:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},94039:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},7888:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r{e.exports=function(e){return e.reduce((function(e,t){return e.concat(t)}),[])}},82293:(e,t,r)=>{"use strict";var n=r(7888);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),s=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!s?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(s[0]),e[1].push(s[1]),e)}),[[],[]])}},14853:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},22686:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},60185:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var s=n[i],a=e[i];void 0!==a&&void 0===s||(t(a)&&t(s)?e[i]=r(a,s):e[i]="object"==typeof(c=s)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},49803:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n=0||(i[r]=e[r]);return i}},42148:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,s=null===t;if(!s&&e>t||n&&i||!r)return 1;if(!n&&e=n.length?s:"desc"===n[i]?-s:s}return e.index-r.index})),i.map((function(e){return e.value}))}},28023:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},96394:(e,t,r)=>{"use strict";var n=r(60185);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var s={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:s._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:s._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),a=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(a.length>0&&a[0].split(c).length>1){var o=a[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);o.forEach((function(n,a){var c=s._getDisjunctiveFacetSearchParams(t,n.attribute,0===a);function u(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!u(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||u(t)||e.push(t),e}),[]),f=o[a-1];c.facetFilters=a>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(s._getHitsHierarchicalFacetsAttributes(e)).sort(),r=s._getFacetFilters(e),a=s._getNumericFilters(e),c=s._getTagFilters(e),o={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(o.facetFilters=r),a.length>0&&(o.numericFilters=a),i(n({},e.getQueryParams(),o))},_getDisjunctiveFacetSearchParams:function(e,t,r){var a=s._getFacetFilters(e,t,r),c=s._getNumericFilters(e,t),o=s._getTagFilters(e),u={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};o.length>0&&(u.tagFilters=o);var h=e.getHierarchicalFacetByName(t);return u.facets=h?s._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(u.numericFilters=c),a.length>0&&(u.facetFilters=a),i(n({},e.getQueryParams(),u))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var s=i[e]||[];t!==n&&s.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).slice().sort().forEach((function(t){n.push(e+":"+t)}))}));var s=e.facetsExcludes||{};Object.keys(s).sort().forEach((function(e){(s[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var a=e.disjunctiveFacetsRefinements||{};Object.keys(a).sort().forEach((function(e){var r=a[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.slice().sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var s=(c[i]||[])[0];if(void 0!==s){var a,o,u=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(u),f=e._getHierarchicalRootPath(u);if(t===i){if(-1===s.indexOf(h)||!f&&!0===r||f&&f.split(h).length===s.split(h).length)return;f?(o=f.split(h).length-1,s=f):(o=s.split(h).length-2,s=s.slice(0,s.lastIndexOf(h))),a=u.attributes[o]}else o=s.split(h).length-1,a=u.attributes[o];a&&n.push([a+":"+s])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),s=n.split(i).length,a=r.attributes.slice(0,s+1);return t.concat(a)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),s=0;return i&&(s=i.split(n).length),[t.attributes[s]]}var a=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,a+1)},getSearchForFacetQuery:function(e,t,r,a){var c=a.isDisjunctiveFacet(e)?a.clearRefinements(e):a,o={facetQuery:t,facetName:e};return"number"==typeof r&&(o.maxFacetHits=r),i(n({},s._getHitsSearchParams(c),o))}};e.exports=s},46801:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},97878:(e,t,r)=>{"use strict";var n=r(7888),i=r(7948);e.exports=function(e){var t={};return e.forEach((function(e){e.forEach((function(e,r){t[e.objectID]?t[e.objectID]={indexSum:t[e.objectID].indexSum+r,count:t[e.objectID].count+1}:t[e.objectID]={indexSum:r,count:1}}))})),function(e,t){var r=[];return Object.keys(e).forEach((function(n){e[n].count<2&&(e[n].indexSum+=100),r.push({objectID:n,avgOfIndices:e[n].indexSum/t})})),r.sort((function(e,t){return e.avgOfIndices>t.avgOfIndices?1:-1}))}(t,e.length).reduce((function(t,r){var s=n(i(e),(function(e){return e.objectID===r.objectID}));return s?t.concat(s):t}),[])}},24336:e=>{"use strict";e.exports="3.21.0"},70290:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,s=void 0;try{for(var a,c=e[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){i=!0,s=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw s}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return s()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],s=t[1];return Promise.all([n,s||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=s();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=s();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=s(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},s=JSON.stringify(r);if(s in t)return Promise.resolve(e.serializable?JSON.parse(t[s]):t[s]);var a=n(),c=i&&i.miss||function(){return Promise.resolve()};return a.then((function(e){return c(e)})).then((function(){return a}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function u(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function j(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(s(r),s(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function P(e,t,n,i){var a=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),o=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),u=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,s){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:E(a)};var m={data:c,headers:o,method:u,url:x(h,n.path,f),connectTimeout:s(l,e.timeouts.connect),responseTimeout:s(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return a.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,s)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,E(a))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return j(e.hostsCache,t).then((function(e){return m(s(e.statelessHosts).reverse(),e.getTimeout)}))}function _(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function x(e,t,r){var n=O(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function O(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function E(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var S=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),s=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,s=e.requestsCache,a=e.responsesCache,c=e.timeouts,o=e.userAgent,u=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:s,responsesCache:a,timeouts:c,userAgent:o,headers:e.headers,queryParameters:h,hosts:u.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var s={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(s,(function(){return f.requestsCache.get(s,(function(){return f.requestsCache.set(s,n()).then((function(e){return Promise.all([f.requestsCache.delete(s),e])}),(function(e){return Promise.all([f.requestsCache.delete(s),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(s,e)}})},write:function(e,t){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(u([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:s,appId:t,addAlgoliaAgent:function(e,t){s.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then((function(){}))}},e.methods)},N=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},A=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},H=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:O(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},Q=function(e){return function(t,i){return Promise.all(t.map((function(t){var s=t.params,a=s.facetName,c=s.facetQuery,o=n(s,["facetName","facetQuery"]);return A(e)(t.indexName,{methods:{searchForFacetValues:I}}).searchForFacetValues(a,c,r(r({},i),o))})))}},T=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},I=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,k=2,q=3,L=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{threshold:e.threshold||0})}));return e.transporter.read({method:b,path:"1/indexes/*/recommendations",data:{requests:i},cacheable:!0},n)}};function V(e,t,n){var i,s={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},s=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(s),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(s),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(s),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return k>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:o(),requestsCache:o({serializable:!1}),hostsCache:c({caches:[a({key:"".concat("4.23.3","-").concat(e)}),o()]}),userAgent:_("4.23.3").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return S(r(r(r({},s),n),{},{methods:{search:H,searchForFacetValues:Q,multipleQueries:H,multipleSearchForFacetValues:Q,customRequest:N,initIndex:function(e){return function(t){return A(e)(t,{methods:{search:C,searchForFacetValues:I,findAnswers:T}})}},getRecommendations:L}}))}return V.version="4.23.3",V}()},88824:(e,t,r)=>{"use strict";r.d(t,{c:()=>u});var n=r(67294),i=r(52263),s=["zero","one","two","few","many","other"];function a(e){return s.filter((function(t){return e.includes(t)}))}var c={locale:"en",pluralForms:a(["one","other"]),select:function(e){return 1===e?"one":"other"}};function o(){var e=(0,i.Z)().i18n.currentLocale;return(0,n.useMemo)((function(){try{return t=e,r=new Intl.PluralRules(t),{locale:t,pluralForms:a(r.resolvedOptions().pluralCategories),select:function(e){return r.select(e)}}}catch(n){return console.error('Failed to use Intl.PluralRules for locale "'+e+'".\nDocusaurus will fallback to the default (English) implementation.\nError: '+n.message+"\n"),c}var t,r}),[e])}function u(){var e=o();return{selectMessage:function(t,r){return function(e,t,r){var n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error("For locale="+r.locale+", a maximum of "+r.pluralForms.length+" plural forms are expected ("+r.pluralForms.join(",")+"), but the message contains "+n.length+": "+e);var i=r.select(t),s=r.pluralForms.indexOf(i);return n[Math.min(s,n.length-1)]}(r,t,e)}}}},39172:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>w});var n=r(67294),i=r(90512),s=r(8131),a=r.n(s),c=r(70290),o=r.n(c),u=r(10412),h=r(35742),f=r(33692),l=r(80143),m=r(88824),d=r(66177),p=r(69688),v=r(10833),g=r(82128),y=r(95999),R=r(52263),F=r(6278),b=r(239),j=r(7372),P=r(92503);const _={searchQueryInput:"searchQueryInput_u2C7",searchVersionInput:"searchVersionInput_m0Ui",searchResultsColumn:"searchResultsColumn_JPFH",algoliaLogo:"algoliaLogo_rT1R",algoliaLogoPathFill:"algoliaLogoPathFill_WdUC",searchResultItem:"searchResultItem_Tv2o",searchResultItemHeading:"searchResultItemHeading_KbCB",searchResultItemPath:"searchResultItemPath_lhe1",searchResultItemSummary:"searchResultItemSummary_AEaO",searchQueryColumn:"searchQueryColumn_RTkw",searchVersionColumn:"searchVersionColumn_ypXd",searchLogoColumn:"searchLogoColumn_rJIA",loadingSpinner:"loadingSpinner_XVxU","loading-spin":"loading-spin_vzvp",loader:"loader_vvXV"};var x=r(85893);function O(e){var t=e.docsSearchVersionsHelpers,r=Object.entries(t.allDocsData).filter((function(e){return e[1].versions.length>1}));return(0,x.jsx)("div",{className:(0,i.Z)("col","col--3","padding-left--none",_.searchVersionColumn),children:r.map((function(e){var n=e[0],i=e[1],s=r.length>1?n+": ":"";return(0,x.jsx)("select",{onChange:function(e){return t.setSearchVersion(n,e.target.value)},defaultValue:t.searchVersions[n],className:_.searchVersionInput,children:i.versions.map((function(e,t){return(0,x.jsx)("option",{label:""+s+e.label,value:e.name},t)}))},n)}))})}function E(){var e,t,r,s,c,v,E=(0,R.Z)().i18n.currentLocale,w=(0,F.L)().algolia,S=w.appId,N=w.apiKey,A=w.indexName,H=w.contextualSearch,Q=(0,b.l)(),T=(e=(0,m.c)().selectMessage,function(t){return e(t,(0,y.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}),C=(t=(0,l._r)(),r=(0,n.useState)((function(){return Object.entries(t).reduce((function(e,t){var r,n=t[0],i=t[1];return Object.assign({},e,((r={})[n]=i.versions[0].name,r))}),{})})),s=r[0],c=r[1],v=Object.values(t).some((function(e){return e.versions.length>1})),{allDocsData:t,versioningEnabled:v,searchVersions:s,setSearchVersion:function(e,t){return c((function(r){var n;return Object.assign({},r,((n={})[e]=t,n))}))}}),I=(0,d.K)(),D=I[0],k=I[1],q={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},L=(0,n.useReducer)((function(e,t){switch(t.type){case"reset":return q;case"loading":return Object.assign({},e,{loading:!0});case"update":return D!==t.value.query?e:Object.assign({},t.value,{items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)});case"advance":var r=e.totalPages>e.lastPage+1;return Object.assign({},e,{lastPage:r?e.lastPage+1:e.lastPage,hasMore:r});default:return e}}),q),V=L[0],B=L[1],M=H?["language","docusaurus_tag"]:[],z=o()(S,N),J=a()(z,A,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:M});J.on("result",(function(e){var t=e.results,r=t.query,n=t.hits,i=t.page,s=t.nbHits,a=t.nbPages;if(""!==r&&Array.isArray(n)){var c=function(e){return e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match")},o=n.map((function(e){var t=e.url,r=e._highlightResult.hierarchy,n=e._snippetResult,i=void 0===n?{}:n,s=Object.keys(r).map((function(e){return c(r[e].value)}));return{title:s.pop(),url:Q(t),summary:i.content?c(i.content.value)+"...":"",breadcrumbs:s}}));B({type:"update",value:{items:o,query:r,totalResults:s,totalPages:a,lastPage:i,hasMore:a>i+1,loading:!1}})}else B({type:"reset"})}));var Z=(0,n.useState)(null),W=Z[0],U=Z[1],$=(0,n.useRef)(0),K=(0,n.useRef)(u.Z.canUseIntersectionObserver&&new IntersectionObserver((function(e){var t=e[0],r=t.isIntersecting,n=t.boundingClientRect.y;r&&$.current>n&&B({type:"advance"}),$.current=n}),{threshold:1})),X=function(){return D?(0,y.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:D}):(0,y.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})},G=(0,p.zX)((function(e){void 0===e&&(e=0),H&&(J.addDisjunctiveFacetRefinement("docusaurus_tag","default"),J.addDisjunctiveFacetRefinement("language",E),Object.entries(C.searchVersions).forEach((function(e){var t=e[0],r=e[1];J.addDisjunctiveFacetRefinement("docusaurus_tag","docs-"+t+"-"+r)}))),J.setQuery(D).setPage(e).search()}));return(0,n.useEffect)((function(){if(W){var e=K.current;return e?(e.observe(W),function(){return e.unobserve(W)}):function(){return!0}}}),[W]),(0,n.useEffect)((function(){B({type:"reset"}),D&&(B({type:"loading"}),setTimeout((function(){G()}),300))}),[D,C.searchVersions,G]),(0,n.useEffect)((function(){V.lastPage&&0!==V.lastPage&&G(V.lastPage)}),[G,V.lastPage]),(0,x.jsxs)(j.Z,{children:[(0,x.jsxs)(h.Z,{children:[(0,x.jsx)("title",{children:(0,g.p)(X())}),(0,x.jsx)("meta",{property:"robots",content:"noindex, follow"})]}),(0,x.jsxs)("div",{className:"container margin-vert--lg",children:[(0,x.jsx)(P.Z,{as:"h1",children:X()}),(0,x.jsxs)("form",{className:"row",onSubmit:function(e){return e.preventDefault()},children:[(0,x.jsx)("div",{className:(0,i.Z)("col",_.searchQueryColumn,{"col--9":C.versioningEnabled,"col--12":!C.versioningEnabled}),children:(0,x.jsx)("input",{type:"search",name:"q",className:_.searchQueryInput,placeholder:(0,y.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,y.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:function(e){return k(e.target.value)},value:D,autoComplete:"off",autoFocus:!0})}),H&&C.versioningEnabled&&(0,x.jsx)(O,{docsSearchVersionsHelpers:C})]}),(0,x.jsxs)("div",{className:"row",children:[(0,x.jsx)("div",{className:(0,i.Z)("col","col--8",_.searchResultsColumn),children:!!V.totalResults&&T(V.totalResults)}),(0,x.jsx)("div",{className:(0,i.Z)("col","col--4","text--right",_.searchLogoColumn),children:(0,x.jsx)(f.Z,{to:"https://www.algolia.com/","aria-label":(0,y.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"}),children:(0,x.jsx)("svg",{viewBox:"0 0 168 24",className:_.algoliaLogo,children:(0,x.jsxs)("g",{fill:"none",children:[(0,x.jsx)("path",{className:_.algoliaLogoPathFill,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),(0,x.jsx)("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),(0,x.jsx)("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})]})})})})]}),V.items.length>0?(0,x.jsx)("main",{children:V.items.map((function(e,t){var r=e.title,n=e.url,s=e.summary,a=e.breadcrumbs;return(0,x.jsxs)("article",{className:_.searchResultItem,children:[(0,x.jsx)(P.Z,{as:"h2",className:_.searchResultItemHeading,children:(0,x.jsx)(f.Z,{to:n,dangerouslySetInnerHTML:{__html:r}})}),a.length>0&&(0,x.jsx)("nav",{"aria-label":"breadcrumbs",children:(0,x.jsx)("ul",{className:(0,i.Z)("breadcrumbs",_.searchResultItemPath),children:a.map((function(e,t){return(0,x.jsx)("li",{className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}},t)}))})}),s&&(0,x.jsx)("p",{className:_.searchResultItemSummary,dangerouslySetInnerHTML:{__html:s}})]},t)}))}):[D&&!V.loading&&(0,x.jsx)("p",{children:(0,x.jsx)(y.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result",children:"No results were found"})},"no-results"),!!V.loading&&(0,x.jsx)("div",{className:_.loadingSpinner},"spinner")],V.hasMore&&(0,x.jsx)("div",{className:_.loader,ref:U,children:(0,x.jsx)(y.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results",children:"Fetching new results..."})})]})]})}function w(){return(0,x.jsx)(v.FG,{className:"search-page-wrapper",children:(0,x.jsx)(E,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.a4c3c677.js.LICENSE.txt b/assets/js/1a4e3797.a4c3c677.js.LICENSE.txt deleted file mode 100644 index 92dc1757..00000000 --- a/assets/js/1a4e3797.a4c3c677.js.LICENSE.txt +++ /dev/null @@ -1 +0,0 @@ -/*! algoliasearch-lite.umd.js | 4.23.3 | © Algolia, inc. | https://github.com/algolia/algoliasearch-client-javascript */ diff --git a/assets/js/1a9698d7.1a107de3.js b/assets/js/1a9698d7.1a107de3.js deleted file mode 100644 index 86ed395a..00000000 --- a/assets/js/1a9698d7.1a107de3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[410],{43948:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>d});var s=r(85893),i=r(11151);const t={},a="Darklang Release 2",o={id:"changelog/release-2",title:"Darklang Release 2",description:"June 6th, 2022",source:"@site/docs-classic/changelog/release-2.md",sourceDirName:"changelog",slug:"/changelog/release-2",permalink:"/changelog/release-2",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-2.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 3 - June, 2022",permalink:"/changelog/release-3"},next:{title:"Release 1",permalink:"/changelog/release-1"}},l={},d=[{value:"Major changes",id:"major-changes",level:2},{value:"Error messages",id:"error-messages",level:3},{value:"Result.Errors",id:"resulterrors",level:4},{value:"Runtime errors",id:"runtime-errors",level:4},{value:"Minor improvements and fixes",id:"minor-improvements-and-fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"String casing",id:"string-casing",level:3},{value:"String ordering",id:"string-ordering",level:3},{value:"HTTP Clients",id:"http-clients",level:3},{value:"Generating JSON",id:"generating-json",level:3},{value:"Parsing JSON",id:"parsing-json",level:3},{value:"HTTP stack",id:"http-stack",level:3},{value:"Testing changes",id:"testing-changes",level:2},{value:"Operational changes",id:"operational-changes",level:2},{value:"Documentation changes",id:"documentation-changes",level:2},{value:"Contributing changes",id:"contributing-changes",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"darklang-release-2",children:"Darklang Release 2"}),"\n",(0,s.jsx)(n.p,{children:"June 6th, 2022"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.em,{children:["See the ",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-release-3/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,s.jsxs)(n.p,{children:["Darklang Release 2 is the culmination of 20 months work of rewriting the backend\nfrom OCaml to F#. This was done to give us more productivity by allowing us use\nmore 3rd party SDKs, to solve operational issues, and to make it easier to\ncontribute. Our reasons for making the change were discussed at the time:\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/new-backend-fsharp/",children:"1"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/why-dark-didnt-choose-rust/",children:"2"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/leaving-ocaml/",children:"3"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The editor backend was fully migrated by April 2nd."}),"\n",(0,s.jsx)(n.li,{children:"HTTP backends (for builtwithdark.com) were finished converting on May 3rd."}),"\n",(0,s.jsx)(n.li,{children:"The migration to the new queues was fully converted on May 27th."}),"\n",(0,s.jsx)(n.li,{children:"The execution engine in the editor was switched over on June 5th."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The change was documented in a series of blog posts:\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/hows-the-dark-rewrite-going/",children:"1"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/changes-the-the-dark-rewrite/",children:"2"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/optimizing-tasks-in-fsharp/",children:"3"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/benchmarking-fsharp6-tasks/",children:"4"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-year-in-review-2021/",children:"5"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/try-out-the-new-darklang-backend/",children:"6"}),", and\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/backend-rewrite-complete/",children:"7"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Thanks to everyone who contributed, including\n",(0,s.jsx)(n.a,{href:"https://github.com/Athinanarof",children:"Araceli S\xe1nchez"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/levlaz",children:"Lev Lazinskiy"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/mariajdab",children:"Mar\xeda Jos\xe9 D\xe1vila"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/mjeffryes",children:"Matthew Jeffryes"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/jwalter",children:"jwalter"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/danicampagna",children:"Daniela Campagna"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/sxmanton",children:"Sean Manton"}),", and especially\n",(0,s.jsx)(n.a,{href:"https://github.com/stachudotnet",children:"Stachu Korick"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"major-changes",children:"Major changes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Darklang's implementation is now asynchronous, meaning that your programs will\nno longer be stuck behind other users' programs making HTTP or DB calls. This\nwas a major source of slow Dark programs experienced by most users."}),"\n",(0,s.jsx)(n.p,{children:"As well as massively reducing latency for programs written in Dark, the editor\nnow loads much faster."}),"\n",(0,s.jsx)(n.p,{children:"We have also switched from dozens of tiny machines to a smaller number of much\nmore powerful machines. This makes your programs run faster on average, even\nwhen accounting for the switch to an asynchronous implementation."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"You can now put a lambda in a variable and pipe into it."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Most error messages are improved, especially for bad input."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The queues have been rewritten and should not longer suffer from the old\nsources of occasional downtime and slow-down."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"During a deploy of the Dark service, cron jobs no longer run the risk of\nrunning twice."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["There is now a ",(0,s.jsx)(n.a,{href:"https://status.darklang.com",children:"Status page"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Dark's internal firewalls have been significantly improved"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Several bottlenecks to outbound HTTP requests have been identified and removed"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"String::length"})," is now ",(0,s.jsx)(n.code,{children:"O(1)"})," instead of ",(0,s.jsx)(n.code,{children:"O(N)"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"JSON output is now significantly faster"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"When reading strings from a user, the string is only passed over once."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Traces are now stored in the background, after a request has completed,\ngreatly reducing response time on HTTP requests to Dark programs."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Dark has moved to more powerful cloud machines, going from Google' Cloud's\ndeprecated N1 machines to extremely powerful T2D machines (2.3x faster)"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["The rewrite also addressed some underlying issues that will come out in new\nfeatures soon, including a better type system, support for characters and\ntuples, fixes for poor behavior in Date and String functions, and more. These\nissues are tracked in our new\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/projects/1#column-15173588",children:"project tracker"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"error-messages",children:"Error messages"}),"\n",(0,s.jsx)(n.p,{children:"All error messages have been renovated, attempting to make them more consistent\nand to reuse error message machinery. As a result, a majority of Dark error\nmessages have changed. If you were relying on the explicit format of a Dark\nlanguage or StdLib error message, expect that it will be different."}),"\n",(0,s.jsx)(n.p,{children:"If you do any error handling which relies specifically on the text of an error\nmessage coming from Dark, we recommend you no longer do that, and just use the\npresence of the error instead of the text."}),"\n",(0,s.jsx)(n.p,{children:"There are two places in Dark which use string error messages:"}),"\n",(0,s.jsxs)(n.h4,{id:"resulterrors",children:[(0,s.jsx)(n.code,{children:"Result.Error"}),"s"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Error"})," enum (referred to as ",(0,s.jsx)(n.code,{children:"Result.Error"})," below for clarity), will contain\na string error in most cases, which you might be using directly or indirectly."]}),"\n",(0,s.jsxs)(n.p,{children:["You might be accessing ",(0,s.jsx)(n.code,{children:"Result.Error"}),"s and their text contents directly using\nthe ",(0,s.jsx)(n.code,{children:"match"})," statement."]}),"\n",(0,s.jsxs)(n.p,{children:["You might also be accessing their text contents indirectly, using ",(0,s.jsx)(n.code,{children:"toString"}),", or\nother stringifying functions, such as ",(0,s.jsx)(n.code,{children:"toString"}),", ",(0,s.jsx)(n.code,{children:"JSON::"})," functions and\n",(0,s.jsx)(n.code,{children:"HTTPClient::"})," functions. This is only true if you taken the function returning\nthe ",(0,s.jsx)(n.code,{children:"Result.Error"})," off the error rail. This text may also make it to your\nweb/mobile clients or API consumers."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Result.Error"}),"s returned via a HTTP handler are not presented to the user, so\ntext cannot leak that way."]}),"\n",(0,s.jsx)(n.h4,{id:"runtime-errors",children:"Runtime errors"}),"\n",(0,s.jsx)(n.p,{children:"Runtime errors (including type errors) are not accessible via Dark programs, and\nwill always terminate the Dark program when they are accessed. As a result, the\ntext of any runtime error should not be accessible to your programs or your\nusers."}),"\n",(0,s.jsx)(n.h2,{id:"minor-improvements-and-fixes",children:"Minor improvements and fixes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Dark used to return the ",(0,s.jsx)(n.code,{children:"Access-Control-Allow-Origin"})," header in lower-case, it\nis now returned in mixed case."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When making a web request to your Dark application, if you did not specific a\n",(0,s.jsx)(n.code,{children:"user-agent"})," header, Dark used to add a ",(0,s.jsx)(n.code,{children:"user-agent"})," header of\n",(0,s.jsx)(n.code,{children:"ocaml-cohttp/1.2.0"}),". We no longer add this header."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When making a web request to your Dark application with a ",(0,s.jsx)(n.code,{children:"content-type"}),"\nheader of ",(0,s.jsx)(n.code,{children:"text/ping"}),", Dark used to ignore the code and immediately return a\nresponse of status code 418. It now processes the request instead."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"HttpClient::*"})," functions called with usernames and passwords in the URL can\nnow support arbitrary UTF-8 (in the past, Unicode was not supported.)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"X509::pemCertificatePublicKeys"})," used to only work for RSA keys. It now also\nsupports DSA and ECDSA keys. The old version would read ECDSA keys and return\nan incorrect answer - it now returns a correct answer."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"String::split"})," would fail if the 2nd argument was ",(0,s.jsx)(n.code,{children:'""'})," and the first argument\nwas a complex Unicode character, such as ",(0,s.jsx)(n.code,{children:'String::split "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f\u200d\ufe0f\ud83c\uddf5\ud83c\uddf7" ""'}),". This\nis now split correctly."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"String.trim"}),", ",(0,s.jsx)(n.code,{children:"String::trimEnd"})," and ",(0,s.jsx)(n.code,{children:"String::trimStart"})," worked incorrectly in\nsome Unicode situations, they now work correctly."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,s.jsx)(n.p,{children:"These breaking changes were documented and announced many months in advance of\nswitching over to the new version of Darklang. We also very careful deployed the\nnew code, watching for suspicious changes in any Dark programs that were\nrunning. In the rare case where something went awry, we contacted the users and\nworked with them to ensure a seamless transition."}),"\n",(0,s.jsx)(n.h3,{id:"string-casing",children:"String casing"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"String::toLowercase_v0"})," and ",(0,s.jsx)(n.code,{children:"String::toUppercase_v0"})," worked correctly in the\nold version of Dark, for all unicode. In the new version, the library we are\nusing does not correctly handle some case changes, instead keeping the\noriginal character. This happens when the replacement is a different length\nthan the character being replaced (for example, ",(0,s.jsx)(n.code,{children:'"\u0587"'})," should be ",(0,s.jsx)(n.code,{children:'"\u0535\u0552"'})," when\nconverted to upper case, which the old version did correctly and the new\nversion does not). We plan to fix this at a later point."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"string-ordering",children:"String ordering"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Functions whose output relies on the internal ordering of a ",(0,s.jsx)(n.code,{children:"Dict"})," may have\ndifferent outputs, specifically, the output Lists may be in a different order.\nExamples include ",(0,s.jsx)(n.code,{children:"Dict::keys"}),", ",(0,s.jsx)(n.code,{children:"Dict::values"}),", and ",(0,s.jsx)(n.code,{children:"Dict::toList"})," which return\n",(0,s.jsx)(n.code,{children:"List"}),"s of values which are ordered based on the internal ordering in the\noriginal ",(0,s.jsx)(n.code,{children:"Dict"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When calling ",(0,s.jsx)(n.code,{children:"List::uniqueBy"}),", and there is a duplicate, the new version of\nDark may pick a different value for the duplicate. For example:"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-dark",children:"List.uniqueBy_v0 [1;2;3;4] (fun x -> Int.divide_v0 x 2) = [ 1, 3, 4 ] // old Dark\nList.uniqueBy_v0 [1;2;3;4] (fun x -> Int.divide_v0 x 2) = [ 1, 2, 4 ] // new Dark\n"})}),"\n",(0,s.jsx)(n.h3,{id:"http-clients",children:"HTTP Clients"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"HttpClient::*"})," functions no longer support making requests with arbitrary\n",(0,s.jsx)(n.code,{children:"Content-Type"}),"s. They must now be\n",(0,s.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type",children:"valid"}),",\nfor example ",(0,s.jsx)(n.code,{children:'"application/json"'})," or ",(0,s.jsx)(n.code,{children:'"application/json; charset=utf-8"'}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"generating-json",children:"Generating JSON"}),"\n",(0,s.jsx)(n.p,{children:"We have changed how JSON is generated in many cases. All the JSON generated by\nDark is now standards compliant, and uses a different formatting style."}),"\n",(0,s.jsxs)(n.p,{children:["In the old version of Dark, we would generate invalid JSON for the Float values\n",(0,s.jsx)(n.code,{children:"NaN"}),", ",(0,s.jsx)(n.code,{children:"Infinity"})," and ",(0,s.jsx)(n.code,{children:"-Infinity"}),". The old version of Dark generates them as\nbare identifiers, while the new version puts them in a string (e.g. ",(0,s.jsx)(n.code,{children:"NaN"})," vs\n",(0,s.jsx)(n.code,{children:'"NaN"'}),")."]}),"\n",(0,s.jsx)(n.p,{children:"This may occur in any of the places in which we generate JSON, which are:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"when responding to a HTTP request in the HTTP framework"}),"\n",(0,s.jsxs)(n.li,{children:["when making a request with ",(0,s.jsx)(n.code,{children:"HttpClient"})," (any version)"]}),"\n",(0,s.jsxs)(n.li,{children:["when calling any of:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Dict::toJson_v0"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Object::toJson_v1"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Object::toJson_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Twilio::sendText_v1"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Twilio::sendText_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Note that the following ",(0,s.jsx)(n.code,{children:"JWT"})," functions do not use this new behavior, and should\nhave the exact same behavior as before, including:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JWT::signAndEncode_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"JWT::signAndEncode_v1"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JWT::signAndEncodeWithHeaders_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"JWT::signAndEncodeWithHeaders_v1"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"parsing-json",children:"Parsing JSON"}),"\n",(0,s.jsx)(n.p,{children:"When parsing JSON, we no longer accept the following invalid JSON:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["bare field names, such as in ",(0,s.jsx)(n.code,{children:"{ id : 5 }"}),". You need to quote field names:\n",(0,s.jsx)(n.code,{children:'{ "id": 5 }'})]}),"\n",(0,s.jsx)(n.li,{children:"newlines and invalid bytes in JSON strings"}),"\n",(0,s.jsxs)(n.li,{children:["the bare identifiers ",(0,s.jsx)(n.code,{children:"NaN"}),", ",(0,s.jsx)(n.code,{children:"Infinity"})," and ",(0,s.jsx)(n.code,{children:"-Infinity"})," are no longer parsed\ninto valid floats (note that the old version of Dark might have generated JSON\nwith these values in it)"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Dark now also allows parsing 64-bit integers (as opposed to 63-bit integers\nbefore)."}),"\n",(0,s.jsx)(n.p,{children:"Dark parses JSON:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"when receiving a HTTP request in the HTTP framework"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["when receiving a response to a request made with ",(0,s.jsx)(n.code,{children:"HttpClient"})," (any version)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"when calling any of:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"JSON::parse_v1"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JSON::parse_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JSON::read_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JSON::read_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Note that ",(0,s.jsx)(n.code,{children:"JWT::verifyAndExtract_v0"})," and ",(0,s.jsx)(n.code,{children:"JWT::verifyAndExtract_v1"})," are not\naffected by this change, as they have been kept deliberately compatible with the\nold versions."]}),"\n",(0,s.jsx)(n.h3,{id:"http-stack",children:"HTTP stack"}),"\n",(0,s.jsxs)(n.p,{children:["Dark has switched to using Kestrel, a high-performance HTTP server from .NET,\nfor its HTTP server. There are some differences between the new Kestrel-based\nserver and the previous OCaml ",(0,s.jsx)(n.code,{children:"cohttp"}),"-based server:"]}),"\n",(0,s.jsx)(n.p,{children:"Large differences:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Dark programs can no longer set the HTTP ",(0,s.jsx)(n.code,{children:"Content-Length"})," header and it will\nbe set automatically. A ",(0,s.jsx)(n.code,{children:"Content-Length"})," header will be ignored if provided\nvia ",(0,s.jsx)(n.code,{children:"Http::response"})," or similar functions."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Dark is now less lenient to receiving incorrect ",(0,s.jsx)(n.code,{children:"Content-Length"})," headers. If\nthe data sent does not match the expected ",(0,s.jsx)(n.code,{children:"Content-Length"}),", the HTTP server\nwill return a 400 Bad Request error. Omitting the ",(0,s.jsx)(n.code,{children:"Content-Length"})," header is\nstill OK."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"JSON returned from HTTP requests is now formatted differently, as discussed\nabove."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Minor differences:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["When making HTTP requests to Dark:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Clients must send at least 256 bytes every 5 seconds or be timed-out"}),"\n",(0,s.jsx)(n.li,{children:"All headers must be sent in first 10 seconds"}),"\n",(0,s.jsx)(n.li,{children:"There must be fewer than 100 headers and they must fit in 32KB"}),"\n",(0,s.jsx)(n.li,{children:"The maximum size of HTTP requests to Dark is 10MB"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["HTTP responses sent by Dark","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Headers will be returned in a different order"}),"\n",(0,s.jsx)(n.li,{children:"Headers are not always lowercase anymore"}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"Date"})," header is now always present"]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"Server"})," header is now ",(0,s.jsx)(n.code,{children:"darklang"})," and always present"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"testing-changes",children:"Testing changes"}),"\n",(0,s.jsx)(n.p,{children:"We have gone from about 250 backend tests to over 5,000. We now have custom test\nframeworks for:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/tree/main/backend/testfiles/execution",children:"language and standard library testing"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/tree/main/backend/testfiles/httphandler",children:"HTTP server testing"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/tree/main/backend/testfiles/httpclient",children:"Testing HTTP clients"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/darklang/stable-dark/tree/main/backend/tests/FuzzTests",children:"Fuzz testing"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://github.com/darklang/stable-dark/tree/main/integration-tests",children:"Integration tests"}),"\nwere ported to ",(0,s.jsx)(n.a,{href:"https://playwright.dev/",children:"Playwright"}),", from TestCafe. They now\nrun much faster and are somewhat easier to write."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"operational-changes",children:"Operational changes"}),"\n",(0,s.jsx)(n.p,{children:"Behind the scenes, Dark has greatly improved its operations."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Switched to massively more powerful servers (requests now get 2 CPUs of a\n",(0,s.jsx)(n.a,{href:"https://cloud.google.com/blog/products/compute/compute-engine-tau-t2d-vms-now-available-for-scale-out-workloads",children:"Google Cloud T2D"}),",\nvs 0.1 CPUs of a n1d -- T2Ds are about 2.3x more powerful than N1Ds)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Separated the servers used by the Darklang editor from the ones running\nproduction applications."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Massively increased use of ",(0,s.jsx)(n.a,{href:"https://honeycomb.io",children:"observability"})," and error\ntracking to catch errors and customer issues"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Moved queues from running in the database (often taking over 50% of the CPU,\nto relying on our cloud vendor (Google PubSub). Also greatly increased\nreliability of the queues."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Nodes are now autoscaled, leading to significant cost savings."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Updated to latest version of Kubernetes, ",(0,s.jsx)(n.code,{children:"cert-manager"})," (which powers our\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/how-to/custom-domains",children:"custom domains"})," feature),\nnginx, and other tools that we use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Added internal ",(0,s.jsx)(n.a,{href:"https://launchdarkly.com",children:"feature flagging"})," to give us more\ncontrol over how our infrastructure runs in production"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Significantly increased use of Kubernetes' security features, in particular\ninternal firewalls."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Standardized our production deployment process using a tool we wrote called\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/blob/8082df91676de2f26a0661bf20827a60976bb3c0/scripts/deployment/shipit",children:"shipit"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Removed nginx from our builtwithdark.com backends"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Move migrations out from startup code"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"All certs except darksa.com and darkstaticassets.com are now managed\nautomatically"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"documentation-changes",children:"Documentation changes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"moved docs to docs.darklang.com"}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/220",children:"refactored docs"})," to use the Divio\ndocumentation system, categorizing all docs into Tutorials, Reference,\nHow-tos, Walk-throughs and Discussion."]}),"\n",(0,s.jsx)(n.li,{children:"fixed all links"}),"\n",(0,s.jsxs)(n.li,{children:["redo the\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/discussion/error-handling",children:"Error Rail discussion"})]}),"\n",(0,s.jsxs)(n.li,{children:["add a discussion of\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/discussion/queues",children:"how the Queues work"})]}),"\n",(0,s.jsxs)(n.li,{children:["improved and expanded\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/keyboard-mapping",children:"keyboard shortcuts docs"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"contributing-changes",children:"Contributing changes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Added\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/blob/main/CODING-GUIDE.md",children:"coding guidelines"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Added significant documentation, especially READMEs and design decisions,\nthroughout the ",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark",children:"darklang repo"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Moved 99% of project collaboration to our\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark",children:"public GitHub"})," and\n",(0,s.jsx)(n.a,{href:"https://darklang.com/discord-invite",children:"public community chat"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["ported our\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/contributing/rescript-and-fsharp-for-dark-developers",children:"contributor guides"}),"\nto F#"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>o,a:()=>a});var s=r(67294);const i={},t=s.createContext(i);function a(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1a9698d7.66a63dab.js b/assets/js/1a9698d7.66a63dab.js new file mode 100644 index 00000000..ba750233 --- /dev/null +++ b/assets/js/1a9698d7.66a63dab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[410],{43948:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>d,toc:()=>l});var s=r(85893),i=r(11151);const t={},a="Darklang Release 2",d={id:"changelog/release-2",title:"Darklang Release 2",description:"June 6th, 2022",source:"@site/docs-classic/changelog/release-2.md",sourceDirName:"changelog",slug:"/changelog/release-2",permalink:"/changelog/release-2",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-2.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 3 - June, 2022",permalink:"/changelog/release-3"},next:{title:"Release 1",permalink:"/changelog/release-1"}},o={},l=[{value:"Major changes",id:"major-changes",level:2},{value:"Error messages",id:"error-messages",level:3},{value:"Result.Errors",id:"resulterrors",level:4},{value:"Runtime errors",id:"runtime-errors",level:4},{value:"Minor improvements and fixes",id:"minor-improvements-and-fixes",level:2},{value:"Breaking changes",id:"breaking-changes",level:2},{value:"String casing",id:"string-casing",level:3},{value:"String ordering",id:"string-ordering",level:3},{value:"HTTP Clients",id:"http-clients",level:3},{value:"Generating JSON",id:"generating-json",level:3},{value:"Parsing JSON",id:"parsing-json",level:3},{value:"HTTP stack",id:"http-stack",level:3},{value:"Testing changes",id:"testing-changes",level:2},{value:"Operational changes",id:"operational-changes",level:2},{value:"Documentation changes",id:"documentation-changes",level:2},{value:"Contributing changes",id:"contributing-changes",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"darklang-release-2",children:"Darklang Release 2"})}),"\n",(0,s.jsx)(n.p,{children:"June 6th, 2022"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.em,{children:["See the ",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-release-3/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,s.jsxs)(n.p,{children:["Darklang Release 2 is the culmination of 20 months work of rewriting the backend\nfrom OCaml to F#. This was done to give us more productivity by allowing us use\nmore 3rd party SDKs, to solve operational issues, and to make it easier to\ncontribute. Our reasons for making the change were discussed at the time:\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/new-backend-fsharp/",children:"1"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/why-dark-didnt-choose-rust/",children:"2"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/leaving-ocaml/",children:"3"}),"."]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The editor backend was fully migrated by April 2nd."}),"\n",(0,s.jsx)(n.li,{children:"HTTP backends (for builtwithdark.com) were finished converting on May 3rd."}),"\n",(0,s.jsx)(n.li,{children:"The migration to the new queues was fully converted on May 27th."}),"\n",(0,s.jsx)(n.li,{children:"The execution engine in the editor was switched over on June 5th."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The change was documented in a series of blog posts:\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/hows-the-dark-rewrite-going/",children:"1"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/changes-the-the-dark-rewrite/",children:"2"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/optimizing-tasks-in-fsharp/",children:"3"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/benchmarking-fsharp6-tasks/",children:"4"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-year-in-review-2021/",children:"5"}),",\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/try-out-the-new-darklang-backend/",children:"6"}),", and\n",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/backend-rewrite-complete/",children:"7"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Thanks to everyone who contributed, including\n",(0,s.jsx)(n.a,{href:"https://github.com/Athinanarof",children:"Araceli S\xe1nchez"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/levlaz",children:"Lev Lazinskiy"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/mariajdab",children:"Mar\xeda Jos\xe9 D\xe1vila"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/mjeffryes",children:"Matthew Jeffryes"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/jwalter",children:"jwalter"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/danicampagna",children:"Daniela Campagna"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/sxmanton",children:"Sean Manton"}),", and especially\n",(0,s.jsx)(n.a,{href:"https://github.com/stachudotnet",children:"Stachu Korick"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"major-changes",children:"Major changes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Darklang's implementation is now asynchronous, meaning that your programs will\nno longer be stuck behind other users' programs making HTTP or DB calls. This\nwas a major source of slow Dark programs experienced by most users."}),"\n",(0,s.jsx)(n.p,{children:"As well as massively reducing latency for programs written in Dark, the editor\nnow loads much faster."}),"\n",(0,s.jsx)(n.p,{children:"We have also switched from dozens of tiny machines to a smaller number of much\nmore powerful machines. This makes your programs run faster on average, even\nwhen accounting for the switch to an asynchronous implementation."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"You can now put a lambda in a variable and pipe into it."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Most error messages are improved, especially for bad input."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"The queues have been rewritten and should not longer suffer from the old\nsources of occasional downtime and slow-down."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"During a deploy of the Dark service, cron jobs no longer run the risk of\nrunning twice."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["There is now a ",(0,s.jsx)(n.a,{href:"https://status.darklang.com",children:"Status page"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Dark's internal firewalls have been significantly improved"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Several bottlenecks to outbound HTTP requests have been identified and removed"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"String::length"})," is now ",(0,s.jsx)(n.code,{children:"O(1)"})," instead of ",(0,s.jsx)(n.code,{children:"O(N)"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"JSON output is now significantly faster"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"When reading strings from a user, the string is only passed over once."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Traces are now stored in the background, after a request has completed,\ngreatly reducing response time on HTTP requests to Dark programs."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Dark has moved to more powerful cloud machines, going from Google' Cloud's\ndeprecated N1 machines to extremely powerful T2D machines (2.3x faster)"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["The rewrite also addressed some underlying issues that will come out in new\nfeatures soon, including a better type system, support for characters and\ntuples, fixes for poor behavior in Date and String functions, and more. These\nissues are tracked in our new\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/projects/1#column-15173588",children:"project tracker"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"error-messages",children:"Error messages"}),"\n",(0,s.jsx)(n.p,{children:"All error messages have been renovated, attempting to make them more consistent\nand to reuse error message machinery. As a result, a majority of Dark error\nmessages have changed. If you were relying on the explicit format of a Dark\nlanguage or StdLib error message, expect that it will be different."}),"\n",(0,s.jsx)(n.p,{children:"If you do any error handling which relies specifically on the text of an error\nmessage coming from Dark, we recommend you no longer do that, and just use the\npresence of the error instead of the text."}),"\n",(0,s.jsx)(n.p,{children:"There are two places in Dark which use string error messages:"}),"\n",(0,s.jsxs)(n.h4,{id:"resulterrors",children:[(0,s.jsx)(n.code,{children:"Result.Error"}),"s"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"Error"})," enum (referred to as ",(0,s.jsx)(n.code,{children:"Result.Error"})," below for clarity), will contain\na string error in most cases, which you might be using directly or indirectly."]}),"\n",(0,s.jsxs)(n.p,{children:["You might be accessing ",(0,s.jsx)(n.code,{children:"Result.Error"}),"s and their text contents directly using\nthe ",(0,s.jsx)(n.code,{children:"match"})," statement."]}),"\n",(0,s.jsxs)(n.p,{children:["You might also be accessing their text contents indirectly, using ",(0,s.jsx)(n.code,{children:"toString"}),", or\nother stringifying functions, such as ",(0,s.jsx)(n.code,{children:"toString"}),", ",(0,s.jsx)(n.code,{children:"JSON::"})," functions and\n",(0,s.jsx)(n.code,{children:"HTTPClient::"})," functions. This is only true if you taken the function returning\nthe ",(0,s.jsx)(n.code,{children:"Result.Error"})," off the error rail. This text may also make it to your\nweb/mobile clients or API consumers."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"Result.Error"}),"s returned via a HTTP handler are not presented to the user, so\ntext cannot leak that way."]}),"\n",(0,s.jsx)(n.h4,{id:"runtime-errors",children:"Runtime errors"}),"\n",(0,s.jsx)(n.p,{children:"Runtime errors (including type errors) are not accessible via Dark programs, and\nwill always terminate the Dark program when they are accessed. As a result, the\ntext of any runtime error should not be accessible to your programs or your\nusers."}),"\n",(0,s.jsx)(n.h2,{id:"minor-improvements-and-fixes",children:"Minor improvements and fixes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Dark used to return the ",(0,s.jsx)(n.code,{children:"Access-Control-Allow-Origin"})," header in lower-case, it\nis now returned in mixed case."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When making a web request to your Dark application, if you did not specific a\n",(0,s.jsx)(n.code,{children:"user-agent"})," header, Dark used to add a ",(0,s.jsx)(n.code,{children:"user-agent"})," header of\n",(0,s.jsx)(n.code,{children:"ocaml-cohttp/1.2.0"}),". We no longer add this header."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When making a web request to your Dark application with a ",(0,s.jsx)(n.code,{children:"content-type"}),"\nheader of ",(0,s.jsx)(n.code,{children:"text/ping"}),", Dark used to ignore the code and immediately return a\nresponse of status code 418. It now processes the request instead."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"HttpClient::*"})," functions called with usernames and passwords in the URL can\nnow support arbitrary UTF-8 (in the past, Unicode was not supported.)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"X509::pemCertificatePublicKeys"})," used to only work for RSA keys. It now also\nsupports DSA and ECDSA keys. The old version would read ECDSA keys and return\nan incorrect answer - it now returns a correct answer."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"String::split"})," would fail if the 2nd argument was ",(0,s.jsx)(n.code,{children:'""'})," and the first argument\nwas a complex Unicode character, such as ",(0,s.jsx)(n.code,{children:'String::split "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f\u200d\ufe0f\ud83c\uddf5\ud83c\uddf7" ""'}),". This\nis now split correctly."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"String.trim"}),", ",(0,s.jsx)(n.code,{children:"String::trimEnd"})," and ",(0,s.jsx)(n.code,{children:"String::trimStart"})," worked incorrectly in\nsome Unicode situations, they now work correctly."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"breaking-changes",children:"Breaking changes"}),"\n",(0,s.jsx)(n.p,{children:"These breaking changes were documented and announced many months in advance of\nswitching over to the new version of Darklang. We also very careful deployed the\nnew code, watching for suspicious changes in any Dark programs that were\nrunning. In the rare case where something went awry, we contacted the users and\nworked with them to ensure a seamless transition."}),"\n",(0,s.jsx)(n.h3,{id:"string-casing",children:"String casing"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"String::toLowercase_v0"})," and ",(0,s.jsx)(n.code,{children:"String::toUppercase_v0"})," worked correctly in the\nold version of Dark, for all unicode. In the new version, the library we are\nusing does not correctly handle some case changes, instead keeping the\noriginal character. This happens when the replacement is a different length\nthan the character being replaced (for example, ",(0,s.jsx)(n.code,{children:'"\u0587"'})," should be ",(0,s.jsx)(n.code,{children:'"\u0535\u0552"'})," when\nconverted to upper case, which the old version did correctly and the new\nversion does not). We plan to fix this at a later point."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"string-ordering",children:"String ordering"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Functions whose output relies on the internal ordering of a ",(0,s.jsx)(n.code,{children:"Dict"})," may have\ndifferent outputs, specifically, the output Lists may be in a different order.\nExamples include ",(0,s.jsx)(n.code,{children:"Dict::keys"}),", ",(0,s.jsx)(n.code,{children:"Dict::values"}),", and ",(0,s.jsx)(n.code,{children:"Dict::toList"})," which return\n",(0,s.jsx)(n.code,{children:"List"}),"s of values which are ordered based on the internal ordering in the\noriginal ",(0,s.jsx)(n.code,{children:"Dict"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["When calling ",(0,s.jsx)(n.code,{children:"List::uniqueBy"}),", and there is a duplicate, the new version of\nDark may pick a different value for the duplicate. For example:"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-dark",children:"List.uniqueBy_v0 [1;2;3;4] (fun x -> Int.divide_v0 x 2) = [ 1, 3, 4 ] // old Dark\nList.uniqueBy_v0 [1;2;3;4] (fun x -> Int.divide_v0 x 2) = [ 1, 2, 4 ] // new Dark\n"})}),"\n",(0,s.jsx)(n.h3,{id:"http-clients",children:"HTTP Clients"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"HttpClient::*"})," functions no longer support making requests with arbitrary\n",(0,s.jsx)(n.code,{children:"Content-Type"}),"s. They must now be\n",(0,s.jsx)(n.a,{href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type",children:"valid"}),",\nfor example ",(0,s.jsx)(n.code,{children:'"application/json"'})," or ",(0,s.jsx)(n.code,{children:'"application/json; charset=utf-8"'}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"generating-json",children:"Generating JSON"}),"\n",(0,s.jsx)(n.p,{children:"We have changed how JSON is generated in many cases. All the JSON generated by\nDark is now standards compliant, and uses a different formatting style."}),"\n",(0,s.jsxs)(n.p,{children:["In the old version of Dark, we would generate invalid JSON for the Float values\n",(0,s.jsx)(n.code,{children:"NaN"}),", ",(0,s.jsx)(n.code,{children:"Infinity"})," and ",(0,s.jsx)(n.code,{children:"-Infinity"}),". The old version of Dark generates them as\nbare identifiers, while the new version puts them in a string (e.g. ",(0,s.jsx)(n.code,{children:"NaN"})," vs\n",(0,s.jsx)(n.code,{children:'"NaN"'}),")."]}),"\n",(0,s.jsx)(n.p,{children:"This may occur in any of the places in which we generate JSON, which are:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"when responding to a HTTP request in the HTTP framework"}),"\n",(0,s.jsxs)(n.li,{children:["when making a request with ",(0,s.jsx)(n.code,{children:"HttpClient"})," (any version)"]}),"\n",(0,s.jsxs)(n.li,{children:["when calling any of:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Dict::toJson_v0"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Object::toJson_v1"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Object::toJson_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Twilio::sendText_v1"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Twilio::sendText_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Note that the following ",(0,s.jsx)(n.code,{children:"JWT"})," functions do not use this new behavior, and should\nhave the exact same behavior as before, including:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JWT::signAndEncode_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"JWT::signAndEncode_v1"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JWT::signAndEncodeWithHeaders_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"JWT::signAndEncodeWithHeaders_v1"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"parsing-json",children:"Parsing JSON"}),"\n",(0,s.jsx)(n.p,{children:"When parsing JSON, we no longer accept the following invalid JSON:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["bare field names, such as in ",(0,s.jsx)(n.code,{children:"{ id : 5 }"}),". You need to quote field names:\n",(0,s.jsx)(n.code,{children:'{ "id": 5 }'})]}),"\n",(0,s.jsx)(n.li,{children:"newlines and invalid bytes in JSON strings"}),"\n",(0,s.jsxs)(n.li,{children:["the bare identifiers ",(0,s.jsx)(n.code,{children:"NaN"}),", ",(0,s.jsx)(n.code,{children:"Infinity"})," and ",(0,s.jsx)(n.code,{children:"-Infinity"})," are no longer parsed\ninto valid floats (note that the old version of Dark might have generated JSON\nwith these values in it)"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Dark now also allows parsing 64-bit integers (as opposed to 63-bit integers\nbefore)."}),"\n",(0,s.jsx)(n.p,{children:"Dark parses JSON:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"when receiving a HTTP request in the HTTP framework"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["when receiving a response to a request made with ",(0,s.jsx)(n.code,{children:"HttpClient"})," (any version)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"when calling any of:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"JSON::parse_v1"})}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JSON::parse_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JSON::read_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"JSON::read_v0"})," (",(0,s.jsx)(n.em,{children:"deprecated"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Note that ",(0,s.jsx)(n.code,{children:"JWT::verifyAndExtract_v0"})," and ",(0,s.jsx)(n.code,{children:"JWT::verifyAndExtract_v1"})," are not\naffected by this change, as they have been kept deliberately compatible with the\nold versions."]}),"\n",(0,s.jsx)(n.h3,{id:"http-stack",children:"HTTP stack"}),"\n",(0,s.jsxs)(n.p,{children:["Dark has switched to using Kestrel, a high-performance HTTP server from .NET,\nfor its HTTP server. There are some differences between the new Kestrel-based\nserver and the previous OCaml ",(0,s.jsx)(n.code,{children:"cohttp"}),"-based server:"]}),"\n",(0,s.jsx)(n.p,{children:"Large differences:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Dark programs can no longer set the HTTP ",(0,s.jsx)(n.code,{children:"Content-Length"})," header and it will\nbe set automatically. A ",(0,s.jsx)(n.code,{children:"Content-Length"})," header will be ignored if provided\nvia ",(0,s.jsx)(n.code,{children:"Http::response"})," or similar functions."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Dark is now less lenient to receiving incorrect ",(0,s.jsx)(n.code,{children:"Content-Length"})," headers. If\nthe data sent does not match the expected ",(0,s.jsx)(n.code,{children:"Content-Length"}),", the HTTP server\nwill return a 400 Bad Request error. Omitting the ",(0,s.jsx)(n.code,{children:"Content-Length"})," header is\nstill OK."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"JSON returned from HTTP requests is now formatted differently, as discussed\nabove."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Minor differences:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["When making HTTP requests to Dark:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Clients must send at least 256 bytes every 5 seconds or be timed-out"}),"\n",(0,s.jsx)(n.li,{children:"All headers must be sent in first 10 seconds"}),"\n",(0,s.jsx)(n.li,{children:"There must be fewer than 100 headers and they must fit in 32KB"}),"\n",(0,s.jsx)(n.li,{children:"The maximum size of HTTP requests to Dark is 10MB"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["HTTP responses sent by Dark","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Headers will be returned in a different order"}),"\n",(0,s.jsx)(n.li,{children:"Headers are not always lowercase anymore"}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"Date"})," header is now always present"]}),"\n",(0,s.jsxs)(n.li,{children:["The ",(0,s.jsx)(n.code,{children:"Server"})," header is now ",(0,s.jsx)(n.code,{children:"darklang"})," and always present"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"testing-changes",children:"Testing changes"}),"\n",(0,s.jsx)(n.p,{children:"We have gone from about 250 backend tests to over 5,000. We now have custom test\nframeworks for:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/tree/main/backend/testfiles/execution",children:"language and standard library testing"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/tree/main/backend/testfiles/httphandler",children:"HTTP server testing"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/tree/main/backend/testfiles/httpclient",children:"Testing HTTP clients"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/darklang/stable-dark/tree/main/backend/tests/FuzzTests",children:"Fuzz testing"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://github.com/darklang/stable-dark/tree/main/integration-tests",children:"Integration tests"}),"\nwere ported to ",(0,s.jsx)(n.a,{href:"https://playwright.dev/",children:"Playwright"}),", from TestCafe. They now\nrun much faster and are somewhat easier to write."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"operational-changes",children:"Operational changes"}),"\n",(0,s.jsx)(n.p,{children:"Behind the scenes, Dark has greatly improved its operations."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Switched to massively more powerful servers (requests now get 2 CPUs of a\n",(0,s.jsx)(n.a,{href:"https://cloud.google.com/blog/products/compute/compute-engine-tau-t2d-vms-now-available-for-scale-out-workloads",children:"Google Cloud T2D"}),",\nvs 0.1 CPUs of a n1d -- T2Ds are about 2.3x more powerful than N1Ds)"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Separated the servers used by the Darklang editor from the ones running\nproduction applications."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Massively increased use of ",(0,s.jsx)(n.a,{href:"https://honeycomb.io",children:"observability"})," and error\ntracking to catch errors and customer issues"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Moved queues from running in the database (often taking over 50% of the CPU,\nto relying on our cloud vendor (Google PubSub). Also greatly increased\nreliability of the queues."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Nodes are now autoscaled, leading to significant cost savings."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Updated to latest version of Kubernetes, ",(0,s.jsx)(n.code,{children:"cert-manager"})," (which powers our\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/how-to/custom-domains",children:"custom domains"})," feature),\nnginx, and other tools that we use."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Added internal ",(0,s.jsx)(n.a,{href:"https://launchdarkly.com",children:"feature flagging"})," to give us more\ncontrol over how our infrastructure runs in production"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Significantly increased use of Kubernetes' security features, in particular\ninternal firewalls."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Standardized our production deployment process using a tool we wrote called\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/blob/8082df91676de2f26a0661bf20827a60976bb3c0/scripts/deployment/shipit",children:"shipit"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Removed nginx from our builtwithdark.com backends"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Move migrations out from startup code"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"All certs except darksa.com and darkstaticassets.com are now managed\nautomatically"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"documentation-changes",children:"Documentation changes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"moved docs to docs.darklang.com"}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/220",children:"refactored docs"})," to use the Divio\ndocumentation system, categorizing all docs into Tutorials, Reference,\nHow-tos, Walk-throughs and Discussion."]}),"\n",(0,s.jsx)(n.li,{children:"fixed all links"}),"\n",(0,s.jsxs)(n.li,{children:["redo the\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/discussion/error-handling",children:"Error Rail discussion"})]}),"\n",(0,s.jsxs)(n.li,{children:["add a discussion of\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/discussion/queues",children:"how the Queues work"})]}),"\n",(0,s.jsxs)(n.li,{children:["improved and expanded\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/keyboard-mapping",children:"keyboard shortcuts docs"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"contributing-changes",children:"Contributing changes"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Added\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/blob/main/CODING-GUIDE.md",children:"coding guidelines"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Added significant documentation, especially READMEs and design decisions,\nthroughout the ",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark",children:"darklang repo"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Moved 99% of project collaboration to our\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark",children:"public GitHub"})," and\n",(0,s.jsx)(n.a,{href:"https://darklang.com/discord-invite",children:"public community chat"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["ported our\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/contributing/rescript-and-fsharp-for-dark-developers",children:"contributor guides"}),"\nto F#"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>d,a:()=>a});var s=r(67294);const i={},t=s.createContext(i);function a(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/277ac59f.c06ad6fc.js b/assets/js/277ac59f.c06ad6fc.js deleted file mode 100644 index 4eca2bca..00000000 --- a/assets/js/277ac59f.c06ad6fc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[741],{76569:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var r=n(85893),t=n(11151);const a={},i="HTTP Framework",o={id:"reference/framework/http-framework",title:"HTTP Framework",description:"HTTP requests to a Darklang application are automatically routed to handlers in",source:"@site/docs-classic/reference/framework/http-framework.md",sourceDirName:"reference/framework",slug:"/reference/framework/http-framework",permalink:"/reference/framework/http-framework",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/framework/http-framework.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"HTTP Client",permalink:"/reference/httpclient"},next:{title:"Datastores",permalink:"/reference/framework/datastores"}},c={},d=[{value:"Routing",id:"routing",level:2},{value:"Request variables",id:"request-variables",level:2},{value:"Dynamic routes",id:"dynamic-routes",level:3},{value:"Traces",id:"traces",level:2},{value:"Responses",id:"responses",level:2}];function l(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"http-framework",children:"HTTP Framework"}),"\n",(0,r.jsx)(s.p,{children:"HTTP requests to a Darklang application are automatically routed to handlers in\nyour canvas."}),"\n",(0,r.jsx)(s.h2,{id:"routing",children:"Routing"}),"\n",(0,r.jsxs)(s.p,{children:["If your canvas is ",(0,r.jsx)(s.code,{children:"myusername-app1"}),", then requests to\n",(0,r.jsx)(s.code,{children:"https://myusername-app1.builtwithdark.com"}),", with any path, will go to your\ncanvas."]}),"\n",(0,r.jsxs)(s.p,{children:["Each handler has a HTTP method (such as ",(0,r.jsx)(s.code,{children:"GET"}),", ",(0,r.jsx)(s.code,{children:"POST"}),", etc) - anything is\nallowed here since HTTP allows any method, and the autocomplete will provide the\nmost common as options."]}),"\n",(0,r.jsxs)(s.p,{children:["Each handler has a route, such as ",(0,r.jsx)(s.code,{children:"/users/paul"}),"."]}),"\n",(0,r.jsx)(s.p,{children:"If a request's path does not match any handler's route, Darklang will respond\nwith a 404. A trace for this request is stored and shown in the 404 list in the\nsidebar, which can be turned into a handler."}),"\n",(0,r.jsxs)(s.p,{children:["Requests starting in ",(0,r.jsx)(s.code,{children:"http://"})," will result in a 302 redirect to the ",(0,r.jsx)(s.code,{children:"https://"}),"\nequivalent."]}),"\n",(0,r.jsxs)(s.p,{children:["We have a built-in favicon to respond to ",(0,r.jsx)(s.code,{children:"favicon.ico"})," requests - however you\ncan override this with your own."]}),"\n",(0,r.jsx)(s.h2,{id:"request-variables",children:"Request variables"}),"\n",(0,r.jsxs)(s.p,{children:["The contents of the request will be available in your handler as the variable\n",(0,r.jsx)(s.code,{children:"request"}),". It has the following fields:"]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"formBody"}),": the body, parsed as using form-encoding. If it cannot be parsed,\nthis will be ",(0,r.jsx)(s.code,{children:"null"})]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"jsonBody"}),": the body, parsed as JSON. If it cannot be parsed, this will be\n",(0,r.jsx)(s.code,{children:"null"})]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"body"}),": the contents of either ",(0,r.jsx)(s.code,{children:"jsonBody"})," or ",(0,r.jsx)(s.code,{children:"formBody"}),", or null if neither\nare set"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"headers"}),": a dictionary of all the headers."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"cookies"}),": a dictionary of the cookies"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"queryParam"}),": a dictionary of the parameters in the query string (e.g.\n",(0,r.jsx)(s.code,{children:"/?a=b"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"url"}),": the full URL of the request"]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["The request's IP address can usually be found in\n",(0,r.jsx)(s.code,{children:"request.headers.x-forwarded-for"}),". This is a string with multiple IP addresses,\nseparated by commas, representing the steps taken by the request as it moved\nthrough the internet. Usually, the first IP address is the one that made the\nrequest (e.g. that's your user)."]}),"\n",(0,r.jsx)(s.p,{children:"Other variables will be available from dynamic routing."}),"\n",(0,r.jsx)(s.h3,{id:"dynamic-routes",children:"Dynamic routes"}),"\n",(0,r.jsxs)(s.p,{children:["Darklang support dynamic routing, by using a variable such as ",(0,r.jsx)(s.code,{children:":somevar"})," in a\nhandler's route. For example, handler with ",(0,r.jsx)(s.code,{children:"/users/:username"})," will receive any\nrequest starting in ",(0,r.jsx)(s.code,{children:"/users/"})," that has another character, such as ",(0,r.jsx)(s.code,{children:"/users/paul"}),"\n(that is, ",(0,r.jsx)(s.code,{children:"/users/"})," and ",(0,r.jsx)(s.code,{children:"/users"})," will not be matched). A variable with that name\nwill be in scope - in this example ",(0,r.jsx)(s.code,{children:"username"})," will be available to use in the\nhandler."]}),"\n",(0,r.jsxs)(s.p,{children:["Incoming paths are segmented at each ",(0,r.jsx)(s.code,{children:"/"}),", and different variables can match each\nsegment. For example, the route ",(0,r.jsx)(s.code,{children:"/:users/:username"})," would match ",(0,r.jsx)(s.code,{children:"/users/paul/"}),"\nand ",(0,r.jsx)(s.code,{children:"/users/:username/projects/:id"})," would match ",(0,r.jsx)(s.code,{children:"/users/paul/projects/1"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["It is possible that a single path would match multiple handlers. In this case,\nthe most specific match will be used. For example, with the handlers\n",(0,r.jsx)(s.code,{children:"/users/paul/projects/1"})," would match against ",(0,r.jsx)(s.code,{children:"/users/:username/projects/:id"})," as\nthat is more specific than ",(0,r.jsx)(s.code,{children:"/users/:username"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["However, if ",(0,r.jsx)(s.code,{children:"/users/:username/projects/:id"})," were not present, it would match\nagainst ",(0,r.jsx)(s.code,{children:"/users/:username"})," (in this case, the variable ",(0,r.jsx)(s.code,{children:"username"})," would have the\nvalue ",(0,r.jsx)(s.code,{children:"paul/projects/1"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["Often, you'll want to do client-side routing in a JS app. In this case you would\nset two HTTP GET handlers, with the routes ",(0,r.jsx)(s.code,{children:"/"})," and ",(0,r.jsx)(s.code,{children:"/:rest"}),", and use them to\nrespond with your JS assets (see ",(0,r.jsx)(s.a,{href:"/how-to/static-assets",children:"Static Assets"}),"). You\ncan then add specific routes like ",(0,r.jsx)(s.code,{children:"/changelog"})," or ",(0,r.jsx)(s.code,{children:"/sitemap.xml"})," which will\noverride the less specific routes. For APIs, you could add routes like\n",(0,r.jsx)(s.code,{children:"/api/v1/users/:username"}),", which are more specific. For an API fallback, add\n",(0,r.jsx)(s.code,{children:"/api/:rest"})," to return a 404 instead of responding with the JS assets."]}),"\n",(0,r.jsx)(s.h2,{id:"traces",children:"Traces"}),"\n",(0,r.jsx)(s.p,{children:"All requests are stored as traces. Traces are automatically deleted once they\nare a week old, except the last 10 for each handler."}),"\n",(0,r.jsx)(s.h2,{id:"responses",children:"Responses"}),"\n",(0,r.jsxs)(s.p,{children:["The result of HTTP handlers are automatically converted into HTTP responses. By\ndefault, they are converted to JSON, and returned with a content-type based on\ntheir type: records, dictionaries and lists are given the content-type\n",(0,r.jsx)(s.code,{children:'"application/json; charset=utf-8"'}),", all other types are given the content-type\n",(0,r.jsx)(s.code,{children:'"text/plain; charset=utf-8"'}),"."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.em,{children:"We recognize this is a poor choice, and future versions of the HTTP stack will\nhave better default behavior."})}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"HTTP::"})," module provides functions to create responses to external HTTP\ncalls. Each response function, such as ",(0,r.jsx)(s.code,{children:"Http::response"}),", creates a response\nvalue; a response value returned by the handler will be sent as a response to\nthe client."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"HTTPResponseWith",src:n(39741).Z+"",width:"836",height:"292"})}),"\n",(0,r.jsx)(s.p,{children:"The live value beneath the handler will show the return value."}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"HTTPForbidden",src:n(94759).Z+"",width:"792",height:"342"})}),"\n",(0,r.jsxs)(s.p,{children:["To set cookies, you can use ",(0,r.jsx)(s.code,{children:"HTTP::setCookie"})," to create a suitable HTTP header.\n",(0,r.jsx)(s.img,{alt:"HTTPRespondWithHeaderSetCookie",src:n(14669).Z+"",width:"1158",height:"302"})]})]})}function h(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},39741:(e,s,n)=>{n.d(s,{Z:()=>r});const r=n.p+"assets/images/respondwith-bbcacc55e8fb6c9da4444164b96c980a.png"},94759:(e,s,n)=>{n.d(s,{Z:()=>r});const r=n.p+"assets/images/response-81c92fe6d3389bbcbcf3cc7f4076c380.png"},14669:(e,s,n)=>{n.d(s,{Z:()=>r});const r=n.p+"assets/images/setcookie-a2d9f016d4b1a0ff5a1fbb303a0ef6e9.png"},11151:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>i});var r=n(67294);const t={},a=r.createContext(t);function i(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/277ac59f.d7bebe24.js b/assets/js/277ac59f.d7bebe24.js new file mode 100644 index 00000000..b6c47e33 --- /dev/null +++ b/assets/js/277ac59f.d7bebe24.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[741],{76569:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>d});var r=n(85893),t=n(11151);const a={},i="HTTP Framework",o={id:"reference/framework/http-framework",title:"HTTP Framework",description:"HTTP requests to a Darklang application are automatically routed to handlers in",source:"@site/docs-classic/reference/framework/http-framework.md",sourceDirName:"reference/framework",slug:"/reference/framework/http-framework",permalink:"/reference/framework/http-framework",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/framework/http-framework.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"HTTP Client",permalink:"/reference/httpclient"},next:{title:"Datastores",permalink:"/reference/framework/datastores"}},c={},d=[{value:"Routing",id:"routing",level:2},{value:"Request variables",id:"request-variables",level:2},{value:"Dynamic routes",id:"dynamic-routes",level:3},{value:"Traces",id:"traces",level:2},{value:"Responses",id:"responses",level:2}];function l(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"http-framework",children:"HTTP Framework"})}),"\n",(0,r.jsx)(s.p,{children:"HTTP requests to a Darklang application are automatically routed to handlers in\nyour canvas."}),"\n",(0,r.jsx)(s.h2,{id:"routing",children:"Routing"}),"\n",(0,r.jsxs)(s.p,{children:["If your canvas is ",(0,r.jsx)(s.code,{children:"myusername-app1"}),", then requests to\n",(0,r.jsx)(s.code,{children:"https://myusername-app1.builtwithdark.com"}),", with any path, will go to your\ncanvas."]}),"\n",(0,r.jsxs)(s.p,{children:["Each handler has a HTTP method (such as ",(0,r.jsx)(s.code,{children:"GET"}),", ",(0,r.jsx)(s.code,{children:"POST"}),", etc) - anything is\nallowed here since HTTP allows any method, and the autocomplete will provide the\nmost common as options."]}),"\n",(0,r.jsxs)(s.p,{children:["Each handler has a route, such as ",(0,r.jsx)(s.code,{children:"/users/paul"}),"."]}),"\n",(0,r.jsx)(s.p,{children:"If a request's path does not match any handler's route, Darklang will respond\nwith a 404. A trace for this request is stored and shown in the 404 list in the\nsidebar, which can be turned into a handler."}),"\n",(0,r.jsxs)(s.p,{children:["Requests starting in ",(0,r.jsx)(s.code,{children:"http://"})," will result in a 302 redirect to the ",(0,r.jsx)(s.code,{children:"https://"}),"\nequivalent."]}),"\n",(0,r.jsxs)(s.p,{children:["We have a built-in favicon to respond to ",(0,r.jsx)(s.code,{children:"favicon.ico"})," requests - however you\ncan override this with your own."]}),"\n",(0,r.jsx)(s.h2,{id:"request-variables",children:"Request variables"}),"\n",(0,r.jsxs)(s.p,{children:["The contents of the request will be available in your handler as the variable\n",(0,r.jsx)(s.code,{children:"request"}),". It has the following fields:"]}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"formBody"}),": the body, parsed as using form-encoding. If it cannot be parsed,\nthis will be ",(0,r.jsx)(s.code,{children:"null"})]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"jsonBody"}),": the body, parsed as JSON. If it cannot be parsed, this will be\n",(0,r.jsx)(s.code,{children:"null"})]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"body"}),": the contents of either ",(0,r.jsx)(s.code,{children:"jsonBody"})," or ",(0,r.jsx)(s.code,{children:"formBody"}),", or null if neither\nare set"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"headers"}),": a dictionary of all the headers."]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"cookies"}),": a dictionary of the cookies"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"queryParam"}),": a dictionary of the parameters in the query string (e.g.\n",(0,r.jsx)(s.code,{children:"/?a=b"}),")"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.code,{children:"url"}),": the full URL of the request"]}),"\n"]}),"\n",(0,r.jsxs)(s.p,{children:["The request's IP address can usually be found in\n",(0,r.jsx)(s.code,{children:"request.headers.x-forwarded-for"}),". This is a string with multiple IP addresses,\nseparated by commas, representing the steps taken by the request as it moved\nthrough the internet. Usually, the first IP address is the one that made the\nrequest (e.g. that's your user)."]}),"\n",(0,r.jsx)(s.p,{children:"Other variables will be available from dynamic routing."}),"\n",(0,r.jsx)(s.h3,{id:"dynamic-routes",children:"Dynamic routes"}),"\n",(0,r.jsxs)(s.p,{children:["Darklang support dynamic routing, by using a variable such as ",(0,r.jsx)(s.code,{children:":somevar"})," in a\nhandler's route. For example, handler with ",(0,r.jsx)(s.code,{children:"/users/:username"})," will receive any\nrequest starting in ",(0,r.jsx)(s.code,{children:"/users/"})," that has another character, such as ",(0,r.jsx)(s.code,{children:"/users/paul"}),"\n(that is, ",(0,r.jsx)(s.code,{children:"/users/"})," and ",(0,r.jsx)(s.code,{children:"/users"})," will not be matched). A variable with that name\nwill be in scope - in this example ",(0,r.jsx)(s.code,{children:"username"})," will be available to use in the\nhandler."]}),"\n",(0,r.jsxs)(s.p,{children:["Incoming paths are segmented at each ",(0,r.jsx)(s.code,{children:"/"}),", and different variables can match each\nsegment. For example, the route ",(0,r.jsx)(s.code,{children:"/:users/:username"})," would match ",(0,r.jsx)(s.code,{children:"/users/paul/"}),"\nand ",(0,r.jsx)(s.code,{children:"/users/:username/projects/:id"})," would match ",(0,r.jsx)(s.code,{children:"/users/paul/projects/1"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["It is possible that a single path would match multiple handlers. In this case,\nthe most specific match will be used. For example, with the handlers\n",(0,r.jsx)(s.code,{children:"/users/paul/projects/1"})," would match against ",(0,r.jsx)(s.code,{children:"/users/:username/projects/:id"})," as\nthat is more specific than ",(0,r.jsx)(s.code,{children:"/users/:username"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["However, if ",(0,r.jsx)(s.code,{children:"/users/:username/projects/:id"})," were not present, it would match\nagainst ",(0,r.jsx)(s.code,{children:"/users/:username"})," (in this case, the variable ",(0,r.jsx)(s.code,{children:"username"})," would have the\nvalue ",(0,r.jsx)(s.code,{children:"paul/projects/1"}),"."]}),"\n",(0,r.jsxs)(s.p,{children:["Often, you'll want to do client-side routing in a JS app. In this case you would\nset two HTTP GET handlers, with the routes ",(0,r.jsx)(s.code,{children:"/"})," and ",(0,r.jsx)(s.code,{children:"/:rest"}),", and use them to\nrespond with your JS assets (see ",(0,r.jsx)(s.a,{href:"/how-to/static-assets",children:"Static Assets"}),"). You\ncan then add specific routes like ",(0,r.jsx)(s.code,{children:"/changelog"})," or ",(0,r.jsx)(s.code,{children:"/sitemap.xml"})," which will\noverride the less specific routes. For APIs, you could add routes like\n",(0,r.jsx)(s.code,{children:"/api/v1/users/:username"}),", which are more specific. For an API fallback, add\n",(0,r.jsx)(s.code,{children:"/api/:rest"})," to return a 404 instead of responding with the JS assets."]}),"\n",(0,r.jsx)(s.h2,{id:"traces",children:"Traces"}),"\n",(0,r.jsx)(s.p,{children:"All requests are stored as traces. Traces are automatically deleted once they\nare a week old, except the last 10 for each handler."}),"\n",(0,r.jsx)(s.h2,{id:"responses",children:"Responses"}),"\n",(0,r.jsxs)(s.p,{children:["The result of HTTP handlers are automatically converted into HTTP responses. By\ndefault, they are converted to JSON, and returned with a content-type based on\ntheir type: records, dictionaries and lists are given the content-type\n",(0,r.jsx)(s.code,{children:'"application/json; charset=utf-8"'}),", all other types are given the content-type\n",(0,r.jsx)(s.code,{children:'"text/plain; charset=utf-8"'}),"."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.em,{children:"We recognize this is a poor choice, and future versions of the HTTP stack will\nhave better default behavior."})}),"\n",(0,r.jsxs)(s.p,{children:["The ",(0,r.jsx)(s.code,{children:"HTTP::"})," module provides functions to create responses to external HTTP\ncalls. Each response function, such as ",(0,r.jsx)(s.code,{children:"Http::response"}),", creates a response\nvalue; a response value returned by the handler will be sent as a response to\nthe client."]}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"HTTPResponseWith",src:n(39741).Z+"",width:"836",height:"292"})}),"\n",(0,r.jsx)(s.p,{children:"The live value beneath the handler will show the return value."}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.img,{alt:"HTTPForbidden",src:n(94759).Z+"",width:"792",height:"342"})}),"\n",(0,r.jsxs)(s.p,{children:["To set cookies, you can use ",(0,r.jsx)(s.code,{children:"HTTP::setCookie"})," to create a suitable HTTP header.\n",(0,r.jsx)(s.img,{alt:"HTTPRespondWithHeaderSetCookie",src:n(14669).Z+"",width:"1158",height:"302"})]})]})}function h(e={}){const{wrapper:s}={...(0,t.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},39741:(e,s,n)=>{n.d(s,{Z:()=>r});const r=n.p+"assets/images/respondwith-bbcacc55e8fb6c9da4444164b96c980a.png"},94759:(e,s,n)=>{n.d(s,{Z:()=>r});const r=n.p+"assets/images/response-81c92fe6d3389bbcbcf3cc7f4076c380.png"},14669:(e,s,n)=>{n.d(s,{Z:()=>r});const r=n.p+"assets/images/setcookie-a2d9f016d4b1a0ff5a1fbb303a0ef6e9.png"},11151:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>i});var r=n(67294);const t={},a=r.createContext(t);function i(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/28fb0ad1.87840ee0.js b/assets/js/28fb0ad1.87840ee0.js new file mode 100644 index 00000000..dfc5ada4 --- /dev/null +++ b/assets/js/28fb0ad1.87840ee0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9858],{21189:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>o,toc:()=>u});var r=t(85893),c=t(11151);const a={},i="Built-in Function reference",o={id:"reference/function-reference",title:"Built-in Function reference",description:"We maintain an automatically-generated list of all (non-deprecated)",source:"@site/docs-classic/reference/function-reference.md",sourceDirName:"reference",slug:"/reference/function-reference",permalink:"/reference/function-reference",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/function-reference.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Javascript cheat sheet",permalink:"/reference/cheatsheets/javascript-cheatsheet"},next:{title:"Packages",permalink:"/reference/packages"}},s={},u=[];function l(e){const n={a:"a",h1:"h1",header:"header",p:"p",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"built-in-function-reference",children:"Built-in Function reference"})}),"\n",(0,r.jsxs)(n.p,{children:["We maintain an automatically-generated list of all (non-deprecated)\n",(0,r.jsx)(n.a,{href:"https://ops-documentation.builtwithdark.com/?pretty=1",children:"Darklang functions"}),"."]})]})}function f(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>i});var r=t(67294);const c={},a=r.createContext(c);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/28fb0ad1.a0262e41.js b/assets/js/28fb0ad1.a0262e41.js deleted file mode 100644 index 232d24bd..00000000 --- a/assets/js/28fb0ad1.a0262e41.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9858],{21189:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>a,default:()=>l,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var r=t(85893),c=t(11151);const i={},a="Built-in Function reference",o={id:"reference/function-reference",title:"Built-in Function reference",description:"We maintain an automatically-generated list of all (non-deprecated)",source:"@site/docs-classic/reference/function-reference.md",sourceDirName:"reference",slug:"/reference/function-reference",permalink:"/reference/function-reference",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/function-reference.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Javascript cheat sheet",permalink:"/reference/cheatsheets/javascript-cheatsheet"},next:{title:"Packages",permalink:"/reference/packages"}},s={},u=[];function f(e){const n={a:"a",h1:"h1",p:"p",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"built-in-function-reference",children:"Built-in Function reference"}),"\n",(0,r.jsxs)(n.p,{children:["We maintain an automatically-generated list of all (non-deprecated)\n",(0,r.jsx)(n.a,{href:"https://ops-documentation.builtwithdark.com/?pretty=1",children:"Darklang functions"}),"."]})]})}function l(e={}){const{wrapper:n}={...(0,c.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(f,{...e})}):f(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var r=t(67294);const c={},i=r.createContext(c);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:a(e.components),r.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/29a0dee3.0bcf4f70.js b/assets/js/29a0dee3.0bcf4f70.js deleted file mode 100644 index e12622a6..00000000 --- a/assets/js/29a0dee3.0bcf4f70.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1753],{90618:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>c});var i=s(85893),r=s(11151);const l={},t="Darklang Release 1",a={id:"changelog/release-1",title:"Darklang Release 1",description:'In June of 2022, we switched to a "release" schedule where we publish release',source:"@site/docs-classic/changelog/release-1.md",sourceDirName:"changelog",slug:"/changelog/release-1",permalink:"/changelog/release-1",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-1.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 2 - June 6, 2022",permalink:"/changelog/release-2"},next:{title:"Reference",permalink:"/category/reference"}},d={},c=[{value:"July 13th, 2020",id:"july-13th-2020",level:2},{value:"Product changes",id:"product-changes",level:3},{value:"Documentation and tutorial changes",id:"documentation-and-tutorial-changes",level:3},{value:"Contributor-related changes",id:"contributor-related-changes",level:3},{value:"Weeks of 6/15/2020 and 6/22/2020",id:"weeks-of-6152020-and-6222020",level:2},{value:"Week of 6/12/2020",id:"week-of-6122020",level:2},{value:"Documentation",id:"documentation",level:3},{value:"Week of 6/5/2020",id:"week-of-652020",level:2},{value:"Standard library",id:"standard-library",level:3},{value:"External contributions",id:"external-contributions",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"Week of 5/29/2020",id:"week-of-5292020",level:2},{value:"Documentation",id:"documentation-2",level:3},{value:"Week of 5/22/2020",id:"week-of-5222020",level:2},{value:"Documentation",id:"documentation-3",level:3},{value:"Week of 5/15/2020",id:"week-of-5152020",level:2},{value:"Documentation",id:"documentation-4",level:3},{value:"Week of 5/8/2020",id:"week-of-582020",level:2},{value:"Week of 5/1/2020",id:"week-of-512020",level:2},{value:"Week of 4/24/2020",id:"week-of-4242020",level:2},{value:"Documentation",id:"documentation-5",level:3},{value:"Week of 4/17/2020",id:"week-of-4172020",level:2},{value:"Package Manager",id:"package-manager",level:3},{value:"Documentation",id:"documentation-6",level:3},{value:"Week of 4/10/2020",id:"week-of-4102020",level:2},{value:"Documentation",id:"documentation-7",level:3},{value:"Week of 4/3/2020",id:"week-of-432020",level:2},{value:"Documentation",id:"documentation-8",level:3},{value:"Week of 3/27/2020",id:"week-of-3272020",level:2},{value:"Documentation",id:"documentation-9",level:3},{value:"Week of 3/20/2020",id:"week-of-3202020",level:2},{value:"Week of 3/13/2020",id:"week-of-3132020",level:2},{value:"Features",id:"features",level:3},{value:"Bug fixes",id:"bug-fixes",level:3},{value:"Documentation",id:"documentation-10",level:3},{value:"Week of 3/6/2020",id:"week-of-362020",level:2},{value:"Week of 2/28/2020",id:"week-of-2282020",level:2},{value:"Documentation",id:"documentation-11",level:3},{value:"Week of 2/21/2020",id:"week-of-2212020",level:2},{value:"Week of 2/14/2020",id:"week-of-2142020",level:2},{value:"Week of 2/07/2020",id:"week-of-2072020",level:2},{value:"Week of 1/31/2020",id:"week-of-1312020",level:2},{value:"Documentation",id:"documentation-12",level:3},{value:"Week of 1/24/2020",id:"week-of-1242020",level:2},{value:"Major changes",id:"major-changes",level:3},{value:"Library changes",id:"library-changes",level:3},{value:"Bug fixes",id:"bug-fixes-1",level:3},{value:"Documentation",id:"documentation-13",level:3},{value:"Week of 1/17/2020",id:"week-of-1172020",level:2},{value:"Week of 1/10/2020",id:"week-of-1102020",level:2}];function o(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"darklang-release-1",children:"Darklang Release 1"}),"\n",(0,i.jsx)(n.p,{children:'In June of 2022, we switched to a "release" schedule where we publish release\nnotes once a month. Prior to that, release notes were published alolng various\ntimelines. This page captures all releases before this switch-over.'}),"\n",(0,i.jsx)(n.h2,{id:"july-13th-2020",children:"July 13th, 2020"}),"\n",(0,i.jsx)(n.h3,{id:"product-changes",children:"Product changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Secrets now work in Functions\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2724",children:"#2724"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["When copying strings from live values, Dark now omits the quotes\n(",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2723",children:"#2723"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Renaming rebound variables now properly renames the variables in the\nright-hand side of the rebinding expression\n(",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2722",children:"#2722"}),")\n",(0,i.jsx)(n.img,{alt:"Renaming a variable",src:s(27311).Z+"",width:"594",height:"132"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added support for ",(0,i.jsx)(n.code,{children:"Date::atStartOfDay"}),", ",(0,i.jsx)(n.code,{children:"Date::day"})," ,\n",(0,i.jsx)(n.code,{children:"Date::minute"}),",",(0,i.jsx)(n.code,{children:"Date::month"})," ,",(0,i.jsx)(n.code,{children:"Date::second"}),", and ",(0,i.jsx)(n.code,{children:"Date::year"})," to the query\ncompiler. (",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2720",children:"#2720"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Ensure the autocomplete menu covers the play button\n(",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2717",children:"#2717"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Show unused functions in a different color (to signify that they are unused\nand can be deleted) (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2713",children:"#2713"}),")\n",(0,i.jsx)(n.img,{alt:"Unused functions in a different color",src:s(87416).Z+"",width:"798",height:"246"})]}),"\n",(0,i.jsxs)(n.li,{children:["Show canvas name in the browser's title (useful if you've multiple canvases\nopen) (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2708",children:"#2708"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Highlight duplicate fields in records in red to indicate an error\n(",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2705",children:"#2705"}),")\n",(0,i.jsx)(n.img,{alt:"Duplicate fields, highlighted in red",src:s(9682).Z+"",width:"516",height:"255"})]}),"\n",(0,i.jsxs)(n.li,{children:["Add support for ",(0,i.jsx)(n.code,{children:"String::replaceAll"})," to the query compiler\n(",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2692",children:"#2692"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Typing a comma in a list will now complete the autocomplete\n(",(0,i.jsx)(n.a,{href:"https://github.com/actuallymab",children:"Mehmet Aydin Bahadir"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2650",children:"#2650"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-and-tutorial-changes",children:"Documentation and tutorial changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The footer on ",(0,i.jsx)(n.a,{href:"https://darklang.com",children:"https://darklang.com"})," now points to many\nmore Learning and Community pages\n",(0,i.jsx)(n.img,{alt:"The new homepage footer",src:s(3032).Z+"",width:"2132",height:"418"})]}),"\n",(0,i.jsx)(n.li,{children:"Documentation now supports a Dark mode"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"contributor-related-changes",children:"Contributor-related changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:['Greatly expand the "General Concepts" documentation\n(',(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/175",children:"#175"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Improve documentation around using vim with merlin\n(",(0,i.jsx)(n.a,{href:"https://github.com/fmilani",children:"Felipe Milani"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2685",children:"#2685"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:['The repo has standardized on "allowlist" and "blocklist"\n',(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2636",children:"#2636"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Change the default branch on Dark repos to ",(0,i.jsx)(n.code,{children:"main"}),"\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2635",children:"#2635"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["New PR template (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2632",children:"#2632"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Update the Pull Request\n",(0,i.jsx)(n.a,{href:"https://darklang.com/docs/contributing/making-a-pull-request",children:"code checklist"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"weeks-of-6152020-and-6222020",children:"Weeks of 6/15/2020 and 6/22/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["There has been a\n",(0,i.jsx)(n.a,{href:"https://blog.darklang.com/dark-and-the-long-term/",children:"significant restructure"}),"\nto the Dark project. We'll write more about this going forward: Paul has\n",(0,i.jsx)(n.a,{href:"https://blog.darklang.com/dark-devlog-1-fresh-start/",children:"a new blog post"})," that\ntalks about it."]}),"\n",(0,i.jsxs)(n.li,{children:["We now have a status channel in the community chat. You can join the chat\ncommunity ",(0,i.jsx)(n.a,{href:"https://darklang.com/discord-invite",children:"here"}),"!"]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark",children:"Darklang repo"})," is now ",(0,i.jsx)(n.em,{children:"source\navailable"}),". This hasn't been publicly announced yet, but you can now\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/issues",children:"file issues"})," directly, and also\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/contributing/getting-started",children:"contribute"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Added a contributing doc, showing how you can help if\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/contributing/if-you-dont-know-our-stack",children:"you don't know our stack"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Date::hour_v1"})," is now supported in the query compiler.\n(",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2639",children:"#2639"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["When code is not synced due to the server being unavailable, an error message\ncorrectly explains what happened (",(0,i.jsx)(n.a,{href:"https://github.com/fmilani",children:"Felipe Milani"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2605",children:"#2605"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"HTTPClient"})," requests coming from Dark now time out after 30 seconds\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2661",children:"#2661"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-6122020",children:"Week of 6/12/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Secrets are now available! Now you can store API keys, passwords and other\nsensitive information separately from the rest of your canvas. Secrets will\nappear in autocomplete in handlers across your entire canvas. They will appear\nredacted in traces and live values, so it's now easier to stream and\nscreenshot your Dark code!"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June12/secrets.png",src:s(3333).Z+"",width:"630",height:"236"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Onboarding and tooltip updates"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The styling of our tooltips and initial tutorial has been updated"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June12/tooltips.png",src:s(66354).Z+"",width:"630",height:"334"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Tips are now available in the function space."}),"\n",(0,i.jsx)(n.li,{children:"More helpful links have been added to the avatar menu."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The SQL compiler now supports ",(0,i.jsx)(n.code,{children:"Date::add"})," and ",(0,i.jsx)(n.code,{children:"Date::subtract"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/aashanand",children:"Aash Anand"}),")"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The newest version of a function will now always appear first in autocomplete\n(",(0,i.jsx)(n.a,{href:"https://github.com/fmilani",children:"Felipe Milani"}),")"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Standard library functions added:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Date::atStartOfDay"})," (",(0,i.jsx)(n.a,{href:"https://github.com/mwz",children:"Michael Wizner"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Date::today"})," (",(0,i.jsx)(n.a,{href:"https://github.com/ThomasMarcel",children:"Thomas Alcala Schneider"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List::dropWhile"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/ThomasMarcel",children:"Thomas Alcala Schneider"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The following contributors wrote and updated tests and made CSS improvements:\n",(0,i.jsx)(n.a,{href:"https://github.com/billy1kaplan",children:"billy1kaplan"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Detailed documentation is now available around\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/workers",children:"workers"})," and\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/cron",children:"crons"})]}),"\n",(0,i.jsxs)(n.li,{children:["We've begun to create short videos explaining Dark concepts. They will be\nadded throughout the documentation, and a\n",(0,i.jsx)(n.a,{href:"https://www.youtube.com/playlist?list=PLpcgNq_UYVoNZVoPEdqoNVemixjkrye83",children:"full playlist"}),"\nis available on our\n",(0,i.jsx)(n.a,{href:"https://www.youtube.com/channel/UCYUv1H0ENhZa4lNjOL-EiYg/featured",children:"Youtube channel"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-652020",children:"Week of 6/5/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Function references now appear when you're using a\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages",children:"package manager"})," function."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/Screen_Shot_2020-06-05_at_2.08.39_PM.png",src:s(17108).Z+"",width:"1698",height:"280"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We've updated some tips and error messages."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"On 404s"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/Screen_Shot_2020-06-05_at_2.10.46_PM.png",src:s(84800).Z+"",width:"544",height:"460"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"On functions that have not yet been run"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/Screen_Shot_2020-06-05_at_2.14.05_PM.png",src:s(58633).Z+"",width:"742",height:"366"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"When attempting field access on a datastore"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/Screen_Shot_2020-06-05_at_2.16.10_PM.png",src:s(6640).Z+"",width:"738",height:"244"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you attempt to access Dark via a browser other than Chrome we now link you\nto our ",(0,i.jsx)(n.a,{href:"http://darklang.com/desktop-client",children:"experimental desktop client"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Variables can now be converted to lists by pressing ",(0,i.jsx)(n.code,{children:"["}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/2020-06-05_14.19.05.gif",src:s(65445).Z+"",width:"750",height:"146"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added a ",(0,i.jsx)(n.code,{children:"convert-if-to-match"})," option to the command palette\n(",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/2020-06-05_14.21.05.gif",src:s(64764).Z+"",width:"728",height:"566"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["References are now shown in the order in which they appear\n(",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String::trim"})," functions are now supported in the query compiler\n(",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::getMany"})," now returns an ",(0,i.jsx)(n.code,{children:"Option"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/naclcaleb",children:"Caleb H"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Added font-ligature for lambas (",(0,i.jsx)(n.a,{href:"https://github.com/s0kil",children:"Daniel Sokil"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Copy to cURL now uses single quotes instead of double quotes\n(",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"standard-library",children:"Standard library"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Standard library functions added:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Crypto::md5"})," (",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List::member"})," (",(0,i.jsx)(n.a,{href:"https://github.com/xtopherbrandt",children:"Christopher Brandt"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List::takeWhile"})," (",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::queryCount"})," (",(0,i.jsx)(n.a,{href:"https://github.com/brandonhamilton",children:"Brandon Hamilton"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::getExisting"})," (",(0,i.jsx)(n.a,{href:"https://github.com/naclcaleb",children:"Caleb H"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String::prepend"})," (",(0,i.jsx)(n.a,{href:"https://github.com/brandonhamilton",children:"Brandon Hamilton"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"external-contributions",children:"External contributions"}),"\n",(0,i.jsx)(n.p,{children:"We have started taking external contributions, thanks so much to all the folks\nwho contributed. In addition to the user facing changes above, contributors also\nadded:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Switched the Dark repo from using ",(0,i.jsx)(n.code,{children:"yarn"})," to ",(0,i.jsx)(n.code,{children:"npm"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/snasirca",children:"Shahriyar Nasir"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Updated Linux defaults to make it easier for Linux users to compile and\nrebuild Dark (",(0,i.jsx)(n.a,{href:"https://github.com/ggajos",children:"Grzegorz Gajos"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Added tests (",(0,i.jsx)(n.a,{href:"https://github.com/fmilani",children:"Felipe Milani"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jesse Besseling"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/JustusMoeller",children:"Justus Moeller"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/xtopherbrandt",children:"Christopher Brandt"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/aashanand",children:"Aash Anand"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Made documentation fixes (",(0,i.jsx)(n.a,{href:"https://github.com/danieljcafonso",children:"Daniel Afonso"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jesse Besseling"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-1",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added a guide to help contributors with\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/contributing/rescript-and-fsharp-for-dark-developers",children:"writing code in OCaml"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added a tutorial around writing\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/tutorials/handle-error-errorrail",children:"clean error messages using the error rail"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-5292020",children:"Week of 5/29/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"It's now possible to set a return type for functions. The return type will\nappear in the autocomplete and type errors will be displayed when necessary,\nmaking it easier to know that your functions work, and making it easier to use\nand understand functions. This means that your functions can also now use the\nError Rail, if you set their return type to Result or Option."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/returntypes.png",src:s(58130).Z+"",width:"746",height:"330"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Datastores can now have fields named id. This was contributed by our first\nexternal contributor, ",(0,i.jsx)(n.a,{href:"https://github.com/naclcaleb",children:"Caleb H"}),"!"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-2",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A section around\n",(0,i.jsx)(n.a,{href:"/contributing/getting-started",children:"submitting external contributions"}),"\n(",(0,i.jsx)(n.a,{href:"https://darklang.com/docs/contributing/getting-started",children:"134"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["A guide around ",(0,i.jsx)(n.a,{href:"/discussion/when-dark",children:"when and when not to use Dark"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/133",children:"133"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Expanded information about\n",(0,i.jsx)(n.a,{href:"/reference/framework/datastores#migrations-locking-and-unlocking",children:"Datastore migrations"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/141",children:"141"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["A ",(0,i.jsx)(n.a,{href:"/reference/cheatsheets/javascript-cheatsheet",children:"From Javascript page"})," to\nhelp developers familiar with Javascript learn Dark\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/132",children:"132"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Documentation for the\n",(0,i.jsx)(n.a,{href:"/reference/packages#createcheckoutsession",children:(0,i.jsx)(n.code,{children:"Slack::createCheckoutSession"})}),"\npackage (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/139",children:"139"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Made a few improvements to the\n",(0,i.jsx)(n.a,{href:"/tutorials/first-dark-application",children:"Your First App"})," tutorial\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/129",children:"129"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/130",children:"130"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Misc. spelling fixes (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/128",children:"128"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/136",children:"136"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-5222020",children:"Week of 5/22/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We've added more information to the sidebar! If you're not sure what a section\nin the sidebar is for, click on its name and more details will appear on the\nright side of your canvas."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/sidebar.gif",src:s(46944).Z+"",width:"2052",height:"514"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We've done some major infrastructure work behind the Cron scheduler, which\nsignificantly improved its performance. You should now see all Crons,\nincluding those with a 1 minute interval, running on time again."}),"\n",(0,i.jsxs)(n.li,{children:["Return values and execution fade are no longer stale when taking functions\non/off the\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/discussion/error-handling#error-rail",children:"error rail"}),"\nor when committing ",(0,i.jsx)(n.a,{href:"/how-to/feature-flags",children:"feature flags"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-3",children:"Documentation"}),"\n",(0,i.jsxs)(n.p,{children:["Thank you to everyone who contributed to our docs this week! As a reminder, our\ndocs repo is public and all you need to do to contribute is\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pulls",children:"submit a pull request"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added instructions for ",(0,i.jsx)(n.a,{href:"/how-to/static-assets",children:"hosting static assets"})," when not\nusing an external framework.\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/119",children:"119"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Fixed a broken link on the ",(0,i.jsx)(n.a,{href:"/reference/languagedetails",children:"Language Details"}),"\npage. (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/117",children:"117"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Added instructions on how to pause your cron once you're done with the\n",(0,i.jsx)(n.a,{href:"/tutorials/first-dark-application",children:"Your First App"})," tutorial.\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/122",children:"122"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["New how-to pages:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/how-to/feature-flags",children:"Feature flags"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/118",children:"118"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/how-to/write-tests",children:"Writing tests"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/120",children:"120"}),")\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/126",children:"126"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["New tutorials:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/external-db",children:"Using an external DB"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/124",children:"124"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/ifttt-events",children:"Alerting with IFTTT"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/125",children:"125"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-5152020",children:"Week of 5/15/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We've added a Hello World tutorial that will show automatically for new\naccounts. It can also be accessed via the avatar menu."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/helloworld.png",src:s(21285).Z+"",width:"610",height:"228"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages",children:"Package manager functions"})," and\ntheir underlying code can now be accessed via the sidebar. These functions\nwill appear in the autocomplete, and can be used like any other built-in\nfunction."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/packagemanager.png",src:s(82199).Z+"",width:"634",height:"662"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"It's now easier to add 404s to your canvas - the entire line is now clickable,\ninstead of just the plus sign."}),"\n",(0,i.jsxs)(n.li,{children:["Made a ton of small fixes to feature flags:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The correct docstring now shows when a feature flag is selected"}),"\n",(0,i.jsx)(n.li,{children:"Feature flag expressions now show the correct live value"}),"\n",(0,i.jsxs)(n.li,{children:["Feature flags are now correctly created after pressing ",(0,i.jsx)(n.code,{children:"Cmd+a"})," to select\neverything."]}),"\n",(0,i.jsx)(n.li,{children:'Feature flags no longer incorrectly display the "code was not run executed\nin this trace" error message.'}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"404s should no longer appear off-screen when added to your canvas."}),"\n",(0,i.jsxs)(n.li,{children:["When possible, we now display more information where we were previously\nshowing ",(0,i.jsx)(n.code,{children:""})," messages."]}),"\n",(0,i.jsx)(n.li,{children:"Clicking to go to an error on an infix function now works as expected."}),"\n",(0,i.jsx)(n.li,{children:"The command palette will no longer appear behind other handlers when opened."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-4",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Reorganized our documentation site, breaking tutorials & samples into their\nown section."}),"\n",(0,i.jsxs)(n.li,{children:["Added a\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/cheatsheets/python-cheatsheet",children:"From Python"}),"\npage to help developers familiar with Python learn Dark."]}),"\n",(0,i.jsxs)(n.li,{children:["Added three sample canvases:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://darklang.com/a/sample-gcpbucket",children:"GCP Bucket"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://darklang.com/a/sample-firebaseauth",children:"Firebase Auth"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://darklang.com/a/sample-crud",children:"CRUD app"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Added a ",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-app",children:"Setting Up OAuth"}),"\npage to the\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/category/walk-throughs",children:"Building Slack Apps"}),"\nsection."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-582020",children:"Week of 5/8/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We now have Dark badges for your sites! Add a\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/sharing-dark",children:"Made With Dark badge"})," to\nyour apps to establish your early Dark expertise \ud83c\udf89"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/badge.png",src:s(56323).Z+"",width:"750",height:"300"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'Clicking on a link in the sidebar will now always jump you to the correct\nplace on the canvas. This was a super annoying bug that we internally referred\nto as "the dreaded positioning bug", and it is finally fixed. A blog post will\nbe out describing the horror show behind this next week.'}),"\n",(0,i.jsx)(n.li,{children:"Copying & pasting now works properly for pipes! We'll no longer lose arguments\nwhen copying between piped and non-piped expressions."}),"\n",(0,i.jsx)(n.li,{children:"Re-ordering function parameters works again. You can drag a function parameter\nto change its order (and we'll reorder the callers too)."}),"\n",(0,i.jsx)(n.li,{children:"When you invite people (go to Settings), we'll error properly if the invite\nfailed."}),"\n",(0,i.jsx)(n.li,{children:"When you try to access Dark in Firefox or other browsers, we'll tell you it\nwon't work instead of crashing."}),"\n",(0,i.jsx)(n.li,{children:"You can now drag much more of a handler to move it (now including the\ndocstring and return value boxes)"}),"\n",(0,i.jsx)(n.li,{children:"When clicking on traces with errors, we'll no longer incorrectly color the\ntrace dots."}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Result::map2"})," and 5 other ",(0,i.jsx)(n.code,{children:"Result"})," functions now goes to the error rail."]}),"\n",(0,i.jsxs)(n.li,{children:["When you press ",(0,i.jsx)(n.code,{children:","})," to add another entry to a list, we'll now support it on\nboth sides of an existing ",(0,i.jsx)(n.code,{children:","}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-512020",children:"Week of 5/1/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We now show you the exact execution path of a trace, making it easy to\nunderstand what happened in that trace. See which code paths are executed,\nwhether ",(0,i.jsx)(n.code,{children:"if"}),"s return ",(0,i.jsx)(n.code,{children:"true"})," or ",(0,i.jsx)(n.code,{children:"false"}),", and which patterns are matched. This\nshould make it much easier to understand code at a glance."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/codeexecution.gif",src:s(5627).Z+"",width:"962",height:"578"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fixed a bug that caused text to sometimes be selected in multiple handlers."}),"\n",(0,i.jsx)(n.li,{children:"It is now possible to drag both the return value and docstring fields on a\nhandler."}),"\n",(0,i.jsx)(n.li,{children:"We have disabled the visual identifier for error traces, due to them turning\nall trace dots red. We plan to fix and re-enable in the future."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-4242020",children:"Week of 4/24/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We've added ",(0,i.jsx)(n.code,{children:"Http::setCookie_v2"})," which handles the ",(0,i.jsx)(n.code,{children:"expires"})," parameter\nproperly. It also has much better error messages"]}),"\n",(0,i.jsxs)(n.li,{children:["Added ",(0,i.jsx)(n.code,{children:"Dict::member"}),", ",(0,i.jsx)(n.code,{children:"Date::<="})," and ",(0,i.jsx)(n.code,{children:"Date::>="})," to the standard library"]}),"\n",(0,i.jsxs)(n.li,{children:["Updated a few standard library functions:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String::isSubstring"})," is now ",(0,i.jsx)(n.code,{children:"String::contains"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List::contains"})," is now ",(0,i.jsx)(n.code,{children:"List::member"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String::contains"})," is now supported in ",(0,i.jsx)(n.code,{children:"DB::query*"})," functions"]}),"\n",(0,i.jsx)(n.li,{children:"It is now no longer possible to create multiple datastores with the same name."}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue that causes Dark to crash when selecting while the autocomplete\nwas available."}),"\n",(0,i.jsx)(n.li,{children:"We now support recursion! While it's been supported for a long time on the\nbackend, you were unable to get live values for recursive functions in the\neditor. Now you can!"}),"\n",(0,i.jsx)(n.li,{children:"When new traces are created while your editor is open, we'll now replace old\ntraces with the new one (before we added all traces, which caused large\ncanvases to crash)."}),"\n",(0,i.jsx)(n.li,{children:"We've improved the loading time of the editor for apps with lots of 404s"}),"\n",(0,i.jsx)(n.li,{children:"Some function docstrings now link to relevant documentation - more to come!"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-5",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Improved the documentation around\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/custom-domains",children:"setting up a custom domain"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added a tutorial around\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-asana",children:"creating new Asana projects and tasks via Slack"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-4172020",children:"Week of 4/17/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Traces can now be linked to directly."}),"\n",(0,i.jsx)(n.li,{children:"Pasting JSON into Dark now works in more cases"}),"\n",(0,i.jsxs)(n.li,{children:["The command palette keyboard shortcut has changed: you should now use ",(0,i.jsx)(n.code,{children:"ctrl+s"}),"\n(we also support ",(0,i.jsx)(n.code,{children:"alt+x"}),", and ",(0,i.jsx)(n.code,{children:"ctrl+\\"}),", should it be helpful for folks with\nnon-US keyboard)"]}),"\n",(0,i.jsxs)(n.li,{children:["Updated ",(0,i.jsx)(n.code,{children:"String::slugify_v1"})," to slugify correctly in all cases."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::query"})," functions now support ",(0,i.jsx)(n.code,{children:"String::contains"})," in their query block."]}),"\n",(0,i.jsxs)(n.li,{children:["The docstrings for ",(0,i.jsx)(n.code,{children:"List::sortBy"})," and ",(0,i.jsx)(n.code,{children:"List::sortByComparator"})," were updated to\nimprove clarity."]}),"\n",(0,i.jsxs)(n.li,{children:["Fixed the return type for ",(0,i.jsx)(n.code,{children:"DB::queryOne"})," - it now correctly returns an\n",(0,i.jsx)(n.code,{children:"Option"}),", and works properly with the error rail"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed a bug with selecting dicts in feature flags"}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"http://darklang.com",children:"darklang.com"})," now displays properly on Safari"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"package-manager",children:"Package Manager"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added and documented many\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages#asana-package",children:"Asana package manager functions"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Added and documented a\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages#mailchimp-package",children:"Mailchimp subscribe function"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-6",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Lots of small typos and corrections were made - thank you to everyone who\nreported them!"}),"\n",(0,i.jsxs)(n.li,{children:["Improved the documentation around ",(0,i.jsx)(n.code,{children:"match"}),", thanks to Nathan Lloyd Smith!"]}),"\n",(0,i.jsxs)(n.li,{children:["Added a tutorial around\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-trello",children:"creating new Trello cards via Slack"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-4102020",children:"Week of 4/10/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["We've done a lot of work to improve how quickly we can set up custom domains -\nif you want a custom domain to point to your Dark app,\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/custom-domains",children:"read the documentation"})," to\nsee how to do it."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["More standard library functions! We're ramping down our concentrated effort to\nadd more all at once, so if you have any requests post in the\n",(0,i.jsx)(n.a,{href:"https://darklang.com/discord-invite",children:"Community Chat"})," or email\n",(0,i.jsx)(n.a,{href:"mailto:feedback@darklang.com",children:"feedback@darklang.com"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Float::clamp"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::clamp"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::mod"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::remainder"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::dropFirst"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::dropLast"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::first"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::last"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::trimStart"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::trimEnd"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We've realized that people had difficulty knowing that they need traces when\nthey're editing functions, so we've added some in-editor pointers to it (call\nthe function from elsewhere!)"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/functions.png",src:s(93890).Z+"",width:"774",height:"366"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We're working a lot on performance of the editor, especially when typing.\nWe've optimized a lot of different parts of the app, mostly related to typing\nand changing code, some of which are 3x faster. We'll continue working on\nthis."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The Dark CLI now suggests some common problems and solutions when auth fails,\nin response to a few instances of shell string handling surprising users"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Bug fix: typing an infix operator will now always open autocomplete."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Bug fix: ",(0,i.jsx)(n.code,{children:"extract-variable"})," now works correctly with right to left selection."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Worker names no longer allow quotes - we noticed this causing ambiguity\nbetween sending and receiving of messages"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Updated the return type for ",(0,i.jsx)(n.code,{children:"db::queryOne"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-7",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added a separate section to the documentation for\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-app",children:"Building Slack Apps"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added a tutorial for\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-channel-check",children:"building a slack app that checks for new channels and posts them"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added and documented many\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages#trello-package",children:"Trello package manager functions"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-432020",children:"Week of 4/3/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"New Dark accounts are now auto-populated with a USERNAME-gettingstarted canvas\nthat demonstrates basic Dark functionality."}),"\n",(0,i.jsxs)(n.li,{children:["Even more functions have been added to the standard library:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::indexedMap"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::pi"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::tau"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::degrees"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::turns"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::radians"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::cos"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::sin"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::tan"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::acos"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::asin"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::atan"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::atan2"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::cosh"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::sinh"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::tanh"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"We've done a redesign of the sidebar to be more consistent and prettier!"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/sidebar.png",src:s(95162).Z+"",width:"400",height:"380"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"add-feature-flag"})," option in the command palette is now context aware"]}),"\n",(0,i.jsx)(n.li,{children:"The feature flag panel is now auto-focused when adding a new feature flag"}),"\n",(0,i.jsxs)(n.li,{children:["Added an autocomplete option for ",(0,i.jsx)(n.code,{children:"OPTIONS"})," in HTTP. This is especially useful\nfor people doing preflight requests as part of ",(0,i.jsx)(n.code,{children:"CORS"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/option.png",src:s(98519).Z+"",width:"742",height:"228"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Made it clearer that return values apply specifically to a trace"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/returntext.png",src:s(80272).Z+"",width:"1112",height:"188"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Adding a function at the start of a pipe now works properly (before this, we\nlost the first argument)"}),"\n",(0,i.jsx)(n.li,{children:"Text selection has been reworked and should work a lot better and have fewer\nbugs. In particular, double-clicking on a function name properly selects the\nfunction, and selecting with the mouse now works in all cases (that we could\nfind!)"}),"\n",(0,i.jsx)(n.li,{children:'Typing "." to make a field now always works, even if the autocomplete isn\'t\nready'}),"\n",(0,i.jsx)(n.li,{children:"Bug fix: double-clicking in text boxes now keeps your cursor there"}),"\n",(0,i.jsxs)(n.li,{children:["Bug fix: in a ",(0,i.jsx)(n.code,{children:"match"})," with a ",(0,i.jsx)(n.code,{children:"Just"})," pattern, the variable now has the right\ntype in autocomplete"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Error:toString"})," has been deprecated (you can't call functions on type errors)"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-8",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added a doc about how to use\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/cors",children:"CORS in Dark"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added and documented many\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages#slack",children:"Slack package manager functions"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-3272020",children:"Week of 3/27/2020"}),"\n",(0,i.jsx)(n.p,{children:"We released a lot this week, hope you enjoy!"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We have re-released feature flags! Feature flags allow you change live code\nsafely: write the new code that you want, choose the condition to use that\ncode instead (just for your user? just if a header is passed? Just if a\nparticular query string is provided?). Then switch to the new code or discard\nit, safely, without breaking anything."}),"\n",(0,i.jsx)(n.li,{children:"Feature flags can be created from the command palette."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar27/Screen_Shot_2020-03-27_at_12.44.20_PM.png",src:s(7670).Z+"",width:"1326",height:"360"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The keyboard shortcut for the command palette has changed to ",(0,i.jsx)(n.code,{children:"Ctrl-\\"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar27/2020-03-27_12.27.23.gif",src:s(36571).Z+"",width:"858",height:"386"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We've added a ton of standard library functions:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Date::weekday"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::toList"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::fromList"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::filterMap"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::size"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::singleton"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::filterMap"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::map2"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::map2shortest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::tail"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::singleton"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::unzip"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::zip"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::zipShortest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Option::map2"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Result::map2"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::slice"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::padStart"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::padEnd"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Hyphens are now allowed in records/dicts, to make it easier to set HTTP\nheaders"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar27/Screen_Shot_2020-03-27_at_12.33.06_PM.png",src:s(39763).Z+"",width:"794",height:"278"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"HTTP::respond"})," was renamed to ",(0,i.jsx)(n.code,{children:"HTTP::response"}),", to make it clearer that it\ncreates a value."]}),"\n",(0,i.jsxs)(n.li,{children:["A bunch of edge cases around calling functions were fixed, especially for\nfunctions which currently return ",(0,i.jsx)(n.code,{children:""})]}),"\n",(0,i.jsx)(n.li,{children:"Tab now moves you to the next editable space"}),"\n",(0,i.jsxs)(n.li,{children:["Disabled a few features while we re-work them:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Create new function option in the autocomplete"}),"\n",(0,i.jsx)(n.li,{children:"Mouse over database stats"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-9",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/tutorials/extract-function",children:"Your First Function"}),"\nand\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/tutorials/call-external-api",children:"Your First External API Call"})]}),"\n",(0,i.jsxs)(n.li,{children:["Updated the\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-app",children:"Slack tutorial"})," to discuss\nOAuth v2"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-3202020",children:"Week of 3/20/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Now you can give us more information about your Dark projects, and let us know\nif they're live. This helps us understand how we can make Dark better for you!"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar20/about.png",src:s(82060).Z+"",width:"1642",height:"1218"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Significantly faster HTTP requests and canvas loading. We "fixed" this a few\nweeks ago, but only saw modest improvements. Yeah, there was a bug. So now\nit\'s fixed fixed: some HTTP requests have dropped from 3s to 70ms.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We've added lots of standard library functions:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::absoluteValue"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::negate"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::power"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::min"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::max"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::truncate"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar20/float.png",src:s(28867).Z+"",width:"1138",height:"454"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Int::negate"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Int::absoluteValue"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Dict::isEmpty"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"String::isEmpty"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Date::weekday"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Bool::xor"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-3132020",children:"Week of 3/13/2020"}),"\n",(0,i.jsx)(n.h3,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We now tell you how to deal with the ErrorRail in the docstrings for functions\nthat returns ",(0,i.jsx)(n.code,{children:"Options"})," and ",(0,i.jsx)(n.code,{children:"Results"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar13/errorrail.png",src:s(56735).Z+"",width:"744",height:"552"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We've started narrowing down the types in the autocomplete using types, and we\nnow have some nice error messages for options which don't match the types"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar13/autocomplete.png",src:s(59933).Z+"",width:"1360",height:"504"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::query"})," (and other ",(0,i.jsx)(n.code,{children:"DB::query"})," functions) now support ",(0,i.jsx)(n.code,{children:"Date"})," operations"]}),"\n",(0,i.jsx)(n.li,{children:"Performance: We've improved the load speed of your code on our servers by\nabout 3x over the last few weeks, with the final change landing this week.\nThis has the largest impact when loading the editor as all of your code loads\nthen (though it is also less noticeable there as the JS overhead is higher\nthan the DB overhead so \ud83e\udd37\ud83c\udffd\u200d\u2640\ufe0f)"}),"\n",(0,i.jsxs)(n.li,{children:["We have launched an alpha\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages",children:"package manager"}),", which allows\nre-using Dark functions from other users or canvases. Today, only Dark\nemployees can add functions to the package manager. We've started with some\ncommonly used Slack functions, but let us know via chat or email if you have\nany requests - or your own functions you'd like to share."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar13/slackfunctions.png",src:s(79495).Z+"",width:"1080",height:"232"})}),"\n",(0,i.jsx)(n.h3,{id:"bug-fixes",children:"Bug fixes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Entering ",(0,i.jsx)(n.code,{children:"+"})," no longer causes extraneous characters to be placed"]}),"\n",(0,i.jsx)(n.li,{children:"Uploading static assets on Windows no longer fails for nested directories"}),"\n",(0,i.jsxs)(n.li,{children:["Adding a ",(0,i.jsx)(n.code,{children:"let"})," above a pipe no longer results in unexpected behavior"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-10",children:"Documentation"}),"\n",(0,i.jsx)(n.p,{children:"We added a bunch of improved documentation, including:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["better docs for hosting\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/static-assets",children:"static assets"})]}),"\n",(0,i.jsxs)(n.li,{children:["a new doc describing\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/datastores",children:"Datastores"})," in more\ndetail"]}),"\n",(0,i.jsxs)(n.li,{children:["a new doc describing our (very limited) support for\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages",children:"packages"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/httpclient",children:"a new doc describing the HTTP client library"})}),"\n",(0,i.jsxs)(n.li,{children:["a new doc describing how to\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/http-framework",children:"respond to HTTP requests"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-362020",children:"Week of 3/6/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Invites! You can now invite people to Dark from within the app. (If you want\nyour invitees to collaborate in your canvases, you still need to ask us though\n\u2014 coming soon). Click "Share Dark" to invite people!'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Profile menu showing link to "Share Dark" and "Documentation"",src:s(98407).Z+"",width:"182",height:"245"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"There is now a link to documentation in the profile menu"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"You can now move around the canvas using your mouse. Just click and drag!"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added a bunch of functions:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::max"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::min"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::startsWith"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::endsWith"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Fixed a bunch of bugs:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["you couldn't type a comma in a list within a ",(0,i.jsx)(n.code,{children:"match"})," statement."]}),"\n",(0,i.jsxs)(n.li,{children:["you couldn't type ",(0,i.jsx)(n.code,{children:"|>"})," to pipe at the end of functions with no arguments"]}),"\n",(0,i.jsx)(n.li,{children:"scrolling in the sidebar works again"}),"\n",(0,i.jsxs)(n.li,{children:["When calling ",(0,i.jsx)(n.code,{children:"StaticAssets::serveLatest"})," with JSON files, we now return the\nJSON properly"]}),"\n",(0,i.jsxs)(n.li,{children:["If you press enter at the end of a line in an ",(0,i.jsx)(n.code,{children:"if"})," statement, we no longer\ntake you to the next line (this simplifies code like ",(0,i.jsx)(n.code,{children:"if i < 10"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Show when traces were not executed in ",(0,i.jsx)(n.code,{children:"match"}),"es (we already do this\nelsewhere)"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The command palette's documentation appears properly (press ",(0,i.jsx)(n.code,{children:"ctrl-\\"})," to show\nthe command palette)"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["You can now use ",(0,i.jsx)(n.code,{children:"Date::<"})," and ",(0,i.jsx)(n.code,{children:"Date::>"})," and ",(0,i.jsx)(n.code,{children:"Float::lessThanOrEqualTo"})," in\n",(0,i.jsx)(n.code,{children:"DB::query"})," (and also in ",(0,i.jsx)(n.code,{children:"DB::queryOne"}),", ",(0,i.jsx)(n.code,{children:"DB::queryWithKey"}),", etc)"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"DB::query call using Date::<",src:s(94059).Z+"",width:"647",height:"70"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We now give better error messages when you try to use ",(0,i.jsx)(n.code,{children:"Int"})," functions (like\n",(0,i.jsx)(n.code,{children:"+"})," and ",(0,i.jsx)(n.code,{children:"-"}),") on ",(0,i.jsx)(n.code,{children:"Floats"})," or ",(0,i.jsx)(n.code,{children:"Strings"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Float addition showing error message",src:s(55655).Z+"",width:"368",height:"101"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"When you try to use invalid canvas names (e.g. with capital letters), we now\nerror much better"}),"\n",(0,i.jsx)(n.li,{children:"When backspacing function names, we now delete the version automatically,\nwhich makes it clearer what's being deleted."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-2282020",children:"Week of 2/28/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Backspacing a comma in a list no longer deletes text to the right of the comma"}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where Crons occasionally continued to run after they were\ndeleted"}),"\n",(0,i.jsx)(n.li,{children:"Lists now wrap when they pass 120 characters"}),"\n",(0,i.jsxs)(n.li,{children:["A few fixes to traces that caused people to get really stuck:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fixed an issue where traces could occasionally vanish"}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where clicking a Play button on a function in a REPL would\nnot cause a trace to appear"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-11",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Docs can now be accessed at\n",(0,i.jsx)(n.a,{href:"https://darklang.com/docs",children:"https://darklang.com/docs"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/cron",children:"Your first Cron"})," and\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/workers",children:"Your first Worker"}),"\nsections have been added to the Getting Started guide"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-2212020",children:"Week of 2/21/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The canvas list has been moved into a Settings modal, accessed by mousing over\nyour avatar and clicking Account."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Feb21/settings.png",src:s(87261).Z+"",width:"936",height:"734"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"A variety of issues were fixed around autocomplete:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"New variables now correctly display their type instead of Incomplete."}),"\n",(0,i.jsx)(n.li,{children:"Autocomplete now appears correctly for single-character variables."}),"\n",(0,i.jsx)(n.li,{children:"It was possible to get into a state where your variable was not added to\nautocomplete - this is no longer possible."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added improved error messaging for missing return values on HTTP handlers and\nuser functions."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Feb21/error.png",src:s(9596).Z+"",width:"742",height:"280"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Having the experimental web platform flag turned on in Chrome should no longer\ncause broken functionality."}),"\n",(0,i.jsx)(n.li,{children:"The Delete Handler menu option has been changed to Delete, for clarity."}),"\n",(0,i.jsxs)(n.li,{children:["A complete ",(0,i.jsx)(n.a,{href:"https://darklang.com/docs/introduction",children:"documentation"}),"\nrestructure, including URL changes - old bookmarks may no longer work."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-2142020",children:"Week of 2/14/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added a Welcome to Dark modal for new users"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Feb14/Screen_Shot_2020-02-14_at_4.59.31_PM.png",src:s(34e3).Z+"",width:"1246",height:"716"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"You can now click on the Command Palette"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Function arguments can now be reordered"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Changelog%20Draft/2020-02-14_13.04.03.gif",src:s(21906).Z+"",width:"744",height:"394"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"You can now delete recursive functions"}),"\n",(0,i.jsx)(n.li,{children:"We now show you when a value was not executed in this trace"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Changelog%20Draft/Screen_Shot_2020-02-14_at_1.06.20_PM.png",src:s(3069).Z+"",width:"1598",height:"206"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Live values are now shown in unexecuted ",(0,i.jsx)(n.code,{children:"match"})," branches"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed a bunch of redirection bugs after log-in"}),"\n",(0,i.jsx)(n.li,{children:"Support pasting more JS objects into records"}),"\n",(0,i.jsxs)(n.li,{children:["Fixed the documentation for ",(0,i.jsx)(n.code,{children:"Date::parse"})," (it returns a ",(0,i.jsx)(n.code,{children:"Result"}),")"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed a few bugs around autocomplete appearing too little or too much"}),"\n",(0,i.jsx)(n.li,{children:"Fixed a carat placement bug in pipes"}),"\n",(0,i.jsx)(n.li,{children:"Loaded our font (Fira Mono) even if you don't have it installed locally"}),"\n",(0,i.jsxs)(n.li,{children:["Fixed some issues causing the editor to freeze:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Dragging up to select text"}),"\n",(0,i.jsx)(n.li,{children:"Repeated clicking in a variable"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Fixed some issues around copying ",(0,i.jsx)(n.code,{children:"match"}),"es"]}),"\n",(0,i.jsxs)(n.li,{children:["Added a ",(0,i.jsx)(n.a,{href:"/introduction",children:"Getting Started"})," tutorial to the documentation"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-2072020",children:"Week of 2/07/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"You can now reset your password (thanks to a switch to Auth0)"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Released a new version of the Dark CLI (0.5). This is a required upgrade to\nupload static assets."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli-apple",children:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli-apple"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli.exe",children:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli.exe"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli-linux",children:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli-linux"})}),"\n",(0,i.jsx)(n.li,{children:"Going forward, the Dark CLI will tell you when your CLI is out of date."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Added ",(0,i.jsx)(n.code,{children:"wrap-in-match"})," to the command palette"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/2020-02-07_15.27.43.gif",src:s(10013).Z+"",width:"746",height:"452"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added new functions:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::sortByComparator"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-02-07_at_12.28.47_PM.png",src:s(5783).Z+"",width:"810",height:"346"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Bytes::length"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-02-07_at_12.33.46_PM.png",src:s(52927).Z+"",width:"728",height:"202"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Changing functions now keeps the old function's error rail setting"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Significant improvement in cursor position"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Moved our documentation to a\n",(0,i.jsx)(n.a,{href:"https://darklang.com/docs/",children:"new, more readable format"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Documented ",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/cors",children:"how to set CORS in Dark"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-1312020",children:"Week of 1/31/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"You can now see a list of all of your canvases by mousing over your avatar."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-01-31_at_12.18.35_PM.png",src:s(30637).Z+"",width:"630",height:"532"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Typing when text is highlighted now causes text to be replaced instead of\ninserted"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/2020-01-31_12.23.30.gif",src:s(54312).Z+"",width:"814",height:"220"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Many function improvements, including:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We now create functions without a default parameter. Apparently that was\nannoying."}),"\n",(0,i.jsx)(n.li,{children:"Functions now have a menu, and you can delete functions from there if they\nare unused)"}),"\n",(0,i.jsx)(n.li,{children:"Sometimes the Add New Parameter action didn't work - fixed it."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/2020-01-31_12.30.30.gif",src:s(15115).Z+"",width:"1184",height:"362"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"User-created functions now show parameters in blanks"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-01-31_at_12.33.38_PM.png",src:s(13910).Z+"",width:"950",height:"204"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Improved load time of canvases with many traces"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The cursor now stays in the right place when we reflow/reformat code\ndynamically, in almost every case."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Prevented you from creating two datastores with identical names"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Added ",(0,i.jsx)(n.code,{children:"HTTP::setCookie_v1"})," - v0 incorrectly URL encoded some fields and is now\ndeprecated"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Fixed an issue where text was sometimes not being properly displayed in the\nsidebar"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added a warning when trying to access Dark from a non-desktop or non-Chrome\nbrowser"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-12",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Created a ",(0,i.jsx)(n.a,{href:"/reference/sharing-dark",children:"Sharing Dark Projects"})," guide"]}),"\n",(0,i.jsxs)(n.li,{children:["Improved the steps at the beginning of the\n",(0,i.jsx)(n.a,{href:"/walk-throughs/react-app",children:"Guide to Building a Backend for a React SPA in Dark"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-1242020",children:"Week of 1/24/2020"}),"\n",(0,i.jsx)(n.h3,{id:"major-changes",children:"Major changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Errors/Incompletes now point to the cause of the error"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/image3.png",src:s(26454).Z+"",width:"790",height:"318"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We substantially improved keyboard entry:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Special characters on international keyboards now appear correctly"}),"\n",(0,i.jsx)(n.li,{children:"Infix functions as parameters to other functions work"}),"\n",(0,i.jsx)(n.li,{children:"We believe backspace should now always work perfectly"}),"\n",(0,i.jsx)(n.li,{children:"We've greatly improved how often the cursor appears in the right place"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Performance and loading improvements for all programs"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The editor loads program data from the server much faster"}),"\n",(0,i.jsx)(n.li,{children:"Workers run with much less overhead (and so higher throughput)"}),"\n",(0,i.jsx)(n.li,{children:"Crons should be running more reliably"}),"\n",(0,i.jsx)(n.li,{children:"HTTP requests are much much faster"}),"\n",(0,i.jsx)(n.li,{children:"Programs with lots of functions or traces are especially improved"}),"\n",(0,i.jsx)(n.li,{children:"Several issues with deleted functions and databases are now resolved"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Copy/paste is way improved"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"you can paste code from Dark into other programs"}),"\n",(0,i.jsx)(n.li,{children:"you can paste code into many parts of Dark (varnames, strings, records, etc)"}),"\n",(0,i.jsx)(n.li,{children:"most copy-paste issues should be solved"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/2020-01-24_15.16.12.gif",src:s(93706).Z+"",width:"1516",height:"638"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"library-changes",children:"Library changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Added ",(0,i.jsx)(n.code,{children:"JSON::parse_v1"})," which uses a ",(0,i.jsx)(n.code,{children:"Result"})," in case of error (deprecated\n",(0,i.jsx)(n.code,{children:"JSON::parse_v0"}),")"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Added ",(0,i.jsx)(n.code,{children:"Float::sum"})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-01-24_at_3.19.59_PM.png",src:s(53648).Z+"",width:"948",height:"194"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["More improvements to ",(0,i.jsx)(n.code,{children:"DB::query"})," and friends"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["previews now work for all ",(0,i.jsx)(n.code,{children:"DB::query"})," functions (",(0,i.jsx)(n.code,{children:"DB::queryOne"}),",\n",(0,i.jsx)(n.code,{children:"DB::queryOneWithKeys"}),", ",(0,i.jsx)(n.code,{children:"DB::queryWithKeys"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"bug-fixes-1",children:"Bug fixes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fixed up/down arrow on fields"}),"\n",(0,i.jsx)(n.li,{children:"Single entry autocompletes now work"}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Cmd-arrow"})," with shift now maintains selection"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed renaming function parameters"}),"\n",(0,i.jsx)(n.li,{children:"Fixed deleted text persisting when pressing delete"}),"\n",(0,i.jsx)(n.li,{children:"Large traces are now properly displayed"}),"\n",(0,i.jsxs)(n.li,{children:["Commands (",(0,i.jsx)(n.code,{children:"Cmd/Ctrl-\\"}),") now work more reliably when selecting code"]}),"\n",(0,i.jsxs)(n.li,{children:["We now allow you to use arbitrary field names","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"You can now use a field even if you don't have a trace or the field does not\nexist in that trace"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"We've automatically disabled Grammarly, as it was messing with our DOM"}),"\n",(0,i.jsx)(n.li,{children:"The dark-cli now prints errors on failure"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-13",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A ",(0,i.jsx)(n.a,{href:"/reference/sample-canvases",children:"list of sample canvases"}),". and descriptions has\nbeen added"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-1172020",children:"Week of 1/17/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We added ",(0,i.jsx)(n.code,{children:"DB::query_v4"}),", which allows you use arbitrary queries on your Dark\ndatastores","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We also published a\n",(0,i.jsx)(n.a,{href:"https://blog.darklang.com/compiling-dark-to-sql/",children:"related blog post"}),"!"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["You can now remove a ",(0,i.jsx)(n.code,{children:"let"})," with the backspace/delete key"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/image1.gif",src:s(89940).Z+"",width:"453",height:"120"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Improved\n",(0,i.jsx)(n.a,{href:"/tutorials/handle-error-errorrail",children:"documentation around the Error Rail"})]}),"\n",(0,i.jsxs)(n.li,{children:["GitHub API! See our ",(0,i.jsx)(n.a,{href:"https://darklang.com/a/sample-github",children:"sample canvas"}),"\ndemonstrating how to call the GitHub API"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where deleted from the middle of a concatenated string would\ncause text to the right of the deletion point to be removed."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/image2.gif",src:s(94115).Z+"",width:"455",height:"136"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We asked y'all to not make ",(0,i.jsx)(n.code,{children:"HttpClient"})," calls to your Dark canvas from REPLs.\nWe've made some infrastructural changes that fix the issue on our end, so you\nshould feel free to do that now. This is useful if you want to create a HTTP\ntrace without leaving Dark. (Note: please don't make ",(0,i.jsx)(n.code,{children:"HttpClient"})," calls ",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.em,{children:"to\nDark"})})," from HTTP handlers)"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-1102020",children:"Week of 1/10/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Fixed a bunch of issues around entering non ASCII characters, especially from\nnon-US keyboards:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"accented 'o' and 'a' characters were not being recognized from Swedish\nkeyboard layouts."}),"\n",(0,i.jsx)(n.li,{children:"\u20ac or \xa3 weren't working"}),"\n",(0,i.jsx)(n.li,{children:"shift + 2 was not being recognized."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where pressing delete in a match expression was causing the\ncursor to be placed incorrectly."}),"\n",(0,i.jsx)(n.li,{children:"Stopped erroring when functions are being renamed."}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where the Omnibox was not clickable."}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where the minimap was hiding the Dismiss Error button."}),"\n",(0,i.jsx)(n.li,{children:"Fixed a short regression where lambda parameters were not shadowing variables\nof the same name."}),"\n",(0,i.jsxs)(n.li,{children:["Deprecated the ",(0,i.jsx)(n.code,{children:"Date::sub"})," function and replaced it with ",(0,i.jsx)(n.code,{children:"Date::subtract"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Changed the behavior of new handler placement - they no longer appear directly\non top of one another."}),"\n",(0,i.jsx)(n.li,{children:"Changed the behavior of partials - they are now abandoned when clicking away\nfrom a handler."}),"\n",(0,i.jsxs)(n.li,{children:["Added the ",(0,i.jsx)(n.code,{children:"copy-request-as-curl"})," command for ",(0,i.jsx)(n.code,{children:"HttpClient::"})," functions - use\n",(0,i.jsx)(n.code,{children:"Ctrl-\\"})," to activate"]}),"\n",(0,i.jsxs)(n.li,{children:["Add ",(0,i.jsx)(n.code,{children:"Twitter::urlencode"})," and ",(0,i.jsx)(n.code,{children:"Crypto::sha1mac"})," to support talking to the\nTwitter API"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},93706:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-01-24_15.16.12-de2e6daeb54a5c09032aea76e3f6cc40.gif"},54312:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-01-31_12.23.30-117d08a2890bf165e7152d43a4e581b1.gif"},15115:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-01-31_12.30.30-303d164f354a4685dcf32d36fbfd8beb.gif"},10013:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-02-07_15.27.43-9444bbb191047aea3394e75e7902d9e2.gif"},9682:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2705-2ea37bb5f5ce62912cd56f13a7edb510.png"},87416:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2713-f45f9a2e1d8a25338e792fed1a6df527.png"},27311:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2722-af1be2e7ca8fcbb9e496681d2421db90.gif"},93890:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/functions-b020fb2a77f0d3142bcbfa16f0dfca29.png"},98519:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/option-e0992190bbe75ee0def1ddf2168e75f8.png"},80272:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/returntext-0ebd0120510b17b87c56aac8e297439a.png"},95162:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/sidebar-c439586abc7522bac0cfb7039ce25135.png"},21906:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-02-14_13.04.03-9b7624d6f71c6f6cd1335ae71d6f014c.gif"},3069:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-02-14_at_1.06.20_PM-ab38804d7bbab71c08ec495435887dd6.png"},34e3:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-02-14_at_4.59.31_PM-f103b1175d862711d2e0abcf273ea71e.png"},9596:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/error-b47bb88e832ec05149805fd8a720c0e4.png"},87261:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/settings-51431eb437ae21a0208153e029bf89c4.png"},3333:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/secrets-3ecd2e15445f41f0c668106e22263959.png"},66354:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/tooltips-19100c7ac2ca77ef9cdae213fb7b7458.png"},65445:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-06-05_14.19.05-f429ea3d0ea727346d202c93b10bf79b.gif"},64764:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-06-05_14.21.05-ea9fd3c04328ba8b8f70f65c93cc1fbd.gif"},17108:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-06-05_at_2.08.39_PM-8543ade966e6d0fc495180b2b97076f3.png"},84800:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-06-05_at_2.10.46_PM-46a973e20fa7495a2c925cfc2f56f291.png"},58633:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-06-05_at_2.14.05_PM-d51797286ff5813143c04b82ea37b14d.png"},6640:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-06-05_at_2.16.10_PM-047d70fe222a2f4c9be4478689347759.png"},59933:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/autocomplete-31457fab1bfcd6f826b4ee7d7e69dc45.png"},56735:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/errorrail-e6cbfc3ebb620980479789e2381438e7.png"},79495:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/slackfunctions-c03f4b99a85b8dd08a160d2e41a09885.png"},82060:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/about-9c6d9c23039835e48417d8badaf9ba42.png"},28867:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/float-e1c8d5ad81a9ffbcb9066d039fe526e6.png"},36571:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-03-27_12.27.23-f40715b490e0d75174c3d6cfc934cabc.gif"},39763:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-03-27_at_12.33.06_PM-a7f8f5aefe2725b938543b5e3804f22e.png"},7670:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-03-27_at_12.44.20_PM-bcda529e58d37c0fb21334647d474220.png"},98407:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/account-79b0ffc6489553c273ee2ce4cc2c02d0.png"},94059:(e,n,s)=>{s.d(n,{Z:()=>i});const i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAocAAABGCAYAAAC+Pz7aAAAgAElEQVR4Ae2d+ZNXxbnG8ZoqjalsZq+yjMaoMMAAA8M+MAPDvu87IiAICAJhkU2QoBhUBFFRUdGY69Xrhmuoq1EqCl4L0WjUXJcslZjlv+hbnybvoefM2Wb5wjDz/HCqz7f3fvvpt59+u/t82w0bNswNHTrUVVdXuxEjRrghQ4b434MGDfJ++Gc9YXqLN3jwYJ8PeZmfuRZWU1NTJ4w6kJfFwyVObW2tf5LKCePyTlzqTV68Wzh+1i4r1/LGn3fcsM1p9bQ85WbjoinysT7EHT16tO9H+mPkyJERHvLyJz44ID19y2/S4Ib9DE7ofx7CDG9h/oYPyyMM03vpcNBSZQtG0EfDhw/XIxkIA8JAq8RAOybP9u3b65EMhAFhQBgQBoQBYUAYEAacyKFAIEUgDAgDwoAwIAwIA8JAhIF2bCXLcijLqTAgDAgDwoAwIAwIA8IAGGjHuSyBQWAQBoQBYUAYEAaEAWFAGAAD7TicLzAIDMKAMCAMCAPCgDAgDAgDYKAdNwIFBoFBGBAGhAFhQBgQBoQBYQAMiBzqAKoWB8KAMCAMCAPCgDAgDEQYEDkUGCIwaMWoFaMwIAwIA8KAMCAMiByKHIocCgPCgDAgDAgDwsBZgoEO7du7/hWVrlNZx6jPanv1c9Nrmu/rMyKHZwkYtJLTSk4YyMdAecdOjudsk1W/iko3c9DIs67eZ5ucVd/8MSQZtVwZ9enW3T14zTr37o373cc/f8h9eNMB9/CiG9yIPgPcLTMWu6Ob7krVIR3LylzPLt0yny6dOkfpG00Ob5+9zO2es9ztmLHIDetdFWU4oEcv70+YPbDbrp3Ko99rx892vbpWRGnG9K9xy0dPjX4LnC0XnOob9U1LxsArP7vV/WzczAbpki1T5nvdtH3aNW5Ir/4NSttcsrhxynz3v5vvPiNlN1cblI90gzBQOgzAs97Zco87fuN+d+vMJZ4z3Tl3hXt7893ud9secIdW7sgkh5snX+0JJaQy7Xl59c5IBzX6H1LI/NZZS9z9C9e6D256wC0eMclnOmPQCPfh9gOeNEIcd0xf5P1hvKRBCT567Ub30fYH3YSqWh+2fuJch1IXsEoHLMlWsm0LGGgMOTx+473uwMJ17u6rV7n3tt4X6aymyoutn2k1wx1uU/NSeslQGGi7GMDAhm5744bdrn/3npE+6dmlwo3qV+1eXXub51dZlkPI5aqxMzKfq4aMifJutOUQokfFACxWxMNrfuHfIYco2ziQjRyaP6bQ/75um48ncth2QW94kNt2MdCtc7lfMGI5e2zJJq/swEPHDmWOXYY3N+z1WynVlX0ivTKy70C/Un570z6396rrHfqFNCE5/Pn0a9wTy7b6fP5r2Y2eqBnOWGWTB7/RV5A43peOmuwJosUjj2Ob9vl6De7Z18cZVzXYHVy8wT2+dIu39rFDYvHJ8/CaXT4PFsDUnd2UGybOdVgoiccW8kurTq3QIaZHbrjT/Wbd7VE+xCON6dajG+9yy0ZNqRNuZcptu2NHfd82+n7W4JGe/M0cVPdMIRwqtAJmkcOGYqXJ5BCF+fr6O/yqm8Ihh6y+OT/DwyFJ/OPk8NkV292z1//ch4kctg2ANxScit82cPHCyps9qWMFvGb8rIgcLh89zZMvyNj++T/zegZMcKbwd9vud/dcvcqftWE7GIJJmJFDSB16yAjlfQvWeIJHHAgcuxtlHTr4NCE53DR5nt8JIR5HXTjbQ/mc53nt3+Rtbu1or5AhkjWVffwuiB2TgeBSn+7lXTwxXDthti8DqyS7LOSLTmS3hXeeyi7d/NEclLz54Zolc0y/Gnf9mOnadpYFtg4+QqzovXXrSraE0Vmdgwso9Dm7r/OHjYueOHkMcbFg2HhvkINQpj3hQrdJ5BAFjUJjtW/KGXLIivmFVbf4x5SjkUNW8G9u3OtX63ZWUeSwdQM7BKje1dchBrAOokOmVNf/G8+nlt/kbp9znZ8QIV/EQ89g5UPHkDbMi3fIISQO8gVxs3AIFn5s8e65aoV7dPHGKAxySLr/WXubJ5Qrx87wYShQ9BgkEKJq5UMOseRZ3uhBs0JShinoQ9fvcLfNXubjZZFD8qFd5G954oZpOAvJ5BCG611jSRhoGxhYN2FOIjlsSP8vLEIO557aBWkSOWRbGeXJ9opVMm9bmQraat7SiBy2DYBbf8tVfxsGuB0HKbItW/PHZXsWKxzvFo8t2Tm1o73lMIxr75C8RxZv8OSReOaPCwlkNwPrnm0jmz8HvLEQhvEhp2z33jt/dfSg8+LkEAulkUPOWEPi2CImbe+uJ7e7Q6IXtxxSZh45hOiKHGrchPjUe9vBA7eR0ZO28Dwdfd9kcoiyRmnNHzrOK9Y8cpjUKJHDtgPypP6XX9vu/5dW73R3zVvprXoDuvfy26xgYuvUBd6ih4VwycjJjvOF+LMdjM4x8sd2tF36sG1l4hNnfED4uNlHOGQuxFy4rRz6c8aPM4NsY5O/LWqzyCG7KJxn5AsM4Sd1ds1aGp2xXjFmWp1tZcoUOWzbYyDEnd6FhTgG0D+/WX/HyQspFZV19Be6oyq4pBJPa7/ZqWVXJOuZ21wXUjgrQ8EbJ13lV/JUkhU5DJetFnuoFCvo+LaJVRpySBhbRTwodTsPZHHkasAIA60TAxA4rIRsyTL+7eIFOuPp5Td5PRL6gwMIFmSRNJA9+wQN5G/1vz9lw/lBdMmgnie3l7HYoWfs7J/hKY0cQu64eEL+6DLbIYEccjTG0hPOyp7fLI65UcgnJ6jzQ9es9/7oQPLAakkdqbelh0ye2Hryu2WcceQSCmGhtRFiSlssjdzWORbUr+rXNAxAANEt6KtbZl7rlo6a4r+swCUU9FHnnO+7NvhTNtXV1VI4OugsDAgDZxwDLDaTFoVc7kg6X4gStYsgaQo19IdsQuSqe/RuUFvZ0uY7rWFeSe+QSQidhWHRhIxa3Wlbj/KuUbjFkytCIAwIA0UwwGds9s1b6Y+soFt+v/1Bv2gd139Qrl45+RHsCv+VGY7HJD2hnmv0tnKRhiiOAC8MCAMtAQMce4EYslVdyvpwqYXVPdZArIAhWSxlucpb40wYaFsY4EhfSOaau//bVVWd+neT5s5c+bUtsKq/1d8tFQN9K3r47wuWun5YBycOqPXHa8K/oip1ucpfY08YEAaaEwOyHGo7saSWlOYEq/KS8hMGhAFhQBgQBkqPgXa1tSf/wk7CLr2wJWPJWBgQBoQBYUAYEAZaOgbaDRs2TJYjWQ+FAWFAGBAGhAFhQBgQBjwG2g0ffvI/RVs6i1X9tNISBoQBYUAYEAaEAWGg9BhIJIdckdYjGQgDwoAwIAwIA8KAMNB2MGDEO5EcWqDc0rNzyVgyFgaEAWFAGBAGhIGWhAGRQ50v0BkTYUAYEAaEAWFAGBAGIgyIHAoMERha0qpFddEqWhgQBoQBYUAYODMYEDkUORQ5FAaEAWFAGBAGhAFhIMKAyKHAEIFBK7Qzs0KT3CV3YUAYEAaEgZaEAZFDkUORw2bEwGXdL3MXD7jYXd7lci/XH434kbuy7ErJuBll3JIUqOqiCV0YEAZaBQY6tHeX9rrU/bjqx+7Kjle64uSwQ3vX3p42qOjLysqcPa0CCG2wD0vZb1d0usJ9Y/43XLut7dx5K89z/7H5P9yF0y90595wbkQUS1l+a8578uDu7p1dE1zHsg4lI9kd2rd39rRmWTa2bab7cBubx+lIt3r1ardmzZoWXcfTIQeVIcLaEAz8pPIn7vzrz/fz1nmrznPnbji3GDmcNLPaPfryddEzcHBlmxp8mzdvdv/617+iZ+rUqWdd+2+99VZ32223uS1btrgpU6bUq/+GDRt8+M6dO92ECRPqhTcEaK05bmVlpevatWs9+Xxrzrfc1xZ/zWE5xFJ40eCL3FfWf8W129bOdevXzcu2T58+UbqBAwd6v+7du0d+pZQbfUr/h8/NN998Wspuaru6lZe5T++e4jbNrCpJfa8d19t9ce/U6BlV1a0k5TRVDmcq/dmk//7yl7+4v/71r+q/2OJ/x44dbteuXW7r1q1u5syZbU4+efPfmRpbLaFc5isI4Xemfcdd0fkKb8z4wdgfFCOHZWUdXHmXjq5mSE9PEKtrG0cOZy6odXc9tuCsA2anTp0cpIBBBUmcNm1aYhsA4B/+8IfEsDMNAur9t7/9zaE8ef/iiy/cjBkzorr++c9/dn//+9+9/z//+U/3j3/8w0EYz3S9W1r506dPd4MHD64jFwbXOTee4y7pe4n3/2nXn7rzV5wfPSPGj/AyX7hwYZRuyZIl3m/06NGRXynb+sADD0T9Tt/zfPjhh6elbGtXU8bHvqWD3e/3THZlHZrfeohFEgI6ZkA3TxBHDWh55LBTCa2m1j9pblH9l5a+ufyL4IfxdLrGVLxdReoXT3O6fpv+R8+b/m+oEYDF5KeffnpadUaWfDp37ly4Ltb+tPkvqxwLa8n9a3VsjHtx1cXeUshWMukvGnSRn7uKbyu3b+/6VlV4cghJTKvEoKG93PhpA123iqDjOrR3tcN7ufU7JruDLy7z7/yGcKblE/cfO3asmzt3rqupqfFp5syZ4zZt2uS6dauryPFft26dC600lhdbIosWLXLXXnut3yI2f1wGSjjpDx061I0bN65O/caMGeMHVkiqSEu+1O3ll1/2pIp3HghlWEZW+WG8UrwzOLAakXd1dbUniQwUG2AoDepPOJPB559/7glEc9aFcrFCIL+qqqo68i0if+qS1r9Z+OjZs6fvj/Ly8qg/aDd9hOWOfqmoqHAdAuLBO36EmQx69erlyzeZmf/l5Ze7c7ac49haNr/QNdzkkcMi+GhM+6kL5BDCH9bL3mkXsgjbBQZMPhYPN618+o8+5WFREY4l2kVeeeMjLCf+Xtm1o/v8nqlu7bT+9drQvbyjm1BT4UICBeHDr2vnU/03sGe5w0o4pG+XenlQ3uDeXTw5hCTGyx/ar6vr3+OUThtQWZ6Yz7jqCrdwTC9HfeN5NOX3kZvHuZdvHF2nDkXzK9q//JUq4zOu96wcw3Fc/xHe1PFrZSS5RfCDJR6M8YDRMB/CIIzs+KxcudKP6WXLliXukKThm/zSxmeR+pE+Tb5F6mfjizzY/aEvwjbmvYf6f9CgQe5Pf/qTfxjn1rZ58+a5bdu2Je4sYRhh/GJAQEY8vXv3rlcH4i1fvryOLsmrW0PDqf8777zjPvnkk3rlp+UVtj9p/iNdWv8U7V/yyMJPWt2K+Fv/J+lXS888B745WsGYN39wj8zst7ngbtKkSX6X66vXfbVeeLORwy5dO7n9Ty7y5PGRl5Z5Ejho6EkS2bFjmXvwuSXej+1p3nmGjjq1zWYVTnPfeOMNh0XrlVde8asXOptnxIgRvlEIA8DjZ5avWbNmRQ3GUoO/Wc8A+f333x+FsyL69a9/Hf3mPb5KSlOOkA7yZfKlfN55Fiw4ZSXNKz+t3eYPCabzwydpe9Pix13qZeSQMNsqol78Dskhv9999916VlDIAxanzz77zBPIeBlZ4ZBy5G99g3xC+ebJP69/s/DBwKD9bK1Yna39hFFvBnW4oEDx4RcSJgZomlLmvMYPR/8wyt/KwTXcZJHDPHw0pf3UIYscohSRz/bt26P6m3xYJJE+r3z6D6s5/Wurc1bapC0yPoiX9zywfIj73Z2T6sWD9LEtvGJS3yjMtoohceR7YMUQHwfrI3E5w8gZw7DMLHJ47Bfj3cFVJ2VBGt7xs/QQ1BN3TPR5Q2LZBh87sCIKt3iNdafU9vD5k/f2qwbWq3tWvkX698UXX/QYYEsWLDDGmRTDfA3HSeSwqeM3LCf+XgQ/d9xxh/vyyy8jHRzmAfbR9zy0jXmCuLyblTEP31njs0j9suRbpH7Ilz4x/UndOQIUtjPrnfih/odE4IeOI91LL71UZ+yG/Q+BzJvfkuSHvkyq0zPPPOPlj5HGwpEv/fPUU09FfhZmLnhkzkYGzFfMKRaW58bbb/rN5r+s/inSv0ntD/kH9cuaH/PCs/QradnNNEzTVmRpfUvaV1991csKmdH3pHn++ef9HIxxg7Pyl/a8tI48m40c3nTnTHfg2SWuslcXbxHcffBqt3lX3e3XxatHeVJIxRrzQABo+Pvvv+8bzrtZ5958801/1oTJHmvQRx995F577bWoHNL88Y9/jH4D3FGjRkW/85Qb9c1SjoQ/9NBDfhAltS2v/KQ0oR/paW/4vPfee1H9w7hJ76QLlYNNGLt37/Z5MNiY3B9//HG/KoPoMoDCvPr37x+V369fvzphxMsKP3bsmLdGsvJhsFEWMrf88+Sf17/kk4UPVpnHjx+Pyjt69GidlefEiRPrED+wgZ/VDyLOYOvRo4e3KMaPFphpnrOHmOW5jPLtmd/26Q03WeQwDx9NbT8TEEoVq4M9Q4YMidpHf4Tyob/ClXle+fQfE4iRyQ8++MCPU5Mfbtb4COOlvfeu6OSthyEJtLhv7RzvXtl6aov+0KZR7s1bTln+2TY2yyKWQwjiorF1LR9NIYdPbxjpt7379ejsrZVY+v5zzfBIvlbPprhsqd9ydbWXwfHbJ3rLaNH88voXPWoLISyH6Iv4sRLDcWPIYR5+irSjCH5Y4FD3MD+wz8TJwhqMIwuIBkTY9F9e/fLGJ+Vl1S9LvkXqx/hi0YW1h3bQhoacrYzrf/Q3fraAo362GGBuJGz9+vV15HjgwAEvx1C29o78GP/h/Pvxxx/XSW9x8Sf/u+++Owq/9957vR/ztsULXXQvu1nosEceeSSqaxgn6z3e/vj8l9U/lm9W/+bhhzyy5se88Dz9CteB3yB/LKMYcZgPyff11193doSIPkIW9DVjweJ8f/z3/Rn57075rrckfn3B14udOTThZG0rYwm88fbprt/A7v5ZsXFcPSLYXOSQjsWStmfPnghINJqGoth4nnzyyTpEbe/evV4odOLatWvrgSuPnCCDLOVIeBZ48so3Gae5KATbtjMXv7T4cf/44AAc+P3yl7/0eUAOkSGTOkqHQWiKM8yLQRpfERUJRzk//fTTUX3jltk8+ef1L3UwcpiEDxQRbYLksRKG/IbKiYE7e/Zsjwu2lHnHz9pGnnYRCbkTbmHmXtLnEnfhjAvdBcsucN+e9W13WY/LfBzDTRY5zMNHU9vPBER/M8HYwziwulM+8mFhBUngvSHjK95/hw8f9pYOyx83a3yE8bLeH109zFvQ4nG4rIJVrUunkySQ942xCywV5R09Idw5v9pb9nYvrrvV0hRy+PFdk90T60b4rWbI555rBzv84vVM+812OVbR8Fk1uf4CjPRVlZ3d27+Y4NuQll/cP69/iQ+uIYQHDx7044OFYpiP4bgx5LAIfsOykt6L4CeNHJph4K233nLMAeSPBZFxwXte/fLGJ3nk1S9NvtQhr37x8UXfMJ6L7h6l6X9rP/WnfhBC2sH4/9WvflWn/7PIIfI7cuSI36qHXDL/kgf5xh8ILke/jIwSjk6m7FDnhumwhGHNtMVnGFbkPa39Nv+RR1r/WP5Z/ZuHH8ujsfNnvP/j+pXyschaObzjx2+IN3M6u2HIgX6ZPHmyx1zY/1yi/OZV33QXLL3AfW/S95qHHHYo6xBtJz/0/FIXPp3LT529aQ5ymLQaMaJDoyEh4WO3QYnDbS2sIQiICTK8tRsXfpy8IOQs5Uh4FnjyyrdOTXNZ4WH6D5/QEpiWzvzjgwOrUegX31aGyBEOEbU8GuuykiEv5G95xOWbJf8i/Uu+kMMkfBDGljF14LYeZzJ4D7eRKYOB27dvX7+FakSRtITxG2siA6y2ttb/5j08p2hti7uGmyxymIWP5mg/SiDtzCH1RTEiEw6dc5aXscRq2tpPWNb4ivcf55NQ5qEsssZHGC/rHWKUZPWD+OEPoWJLGXKItdDyOrhyqPd7fcdY99DKoc1KDrHoUTZlfnLXlDoPZNXqkOVCKLGIhk/S2UjOUNIWyntxyylLaVbehGX1L+Ec16F/sTDY2dDmIodF8ZvXhiL4aQw5LFK/rPFp9c6qX5Z8G0MO0aWMyTQyZXUyl7jhfMF2On5mHUQf0/9Y7phj0BVFyWEoP0hc+MTvBFh9Guqyk0F9qafN6Q3JI97++PyX1T9WTlr/hu0PuQfvjamrlRe6WfrVSF/Yv7zTZsLYSuYdQs48T17gh/7mfGhYTvjebNvKEEIsh2Hm8ffmIIdpZmc6wkyk8XLjv7nUAjm0FSThCAw2bnHj5AV/m+STVs6Ep4HH8jQ3qXwLS3NRIKx6wyc8M5mWzvzjgwPTPH60iThxcogFgfAVK1ZEMiEeZyuYaCzfuJsUzqqQvJ577rkoXVy+efIv0r/0fxo+qCdWUZQM8XiP1x1ZcLEFEmhnkYhD/VlI2EP/QyT5bVtx8bzC3ygI2n/PPfdEZdKf+CUpjyR8NLX9eeSQ+rLNcOLECceWOwe+wzbklZ+lvCyfouPD4qe5WOg4MxgP58LG4W1j3HMbR9YhTnYmEYuhpeHs4e5FDbMcYrW09PEzh5BC6mXhpXCXju8TEc8l44uf17a6pPWvbbE9/PDDUf2xNDSUHGbpzzz8WB25FMGlEvsdukXw0xhySBlF60fcpPGJf1r98uTbGHIIgWvKtvJjjz3m9Q+WOPQduoj6m7zJuyg5JA3xQ8uV5ZPkQqbY/oyHJfmFcVi0Yg2jr1jkh2F577QvJE/h/JfXP5Z3Wv8SXhQ/SfOj5Y+bFp6nX+EzYMLyYoHHnM5vm3+Y99DtbDPDI5BJaCCxtOY2iBxy6YTLJvOWDndYBDlfaBlt2DnVXziZPKvGdepU5nDHTKprdRo5vp+3MNaO6O26de/sGvJJHCZozNZYhjizZuWai2JitcN5KkztnJezg5fEOXTokLcYkQ83dFjdMBFaeoSGpYOVDgdlCadDLBwXUgTb3rdvnxd4HMzcgEPgKDjOdITn0vLKD8spxTv1Qglh8mcSoB0hOQZIv/3tbz0pYjWJLJBBuDLFkkQ65JxEarLCOS8CgNmSTpJvnvzz+jcPH8jUVkvU387ahLJmYEL6sBLyHoaF7wyopG3lME78HSyxjQVGWK0hC84NWbw8fDS1/UYOuUUcPihqqwPKF5zQx2ZRsLC88vOUF/lkjQ8rp4hb0/vkBZR5I+suUuwSChY8bgxbXuWdyrxVj8/h4GfxHlhx6swl/lgfSbt5VpXfnub8oOXx7MaRnpCS1/QhPdz/7ZtS50IKxJFLKBC48o4dHORt7oi69bO8GuNCeLEWQkrDG9gNySutf9F59LldBrB4L7zwQtR+ysnSf00dv+RvZx3BIIQl3rYs/LBIY8xyMYX04SRbhHzl4TtvfFLXtPrlybdI/Rhf6AwWr1iCbBszLqO036H+pzz6GwJBfHR52P92WSPe/1zeIB/mN+TNPGrlkRfzxfz58/1iGgyF86/Fw2XhST7cjDZ/I/Vvv/125GdhoUtdKYv0LPTDsKz3sP3x+S+vfyzftP4lPA8/xMmaH/PC8/QrxBBM0Ec8vIf9x2/6mLbfd999/h1Ca21LchtEDslg1ZYJniBy63jHvlO3gSGOO/fP9eSPMEjkguX1V9KksQ9qc7s5qVJJflh66GB7GCRhPBQXK2MLRxD79+/3cSCTdJ6F4TIxQ5QsDwSKsAjDJS86xMLNZXVE3sRLAqeZvwm3cyRFyrf8S+VSH3tQMqyCIFRWnt30Jg6rQIgiSsDCcQE3xCqLHKaFQwgJI39cDsyG8s2Tf1b/Urc8fBDHVlD0XxK5ZYsY8pr3kdjGkEO2MSDI1geQb1tcFMFHU9vPhGBlh67VAfmAB/oGJR+SRsLyys9TXuTBkzQ+LKwh7jMbRjouoYRp+HwNBA3iFv8e4q0LanwY5A+r4W0La/yZwPiN5XuW1nqCCBHjUovlP2Nopbfa4Y+VECtleFsZYsmFGMJ5KGfbnAFResunsS6Ednx1024/Z/UvlhT6nrHB+OcsFhNKHAdp+q+p4xe5YJGjfJ5wURrKLA0/TzzxRD18kw9p2WExXcyC2BbF+DFREicL30XGp9UxrX5Z8i1SP8YXOhPdzfilb8L5y8pPc8MxT/9yrjTc9YjXDysTeIjnl9Y+sAWxQ+aUhWvzbzwPI4eh9c/IIfnH4yf9ZhEPiU0KS/IL2580/8Xbn4b/tPZn4cfq05T5M0+/YgFmTrF2Ej/U7VxeJey6667zxhne045gWX0bTA5JyPcJK3rUt94RhkWxT79uJ/9qL+EwqqXv1af+v0xYpZriMunzeZu4UiNP/AhjsKeVUeTAK2VkncUDBEn5FCk/rV4txZ+2JRErq19WuLUfN76tbOmT5GZhuFn9G8ZLeqdcBhDnS5LCT4cfxJJzIEllmXyy8NmU9ieV2VC/5ig/bXw0pC58dxASNq22R6Isk/LitjJnFi0MQmfvoYtlrne3UwunMMw+jRP6he+cMazpVd6gT82E6c/kO2QhvMHOhJdUHzCQpv+aOn6z9IfVpTnwY3nF3Sx8Fxmf5JdWv6LyjdeJ3yE5yJNxUvoiftQvzDvpixTkQ/vYik3KE92F1RdZJYWbH+fQ7d1cFgf2fibcov2T1r/UOQs/hJOWOGntywtPS2f+jMu0hZXFKeo2ihwWzVzx6t/UkkxOyiSNHJZKPmwJYF3EKpY26ZWqbOVbmnEwe3il69Sx+f8xRf1Vmv6SXBsv15AcSo6Nl6NkV1x2Iocp1k2BqDiIGiMrthzYum5M2sak4dMKbJWkrXgbk6fSlBYjkq/kKwycxABb4WnbtJKRxkkpMCByKHJ42ghaKQCsPKUYhQFhQBgQBoSB5sWAyKHIocihMCAMCAPCgDAgDAgDEQbOGnLIAVd7tEJo3hWC5Cl5CgPCgDAgDAgDwoBh4Kwgh/bdJbumbX9jZo2QK0ALA8KAMCAMCAPCgDDQPBg4K8gh31Diijffn4Mghh+XDoHAh43DDwuHYfr+euYAAAPkSURBVHpvHsBIjpKjMCAMCAPCgDDQujFQmBzy0Wn+1si+RcRHKPkKOl8XD0GCP//hl/S3LGwL83V3Pogc/w4SH/TknxssL763xBfz7Tdu2t/XkRd148vpfLiTdx4IZZg+q/wwnt5bN+jVv+pfYUAYEAaEAWEgHQOFySGfAeGr53xAmG8u2RYvH5VGwPxdkf3LBvEgafzbhAmfL+jjz5fd+UI535sL/xs4/h2npO/gpZFDPrxJvpRJvXjnWbBgQeHyrZ5y08Ei2Ug2woAwIAwIA8JA68dAYXIIGCCIkK/333/f/wct72ad4ztM/C0Pf9nCF8A/+ugj99prr0XkjDT2F0bkhaUw/P/MppBDA2rWH2PnlW95yG39oFcfq4+FAWFAGBAGhIF0DDSKHPIhYbaT9+zZE5E/LHWQR7aCefjoMH4m/L1793piCYlcu3ZtvW3lUpPDvPKtnnLTwSLZSDbCgDAgDAgDwkDrx0CDyWHSnzVzlg8rItvGX375ZZ3H/keQOLt27XKffPKJj8vW8pQpUyLyWGpymFe+wN76wa4+Vh8LA8KAMCAMCAP5GGgwOWS7OEmwkEIsh0lhcT8utUAOsSJaGOTw8OHD0e+GnDm0PLK2lS0OblL5Ybje84EjGUlGwoAwIAwIA8JA68RAYXLI52SOHDnisBxyASQOCIgdF0K2bNniunbt6vg24cqVK6N4hw4dcqtXr3bkM2nSJH8h5cSJE1H40aNH3Weffea3q7nNzIUVCGNYTs+ePb11ct++ff5cI+cbw/Bly5Z5q+S8efNcv3796nzyJq/8MB+9t06wq1/Vr8KAMCAMCAPCQD4GCpPDDz74wBMvto95+LRNKGCI2/Hjx6M4bDHbH4VDJiGPlhaX7xFyKcXy4DYz1kfCcMkrTg6J+8wzz3iCSLxjx45F6S0f/KwcuwBTpHxLLzcfNJKRZCQMCAPCgDAgDLReDBQmh0VBwBlDPm/DGb94GvwIS7I8Wly+b2jvaS5lVFVVpcbjBnVSPkXKTytT/q13EKhv1bfCgDAgDAgDwsApDDQ7OZRwTwlXspAshAFhQBgQBoQBYeBsw4DIYXuB9mwDreorzAoDwoAwIAwIA6XDgMihyGHq9rwGXukGnmQr2QoDwoAwIAy0VAyIHIocihwKA8KAMCAMCAPCgDAQYUDkUGCIwNBSVzCql1bXwoAwIAwIA8LA6cOAyKHIocihMCAMCAPCgDAgDAgDEQZEDgWGCAxalZ2+VZlkLVkLA8KAMCAMtFQMiByKHIocCgPCgDAgDAgDwoAwEGFA5FBgiMDQUlcwqpdW18KAMCAMCAPCwOnDwP8DbXT3q6OrDWMAAAAASUVORK5CYII="},55655:(e,n,s)=>{s.d(n,{Z:()=>i});const i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXAAAABlCAYAAABUdbijAAAgAElEQVR4Ae2d+ddVtdXH3z9HURzrPBRErIgUpQwCQgUVFRwQBRRlEFFxQEXFuQ61VdFCXbS1Vq1araLFeaid27U6/hd51+fY7+2+Ick95w6Pz32e/cNZOScn2dnZ2flmZ58k5/9OP/30cMABB/jlMnAdcB1wHRgyHfg/B3AfvHwAdx1wHRhOHXAAH7IR1zvacHY0bzdvt0HogAO4A7hPm10HXAeGVAccwIe04QYxmjtNtxJdB4ZLBxzAHcDd+nIdcB0YUh1wAB/ShnNLabgsJW8vb69B6IADuAO4W1+uA64DfdaBAw84IJx4xFHh4AkHtWR76jEnhHMmT2s99wPQHcD73HD9aBSnUd9a+/aJp4RvHXtSXzuFy7++/F1W7bI67vAjw6MXrgnvb3ggfHHj98KnNzwSHlt2TZh23Mnh5vkXhbevu6eoq0cdeng4unAdecihbfm7BvA7zl0R7lx0Wdgyf1lbBzr5G8dU8bzTxSh02MGHtJ5Xn3VuOOawI1qMzDhxcrjszLmtZ1eKdqUYS/I4aMKE8I1DDutbW79wxZbwxEXX7kePjjDhwAPb4i+fMS8A+JInOnzowRNbz4r3cOzq3yDbFkPivfU7wr4ND4StCy6pMO2uxZeHvdffFz7e9HB4YeWWIoCffdKpFegD/KXLgnjXAE4BWxdeEh66YHX45IaHw0XTvlN1hPmnTAufbn6kAnbAfcs5y6p4RibybJizNDx58brw+eZHAwwj0LWzFocXr9rqHWkczAZuWXBxeHr5+oG3Nfp1whFHtZWDjq37zndbcejjsYcd2XoeZOd22mN7UMBIRb9ev+bOcOKRR7d06uhDjwjTT5gUXll9e4V/JQsco+PKb88vXlfMOKfNMOkJwGEOxcSSeenqW6t7AHzfhvtbFZDiCsD1zLTiuUs3VekcwMe2cqvNH75gdfhw44PVgP/GNXeFa2d9BaZY5LuvuLGyXvasvCnMOvmrgV35MBTeXndP2HPlzeGCb53V0q1X19wRoMOUVWnPOP6bVRzg/Na67eG1tdtaCp8D8JknTQlPXXJdiwaWEjNJaD54/tUVve98c2p46erbKpoqa+GUM6pOS/o5k05r5acv3Lpwedh73b1h1+Wb3cofB4YJuoDOLTil3ccNxhGvqwTg0qsmYc8APuXo46tOct+SKysFBsDppAtOOaO6cNzDUAzguy/fXHVa3jmAjw8Ax8LY/t0rKlA7/ohvVG41KSv6QhxuN0BX8Rvnnl/5E+kYS0+bGS48/ezWOywddMemx0UDHSzwGSdMrvROtADwnZduDNfMWlxddCos8MWnnlkNEEr38aaHWm5BpqsYJB9sfCCsmrmgGnxIhz5TBjytmD6nup940MEVb9C9+7uXV25CQHz59NktnlWGh2NL56+fvaTyPEw0Hy1pY7wMS781s3XFAG/1ACxFPwH93PXMig1tBkFPAI6io6xYL4dPPKRSUgAcxcZa4lp99rlVvAAcBrCM6BT6+OQAPraU2SplfJ9zoTDN3DT3goB+4IJTvl+uuSPcdu7y1rPiFV5yxuw2AFd8zoXCVBarmqsOgEMPvyYWNfeLTj2zChkEmAGoPNKc/9/ZAXS1+gBDhXopnYdjU9fXnL0oCeBN2hsAzwG34p9dsbF/AI4LBZC2Ps1OLhSmwJOOOq5NoR3Ax6ZSp5Q3BeBYqHxHwaXCh0YL4LhIrN86ptkUwC2tJgA+b3L7qZ24ddB98YNRgv+SZwvgz192gwP4OHChsMqEdi9Z2NKVfoY9WeAAOB+K6HBMJWGsE4CnmHcAHz8AjuWKK8PqwY4lq1ruNNwZFsD5CI7VzGoRZnmTo8E/B+C48fBt23JyPnD826QnLVYQ1rtmh8RhXccATodl0MF/Tx8gj1bXOICPH32WfrHu+5drt331ETP6eI7enmQ+bCpPHKI/K789v3hh4NjVVT0BOD5NmMCqwZ0Coyg6CsyzLjoDvkbiY6Z5BsB5RyfgogNbJlN5PG44O8kREw+tPu7hU+bC1YB+sG6WD5X4s3Gb8FGINkZvcKugS+jGA0uvquLxdZMHEEV3uF88dUZLv/CdS//kwgDA9eEU2uRjOSudj7Jx62FJk08A/uRF66p0APyyabNa9Mm/Y8mVFfDDFy4Z6SR05ULBAocXvfNwOPW2TrsB0qxCQY9uXnBxWD59TrUKjw+X6JW+keRojegywhwTHj92FbSfbQswH3TghDZg06omBm8BoMrEODjkvx8JFdcppMPIyOiUlvcqv05apYEn9jjo2cPxrf98WL/3vJWtlVCfbX60cjHPNPsPSjry1SaeIypdRB/jS7M80ejaAhcBD8e3wnr7e/u7DqR1ANfaoAd3B/Bx8IHFO1i6g7lcXC7DrgMO4A7gPv13HXAdGFIdcAAf0oYbdsvB+Xfr13Wgdx1wAHcAd+vLdcB1YEh1wAF8SBvOrZferReXoctw2HUgCeCsY/XLZeA64DrgOjD6dMAOOkkAtwn83q0U1wHXAdeB0akDDuDuQnH/p+uA68CQ6oAD+JA2nFtEo9Mi8nbxdhlJHXAAdwB368t1wHVgSHXAAXxIG24kR3kvy61K14HRqQMO4A7gbn25DrgODKkOOIAPacO5RTQ6LSJvF2+XkdSB2gA+b968cPvtt7ddixcvbjxyL126NDzxxBNh2bJlYcKE9uNER6LiK1euDHPnzm3Mt3j7uvkXHx46ULgOuA7UBvCnn346/Pvf/w6//e1vWxeA3kSJPvnkk/DPf/4zfPTRR+Ef//hHAAyb5O81LQPG3//+97Br166uyv26+e+1/p7fO7zrwNjSgUYA/uc//7kr4ENptm/fHv71r3+FqVOndk0DOmvXrg2rVq3qisZ1110X/vOf/4QpU9p/tVVHqfvFf52yPM3Y6mTent6eg9KBEQNwLHcsb6zgSZMmdQXACGHv3r3hzTff7Cr/559/Hvbt29dV3n7xP6iGdLoOEq4D408HGgE4LhRcEFw7d+4MxxxzTG0wxGXy5ZdfVm4YrGBoLFq0qHZ+KWe3AD579uzK+l6xYkXluvnb3/7WqOx+8a96eDj+Opu3ubd5v3WgNoADtjt27AgLFy4MW7durYD4e99L/6Q4ZhKrG9DG/43f+/TTT6/A/C9/+UstEJ0/f3744x//WF24Ybj0zMfVuLzU82uvvRb++te/VmlxwTAYpdKl4nrlP0XT47wzuw64DvSqA7UBPC7o3XffrUA4js89A5jbtm1rgeadd95Zgfrhh3/1Z/tcPuJPOumkatBg4Pj9739ffUTlnuvYY49t0czROOqooyrAfuedd8L69evD7t27q2fu65QP3V74z/Hl8d6BXQdcB3rRga4BHF9y6qPmeeedF1LLC3FZPPvssy2wxXoHFLFum1SgGxfK5MmTw5/+9KfWhfuGGQFx8QfNQfPfpK6e1ju364DrQEkHagE4IIsLYsuWLeGwww4LrOYAfPfs2dMGvjNnzqyAEXCcPn162zusXvzIa9asCXPmzAm4Tz7++OO2NCVG9Y4PmPCi527CzZs3V/zHeUeC/7hMf/YO6jrgOtCtDtQG8Mcff7wCPcCZC3fExIkT24AUSxdg5zrxxBPb3h155JGBddTK/4c//KFyjXTLeC/5Nm3alATwYeG/l7p7XgcL14GxowO1ANw2OB8gY+C27/E3A9Y2zt6zcgWfto0bTffDzv9okqXzMnaAwttydLZlYwD3hhydDent4u3iOjD+dMAB3A+zGrWzIQek8QdI3ubN2twB3AHcAdx1wHVgSHXAAXxIG84tlWaWisvL5TUWdcAB3AHcrS/XAdeBIdUBB/AhbbixaE14ndxKdh1opgMO4A7gbn25DrgODKkOOIAPacO5pdLMUnF5ubzGog44gDuAu/XlOuA6MKQ64AA+pA03Fq0Jr5Nbya4DzXTAAdwB3K0v1wHXgSHVgQrAOVPbL5eB64DrgOvAcOmAA7gPXj54uw64DgypDjiAD2nDuaU0XJaSt5e31yB0wAHcAdytL9cB14FRpgNXXXVVeOyxx1oXz9dcc02YNm1aW1s5gI+yhhvEKO003fpzHRguHeCvYfyCUte1114bbrnllsCvKE877bQWiDuAO4C3lGG0d/Ljjz8+PPnkk2HSpEkD5fmBBx4IZ5999kDLGO2ydv5GHvAXLlwY7r777nDFFVeEGMBvvvnmMGvWrDB//vwwderUlm46gBsAv+uuu8KqVatawumXEiN4pkM/+clPAg0huvzCjf+CMjVSnIfpjnPCCSeE119/Pbz11lsBIO+XnPg7VEzr3nvvDZ9//nnVYeJ3pecVK1ZUvw3kf7CldF/HO6y3559/vroWLVo06vhDJvS9++67b1Ty1kubXXTRRS3Z8z/hHK2VK1dWFveGDRv2A3BZ4oTLli1r0egKwD/99NPw5Zdftq5f/OIXLYI55kZDPFaV5Vv3gCj8/frXvw5YX/3kFeBBXi+99FKlnLfffnuL/nHHHVc12IIFC1pxvZQNGO3atav6H2kvdEZj3ocffjh88MEH1e/4LH/84FrtSPj000/XkuUNN9xQgS15Xnnllf3y0FHefffd/eJt2fE9+gVIpgaFOO2gnp966qk2eVC/Cy64IKxevbrSvy+++CIAEP0qn/6yZMmSvtDDyPnVr37VFa1+8tEv2YjO4sWLK9n/5je/CT/+8Y+z9RsIgAMyjIo/+9nPWgWjBBSGJcRFGpjFosTanDJlSvV8/vnnhxkzZnR8p7yMVEqvyp911lmt6SwOfEYflac0dUPynXrqqdXFT5l/8IMfVPfwDQ0BOBZUykrhR81NlZX6/O53vwsnn3xyVYZ4RUbIigueFE9IPYmnPPJdfPHFLZnyHhcCndJaotBAUSiLAYH8lmbu/owzzqjokT6WvXi58MIL28oivtQu8HXeeeeFmTNntvHAM3UjZGBDlnXakvYBiK6++uo2evBBmzHtzNUvFU9doYdcKf/MM8/cL7/KBPhSNOI4tZnaLX6PTp177rm1aCkvNFOy1/tUyADy6quvtvqm1RHSY6ykAJx0tAdT9Jhuig90k7pinDBz5b5X15YAnP/uUm87EKKn6qfwKhfXIPiI6x8/w0cKq8TTOeecs5/uQ2PPnj37ATiylU8bTN25c2e47bbb+mOBA8BYPTSSdS0A4Php4opt3Lgx8A5GP/vsswpMXnjhhSpd6R2NRYdi2goAPfLIIy3aTJmJe/TRR6s03GuAoHxGtA8//LCtsWO+Us90/Mcff7xVDmmIQ8GpL/WwlhngAY/U65NPPgmXXnppW95UGbhLxP8bb7wRsBaV7sYbb6zKgmZsNfJMPPwRUmfkR158wPDGaA4fO3bsqOK3bt1a0SPtRx99VMlECq8yUyF1Rn7UmbJQIKWjfNoEmVAmCqZ3qlfcLgw4pIUHQuqtPPAGPS7KJJR+KE0qBGjhLfVOAG47eyqdjZM1D1CkBmqlpb2wxPVcCgFO5EQdrZwYIJAVdaXNSFNHd0qy78QHAJ5LQ/kxgONTJR4Zc8Gv8uf4AKRoQ7Up9xYjlL9JCICjM8gKPuhr6uu0s2bHDBaUC+1e+Vi/fv1+/a/Ecwmr4Pm9996r5ML99u3bW3KEZgrA6c/oBe/RG+pJv4594I1cKFhHACNMMCVjlLOVQsiAG52dSyMIaWgEhHvPPfdUFu4Pf/jDVt7cuxdffLFl4a9bt65qRFsefKBgjMLc23d0MvipA1Y2H4JCOeM4KT+Dly2LMtQgDDAWjC0Ne481c9NNN1Xy4CtyyoKkvBjAofH2229X+eADpRAooNT3339/xTdgyQiuMumIyL6JLJCDXGCXXXZZVWfaXzQV7t69u/JB65mw1C68ByDhRy4i7ufOnVvRAfCwbjEQLM3UPRYJ7Z96B//wwYWcFi9enExn8zKbpD11MdjYD0NKC4/43fVcJwR81Fakxyqj3hoosPZT8i3RTsk+lx6ekSk6wkV/smlTAK7BHwtafUxtZvOm+EjRs3ma3IMPgBf6y4yS9pHPmHZOAbjod8MHbf7ggw9WAxb38WxFtG1Ywip0UBhBXfbu3dsm+xSAz5kzp9IP5I7e0L/5VtYTgEMMpXvooYfaGFBFECydAADksi4AGFdnA2C4lC/3DnqbNm2q0mFJUTYjnfIhGHyWPKc6Wh3Bi5bCHIBLSXARwAfpdU8D/OhHP6oGL3gSrVIoF0qOxxKAUx60sUKUH3eWwAp/uuJJh2zguSmAq87QIv/y5curclGu73//+wF3kyxIW9dcuzBooejvv/9+RU+WGbQxBhj80S1mcdIVSze+B2Do2HE8zwwS1BdQZFBF+VPpbByzAqweeKHO1G3btm375aOt6wzUlnYM4LyjvsgKWpKtzZO67yT7VB7iAHBmUxhgXLg3bNoU0MGXnQkhG2ZW5OvER4qeLa/JPfhgfeD0UeoDjUEAOG1Fu6CXYBBGVid+S1gFLRkQd9xxR9i3b18bvRSAUx4DLh/OGazg5dZbb63wzlrd9h73qfjMfsQEMGEWwc2ePbuVgYzEp1wovKMR7LRZBZXeIUhcCqShM1IJ6y+0grH0erlvAuACRpSajs5lP0aW+OgFwAWsMX2sOIAcuTEF03vx2S2AY4Ehe/n5sSAAYmYSlKepnspLtQtgSzzWNfygK70CuKatKjcXwmOdAeGnP/1pBaqiw2yHmaaeFWJ9p2ZHep8KUwBOOixwZqPItw6Id5J9qmziADzNIlNpUoDLDAyZKD2AItdcJz5S9ESnaRgDOB+R1S6DAHD4w2LO4VWK/xJW2f4APtQFcIwZ5Iw3Awuctd7z5s2r+h19z164jKxRnAVwmMeyZtSAMfyGqlC/ARyrCSsA65uRCyGpLEIrGBvPPQ2MhWgt0ThN6rkJgJMfATMKUg5WH0JN0Y3j+g3gzFRU15dffrltmob8kBUfEOHDNnTMl56Rgz5Q46qgbfUOWlriiIWGRa13hKl2oRPKLYKvkjRr166t8gFe3Vjg1AO+Yt8tcgBosBIZfNAD+90CHgFh9InBRLxjnBCHe4P2sTwqDW5B4nOGitLFIXStCwVd0YdQZgl00Nh1F9PgmbJLsk/lIa4TgNOGsVWO8YTVzodWXCe0kz7IdeIDkMUNQdnxR0zKIX+dAYv86A7uLPQYACOvlswxKDEjIh104ZF7XSU+lCYV4jaM5ZFKp7gSVsGvLPAUgD/33HP76Sd0hREMhm+++WaFM9bi5j43OygCuJjmi6utJJ0JZnVpuZWsL4QbW2uld1QaxRc91qyqbMAAepQpK13vCLGeyKePHfZd6b4pgNORbb01xSyVwTs1jkBX6QEe6FE3+OdefkcGTcXjd1QeOhhyVXrcCjHA4PKQHDX9VP5UiBzoNMifMu0HZH0wpXPTgVAwwBI6uXZhhQl8AVTkw7L7+c9/XuWBPiBmXSiUneIrjmOKKf+o3gHKTLklK3hC3npPiBWEPOxKE7lblE+uKpuPOGRj40r3yMe2J7IiPR8ska10h/azvORolmSfy0N8JwBXP4Qfrd5hxkYfRk7IxLpTOvGhb1bQiwd4dAl6119/fS050qeQm3TLulMwAuAPWarNrRxKfNh0vd6XsAr+LIDHGMgsDDlx6buT+OH7DbJi8Adv4wu3ttLasBaA2wyDvKfz0bmalAEwWh98k7zdpAWg4o+63dDpJQ8dDssuR0Mfo3LvbTwghasGminXC3EaHFPvLS17b0GqST5Lw96zmoO19AANFpp9B337Id2+K+kHepPiDUuQwcLWwdLs5p4OGFuonejAWzey70SXGY2dkSi9vifoWWEnPmgb+gWh8hAyawes4vayaVL30EnpN/0uxbdo5PjQ+36G3WCVyscQ071CDIY632+UXuGoAnAx5eH/poaDloUAfNDl9Is+M5emgNC0bKa/OYunKa3xnB7f8jPPPLMfWI1nmcR1Z0DCPcuMNWeExHnsswO48aNZwYyX+zVr1tT2548XmXg9+2NAMNDGVrnLtl22yIf9It3O6h3AxzmAe4dq71AuD5fHMOmAA7gDuE9xXQdcB4ZUB0YMwFlKZFc4DNMo57y2W2V8IWe1A5d2yg2zjFh/y7K1uA7scu3mw1JMZ5DPJR5ZoZTbS1CHJz4kqp17oVOnLE/T3sfqymPEAJwlSyyVqcvY15GOpT0sBdLFF/Q6fODrG4lTANmKz+oI8cSHNngd1CocNuBIFgpZ88tSKW3sYbef+Ok1ZDDQjtxeaTXJz9I0bTay+eyZGzY+dw/IaRNULk2/40s8suEsXsqWK1/tq5D183xgo53ZJ1B3uWeOvo0fqf5iyxzN93zElNwJ6+IOdUoCOEuC4k0gLGeyS3tYD8yWTut8Z7kRCqWlT/Y0whjAWUpjz/HAmU/61LKukvBTfABoKB+02MUXr8Eu0eMdQozXV2tjQ3zSGGUBaKzhZB039Y/ps+knXp8cp6nzzFpY27jQpFy7tAq52l2sli68pZYw2TT2XuUhP132PUufcgCeahfy0iZszpCOiB7yZQBlzTh82jopTdMQnlOnIkIHfeMdYQzgLPdDhvCBfDuVSx8gLeve2S/BfbxkMCePEm36R05/SzzSxsizCYBTT3Rb7YxcxBsbn3IADo/xaZnKR511BoziBtVfcnyUTs0UT3EIjxabwEO78qmEVehC00Gc9fOcHSXZE8Y85Z6TAM7JYnwZRRFYUkWnY0sx26ohREejwQETlr9ovWzpxEEL4OyoAyR10A471aDFpgsW8seL3HPM5/hgHS906JgKrULm6Ck+BeDEMYNANtzr0Bo2RlAG8kDJea9BCIBFPsSzOYGrF2ASoIpPC+DUL3fqHQrBO/hGznXdApSHDFVeHOYAPNcu7HqjfMnQboZCtuKP9/Yd5QKoyBJQivlg4xfvbMfR7k1kT5l2uzSdk/TEa2OULHAd6AUYo491ALzTiXg5ecT1sM/s1pT+wqfd3VniUZtn0DVma3UtcOrJQWOWB93nAFw7IuGTtrM8sjwVGSJnLun9IPpLiQ/0nrqhT/DIfWw8qJ4KwQ+7iYj6ST9KWNXNiaWUCYBrU5V4qBsmARyFY4s6nYUKwxg7zZg+CzQY4RltUHKmWSqQypMnPo1QAA5oI0i7O4vybAdj1BS9XFjiAx5QHpQG8KK8utt5KY/0sQVOnEAb+kx7xBvlUGcBt+K1NV2zlDr1Ut5UWAJw2gMeZPEwqGpTFG2BEmK1wSOAUOcoAMqj3jrZzu7Ghb8UgJfaxdaJ9ocPG5eip/fM9uAlBnbeo3+8yx3TyswR2WinK7MGAA6rirYjrzoogK9ZBUBJPvHQKWQgj7f715VHiXZ8CmCOR+khR6RCjz7cBMBJr7a26+BzAE4f065pXIi5kxsZkC1GiM9+9ZdOfNC+tI1cjiVZ864E4CWsQp+FEQykdQ9CA8DBV8keT0QnHvU+CeAUznZntkEzilMhFB4lBwwQhgiwT99uOSat3mMFyRUDgAMidIgYCHTeM/nYussURvRzYYmPVAPoPIocPRtPg6cAHFcJ6eKTxnIKiYIiPxoWqzdn4diyS/clACdf7tQ7lA7ZcpYEF+1Q54OyABxA4+Jjn+UvBbildsHywU9MRweEYnBM0bPllaaWqXe5UxEBNfRWtGVhQQOedOxvXReK6CDjGMBL8lC+VIj7IXUSZIlHLGD413S/qQsFPVFbW2MjBeDMOigL3Yd/WZ+a6TL4Aeqa4dgNPf3sL534gDf6M3XgXvymZK64FH5ogM9hFfJCHugwfUx9UTRLIQDODmPJ3s5kSvl4lwRwGgOigDZTOUYShIAlA3jZD2kwa0deKm+taTEgCxxaKHosSMAOIWPRW+tW+eOwxEeqAdQpYzqp504AHh9Uk1NIaKPQNAidA7qxbzRVfi4OOtBQJ8HaRmksTeLiU+/oSLQlHVpXnVEeAAfccvykALfULvi34YNVLOLd0k7Rs++b3OvMDwZu2odBVJ0Qg8MORgJw5Ip8Ndj3A8BL8ijVhz6QOgmyxCP+cvRBRlNTAM8ZGCkAl2z0XYzDljSjYkUPfGB1MwOhz9cBcOTRtL+U+JB8aVMZX4orhSn8kO6QL4VVwgBmiOpj4ESpHL3ruwuFRqHSXIxwNIwah2kIjYO/kXRYUpbRTgCOO4HRhpFZisZuQG0jpfKUq8rlwhIfqQYYJIBj8cBzfAogIKkPihzJi9ysK4cpP/ngN1dPG4/iQEM7t5haMxiShrYQ8OA6we+oU+/42S7th7KTFivC0s3ddwLw1OlqpXbh4DEGfMrjewl1kZuHOKbw8j1KN8Qb8gP8ZUkpnhB3DO/kIiEOmRLHPfVGztSHZzoZ75gR0LF5pw4KuDPzBEjQRXgkT50LvY5P5ivJo0QTnnKnEeZ4FLhv2bKl4hejoYkLJQfg9M/UQI7uMe2nDRmcKY86MUAjN/SVvoGsWY6o+nbbX5Q/DnN8KB2ybALgGJvSHfqw1Y8SVjHoMrNjlkR/rOOmhMe+AzhEYVqVoDHsEkAsOuJIg4LI5SGrh3ex4sgChzYdB+DXr5tYpgQtlIQLpZDwS2GOj24BXFay6maVFv6kBAxYcf1SpwDiD1O9CFFyOpnqBKBQlj1xUO9yIX51aJEP/nTcZqdT75jSkQcgZwaFZZQrQ/GdABwrWoO7Oi95c+0CIJEenyXyA4js4M80VC4n6gj4iRcGIfhPnc9Ne/PODtKsHIAWAxnl2VMRAXTiKUPlCcDpoMTDJ4AMXfHQKcydiJeTR4le6RTAEo/oodoZGcd6miuTPDkAB5DAAumOaHA6KLLiQhftR2T6NumJ53RD/ODKR9hNf7H57X2JD/iWPFKnmVo6umfxBnxzwTeh9KOEVbhdqbNkkvpeozJsOBAAtwWk7hld7VKbVJomcYzidUAlptlvPmL6TZ5xZVjQUd7USW16p5mHnuuEDAJa+ROnp3zrUrHvkVWKP5umm/vU0sRcuwAGlocUr+iBPvxafkqyyr2zclX9+7gAAAbCSURBVIInSy+nb+hiqk42b+6etkm1d04eOTrEk0crJmLeSzySR0ZViX7TdymZ0J45OWKFwqfqEpfXTX+Jaei5xIfSNA1T9YVGJ6yi/VP627T8OumTPvA6GT1NvWm1y8nl5DrgOjAoHXAAr+nfHFQDOF3v3K4DrgPd6oADuAN4m1uhW0XyfA5CrgMjrwMO4A7gDuCuA64DQ6oDSQAfptPm+GDDci++DrM5hSVKfMHXKWoj9THBrY+Rtz6GSU9dP0ZeP8aDzJMAznI5FuGzBIndQf0SBMvO6uwAbFKe1rqyZA/gJi9L0yiH5UPx1/smtPuRdhB1/jpOvWsiCwZRls71a/BkCZeWZikcplMR+y0PLXeVLFi6Vqd9+s1HnTI9zWAHriSAS+ilnXG509UAzNRpcywdY1sx625Zh5tbeqSy64as59XZDzaPdkalAJwlR6xZTS20Jz2WXcwfa5Q5b4QyWD5JHe2ablu27jvVOVeW8schgIjsWNfMcQTcaxkeS5t41hI9dsNpY0vpdDXSQ4MlUww2cZk8syyKjTTxu25Pm4PP3BKtuAyeWY8OSNFuumy6fuopbQxA5k5FpM3Z3JHSK8uT7pE9BhHGROq0ypIuikYuBMDjIx+ko2zAo92UtxMfpGtyaib6xlpvdmCqDA8HC9Yp+XYF4Ci4FscDoFpry/kHdDQWv6NcdiE7m1VYEE887zm8xTLU9LQ5AJgt/NBjpsA9HUU0cwBOPDu3yMelzUTkYysycfBJ/exsgXTEUSfScK81uiozDkt1LpUV09EznRLZUbY2GWiDAR2XwZGjCDjKgDTapZna2KR8bKYhD4MCNNnwo/Kw2N55552qvrQr6VRn8pGH9udCruQrnTYHWCFH5Ae9YTsVkZ2ukgOypR9IVrmwJI+SLubo2XjkGAM4cSN1aibHBFAefc8OFpZHvx8sqDcGcCxTwAHAwCKkU9uTxtRgqdPmUmcqKH3T0+awgmWZsauLe4EINLmHz9hSUofSJgIUUJYqZ0/gSye/dtWJP0LS0nGxWrm373L3uTp3KitHj3h4iA9NIl5bmF9++eVqV6J2z3YCcA2m5Lf1Yms74MyGDOinZizEM6hYHcjJnhkYgwSyp10AwxxN6OqibeFLp7XFh6GlLPBe9DRFD14AbHvOjz3wSbymwpw8SrqYohPHIZMUgOtEPNrdniuU46OXUzPZQIUuw4vVgZhXf/6fPvdTFo0BvHS6GtZZ6bS5HJipQlhouo/D3DsAJjWNyykrB+uwtVf0sd41UwBQ9EcYrE8GACxlpUVJqQPP0Fd8KczVuVNZJZqdABzwYoqrwasTgNNmlMegTJ1VNp0/9w2km9PmAEB45zwULsDcznJUbhwKwHVamz2IirQpwO1FT1P0KCd3El3Mb/zcjS7GNFLPOQDXTBQLGQNLeXN8oCc6UqCbUzPpmxgN6LTK8nAwgB3LtTGAl05X63TaXA7MYqaaPDcFcECEczFUBmcl7Nixo3oGUHReAkoNmOkwKtLTYdQ5lL9TmKtzp7JKdEsAnupEdQFcR2KqbKbGgJmeFXZ72hwfNpG3TmsjHLZTEdEL2hRgtNatZJMKc8BZ0sUUnTiuE4DzMb8OgEMX3343p2YyqKGPXHUPSYvr4c/dg30RwPt92px85IzYuF+sVd30tDk1eg7AmaYDwPHHNwAa3y0f0XCdkAbLE3pYH1joWN8MVICsyiHsBsBzde5Uli03vk+dekcaXCApAC+droYvWxZ4DODIChkA2ACX/OZy1RCHrADlOqfNDfupiKWT6OI2ss/ICN2JT6ss6aLNn7tvCuA5Pro5NZMZHoYQPDCDtX05x6/Hdw/UOdkVAbzfp83BhD5i0fD2j+ZNT5tThQBwHbupOIW4SigHUJMlDegAgMQD3tadgnUNYPGOS38bgV43p5qJj1SdS2UpXy6Uf556cZIZ6VgRwjN1IrQflRisqBcX/mpCgXEJwBkE9fEWuuTVIUnEUw606p42B5/DfCpi6SS6XFspPnX6XkkXlS8VYrlLfwlpA6XjWbPEQZ+aycyOFUUq28P+A3QnmRYBXJlTS75QvtRphIzEWspGfkBAdBTy4UOrGRRHmDtRrtM7SyO+h2ZqPTIf5qhDnJ5n+ZBT77qNy9W527Jyp96V+Eu1Yym93tFWqbbu9rQ55G51ROX0Gqbq14ue0jax7mB5Et8Nr/SFVL1LuthNOZ3y5Phg0M8tjS31zU7l+fvBAXstAPcGGFwDuGxdtq4DrgPd6oADuFmu1q0QPZ93QNcB14GvQwccwB3Au3IHfB3K6mU6SLoOtOvA/wMBj5iUZcidKgAAAABJRU5ErkJggg=="},53648:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-01-24_at_3.19.59_PM-c076c8cc314f9e3314e2ff420f08a568.png"},30637:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-01-31_at_12.18.35_PM-45d496549cb58a5ba1fd165a174371be.png"},13910:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-01-31_at_12.33.38_PM-2c25f064054fecf99e09c720454f2417.png"},5783:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-02-07_at_12.28.47_PM-228ee56f5c3c22369936897d5daa02b3.png"},52927:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-02-07_at_12.33.46_PM-cf118fb746e69848c33375b784b00e22.png"},56323:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/badge-170207d1754c6c1351ffbd3916500596.png"},5627:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/codeexecution-e96f4c50a33620b5e1c8166dcd98b94f.gif"},3032:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/footer-71b00b1c8bde00aed7f3aa7a2862825a.png"},21285:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/helloworld-a52255e56de5fa3360da1f9ab293531d.png"},89940:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/image1-ed372e2801f0fad53c314d1804a81638.gif"},94115:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/image2-28eb1baf33b03ce6e265f95d042d09cb.gif"},26454:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/image3-32469e2c2ead33338bb15bb430d52407.png"},82199:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/packagemanager-3eba010fbbd170b05c7f35784b08acb9.png"},58130:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/returntypes-6699b76c2993a7451f0b99d7c18d3554.png"},46944:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/sidebar-6896e676190c651d807fe634e1d3798d.gif"},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(67294);const r={},l=i.createContext(r);function t(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/29a0dee3.8150fa4b.js b/assets/js/29a0dee3.8150fa4b.js new file mode 100644 index 00000000..b6fbd102 --- /dev/null +++ b/assets/js/29a0dee3.8150fa4b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[1753],{90618:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>l,metadata:()=>a,toc:()=>c});var i=s(85893),r=s(11151);const l={},t="Darklang Release 1",a={id:"changelog/release-1",title:"Darklang Release 1",description:'In June of 2022, we switched to a "release" schedule where we publish release',source:"@site/docs-classic/changelog/release-1.md",sourceDirName:"changelog",slug:"/changelog/release-1",permalink:"/changelog/release-1",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-1.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 2 - June 6, 2022",permalink:"/changelog/release-2"},next:{title:"Reference",permalink:"/category/reference"}},d={},c=[{value:"July 13th, 2020",id:"july-13th-2020",level:2},{value:"Product changes",id:"product-changes",level:3},{value:"Documentation and tutorial changes",id:"documentation-and-tutorial-changes",level:3},{value:"Contributor-related changes",id:"contributor-related-changes",level:3},{value:"Weeks of 6/15/2020 and 6/22/2020",id:"weeks-of-6152020-and-6222020",level:2},{value:"Week of 6/12/2020",id:"week-of-6122020",level:2},{value:"Documentation",id:"documentation",level:3},{value:"Week of 6/5/2020",id:"week-of-652020",level:2},{value:"Standard library",id:"standard-library",level:3},{value:"External contributions",id:"external-contributions",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"Week of 5/29/2020",id:"week-of-5292020",level:2},{value:"Documentation",id:"documentation-2",level:3},{value:"Week of 5/22/2020",id:"week-of-5222020",level:2},{value:"Documentation",id:"documentation-3",level:3},{value:"Week of 5/15/2020",id:"week-of-5152020",level:2},{value:"Documentation",id:"documentation-4",level:3},{value:"Week of 5/8/2020",id:"week-of-582020",level:2},{value:"Week of 5/1/2020",id:"week-of-512020",level:2},{value:"Week of 4/24/2020",id:"week-of-4242020",level:2},{value:"Documentation",id:"documentation-5",level:3},{value:"Week of 4/17/2020",id:"week-of-4172020",level:2},{value:"Package Manager",id:"package-manager",level:3},{value:"Documentation",id:"documentation-6",level:3},{value:"Week of 4/10/2020",id:"week-of-4102020",level:2},{value:"Documentation",id:"documentation-7",level:3},{value:"Week of 4/3/2020",id:"week-of-432020",level:2},{value:"Documentation",id:"documentation-8",level:3},{value:"Week of 3/27/2020",id:"week-of-3272020",level:2},{value:"Documentation",id:"documentation-9",level:3},{value:"Week of 3/20/2020",id:"week-of-3202020",level:2},{value:"Week of 3/13/2020",id:"week-of-3132020",level:2},{value:"Features",id:"features",level:3},{value:"Bug fixes",id:"bug-fixes",level:3},{value:"Documentation",id:"documentation-10",level:3},{value:"Week of 3/6/2020",id:"week-of-362020",level:2},{value:"Week of 2/28/2020",id:"week-of-2282020",level:2},{value:"Documentation",id:"documentation-11",level:3},{value:"Week of 2/21/2020",id:"week-of-2212020",level:2},{value:"Week of 2/14/2020",id:"week-of-2142020",level:2},{value:"Week of 2/07/2020",id:"week-of-2072020",level:2},{value:"Week of 1/31/2020",id:"week-of-1312020",level:2},{value:"Documentation",id:"documentation-12",level:3},{value:"Week of 1/24/2020",id:"week-of-1242020",level:2},{value:"Major changes",id:"major-changes",level:3},{value:"Library changes",id:"library-changes",level:3},{value:"Bug fixes",id:"bug-fixes-1",level:3},{value:"Documentation",id:"documentation-13",level:3},{value:"Week of 1/17/2020",id:"week-of-1172020",level:2},{value:"Week of 1/10/2020",id:"week-of-1102020",level:2}];function o(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"darklang-release-1",children:"Darklang Release 1"})}),"\n",(0,i.jsx)(n.p,{children:'In June of 2022, we switched to a "release" schedule where we publish release\nnotes once a month. Prior to that, release notes were published alolng various\ntimelines. This page captures all releases before this switch-over.'}),"\n",(0,i.jsx)(n.h2,{id:"july-13th-2020",children:"July 13th, 2020"}),"\n",(0,i.jsx)(n.h3,{id:"product-changes",children:"Product changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Secrets now work in Functions\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2724",children:"#2724"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["When copying strings from live values, Dark now omits the quotes\n(",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2723",children:"#2723"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Renaming rebound variables now properly renames the variables in the\nright-hand side of the rebinding expression\n(",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2722",children:"#2722"}),")\n",(0,i.jsx)(n.img,{alt:"Renaming a variable",src:s(27311).Z+"",width:"594",height:"132"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added support for ",(0,i.jsx)(n.code,{children:"Date::atStartOfDay"}),", ",(0,i.jsx)(n.code,{children:"Date::day"})," ,\n",(0,i.jsx)(n.code,{children:"Date::minute"}),",",(0,i.jsx)(n.code,{children:"Date::month"})," ,",(0,i.jsx)(n.code,{children:"Date::second"}),", and ",(0,i.jsx)(n.code,{children:"Date::year"})," to the query\ncompiler. (",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2720",children:"#2720"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Ensure the autocomplete menu covers the play button\n(",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2717",children:"#2717"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Show unused functions in a different color (to signify that they are unused\nand can be deleted) (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2713",children:"#2713"}),")\n",(0,i.jsx)(n.img,{alt:"Unused functions in a different color",src:s(87416).Z+"",width:"798",height:"246"})]}),"\n",(0,i.jsxs)(n.li,{children:["Show canvas name in the browser's title (useful if you've multiple canvases\nopen) (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2708",children:"#2708"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Highlight duplicate fields in records in red to indicate an error\n(",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2705",children:"#2705"}),")\n",(0,i.jsx)(n.img,{alt:"Duplicate fields, highlighted in red",src:s(9682).Z+"",width:"516",height:"255"})]}),"\n",(0,i.jsxs)(n.li,{children:["Add support for ",(0,i.jsx)(n.code,{children:"String::replaceAll"})," to the query compiler\n(",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2692",children:"#2692"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Typing a comma in a list will now complete the autocomplete\n(",(0,i.jsx)(n.a,{href:"https://github.com/actuallymab",children:"Mehmet Aydin Bahadir"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2650",children:"#2650"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-and-tutorial-changes",children:"Documentation and tutorial changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The footer on ",(0,i.jsx)(n.a,{href:"https://darklang.com",children:"https://darklang.com"})," now points to many\nmore Learning and Community pages\n",(0,i.jsx)(n.img,{alt:"The new homepage footer",src:s(3032).Z+"",width:"2132",height:"418"})]}),"\n",(0,i.jsx)(n.li,{children:"Documentation now supports a Dark mode"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"contributor-related-changes",children:"Contributor-related changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:['Greatly expand the "General Concepts" documentation\n(',(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/175",children:"#175"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Improve documentation around using vim with merlin\n(",(0,i.jsx)(n.a,{href:"https://github.com/fmilani",children:"Felipe Milani"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2685",children:"#2685"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:['The repo has standardized on "allowlist" and "blocklist"\n',(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2636",children:"#2636"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Change the default branch on Dark repos to ",(0,i.jsx)(n.code,{children:"main"}),"\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2635",children:"#2635"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["New PR template (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2632",children:"#2632"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Update the Pull Request\n",(0,i.jsx)(n.a,{href:"https://darklang.com/docs/contributing/making-a-pull-request",children:"code checklist"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"weeks-of-6152020-and-6222020",children:"Weeks of 6/15/2020 and 6/22/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["There has been a\n",(0,i.jsx)(n.a,{href:"https://blog.darklang.com/dark-and-the-long-term/",children:"significant restructure"}),"\nto the Dark project. We'll write more about this going forward: Paul has\n",(0,i.jsx)(n.a,{href:"https://blog.darklang.com/dark-devlog-1-fresh-start/",children:"a new blog post"})," that\ntalks about it."]}),"\n",(0,i.jsxs)(n.li,{children:["We now have a status channel in the community chat. You can join the chat\ncommunity ",(0,i.jsx)(n.a,{href:"https://darklang.com/discord-invite",children:"here"}),"!"]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark",children:"Darklang repo"})," is now ",(0,i.jsx)(n.em,{children:"source\navailable"}),". This hasn't been publicly announced yet, but you can now\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/issues",children:"file issues"})," directly, and also\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/contributing/getting-started",children:"contribute"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Added a contributing doc, showing how you can help if\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/contributing/if-you-dont-know-our-stack",children:"you don't know our stack"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Date::hour_v1"})," is now supported in the query compiler.\n(",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2639",children:"#2639"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["When code is not synced due to the server being unavailable, an error message\ncorrectly explains what happened (",(0,i.jsx)(n.a,{href:"https://github.com/fmilani",children:"Felipe Milani"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2605",children:"#2605"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"HTTPClient"})," requests coming from Dark now time out after 30 seconds\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/2661",children:"#2661"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-6122020",children:"Week of 6/12/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Secrets are now available! Now you can store API keys, passwords and other\nsensitive information separately from the rest of your canvas. Secrets will\nappear in autocomplete in handlers across your entire canvas. They will appear\nredacted in traces and live values, so it's now easier to stream and\nscreenshot your Dark code!"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June12/secrets.png",src:s(3333).Z+"",width:"630",height:"236"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Onboarding and tooltip updates"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The styling of our tooltips and initial tutorial has been updated"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June12/tooltips.png",src:s(66354).Z+"",width:"630",height:"334"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Tips are now available in the function space."}),"\n",(0,i.jsx)(n.li,{children:"More helpful links have been added to the avatar menu."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The SQL compiler now supports ",(0,i.jsx)(n.code,{children:"Date::add"})," and ",(0,i.jsx)(n.code,{children:"Date::subtract"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/aashanand",children:"Aash Anand"}),")"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The newest version of a function will now always appear first in autocomplete\n(",(0,i.jsx)(n.a,{href:"https://github.com/fmilani",children:"Felipe Milani"}),")"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Standard library functions added:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Date::atStartOfDay"})," (",(0,i.jsx)(n.a,{href:"https://github.com/mwz",children:"Michael Wizner"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Date::today"})," (",(0,i.jsx)(n.a,{href:"https://github.com/ThomasMarcel",children:"Thomas Alcala Schneider"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List::dropWhile"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/ThomasMarcel",children:"Thomas Alcala Schneider"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The following contributors wrote and updated tests and made CSS improvements:\n",(0,i.jsx)(n.a,{href:"https://github.com/billy1kaplan",children:"billy1kaplan"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/br1anchen",children:"Brian Chen"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Detailed documentation is now available around\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/workers",children:"workers"})," and\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/cron",children:"crons"})]}),"\n",(0,i.jsxs)(n.li,{children:["We've begun to create short videos explaining Dark concepts. They will be\nadded throughout the documentation, and a\n",(0,i.jsx)(n.a,{href:"https://www.youtube.com/playlist?list=PLpcgNq_UYVoNZVoPEdqoNVemixjkrye83",children:"full playlist"}),"\nis available on our\n",(0,i.jsx)(n.a,{href:"https://www.youtube.com/channel/UCYUv1H0ENhZa4lNjOL-EiYg/featured",children:"Youtube channel"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-652020",children:"Week of 6/5/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Function references now appear when you're using a\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages",children:"package manager"})," function."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/Screen_Shot_2020-06-05_at_2.08.39_PM.png",src:s(17108).Z+"",width:"1698",height:"280"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We've updated some tips and error messages."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"On 404s"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/Screen_Shot_2020-06-05_at_2.10.46_PM.png",src:s(84800).Z+"",width:"544",height:"460"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"On functions that have not yet been run"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/Screen_Shot_2020-06-05_at_2.14.05_PM.png",src:s(58633).Z+"",width:"742",height:"366"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"When attempting field access on a datastore"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/Screen_Shot_2020-06-05_at_2.16.10_PM.png",src:s(6640).Z+"",width:"738",height:"244"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["If you attempt to access Dark via a browser other than Chrome we now link you\nto our ",(0,i.jsx)(n.a,{href:"http://darklang.com/desktop-client",children:"experimental desktop client"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Variables can now be converted to lists by pressing ",(0,i.jsx)(n.code,{children:"["}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/2020-06-05_14.19.05.gif",src:s(65445).Z+"",width:"750",height:"146"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added a ",(0,i.jsx)(n.code,{children:"convert-if-to-match"})," option to the command palette\n(",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/June5/2020-06-05_14.21.05.gif",src:s(64764).Z+"",width:"728",height:"566"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["References are now shown in the order in which they appear\n(",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String::trim"})," functions are now supported in the query compiler\n(",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::getMany"})," now returns an ",(0,i.jsx)(n.code,{children:"Option"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/naclcaleb",children:"Caleb H"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Added font-ligature for lambas (",(0,i.jsx)(n.a,{href:"https://github.com/s0kil",children:"Daniel Sokil"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Copy to cURL now uses single quotes instead of double quotes\n(",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"standard-library",children:"Standard library"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Standard library functions added:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Crypto::md5"})," (",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List::member"})," (",(0,i.jsx)(n.a,{href:"https://github.com/xtopherbrandt",children:"Christopher Brandt"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List::takeWhile"})," (",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jelle Besseling"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::queryCount"})," (",(0,i.jsx)(n.a,{href:"https://github.com/brandonhamilton",children:"Brandon Hamilton"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::getExisting"})," (",(0,i.jsx)(n.a,{href:"https://github.com/naclcaleb",children:"Caleb H"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String::prepend"})," (",(0,i.jsx)(n.a,{href:"https://github.com/brandonhamilton",children:"Brandon Hamilton"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"external-contributions",children:"External contributions"}),"\n",(0,i.jsx)(n.p,{children:"We have started taking external contributions, thanks so much to all the folks\nwho contributed. In addition to the user facing changes above, contributors also\nadded:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Switched the Dark repo from using ",(0,i.jsx)(n.code,{children:"yarn"})," to ",(0,i.jsx)(n.code,{children:"npm"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/snasirca",children:"Shahriyar Nasir"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Updated Linux defaults to make it easier for Linux users to compile and\nrebuild Dark (",(0,i.jsx)(n.a,{href:"https://github.com/ggajos",children:"Grzegorz Gajos"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Added tests (",(0,i.jsx)(n.a,{href:"https://github.com/fmilani",children:"Felipe Milani"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/cooleydw494",children:"David Cooley"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jesse Besseling"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/JustusMoeller",children:"Justus Moeller"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/xtopherbrandt",children:"Christopher Brandt"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/aashanand",children:"Aash Anand"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Made documentation fixes (",(0,i.jsx)(n.a,{href:"https://github.com/danieljcafonso",children:"Daniel Afonso"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/pingiun",children:"Jesse Besseling"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-1",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added a guide to help contributors with\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/contributing/rescript-and-fsharp-for-dark-developers",children:"writing code in OCaml"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added a tutorial around writing\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/tutorials/handle-error-errorrail",children:"clean error messages using the error rail"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-5292020",children:"Week of 5/29/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"It's now possible to set a return type for functions. The return type will\nappear in the autocomplete and type errors will be displayed when necessary,\nmaking it easier to know that your functions work, and making it easier to use\nand understand functions. This means that your functions can also now use the\nError Rail, if you set their return type to Result or Option."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/returntypes.png",src:s(58130).Z+"",width:"746",height:"330"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Datastores can now have fields named id. This was contributed by our first\nexternal contributor, ",(0,i.jsx)(n.a,{href:"https://github.com/naclcaleb",children:"Caleb H"}),"!"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-2",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A section around\n",(0,i.jsx)(n.a,{href:"/contributing/getting-started",children:"submitting external contributions"}),"\n(",(0,i.jsx)(n.a,{href:"https://darklang.com/docs/contributing/getting-started",children:"134"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["A guide around ",(0,i.jsx)(n.a,{href:"/discussion/when-dark",children:"when and when not to use Dark"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/133",children:"133"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Expanded information about\n",(0,i.jsx)(n.a,{href:"/reference/framework/datastores#migrations-locking-and-unlocking",children:"Datastore migrations"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/141",children:"141"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["A ",(0,i.jsx)(n.a,{href:"/reference/cheatsheets/javascript-cheatsheet",children:"From Javascript page"})," to\nhelp developers familiar with Javascript learn Dark\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/132",children:"132"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Documentation for the\n",(0,i.jsx)(n.a,{href:"/reference/packages#createcheckoutsession",children:(0,i.jsx)(n.code,{children:"Slack::createCheckoutSession"})}),"\npackage (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/139",children:"139"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Made a few improvements to the\n",(0,i.jsx)(n.a,{href:"/tutorials/first-dark-application",children:"Your First App"})," tutorial\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/129",children:"129"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/130",children:"130"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Misc. spelling fixes (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/128",children:"128"}),",\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/136",children:"136"}),")"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-5222020",children:"Week of 5/22/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We've added more information to the sidebar! If you're not sure what a section\nin the sidebar is for, click on its name and more details will appear on the\nright side of your canvas."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/sidebar.gif",src:s(46944).Z+"",width:"2052",height:"514"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We've done some major infrastructure work behind the Cron scheduler, which\nsignificantly improved its performance. You should now see all Crons,\nincluding those with a 1 minute interval, running on time again."}),"\n",(0,i.jsxs)(n.li,{children:["Return values and execution fade are no longer stale when taking functions\non/off the\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/discussion/error-handling#error-rail",children:"error rail"}),"\nor when committing ",(0,i.jsx)(n.a,{href:"/how-to/feature-flags",children:"feature flags"}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-3",children:"Documentation"}),"\n",(0,i.jsxs)(n.p,{children:["Thank you to everyone who contributed to our docs this week! As a reminder, our\ndocs repo is public and all you need to do to contribute is\n",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pulls",children:"submit a pull request"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added instructions for ",(0,i.jsx)(n.a,{href:"/how-to/static-assets",children:"hosting static assets"})," when not\nusing an external framework.\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/119",children:"119"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Fixed a broken link on the ",(0,i.jsx)(n.a,{href:"/reference/languagedetails",children:"Language Details"}),"\npage. (",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/117",children:"117"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Added instructions on how to pause your cron once you're done with the\n",(0,i.jsx)(n.a,{href:"/tutorials/first-dark-application",children:"Your First App"})," tutorial.\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/122",children:"122"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["New how-to pages:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/how-to/feature-flags",children:"Feature flags"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/118",children:"118"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"/how-to/write-tests",children:"Writing tests"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/120",children:"120"}),")\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/126",children:"126"}),")"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["New tutorials:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/external-db",children:"Using an external DB"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/124",children:"124"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/ifttt-events",children:"Alerting with IFTTT"}),"\n(",(0,i.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/125",children:"125"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-5152020",children:"Week of 5/15/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We've added a Hello World tutorial that will show automatically for new\naccounts. It can also be accessed via the avatar menu."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/helloworld.png",src:s(21285).Z+"",width:"610",height:"228"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages",children:"Package manager functions"})," and\ntheir underlying code can now be accessed via the sidebar. These functions\nwill appear in the autocomplete, and can be used like any other built-in\nfunction."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/packagemanager.png",src:s(82199).Z+"",width:"634",height:"662"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"It's now easier to add 404s to your canvas - the entire line is now clickable,\ninstead of just the plus sign."}),"\n",(0,i.jsxs)(n.li,{children:["Made a ton of small fixes to feature flags:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The correct docstring now shows when a feature flag is selected"}),"\n",(0,i.jsx)(n.li,{children:"Feature flag expressions now show the correct live value"}),"\n",(0,i.jsxs)(n.li,{children:["Feature flags are now correctly created after pressing ",(0,i.jsx)(n.code,{children:"Cmd+a"})," to select\neverything."]}),"\n",(0,i.jsx)(n.li,{children:'Feature flags no longer incorrectly display the "code was not run executed\nin this trace" error message.'}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"404s should no longer appear off-screen when added to your canvas."}),"\n",(0,i.jsxs)(n.li,{children:["When possible, we now display more information where we were previously\nshowing ",(0,i.jsx)(n.code,{children:""})," messages."]}),"\n",(0,i.jsx)(n.li,{children:"Clicking to go to an error on an infix function now works as expected."}),"\n",(0,i.jsx)(n.li,{children:"The command palette will no longer appear behind other handlers when opened."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-4",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Reorganized our documentation site, breaking tutorials & samples into their\nown section."}),"\n",(0,i.jsxs)(n.li,{children:["Added a\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/cheatsheets/python-cheatsheet",children:"From Python"}),"\npage to help developers familiar with Python learn Dark."]}),"\n",(0,i.jsxs)(n.li,{children:["Added three sample canvases:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://darklang.com/a/sample-gcpbucket",children:"GCP Bucket"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://darklang.com/a/sample-firebaseauth",children:"Firebase Auth"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://darklang.com/a/sample-crud",children:"CRUD app"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Added a ",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-app",children:"Setting Up OAuth"}),"\npage to the\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/category/walk-throughs",children:"Building Slack Apps"}),"\nsection."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-582020",children:"Week of 5/8/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We now have Dark badges for your sites! Add a\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/sharing-dark",children:"Made With Dark badge"})," to\nyour apps to establish your early Dark expertise \ud83c\udf89"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/badge.png",src:s(56323).Z+"",width:"750",height:"300"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'Clicking on a link in the sidebar will now always jump you to the correct\nplace on the canvas. This was a super annoying bug that we internally referred\nto as "the dreaded positioning bug", and it is finally fixed. A blog post will\nbe out describing the horror show behind this next week.'}),"\n",(0,i.jsx)(n.li,{children:"Copying & pasting now works properly for pipes! We'll no longer lose arguments\nwhen copying between piped and non-piped expressions."}),"\n",(0,i.jsx)(n.li,{children:"Re-ordering function parameters works again. You can drag a function parameter\nto change its order (and we'll reorder the callers too)."}),"\n",(0,i.jsx)(n.li,{children:"When you invite people (go to Settings), we'll error properly if the invite\nfailed."}),"\n",(0,i.jsx)(n.li,{children:"When you try to access Dark in Firefox or other browsers, we'll tell you it\nwon't work instead of crashing."}),"\n",(0,i.jsx)(n.li,{children:"You can now drag much more of a handler to move it (now including the\ndocstring and return value boxes)"}),"\n",(0,i.jsx)(n.li,{children:"When clicking on traces with errors, we'll no longer incorrectly color the\ntrace dots."}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Result::map2"})," and 5 other ",(0,i.jsx)(n.code,{children:"Result"})," functions now goes to the error rail."]}),"\n",(0,i.jsxs)(n.li,{children:["When you press ",(0,i.jsx)(n.code,{children:","})," to add another entry to a list, we'll now support it on\nboth sides of an existing ",(0,i.jsx)(n.code,{children:","}),"."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-512020",children:"Week of 5/1/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We now show you the exact execution path of a trace, making it easy to\nunderstand what happened in that trace. See which code paths are executed,\nwhether ",(0,i.jsx)(n.code,{children:"if"}),"s return ",(0,i.jsx)(n.code,{children:"true"})," or ",(0,i.jsx)(n.code,{children:"false"}),", and which patterns are matched. This\nshould make it much easier to understand code at a glance."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/codeexecution.gif",src:s(5627).Z+"",width:"962",height:"578"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fixed a bug that caused text to sometimes be selected in multiple handlers."}),"\n",(0,i.jsx)(n.li,{children:"It is now possible to drag both the return value and docstring fields on a\nhandler."}),"\n",(0,i.jsx)(n.li,{children:"We have disabled the visual identifier for error traces, due to them turning\nall trace dots red. We plan to fix and re-enable in the future."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-4242020",children:"Week of 4/24/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We've added ",(0,i.jsx)(n.code,{children:"Http::setCookie_v2"})," which handles the ",(0,i.jsx)(n.code,{children:"expires"})," parameter\nproperly. It also has much better error messages"]}),"\n",(0,i.jsxs)(n.li,{children:["Added ",(0,i.jsx)(n.code,{children:"Dict::member"}),", ",(0,i.jsx)(n.code,{children:"Date::<="})," and ",(0,i.jsx)(n.code,{children:"Date::>="})," to the standard library"]}),"\n",(0,i.jsxs)(n.li,{children:["Updated a few standard library functions:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String::isSubstring"})," is now ",(0,i.jsx)(n.code,{children:"String::contains"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"List::contains"})," is now ",(0,i.jsx)(n.code,{children:"List::member"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"String::contains"})," is now supported in ",(0,i.jsx)(n.code,{children:"DB::query*"})," functions"]}),"\n",(0,i.jsx)(n.li,{children:"It is now no longer possible to create multiple datastores with the same name."}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue that causes Dark to crash when selecting while the autocomplete\nwas available."}),"\n",(0,i.jsx)(n.li,{children:"We now support recursion! While it's been supported for a long time on the\nbackend, you were unable to get live values for recursive functions in the\neditor. Now you can!"}),"\n",(0,i.jsx)(n.li,{children:"When new traces are created while your editor is open, we'll now replace old\ntraces with the new one (before we added all traces, which caused large\ncanvases to crash)."}),"\n",(0,i.jsx)(n.li,{children:"We've improved the loading time of the editor for apps with lots of 404s"}),"\n",(0,i.jsx)(n.li,{children:"Some function docstrings now link to relevant documentation - more to come!"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-5",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Improved the documentation around\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/custom-domains",children:"setting up a custom domain"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added a tutorial around\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-asana",children:"creating new Asana projects and tasks via Slack"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-4172020",children:"Week of 4/17/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Traces can now be linked to directly."}),"\n",(0,i.jsx)(n.li,{children:"Pasting JSON into Dark now works in more cases"}),"\n",(0,i.jsxs)(n.li,{children:["The command palette keyboard shortcut has changed: you should now use ",(0,i.jsx)(n.code,{children:"ctrl+s"}),"\n(we also support ",(0,i.jsx)(n.code,{children:"alt+x"}),", and ",(0,i.jsx)(n.code,{children:"ctrl+\\"}),", should it be helpful for folks with\nnon-US keyboard)"]}),"\n",(0,i.jsxs)(n.li,{children:["Updated ",(0,i.jsx)(n.code,{children:"String::slugify_v1"})," to slugify correctly in all cases."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::query"})," functions now support ",(0,i.jsx)(n.code,{children:"String::contains"})," in their query block."]}),"\n",(0,i.jsxs)(n.li,{children:["The docstrings for ",(0,i.jsx)(n.code,{children:"List::sortBy"})," and ",(0,i.jsx)(n.code,{children:"List::sortByComparator"})," were updated to\nimprove clarity."]}),"\n",(0,i.jsxs)(n.li,{children:["Fixed the return type for ",(0,i.jsx)(n.code,{children:"DB::queryOne"})," - it now correctly returns an\n",(0,i.jsx)(n.code,{children:"Option"}),", and works properly with the error rail"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed a bug with selecting dicts in feature flags"}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"http://darklang.com",children:"darklang.com"})," now displays properly on Safari"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"package-manager",children:"Package Manager"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added and documented many\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages#asana-package",children:"Asana package manager functions"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Added and documented a\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages#mailchimp-package",children:"Mailchimp subscribe function"})]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-6",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Lots of small typos and corrections were made - thank you to everyone who\nreported them!"}),"\n",(0,i.jsxs)(n.li,{children:["Improved the documentation around ",(0,i.jsx)(n.code,{children:"match"}),", thanks to Nathan Lloyd Smith!"]}),"\n",(0,i.jsxs)(n.li,{children:["Added a tutorial around\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-trello",children:"creating new Trello cards via Slack"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-4102020",children:"Week of 4/10/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["We've done a lot of work to improve how quickly we can set up custom domains -\nif you want a custom domain to point to your Dark app,\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/custom-domains",children:"read the documentation"})," to\nsee how to do it."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["More standard library functions! We're ramping down our concentrated effort to\nadd more all at once, so if you have any requests post in the\n",(0,i.jsx)(n.a,{href:"https://darklang.com/discord-invite",children:"Community Chat"})," or email\n",(0,i.jsx)(n.a,{href:"mailto:feedback@darklang.com",children:"feedback@darklang.com"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Float::clamp"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::clamp"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::mod"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::remainder"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::dropFirst"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::dropLast"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::first"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::last"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::trimStart"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::trimEnd"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We've realized that people had difficulty knowing that they need traces when\nthey're editing functions, so we've added some in-editor pointers to it (call\nthe function from elsewhere!)"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/functions.png",src:s(93890).Z+"",width:"774",height:"366"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We're working a lot on performance of the editor, especially when typing.\nWe've optimized a lot of different parts of the app, mostly related to typing\nand changing code, some of which are 3x faster. We'll continue working on\nthis."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The Dark CLI now suggests some common problems and solutions when auth fails,\nin response to a few instances of shell string handling surprising users"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Bug fix: typing an infix operator will now always open autocomplete."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Bug fix: ",(0,i.jsx)(n.code,{children:"extract-variable"})," now works correctly with right to left selection."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Worker names no longer allow quotes - we noticed this causing ambiguity\nbetween sending and receiving of messages"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Updated the return type for ",(0,i.jsx)(n.code,{children:"db::queryOne"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-7",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added a separate section to the documentation for\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-app",children:"Building Slack Apps"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added a tutorial for\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-channel-check",children:"building a slack app that checks for new channels and posts them"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added and documented many\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages#trello-package",children:"Trello package manager functions"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-432020",children:"Week of 4/3/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"New Dark accounts are now auto-populated with a USERNAME-gettingstarted canvas\nthat demonstrates basic Dark functionality."}),"\n",(0,i.jsxs)(n.li,{children:["Even more functions have been added to the standard library:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::indexedMap"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::pi"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::tau"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::degrees"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::turns"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::radians"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::cos"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::sin"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::tan"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::acos"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::asin"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::atan"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::atan2"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::cosh"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::sinh"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Math::tanh"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"We've done a redesign of the sidebar to be more consistent and prettier!"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/sidebar.png",src:s(95162).Z+"",width:"400",height:"380"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"add-feature-flag"})," option in the command palette is now context aware"]}),"\n",(0,i.jsx)(n.li,{children:"The feature flag panel is now auto-focused when adding a new feature flag"}),"\n",(0,i.jsxs)(n.li,{children:["Added an autocomplete option for ",(0,i.jsx)(n.code,{children:"OPTIONS"})," in HTTP. This is especially useful\nfor people doing preflight requests as part of ",(0,i.jsx)(n.code,{children:"CORS"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/option.png",src:s(98519).Z+"",width:"742",height:"228"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Made it clearer that return values apply specifically to a trace"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/returntext.png",src:s(80272).Z+"",width:"1112",height:"188"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Adding a function at the start of a pipe now works properly (before this, we\nlost the first argument)"}),"\n",(0,i.jsx)(n.li,{children:"Text selection has been reworked and should work a lot better and have fewer\nbugs. In particular, double-clicking on a function name properly selects the\nfunction, and selecting with the mouse now works in all cases (that we could\nfind!)"}),"\n",(0,i.jsx)(n.li,{children:'Typing "." to make a field now always works, even if the autocomplete isn\'t\nready'}),"\n",(0,i.jsx)(n.li,{children:"Bug fix: double-clicking in text boxes now keeps your cursor there"}),"\n",(0,i.jsxs)(n.li,{children:["Bug fix: in a ",(0,i.jsx)(n.code,{children:"match"})," with a ",(0,i.jsx)(n.code,{children:"Just"})," pattern, the variable now has the right\ntype in autocomplete"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Error:toString"})," has been deprecated (you can't call functions on type errors)"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-8",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added a doc about how to use\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/cors",children:"CORS in Dark"})]}),"\n",(0,i.jsxs)(n.li,{children:["Added and documented many\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages#slack",children:"Slack package manager functions"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-3272020",children:"Week of 3/27/2020"}),"\n",(0,i.jsx)(n.p,{children:"We released a lot this week, hope you enjoy!"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We have re-released feature flags! Feature flags allow you change live code\nsafely: write the new code that you want, choose the condition to use that\ncode instead (just for your user? just if a header is passed? Just if a\nparticular query string is provided?). Then switch to the new code or discard\nit, safely, without breaking anything."}),"\n",(0,i.jsx)(n.li,{children:"Feature flags can be created from the command palette."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar27/Screen_Shot_2020-03-27_at_12.44.20_PM.png",src:s(7670).Z+"",width:"1326",height:"360"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The keyboard shortcut for the command palette has changed to ",(0,i.jsx)(n.code,{children:"Ctrl-\\"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar27/2020-03-27_12.27.23.gif",src:s(36571).Z+"",width:"858",height:"386"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We've added a ton of standard library functions:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Date::weekday"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::toList"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::fromList"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::filterMap"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::size"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Dict::singleton"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::filterMap"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::map2"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::map2shortest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::tail"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::singleton"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::unzip"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::zip"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::zipShortest"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Option::map2"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Result::map2"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::slice"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::padStart"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::padEnd"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Hyphens are now allowed in records/dicts, to make it easier to set HTTP\nheaders"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar27/Screen_Shot_2020-03-27_at_12.33.06_PM.png",src:s(39763).Z+"",width:"794",height:"278"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"HTTP::respond"})," was renamed to ",(0,i.jsx)(n.code,{children:"HTTP::response"}),", to make it clearer that it\ncreates a value."]}),"\n",(0,i.jsxs)(n.li,{children:["A bunch of edge cases around calling functions were fixed, especially for\nfunctions which currently return ",(0,i.jsx)(n.code,{children:""})]}),"\n",(0,i.jsx)(n.li,{children:"Tab now moves you to the next editable space"}),"\n",(0,i.jsxs)(n.li,{children:["Disabled a few features while we re-work them:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Create new function option in the autocomplete"}),"\n",(0,i.jsx)(n.li,{children:"Mouse over database stats"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-9",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Added\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/tutorials/extract-function",children:"Your First Function"}),"\nand\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/tutorials/call-external-api",children:"Your First External API Call"})]}),"\n",(0,i.jsxs)(n.li,{children:["Updated the\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/walk-throughs/slack-app",children:"Slack tutorial"})," to discuss\nOAuth v2"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-3202020",children:"Week of 3/20/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Now you can give us more information about your Dark projects, and let us know\nif they're live. This helps us understand how we can make Dark better for you!"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar20/about.png",src:s(82060).Z+"",width:"1642",height:"1218"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Significantly faster HTTP requests and canvas loading. We "fixed" this a few\nweeks ago, but only saw modest improvements. Yeah, there was a bug. So now\nit\'s fixed fixed: some HTTP requests have dropped from 3s to 70ms.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We've added lots of standard library functions:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::absoluteValue"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::negate"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::power"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::min"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::max"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Float::truncate"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar20/float.png",src:s(28867).Z+"",width:"1138",height:"454"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Int::negate"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Int::absoluteValue"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Dict::isEmpty"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"String::isEmpty"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Date::weekday"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"Bool::xor"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-3132020",children:"Week of 3/13/2020"}),"\n",(0,i.jsx)(n.h3,{id:"features",children:"Features"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We now tell you how to deal with the ErrorRail in the docstrings for functions\nthat returns ",(0,i.jsx)(n.code,{children:"Options"})," and ",(0,i.jsx)(n.code,{children:"Results"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar13/errorrail.png",src:s(56735).Z+"",width:"744",height:"552"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We've started narrowing down the types in the autocomplete using types, and we\nnow have some nice error messages for options which don't match the types"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar13/autocomplete.png",src:s(59933).Z+"",width:"1360",height:"504"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"DB::query"})," (and other ",(0,i.jsx)(n.code,{children:"DB::query"})," functions) now support ",(0,i.jsx)(n.code,{children:"Date"})," operations"]}),"\n",(0,i.jsx)(n.li,{children:"Performance: We've improved the load speed of your code on our servers by\nabout 3x over the last few weeks, with the final change landing this week.\nThis has the largest impact when loading the editor as all of your code loads\nthen (though it is also less noticeable there as the JS overhead is higher\nthan the DB overhead so \ud83e\udd37\ud83c\udffd\u200d\u2640\ufe0f)"}),"\n",(0,i.jsxs)(n.li,{children:["We have launched an alpha\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages",children:"package manager"}),", which allows\nre-using Dark functions from other users or canvases. Today, only Dark\nemployees can add functions to the package manager. We've started with some\ncommonly used Slack functions, but let us know via chat or email if you have\nany requests - or your own functions you'd like to share."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Mar13/slackfunctions.png",src:s(79495).Z+"",width:"1080",height:"232"})}),"\n",(0,i.jsx)(n.h3,{id:"bug-fixes",children:"Bug fixes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Entering ",(0,i.jsx)(n.code,{children:"+"})," no longer causes extraneous characters to be placed"]}),"\n",(0,i.jsx)(n.li,{children:"Uploading static assets on Windows no longer fails for nested directories"}),"\n",(0,i.jsxs)(n.li,{children:["Adding a ",(0,i.jsx)(n.code,{children:"let"})," above a pipe no longer results in unexpected behavior"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-10",children:"Documentation"}),"\n",(0,i.jsx)(n.p,{children:"We added a bunch of improved documentation, including:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["better docs for hosting\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/static-assets",children:"static assets"})]}),"\n",(0,i.jsxs)(n.li,{children:["a new doc describing\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/datastores",children:"Datastores"})," in more\ndetail"]}),"\n",(0,i.jsxs)(n.li,{children:["a new doc describing our (very limited) support for\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/packages",children:"packages"})]}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/httpclient",children:"a new doc describing the HTTP client library"})}),"\n",(0,i.jsxs)(n.li,{children:["a new doc describing how to\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/http-framework",children:"respond to HTTP requests"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-362020",children:"Week of 3/6/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Invites! You can now invite people to Dark from within the app. (If you want\nyour invitees to collaborate in your canvases, you still need to ask us though\n\u2014 coming soon). Click "Share Dark" to invite people!'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Profile menu showing link to "Share Dark" and "Documentation"",src:s(98407).Z+"",width:"182",height:"245"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"There is now a link to documentation in the profile menu"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"You can now move around the canvas using your mouse. Just click and drag!"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added a bunch of functions:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::max"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Int::min"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::startsWith"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"String::endsWith"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Fixed a bunch of bugs:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["you couldn't type a comma in a list within a ",(0,i.jsx)(n.code,{children:"match"})," statement."]}),"\n",(0,i.jsxs)(n.li,{children:["you couldn't type ",(0,i.jsx)(n.code,{children:"|>"})," to pipe at the end of functions with no arguments"]}),"\n",(0,i.jsx)(n.li,{children:"scrolling in the sidebar works again"}),"\n",(0,i.jsxs)(n.li,{children:["When calling ",(0,i.jsx)(n.code,{children:"StaticAssets::serveLatest"})," with JSON files, we now return the\nJSON properly"]}),"\n",(0,i.jsxs)(n.li,{children:["If you press enter at the end of a line in an ",(0,i.jsx)(n.code,{children:"if"})," statement, we no longer\ntake you to the next line (this simplifies code like ",(0,i.jsx)(n.code,{children:"if i < 10"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:["Show when traces were not executed in ",(0,i.jsx)(n.code,{children:"match"}),"es (we already do this\nelsewhere)"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The command palette's documentation appears properly (press ",(0,i.jsx)(n.code,{children:"ctrl-\\"})," to show\nthe command palette)"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["You can now use ",(0,i.jsx)(n.code,{children:"Date::<"})," and ",(0,i.jsx)(n.code,{children:"Date::>"})," and ",(0,i.jsx)(n.code,{children:"Float::lessThanOrEqualTo"})," in\n",(0,i.jsx)(n.code,{children:"DB::query"})," (and also in ",(0,i.jsx)(n.code,{children:"DB::queryOne"}),", ",(0,i.jsx)(n.code,{children:"DB::queryWithKey"}),", etc)"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"DB::query call using Date::<",src:s(94059).Z+"",width:"647",height:"70"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We now give better error messages when you try to use ",(0,i.jsx)(n.code,{children:"Int"})," functions (like\n",(0,i.jsx)(n.code,{children:"+"})," and ",(0,i.jsx)(n.code,{children:"-"}),") on ",(0,i.jsx)(n.code,{children:"Floats"})," or ",(0,i.jsx)(n.code,{children:"Strings"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Float addition showing error message",src:s(55655).Z+"",width:"368",height:"101"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"When you try to use invalid canvas names (e.g. with capital letters), we now\nerror much better"}),"\n",(0,i.jsx)(n.li,{children:"When backspacing function names, we now delete the version automatically,\nwhich makes it clearer what's being deleted."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-2282020",children:"Week of 2/28/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Backspacing a comma in a list no longer deletes text to the right of the comma"}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where Crons occasionally continued to run after they were\ndeleted"}),"\n",(0,i.jsx)(n.li,{children:"Lists now wrap when they pass 120 characters"}),"\n",(0,i.jsxs)(n.li,{children:["A few fixes to traces that caused people to get really stuck:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fixed an issue where traces could occasionally vanish"}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where clicking a Play button on a function in a REPL would\nnot cause a trace to appear"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-11",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Docs can now be accessed at\n",(0,i.jsx)(n.a,{href:"https://darklang.com/docs",children:"https://darklang.com/docs"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/cron",children:"Your first Cron"})," and\n",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/workers",children:"Your first Worker"}),"\nsections have been added to the Getting Started guide"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-2212020",children:"Week of 2/21/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The canvas list has been moved into a Settings modal, accessed by mousing over\nyour avatar and clicking Account."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Feb21/settings.png",src:s(87261).Z+"",width:"936",height:"734"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"A variety of issues were fixed around autocomplete:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"New variables now correctly display their type instead of Incomplete."}),"\n",(0,i.jsx)(n.li,{children:"Autocomplete now appears correctly for single-character variables."}),"\n",(0,i.jsx)(n.li,{children:"It was possible to get into a state where your variable was not added to\nautocomplete - this is no longer possible."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added improved error messaging for missing return values on HTTP handlers and\nuser functions."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Feb21/error.png",src:s(9596).Z+"",width:"742",height:"280"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Having the experimental web platform flag turned on in Chrome should no longer\ncause broken functionality."}),"\n",(0,i.jsx)(n.li,{children:"The Delete Handler menu option has been changed to Delete, for clarity."}),"\n",(0,i.jsxs)(n.li,{children:["A complete ",(0,i.jsx)(n.a,{href:"https://darklang.com/docs/introduction",children:"documentation"}),"\nrestructure, including URL changes - old bookmarks may no longer work."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-2142020",children:"Week of 2/14/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added a Welcome to Dark modal for new users"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Feb14/Screen_Shot_2020-02-14_at_4.59.31_PM.png",src:s(34e3).Z+"",width:"1246",height:"716"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"You can now click on the Command Palette"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Function arguments can now be reordered"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Changelog%20Draft/2020-02-14_13.04.03.gif",src:s(21906).Z+"",width:"744",height:"394"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"You can now delete recursive functions"}),"\n",(0,i.jsx)(n.li,{children:"We now show you when a value was not executed in this trace"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Changelog%20Draft/Screen_Shot_2020-02-14_at_1.06.20_PM.png",src:s(3069).Z+"",width:"1598",height:"206"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Live values are now shown in unexecuted ",(0,i.jsx)(n.code,{children:"match"})," branches"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed a bunch of redirection bugs after log-in"}),"\n",(0,i.jsx)(n.li,{children:"Support pasting more JS objects into records"}),"\n",(0,i.jsxs)(n.li,{children:["Fixed the documentation for ",(0,i.jsx)(n.code,{children:"Date::parse"})," (it returns a ",(0,i.jsx)(n.code,{children:"Result"}),")"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed a few bugs around autocomplete appearing too little or too much"}),"\n",(0,i.jsx)(n.li,{children:"Fixed a carat placement bug in pipes"}),"\n",(0,i.jsx)(n.li,{children:"Loaded our font (Fira Mono) even if you don't have it installed locally"}),"\n",(0,i.jsxs)(n.li,{children:["Fixed some issues causing the editor to freeze:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Dragging up to select text"}),"\n",(0,i.jsx)(n.li,{children:"Repeated clicking in a variable"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Fixed some issues around copying ",(0,i.jsx)(n.code,{children:"match"}),"es"]}),"\n",(0,i.jsxs)(n.li,{children:["Added a ",(0,i.jsx)(n.a,{href:"/introduction",children:"Getting Started"})," tutorial to the documentation"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-2072020",children:"Week of 2/07/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"You can now reset your password (thanks to a switch to Auth0)"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Released a new version of the Dark CLI (0.5). This is a required upgrade to\nupload static assets."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli-apple",children:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli-apple"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli.exe",children:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli.exe"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli-linux",children:"https://dark-cli.storage.googleapis.com/0.5.0/dark-cli-linux"})}),"\n",(0,i.jsx)(n.li,{children:"Going forward, the Dark CLI will tell you when your CLI is out of date."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Added ",(0,i.jsx)(n.code,{children:"wrap-in-match"})," to the command palette"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/2020-02-07_15.27.43.gif",src:s(10013).Z+"",width:"746",height:"452"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added new functions:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"List::sortByComparator"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-02-07_at_12.28.47_PM.png",src:s(5783).Z+"",width:"810",height:"346"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"Bytes::length"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-02-07_at_12.33.46_PM.png",src:s(52927).Z+"",width:"728",height:"202"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Changing functions now keeps the old function's error rail setting"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Significant improvement in cursor position"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Moved our documentation to a\n",(0,i.jsx)(n.a,{href:"https://darklang.com/docs/",children:"new, more readable format"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Documented ",(0,i.jsx)(n.a,{href:"https://docs.darklang.com/how-to/cors",children:"how to set CORS in Dark"})]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-1312020",children:"Week of 1/31/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"You can now see a list of all of your canvases by mousing over your avatar."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-01-31_at_12.18.35_PM.png",src:s(30637).Z+"",width:"630",height:"532"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Typing when text is highlighted now causes text to be replaced instead of\ninserted"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/2020-01-31_12.23.30.gif",src:s(54312).Z+"",width:"814",height:"220"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Many function improvements, including:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"We now create functions without a default parameter. Apparently that was\nannoying."}),"\n",(0,i.jsx)(n.li,{children:"Functions now have a menu, and you can delete functions from there if they\nare unused)"}),"\n",(0,i.jsx)(n.li,{children:"Sometimes the Add New Parameter action didn't work - fixed it."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/2020-01-31_12.30.30.gif",src:s(15115).Z+"",width:"1184",height:"362"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"User-created functions now show parameters in blanks"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-01-31_at_12.33.38_PM.png",src:s(13910).Z+"",width:"950",height:"204"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Improved load time of canvases with many traces"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"The cursor now stays in the right place when we reflow/reformat code\ndynamically, in almost every case."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Prevented you from creating two datastores with identical names"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Added ",(0,i.jsx)(n.code,{children:"HTTP::setCookie_v1"})," - v0 incorrectly URL encoded some fields and is now\ndeprecated"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Fixed an issue where text was sometimes not being properly displayed in the\nsidebar"}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Added a warning when trying to access Dark from a non-desktop or non-Chrome\nbrowser"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-12",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Created a ",(0,i.jsx)(n.a,{href:"/reference/sharing-dark",children:"Sharing Dark Projects"})," guide"]}),"\n",(0,i.jsxs)(n.li,{children:["Improved the steps at the beginning of the\n",(0,i.jsx)(n.a,{href:"/walk-throughs/react-app",children:"Guide to Building a Backend for a React SPA in Dark"})]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-1242020",children:"Week of 1/24/2020"}),"\n",(0,i.jsx)(n.h3,{id:"major-changes",children:"Major changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Errors/Incompletes now point to the cause of the error"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/image3.png",src:s(26454).Z+"",width:"790",height:"318"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"We substantially improved keyboard entry:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Special characters on international keyboards now appear correctly"}),"\n",(0,i.jsx)(n.li,{children:"Infix functions as parameters to other functions work"}),"\n",(0,i.jsx)(n.li,{children:"We believe backspace should now always work perfectly"}),"\n",(0,i.jsx)(n.li,{children:"We've greatly improved how often the cursor appears in the right place"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Performance and loading improvements for all programs"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"The editor loads program data from the server much faster"}),"\n",(0,i.jsx)(n.li,{children:"Workers run with much less overhead (and so higher throughput)"}),"\n",(0,i.jsx)(n.li,{children:"Crons should be running more reliably"}),"\n",(0,i.jsx)(n.li,{children:"HTTP requests are much much faster"}),"\n",(0,i.jsx)(n.li,{children:"Programs with lots of functions or traces are especially improved"}),"\n",(0,i.jsx)(n.li,{children:"Several issues with deleted functions and databases are now resolved"}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Copy/paste is way improved"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"you can paste code from Dark into other programs"}),"\n",(0,i.jsx)(n.li,{children:"you can paste code into many parts of Dark (varnames, strings, records, etc)"}),"\n",(0,i.jsx)(n.li,{children:"most copy-paste issues should be solved"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/2020-01-24_15.16.12.gif",src:s(93706).Z+"",width:"1516",height:"638"})}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"library-changes",children:"Library changes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Added ",(0,i.jsx)(n.code,{children:"JSON::parse_v1"})," which uses a ",(0,i.jsx)(n.code,{children:"Result"})," in case of error (deprecated\n",(0,i.jsx)(n.code,{children:"JSON::parse_v0"}),")"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Added ",(0,i.jsx)(n.code,{children:"Float::sum"})]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/Screen_Shot_2020-01-24_at_3.19.59_PM.png",src:s(53648).Z+"",width:"948",height:"194"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["More improvements to ",(0,i.jsx)(n.code,{children:"DB::query"})," and friends"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["previews now work for all ",(0,i.jsx)(n.code,{children:"DB::query"})," functions (",(0,i.jsx)(n.code,{children:"DB::queryOne"}),",\n",(0,i.jsx)(n.code,{children:"DB::queryOneWithKeys"}),", ",(0,i.jsx)(n.code,{children:"DB::queryWithKeys"}),")"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"bug-fixes-1",children:"Bug fixes"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Fixed up/down arrow on fields"}),"\n",(0,i.jsx)(n.li,{children:"Single entry autocompletes now work"}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"Cmd-arrow"})," with shift now maintains selection"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed renaming function parameters"}),"\n",(0,i.jsx)(n.li,{children:"Fixed deleted text persisting when pressing delete"}),"\n",(0,i.jsx)(n.li,{children:"Large traces are now properly displayed"}),"\n",(0,i.jsxs)(n.li,{children:["Commands (",(0,i.jsx)(n.code,{children:"Cmd/Ctrl-\\"}),") now work more reliably when selecting code"]}),"\n",(0,i.jsxs)(n.li,{children:["We now allow you to use arbitrary field names","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"You can now use a field even if you don't have a trace or the field does not\nexist in that trace"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"We've automatically disabled Grammarly, as it was messing with our DOM"}),"\n",(0,i.jsx)(n.li,{children:"The dark-cli now prints errors on failure"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"documentation-13",children:"Documentation"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["A ",(0,i.jsx)(n.a,{href:"/reference/sample-canvases",children:"list of sample canvases"}),". and descriptions has\nbeen added"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-1172020",children:"Week of 1/17/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We added ",(0,i.jsx)(n.code,{children:"DB::query_v4"}),", which allows you use arbitrary queries on your Dark\ndatastores","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We also published a\n",(0,i.jsx)(n.a,{href:"https://blog.darklang.com/compiling-dark-to-sql/",children:"related blog post"}),"!"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["You can now remove a ",(0,i.jsx)(n.code,{children:"let"})," with the backspace/delete key"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/image1.gif",src:s(89940).Z+"",width:"453",height:"120"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Improved\n",(0,i.jsx)(n.a,{href:"/tutorials/handle-error-errorrail",children:"documentation around the Error Rail"})]}),"\n",(0,i.jsxs)(n.li,{children:["GitHub API! See our ",(0,i.jsx)(n.a,{href:"https://darklang.com/a/sample-github",children:"sample canvas"}),"\ndemonstrating how to call the GitHub API"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where deleted from the middle of a concatenated string would\ncause text to the right of the deletion point to be removed."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"changelog/image2.gif",src:s(94115).Z+"",width:"455",height:"136"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["We asked y'all to not make ",(0,i.jsx)(n.code,{children:"HttpClient"})," calls to your Dark canvas from REPLs.\nWe've made some infrastructural changes that fix the issue on our end, so you\nshould feel free to do that now. This is useful if you want to create a HTTP\ntrace without leaving Dark. (Note: please don't make ",(0,i.jsx)(n.code,{children:"HttpClient"})," calls ",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.em,{children:"to\nDark"})})," from HTTP handlers)"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"week-of-1102020",children:"Week of 1/10/2020"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Fixed a bunch of issues around entering non ASCII characters, especially from\nnon-US keyboards:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"accented 'o' and 'a' characters were not being recognized from Swedish\nkeyboard layouts."}),"\n",(0,i.jsx)(n.li,{children:"\u20ac or \xa3 weren't working"}),"\n",(0,i.jsx)(n.li,{children:"shift + 2 was not being recognized."}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where pressing delete in a match expression was causing the\ncursor to be placed incorrectly."}),"\n",(0,i.jsx)(n.li,{children:"Stopped erroring when functions are being renamed."}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where the Omnibox was not clickable."}),"\n",(0,i.jsx)(n.li,{children:"Fixed an issue where the minimap was hiding the Dismiss Error button."}),"\n",(0,i.jsx)(n.li,{children:"Fixed a short regression where lambda parameters were not shadowing variables\nof the same name."}),"\n",(0,i.jsxs)(n.li,{children:["Deprecated the ",(0,i.jsx)(n.code,{children:"Date::sub"})," function and replaced it with ",(0,i.jsx)(n.code,{children:"Date::subtract"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Changed the behavior of new handler placement - they no longer appear directly\non top of one another."}),"\n",(0,i.jsx)(n.li,{children:"Changed the behavior of partials - they are now abandoned when clicking away\nfrom a handler."}),"\n",(0,i.jsxs)(n.li,{children:["Added the ",(0,i.jsx)(n.code,{children:"copy-request-as-curl"})," command for ",(0,i.jsx)(n.code,{children:"HttpClient::"})," functions - use\n",(0,i.jsx)(n.code,{children:"Ctrl-\\"})," to activate"]}),"\n",(0,i.jsxs)(n.li,{children:["Add ",(0,i.jsx)(n.code,{children:"Twitter::urlencode"})," and ",(0,i.jsx)(n.code,{children:"Crypto::sha1mac"})," to support talking to the\nTwitter API"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},93706:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-01-24_15.16.12-de2e6daeb54a5c09032aea76e3f6cc40.gif"},54312:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-01-31_12.23.30-117d08a2890bf165e7152d43a4e581b1.gif"},15115:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-01-31_12.30.30-303d164f354a4685dcf32d36fbfd8beb.gif"},10013:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-02-07_15.27.43-9444bbb191047aea3394e75e7902d9e2.gif"},9682:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2705-2ea37bb5f5ce62912cd56f13a7edb510.png"},87416:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2713-f45f9a2e1d8a25338e792fed1a6df527.png"},27311:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2722-af1be2e7ca8fcbb9e496681d2421db90.gif"},93890:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/functions-b020fb2a77f0d3142bcbfa16f0dfca29.png"},98519:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/option-e0992190bbe75ee0def1ddf2168e75f8.png"},80272:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/returntext-0ebd0120510b17b87c56aac8e297439a.png"},95162:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/sidebar-c439586abc7522bac0cfb7039ce25135.png"},21906:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-02-14_13.04.03-9b7624d6f71c6f6cd1335ae71d6f014c.gif"},3069:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-02-14_at_1.06.20_PM-ab38804d7bbab71c08ec495435887dd6.png"},34e3:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-02-14_at_4.59.31_PM-f103b1175d862711d2e0abcf273ea71e.png"},9596:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/error-b47bb88e832ec05149805fd8a720c0e4.png"},87261:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/settings-51431eb437ae21a0208153e029bf89c4.png"},3333:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/secrets-3ecd2e15445f41f0c668106e22263959.png"},66354:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/tooltips-19100c7ac2ca77ef9cdae213fb7b7458.png"},65445:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-06-05_14.19.05-f429ea3d0ea727346d202c93b10bf79b.gif"},64764:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-06-05_14.21.05-ea9fd3c04328ba8b8f70f65c93cc1fbd.gif"},17108:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-06-05_at_2.08.39_PM-8543ade966e6d0fc495180b2b97076f3.png"},84800:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-06-05_at_2.10.46_PM-46a973e20fa7495a2c925cfc2f56f291.png"},58633:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-06-05_at_2.14.05_PM-d51797286ff5813143c04b82ea37b14d.png"},6640:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-06-05_at_2.16.10_PM-047d70fe222a2f4c9be4478689347759.png"},59933:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/autocomplete-31457fab1bfcd6f826b4ee7d7e69dc45.png"},56735:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/errorrail-e6cbfc3ebb620980479789e2381438e7.png"},79495:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/slackfunctions-c03f4b99a85b8dd08a160d2e41a09885.png"},82060:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/about-9c6d9c23039835e48417d8badaf9ba42.png"},28867:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/float-e1c8d5ad81a9ffbcb9066d039fe526e6.png"},36571:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/2020-03-27_12.27.23-f40715b490e0d75174c3d6cfc934cabc.gif"},39763:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-03-27_at_12.33.06_PM-a7f8f5aefe2725b938543b5e3804f22e.png"},7670:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-03-27_at_12.44.20_PM-bcda529e58d37c0fb21334647d474220.png"},98407:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/account-79b0ffc6489553c273ee2ce4cc2c02d0.png"},94059:(e,n,s)=>{s.d(n,{Z:()=>i});const i="data:image/png;base64,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"},55655:(e,n,s)=>{s.d(n,{Z:()=>i});const i="data:image/png;base64,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"},53648:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-01-24_at_3.19.59_PM-c076c8cc314f9e3314e2ff420f08a568.png"},30637:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-01-31_at_12.18.35_PM-45d496549cb58a5ba1fd165a174371be.png"},13910:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-01-31_at_12.33.38_PM-2c25f064054fecf99e09c720454f2417.png"},5783:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-02-07_at_12.28.47_PM-228ee56f5c3c22369936897d5daa02b3.png"},52927:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/Screen_Shot_2020-02-07_at_12.33.46_PM-cf118fb746e69848c33375b784b00e22.png"},56323:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/badge-170207d1754c6c1351ffbd3916500596.png"},5627:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/codeexecution-e96f4c50a33620b5e1c8166dcd98b94f.gif"},3032:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/footer-71b00b1c8bde00aed7f3aa7a2862825a.png"},21285:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/helloworld-a52255e56de5fa3360da1f9ab293531d.png"},89940:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/image1-ed372e2801f0fad53c314d1804a81638.gif"},94115:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/image2-28eb1baf33b03ce6e265f95d042d09cb.gif"},26454:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/image3-32469e2c2ead33338bb15bb430d52407.png"},82199:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/packagemanager-3eba010fbbd170b05c7f35784b08acb9.png"},58130:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/returntypes-6699b76c2993a7451f0b99d7c18d3554.png"},46944:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/sidebar-6896e676190c651d807fe634e1d3798d.gif"},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(67294);const r={},l=i.createContext(r);function t(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32b6348c.471b00f6.js b/assets/js/32b6348c.471b00f6.js deleted file mode 100644 index 0424537e..00000000 --- a/assets/js/32b6348c.471b00f6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[333],{42414:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var s=t(85893),a=t(11151);const o={},i="New-Release Checklist",r={id:"contributing/new-release-checklist",title:"New-Release Checklist",description:'Every month, we "release" the work done in the previous month. While we',source:"@site/docs-classic/contributing/new-release-checklist.md",sourceDirName:"contributing",slug:"/contributing/new-release-checklist",permalink:"/contributing/new-release-checklist",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/contributing/new-release-checklist.md",tags:[],version:"current",frontMatter:{},sidebar:"Contributing",previous:{title:"Making a Pull Request",permalink:"/contributing/making-a-pull-request"}},l={},c=[{value:"Writing your PRs so the dark-changelog canvas will be able to parse the changelog",id:"writing-your-prs-so-the-dark-changelog-canvas-will-be-able-to-parse-the-changelog",level:2}];function h(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"new-release-checklist",children:"New-Release Checklist"}),"\n",(0,s.jsx)(n.p,{children:'Every month, we "release" the work done in the previous month. While we\ncontinuously deliver software, it\'s nice to reflect on and document the work\ndone more formally on at least a monthly basis.'}),"\n",(0,s.jsx)(n.p,{children:"Every month, we aim to:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["outline technical changes in\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/changelog",children:"the Changelog"})]}),"\n",(0,s.jsx)(n.li,{children:"publish a blog post reflecting on those changes"}),"\n",(0,s.jsx)(n.li,{children:"update our users, via email and social media, of these changes"}),"\n",(0,s.jsx)(n.li,{children:"reflect on the progress made within the past month, and discuss upcoming work"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The easiest way to step through this is to create an issue using the\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/tree/main/.github/issue_template.md",children:"release issue template"})]}),"\n",(0,s.jsxs)(n.h2,{id:"writing-your-prs-so-the-dark-changelog-canvas-will-be-able-to-parse-the-changelog",children:["Writing your PRs so the ",(0,s.jsx)(n.code,{children:"dark-changelog"})," canvas will be able to parse the changelog"]}),"\n",(0,s.jsxs)(n.p,{children:["Both the ",(0,s.jsx)(n.code,{children:"darklang/dark"})," and ",(0,s.jsx)(n.code,{children:"darklang/docs"})," repos have PR templates included,\nwhich start off with:"]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Changelog:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-markdown",children:"Area of change\n\n- details\n"})}),"\n",(0,s.jsx)(n.p,{children:"alternatively:"}),"\n",(0,s.jsx)(n.p,{children:"No changelog"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:'If you believe the PR has changes worth reporting on within the release notes,\nremove the "Alternatively: no changelog" part at the end. Then, update the (`)\nbacktick-surrounded section with notes on what has changed, grouped into areas\nof change (e.g. "Editor," "Language and Standard Library," and "Internal.")'}),"\n",(0,s.jsx)(n.p,{children:'Otherwise, leave the PR starting off with just "No changelog"'})]})}function d(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>i});var s=t(67294);const a={},o=s.createContext(a);function i(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/32b6348c.d0356ddd.js b/assets/js/32b6348c.d0356ddd.js new file mode 100644 index 00000000..20d50d62 --- /dev/null +++ b/assets/js/32b6348c.d0356ddd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[333],{42414:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var s=t(85893),a=t(11151);const r={},o="New-Release Checklist",i={id:"contributing/new-release-checklist",title:"New-Release Checklist",description:'Every month, we "release" the work done in the previous month. While we',source:"@site/docs-classic/contributing/new-release-checklist.md",sourceDirName:"contributing",slug:"/contributing/new-release-checklist",permalink:"/contributing/new-release-checklist",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/contributing/new-release-checklist.md",tags:[],version:"current",frontMatter:{},sidebar:"Contributing",previous:{title:"Making a Pull Request",permalink:"/contributing/making-a-pull-request"}},l={},c=[{value:"Writing your PRs so the dark-changelog canvas will be able to parse the changelog",id:"writing-your-prs-so-the-dark-changelog-canvas-will-be-able-to-parse-the-changelog",level:2}];function h(e){const n={a:"a",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"new-release-checklist",children:"New-Release Checklist"})}),"\n",(0,s.jsx)(n.p,{children:'Every month, we "release" the work done in the previous month. While we\ncontinuously deliver software, it\'s nice to reflect on and document the work\ndone more formally on at least a monthly basis.'}),"\n",(0,s.jsx)(n.p,{children:"Every month, we aim to:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["outline technical changes in\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/changelog",children:"the Changelog"})]}),"\n",(0,s.jsx)(n.li,{children:"publish a blog post reflecting on those changes"}),"\n",(0,s.jsx)(n.li,{children:"update our users, via email and social media, of these changes"}),"\n",(0,s.jsx)(n.li,{children:"reflect on the progress made within the past month, and discuss upcoming work"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["The easiest way to step through this is to create an issue using the\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/tree/main/.github/issue_template.md",children:"release issue template"})]}),"\n",(0,s.jsxs)(n.h2,{id:"writing-your-prs-so-the-dark-changelog-canvas-will-be-able-to-parse-the-changelog",children:["Writing your PRs so the ",(0,s.jsx)(n.code,{children:"dark-changelog"})," canvas will be able to parse the changelog"]}),"\n",(0,s.jsxs)(n.p,{children:["Both the ",(0,s.jsx)(n.code,{children:"darklang/dark"})," and ",(0,s.jsx)(n.code,{children:"darklang/docs"})," repos have PR templates included,\nwhich start off with:"]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Changelog:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-markdown",children:"Area of change\n\n- details\n"})}),"\n",(0,s.jsx)(n.p,{children:"alternatively:"}),"\n",(0,s.jsx)(n.p,{children:"No changelog"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:'If you believe the PR has changes worth reporting on within the release notes,\nremove the "Alternatively: no changelog" part at the end. Then, update the (`)\nbacktick-surrounded section with notes on what has changed, grouped into areas\nof change (e.g. "Editor," "Language and Standard Library," and "Internal.")'}),"\n",(0,s.jsx)(n.p,{children:'Otherwise, leave the PR starting off with just "No changelog"'})]})}function d(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>o});var s=t(67294);const a={},r=s.createContext(a);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4483.4eb89c89.js b/assets/js/4483.4eb89c89.js new file mode 100644 index 00000000..168a8d24 --- /dev/null +++ b/assets/js/4483.4eb89c89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4483],{84483:(c,e,s)=>{s.r(e),s.d(e,{DocSearchModal:()=>a.He});var a=s(84443)}}]); \ No newline at end of file diff --git a/assets/js/5127552d.27a4cece.js b/assets/js/5127552d.27a4cece.js deleted file mode 100644 index 5e037efc..00000000 --- a/assets/js/5127552d.27a4cece.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5465],{39382:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>o});var s=r(85893),t=r(11151);const l={},a="Darklang Release 5",i={id:"changelog/release-5",title:"Darklang Release 5",description:"September 1, 2022",source:"@site/docs-classic/changelog/release-5.md",sourceDirName:"changelog",slug:"/changelog/release-5",permalink:"/changelog/release-5",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-5.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 6 - Sept, 2022",permalink:"/changelog/release-6"},next:{title:"Release 4 - July, 2022",permalink:"/changelog/release-4"}},d={},o=[{value:"Major feature: experimental Tuple support",id:"major-feature-experimental-tuple-support",level:2},{value:"Major feature: Contributor settings",id:"major-feature-contributor-settings",level:2},{value:"Language improvements",id:"language-improvements",level:2},{value:"Editor improvements",id:"editor-improvements",level:2},{value:"In-progress features - HttpClient and HTTP framework",id:"in-progress-features---httpclient-and-http-framework",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"darklang-release-5",children:"Darklang Release 5"}),"\n",(0,s.jsx)(n.p,{children:"September 1, 2022"}),"\n",(0,s.jsx)(n.p,{children:"Darklang Release 5 includes support for Tuples, a revamped settings panel with\nnew settings for contributors, and significant internal reworks."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.em,{children:["See the ",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-release-5/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,s.jsx)(n.h2,{id:"major-feature-experimental-tuple-support",children:"Major feature: experimental Tuple support"}),"\n",(0,s.jsxs)(n.p,{children:["Dark now has work-in-progress support for tuples\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/issues/4265",children:"#4265"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4425",children:"#4425"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4404",children:"#4404"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4311",children:"#4311"}),") - unstructured lists of\nheterogeneous data:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Tuple expressions can be created by entering ",(0,s.jsx)(n.code,{children:"("})," in a blank expression"]}),"\n",(0,s.jsxs)(n.li,{children:["Tuples may be deconstructed in ",(0,s.jsx)(n.code,{children:"match"})," patterns"]}),"\n",(0,s.jsxs)(n.li,{children:["New standard library functions have been added to work with Tuples:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Tuple2::create"}),", ",(0,s.jsx)(n.code,{children:"::first"}),", ",(0,s.jsx)(n.code,{children:"::second"}),", ",(0,s.jsx)(n.code,{children:"::swap"}),", ",(0,s.jsx)(n.code,{children:"::mapFirst"}),",\n",(0,s.jsx)(n.code,{children:"::mapSecond"}),", ",(0,s.jsx)(n.code,{children:"::mapBoth"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Tuple3::create"}),", ",(0,s.jsx)(n.code,{children:"::first"}),", ",(0,s.jsx)(n.code,{children:"::second"}),", ",(0,s.jsx)(n.code,{children:"::third"}),", ",(0,s.jsx)(n.code,{children:"::mapFirst"}),",\n",(0,s.jsx)(n.code,{children:"::mapSecond"}),", ",(0,s.jsx)(n.code,{children:"::mapThird"}),", ",(0,s.jsx)(n.code,{children:"::mapAllThree"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Tuple deconstruction (",(0,s.jsx)(n.code,{children:"let (lat long) = (39.9526, 75.1652)"}),") is not yet\navailable, so creating tuples of size greater than 3 is not recommended at\nthis time, unless you plan to use ",(0,s.jsx)(n.code,{children:"match"})," expressions to deconstruct the\nvalues."]}),"\n",(0,s.jsx)(n.li,{children:"Tuples are only available after opting in via Settings (see next section)"}),"\n",(0,s.jsxs)(n.li,{children:["More details on using tuples can be found in\n",(0,s.jsx)(n.a,{href:"/reference/languagedetails###Tuples",children:"Language Details"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"major-feature-contributor-settings",children:"Major feature: Contributor settings"}),"\n",(0,s.jsx)(n.p,{children:"A new Contributor Settings page has been added, allowing devs to look under the\nhood and use the same tools that employees are using to develop Darklang."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"contributor settings and tuple demo",src:r(3286).Z+"",width:"1498",height:"1014"})}),"\n",(0,s.jsxs)(n.p,{children:["In particular, devs can now build a local version of the Darklang editor, and\nuse it against their production Darklang codebase\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4387",children:"#4387"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4402",children:"#4402"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["We have also made it possible to enable the in-Editor debugger (note: this is\nuseful for the debugging the Darklang editor, not for debugging Darklang\nprograms) (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4343",children:"#4343"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["Finally, in-progress features can now be enabled for devs, starting with Tuples\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4429",children:"#4429"}),")"]}),"\n",(0,s.jsx)(n.h2,{id:"language-improvements",children:"Language improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Allow floats where the whole number part is empty\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4371",children:"#4371"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"editor-improvements",children:"Editor improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Allow pressing enter in more expression bodies\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4438",children:"#4438"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fixed Undo functionality, which was briefly broken\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4392",children:"#4392"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fixed display of Error rail, which was briefly broken\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4373",children:"#4373"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Prevent Analysis errors due to using Tasks incorrectly\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4436",children:"#4436"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Revamping settings UI, adding reusuable form components, animations, toggle\nswitches, and switching to TailwindCSS\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4375",children:"#4375"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4401",children:"#4401"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4420",children:"#4420"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4426",children:"#4426"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"in-progress-features---httpclient-and-http-framework",children:["In-progress features - ",(0,s.jsx)(n.code,{children:"HttpClient"})," and HTTP framework"]}),"\n",(0,s.jsxs)(n.p,{children:["The current ",(0,s.jsx)(n.code,{children:"HttpClient"})," and HTTP framework are quite limited, only supporting\ntext request/response bodies, among many other problems. They also lack the\nflexibility to control and compose their behavior."]}),"\n",(0,s.jsxs)(n.p,{children:["As part of rewriting the Static Assets feature in Dark itself\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/issues/4259",children:"#4259"}),'), we are creating\n"thinner", more flexible, and more composable HttpClient\n(',(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4366",children:"#4366"}),") and HTTP handlers\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4353",children:"#4353"}),")"]}),"\n",(0,s.jsx)(n.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Huge refactor of client types\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4326",children:"#4326"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Remove OCamlTypes (used for interop with the old OCaml backend)\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4396",children:"#4396"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4398",children:"#4398"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Add internal function to load Ops for a TopLevel\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4391",children:"#4391"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Test file cleanups (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4412",children:"#4412"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4411",children:"#4411"}),")"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},3286:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/release-5-contrib-settings-1fbdfb8c4c95fcb87b66761cf7a6e9d3.gif"},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var s=r(67294);const t={},l=s.createContext(t);function a(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5127552d.3db0cba6.js b/assets/js/5127552d.3db0cba6.js new file mode 100644 index 00000000..0ebf5327 --- /dev/null +++ b/assets/js/5127552d.3db0cba6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5465],{39382:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>i,toc:()=>o});var s=r(85893),t=r(11151);const l={},a="Darklang Release 5",i={id:"changelog/release-5",title:"Darklang Release 5",description:"September 1, 2022",source:"@site/docs-classic/changelog/release-5.md",sourceDirName:"changelog",slug:"/changelog/release-5",permalink:"/changelog/release-5",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-5.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 6 - Sept, 2022",permalink:"/changelog/release-6"},next:{title:"Release 4 - July, 2022",permalink:"/changelog/release-4"}},d={},o=[{value:"Major feature: experimental Tuple support",id:"major-feature-experimental-tuple-support",level:2},{value:"Major feature: Contributor settings",id:"major-feature-contributor-settings",level:2},{value:"Language improvements",id:"language-improvements",level:2},{value:"Editor improvements",id:"editor-improvements",level:2},{value:"In-progress features - HttpClient and HTTP framework",id:"in-progress-features---httpclient-and-http-framework",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"darklang-release-5",children:"Darklang Release 5"})}),"\n",(0,s.jsx)(n.p,{children:"September 1, 2022"}),"\n",(0,s.jsx)(n.p,{children:"Darklang Release 5 includes support for Tuples, a revamped settings panel with\nnew settings for contributors, and significant internal reworks."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.em,{children:["See the ",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-release-5/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,s.jsx)(n.h2,{id:"major-feature-experimental-tuple-support",children:"Major feature: experimental Tuple support"}),"\n",(0,s.jsxs)(n.p,{children:["Dark now has work-in-progress support for tuples\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/issues/4265",children:"#4265"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4425",children:"#4425"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4404",children:"#4404"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4311",children:"#4311"}),") - unstructured lists of\nheterogeneous data:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Tuple expressions can be created by entering ",(0,s.jsx)(n.code,{children:"("})," in a blank expression"]}),"\n",(0,s.jsxs)(n.li,{children:["Tuples may be deconstructed in ",(0,s.jsx)(n.code,{children:"match"})," patterns"]}),"\n",(0,s.jsxs)(n.li,{children:["New standard library functions have been added to work with Tuples:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Tuple2::create"}),", ",(0,s.jsx)(n.code,{children:"::first"}),", ",(0,s.jsx)(n.code,{children:"::second"}),", ",(0,s.jsx)(n.code,{children:"::swap"}),", ",(0,s.jsx)(n.code,{children:"::mapFirst"}),",\n",(0,s.jsx)(n.code,{children:"::mapSecond"}),", ",(0,s.jsx)(n.code,{children:"::mapBoth"})]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"Tuple3::create"}),", ",(0,s.jsx)(n.code,{children:"::first"}),", ",(0,s.jsx)(n.code,{children:"::second"}),", ",(0,s.jsx)(n.code,{children:"::third"}),", ",(0,s.jsx)(n.code,{children:"::mapFirst"}),",\n",(0,s.jsx)(n.code,{children:"::mapSecond"}),", ",(0,s.jsx)(n.code,{children:"::mapThird"}),", ",(0,s.jsx)(n.code,{children:"::mapAllThree"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Tuple deconstruction (",(0,s.jsx)(n.code,{children:"let (lat long) = (39.9526, 75.1652)"}),") is not yet\navailable, so creating tuples of size greater than 3 is not recommended at\nthis time, unless you plan to use ",(0,s.jsx)(n.code,{children:"match"})," expressions to deconstruct the\nvalues."]}),"\n",(0,s.jsx)(n.li,{children:"Tuples are only available after opting in via Settings (see next section)"}),"\n",(0,s.jsxs)(n.li,{children:["More details on using tuples can be found in\n",(0,s.jsx)(n.a,{href:"/reference/languagedetails###Tuples",children:"Language Details"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"major-feature-contributor-settings",children:"Major feature: Contributor settings"}),"\n",(0,s.jsx)(n.p,{children:"A new Contributor Settings page has been added, allowing devs to look under the\nhood and use the same tools that employees are using to develop Darklang."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"contributor settings and tuple demo",src:r(3286).Z+"",width:"1498",height:"1014"})}),"\n",(0,s.jsxs)(n.p,{children:["In particular, devs can now build a local version of the Darklang editor, and\nuse it against their production Darklang codebase\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4387",children:"#4387"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4402",children:"#4402"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["We have also made it possible to enable the in-Editor debugger (note: this is\nuseful for the debugging the Darklang editor, not for debugging Darklang\nprograms) (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4343",children:"#4343"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["Finally, in-progress features can now be enabled for devs, starting with Tuples\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4429",children:"#4429"}),")"]}),"\n",(0,s.jsx)(n.h2,{id:"language-improvements",children:"Language improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Allow floats where the whole number part is empty\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4371",children:"#4371"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"editor-improvements",children:"Editor improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Allow pressing enter in more expression bodies\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4438",children:"#4438"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fixed Undo functionality, which was briefly broken\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4392",children:"#4392"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fixed display of Error rail, which was briefly broken\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4373",children:"#4373"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Prevent Analysis errors due to using Tasks incorrectly\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4436",children:"#4436"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Revamping settings UI, adding reusuable form components, animations, toggle\nswitches, and switching to TailwindCSS\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4375",children:"#4375"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4401",children:"#4401"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4420",children:"#4420"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4426",children:"#4426"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.h2,{id:"in-progress-features---httpclient-and-http-framework",children:["In-progress features - ",(0,s.jsx)(n.code,{children:"HttpClient"})," and HTTP framework"]}),"\n",(0,s.jsxs)(n.p,{children:["The current ",(0,s.jsx)(n.code,{children:"HttpClient"})," and HTTP framework are quite limited, only supporting\ntext request/response bodies, among many other problems. They also lack the\nflexibility to control and compose their behavior."]}),"\n",(0,s.jsxs)(n.p,{children:["As part of rewriting the Static Assets feature in Dark itself\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/issues/4259",children:"#4259"}),'), we are creating\n"thinner", more flexible, and more composable HttpClient\n(',(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4366",children:"#4366"}),") and HTTP handlers\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4353",children:"#4353"}),")"]}),"\n",(0,s.jsx)(n.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Huge refactor of client types\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4326",children:"#4326"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Remove OCamlTypes (used for interop with the old OCaml backend)\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4396",children:"#4396"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4398",children:"#4398"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Add internal function to load Ops for a TopLevel\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4391",children:"#4391"}),")"]}),"\n",(0,s.jsxs)(n.li,{children:["Test file cleanups (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4412",children:"#4412"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4411",children:"#4411"}),")"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},3286:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/release-5-contrib-settings-1fbdfb8c4c95fcb87b66761cf7a6e9d3.gif"},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var s=r(67294);const t={},l=s.createContext(t);function a(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.37af8b01.js b/assets/js/5e95c892.37af8b01.js deleted file mode 100644 index 890ab227..00000000 --- a/assets/js/5e95c892.37af8b01.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9661],{41892:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(67294);var c=r(90512),u=r(10833),a=r(35281),d=r(18790),n=r(7372),t=r(85893);function l(e){return(0,t.jsx)(u.FG,{className:(0,c.Z)(a.k.wrapper.docsPages),children:(0,t.jsx)(n.Z,{children:(0,d.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.f71fc95c.js b/assets/js/5e95c892.f71fc95c.js new file mode 100644 index 00000000..54771eec --- /dev/null +++ b/assets/js/5e95c892.f71fc95c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9661],{41892:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(67294);var c=r(90512),u=r(10833),a=r(35281),d=r(18790),n=r(63211),t=r(85893);function l(e){return(0,t.jsx)(u.FG,{className:(0,c.Z)(a.k.wrapper.docsPages),children:(0,t.jsx)(n.Z,{children:(0,d.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/784c7ef0.608aa09c.js b/assets/js/784c7ef0.608aa09c.js new file mode 100644 index 00000000..ddb7d80a --- /dev/null +++ b/assets/js/784c7ef0.608aa09c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4624],{44202:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var l=r(85893),s=r(11151);const t={},i="Darklang Release 8",a={id:"changelog/release-8",title:"Darklang Release 8",description:"December 1, 2022",source:"@site/docs-classic/changelog/release-8.md",sourceDirName:"changelog",slug:"/changelog/release-8",permalink:"/changelog/release-8",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-8.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 9 - Dec, 2022",permalink:"/changelog/release-9"},next:{title:"Release 7 - Oct, 2022",permalink:"/changelog/release-7"}},d={},c=[{value:"Editor",id:"editor",level:2},{value:"Documentation",id:"documentation",level:2},{value:"Contributor experience",id:"contributor-experience",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function o(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"darklang-release-8",children:"Darklang Release 8"})}),"\n",(0,l.jsx)(n.p,{children:"December 1, 2022"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsxs)(n.em,{children:["See the ",(0,l.jsx)(n.a,{href:"https://blog.darklang.com/darklang-releases-7-and-8/",children:"blog post"})," for\nfurther discussion."]})}),"\n",(0,l.jsx)(n.h2,{id:"editor",children:"Editor"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Speed up editor load by preloading first API requests\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4574",children:"#4574"}),")"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"documentation",children:"Documentation"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Add transparent Dark logos (",(0,l.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/291",children:"#291"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Correct documentation of how code is formatted via terminal\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/294",children:"#294"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Fix some links to Darklang code\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/293",children:"#293"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Update to Docusaurus 2.2 (",(0,l.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/292",children:"#292"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"contributor-experience",children:"Contributor experience"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Remove all remnants of OCaml files and tooling\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4594",children:"#4594"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Update both development and production containers to Ubuntu 22.04\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4118",children:"#4118"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Improve build reliability (especially for WSL users) by removing setup steps\non the container host (",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4581",children:"#4581"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:['Extracted most client-facing backend types to central "ClientTypes" project.\nThis allows for safe adjustments of those types without leaking into our\ndomain logic (',(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4542",children:"#4542"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Improve how we ensure backend JSON-serializable types are tested for\nconsistent serialization (",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4588",children:"#4588"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Update ReScript to version 9.1.4\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4570",children:"#4570"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Use Tailwind in many more places\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4591",children:"#4591"}),",\n",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4601",children:"#4601"}),",\n",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4610",children:"#4610"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Make integration tests more reliable when using non-fluid entry boxes\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4578",children:"#4578"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Add ",(0,l.jsx)(n.code,{children:"--loop"})," to integration tests to find flaky tests\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4592",children:"#4592"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Fix deployment when no deploy locks are present\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4576",children:"#4576"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Scale down even when cert-manager containers are present\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4617",children:"#4617"}),")"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(o,{...e})}):o(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>i});var l=r(67294);const s={},t=l.createContext(s);function i(e){const n=l.useContext(t);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),l.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/784c7ef0.b0b3f43a.js b/assets/js/784c7ef0.b0b3f43a.js deleted file mode 100644 index a560a021..00000000 --- a/assets/js/784c7ef0.b0b3f43a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4624],{44202:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var l=r(85893),s=r(11151);const t={},i="Darklang Release 8",a={id:"changelog/release-8",title:"Darklang Release 8",description:"December 1, 2022",source:"@site/docs-classic/changelog/release-8.md",sourceDirName:"changelog",slug:"/changelog/release-8",permalink:"/changelog/release-8",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-8.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 9 - Dec, 2022",permalink:"/changelog/release-9"},next:{title:"Release 7 - Oct, 2022",permalink:"/changelog/release-7"}},c={},d=[{value:"Editor",id:"editor",level:2},{value:"Documentation",id:"documentation",level:2},{value:"Contributor experience",id:"contributor-experience",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function o(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.h1,{id:"darklang-release-8",children:"Darklang Release 8"}),"\n",(0,l.jsx)(n.p,{children:"December 1, 2022"}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsxs)(n.em,{children:["See the ",(0,l.jsx)(n.a,{href:"https://blog.darklang.com/darklang-releases-7-and-8/",children:"blog post"})," for\nfurther discussion."]})}),"\n",(0,l.jsx)(n.h2,{id:"editor",children:"Editor"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["Speed up editor load by preloading first API requests\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4574",children:"#4574"}),")"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"documentation",children:"Documentation"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Add transparent Dark logos (",(0,l.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/291",children:"#291"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Correct documentation of how code is formatted via terminal\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/294",children:"#294"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Fix some links to Darklang code\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/293",children:"#293"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Update to Docusaurus 2.2 (",(0,l.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/292",children:"#292"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"contributor-experience",children:"Contributor experience"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Remove all remnants of OCaml files and tooling\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4594",children:"#4594"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Update both development and production containers to Ubuntu 22.04\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4118",children:"#4118"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Improve build reliability (especially for WSL users) by removing setup steps\non the container host (",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4581",children:"#4581"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:['Extracted most client-facing backend types to central "ClientTypes" project.\nThis allows for safe adjustments of those types without leaking into our\ndomain logic (',(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4542",children:"#4542"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Improve how we ensure backend JSON-serializable types are tested for\nconsistent serialization (",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4588",children:"#4588"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Update ReScript to version 9.1.4\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4570",children:"#4570"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Use Tailwind in many more places\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4591",children:"#4591"}),",\n",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4601",children:"#4601"}),",\n",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4610",children:"#4610"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Make integration tests more reliable when using non-fluid entry boxes\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4578",children:"#4578"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Add ",(0,l.jsx)(n.code,{children:"--loop"})," to integration tests to find flaky tests\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4592",children:"#4592"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Fix deployment when no deploy locks are present\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4576",children:"#4576"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:["\n",(0,l.jsxs)(n.p,{children:["Scale down even when cert-manager containers are present\n(",(0,l.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4617",children:"#4617"}),")"]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(o,{...e})}):o(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>i});var l=r(67294);const s={},t=l.createContext(s);function i(e){const n=l.useContext(t);return l.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),l.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80e8e960.3927b593.js b/assets/js/80e8e960.3927b593.js new file mode 100644 index 00000000..fdee139c --- /dev/null +++ b/assets/js/80e8e960.3927b593.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3335],{79642:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>o,frontMatter:()=>a,metadata:()=>t,toc:()=>c});var s=r(85893),i=r(11151);const a={},l="Darklang Release 9",t={id:"changelog/release-9",title:"Darklang Release 9",description:"January 1, 2023",source:"@site/docs-classic/changelog/release-9.md",sourceDirName:"changelog",slug:"/changelog/release-9",permalink:"/changelog/release-9",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-9.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 10 - Jan, 2023",permalink:"/changelog/release-10"},next:{title:"Release 8 - Nov, 2022",permalink:"/changelog/release-8"}},d={},c=[{value:"Language and Standard Library",id:"language-and-standard-library",level:2},{value:"Editor Improvements",id:"editor-improvements",level:2},{value:"Contributor Experience",id:"contributor-experience",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"darklang-release-9",children:"Darklang Release 9"})}),"\n",(0,s.jsx)(n.p,{children:"January 1, 2023"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.em,{children:["See the ",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-release-9/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,s.jsx)(n.h2,{id:"language-and-standard-library",children:"Language and Standard Library"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Support short-circuiting ",(0,s.jsx)(n.code,{children:"||"})," and ",(0,s.jsx)(n.code,{children:"&&"})," expressions\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4640",children:"#4640"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4644",children:"#4644"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4674",children:"#4674"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4676",children:"#4676"}),")"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"image",src:r(85517).Z+"",width:"648",height:"381"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["deprecate old ",(0,s.jsx)(n.code,{children:"||"})," and ",(0,s.jsx)(n.code,{children:"&&"})," functions\n",(0,s.jsx)(n.img,{alt:"image",src:r(88368).Z+"",width:"663",height:"402"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["add ",(0,s.jsx)(n.code,{children:"convert-to-short-circuiting"})," command for migrating"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add ",(0,s.jsx)(n.code,{children:"List::partition_v0"})," function to split a list into 2 lists\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4618",children:"#4618"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["Note: tuples are currently in 'preview,' and this returns a tuple. Enable them\nin ",(0,s.jsx)(n.strong,{children:"Settings/Contributor Settings"})," to use this function."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fix lambda argument names for ",(0,s.jsx)(n.code,{children:"List::all_v0"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4626",children:"#4626"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add functions that operate on characters\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4628",children:"#4628"}),"):"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isUppercase_v0"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isLowercase_v0"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::toUppercase_v1"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::toLowercase_v1"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isDigit_v0"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isASCII_v0"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isASCIILetter_v0"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Allow using ",(0,s.jsx)(n.code,{children:"Char"})," as a function parameter type and return type\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4628",children:"#4628"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Standard library functions that take lambdas have default names provided for\nthe lambda arguments (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4626",children:"#4626"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"editor-improvements",children:"Editor Improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Update the styling of the ",(0,s.jsx)(n.strong,{children:"Settings/Invite"})," page\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4643",children:"#4643"}),")"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"image",src:r(54614).Z+"",width:"2152",height:"768"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Start using a nice non-monospace font (Source Sans Pro) in the editor,\nstarting with ",(0,s.jsx)(n.strong,{children:"Settings"})," pages\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4640",children:"#4640"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4656",children:"#4656"}),")"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Source Sans Pro paragraph",src:r(49602).Z+"",width:"470",height:"152"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"contributor-experience",children:"Contributor Experience"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add more debugging functions in the client codebase\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4640",children:"#4640"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Merge F# backend code (in ",(0,s.jsx)(n.code,{children:"fsharp-backend"}),") into ",(0,s.jsx)(n.code,{children:"backend"})," directory\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4639",children:"#4639"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Experimentally start storing some traces in Cloud Storage instead of the DB\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4652",children:"#4652"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add internal function that returns the git hash of the server's current/latest\ndeploy (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4649",children:"#4649"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Check for serialization errors before starting up servers\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4650",children:"#4650"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Moved darksa.com and darkstaticassets.com certificates to Google Certificate\nManager."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Remove unused cloud infrastructure including IP addresses, disks, backups, and\nIAM roles."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Include Dark client version in ApiServer exception tracking\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4645",children:"#4645"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"https://www.npmjs.com/package/rescript-webapi",children:"rescript-webapi"})," instead\nof our Native.res (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4630",children:"#4630"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use Tailwind in the Settings view\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4623",children:"#4623"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Rename Match Pattern cases in preparation for Let Patterns\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4622",children:"#4622"}),",\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4629",children:"#4629"}),"))"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:['Rename "Analysis" F# project to "Wasm"\n(',(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4671",children:"#4671"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Remove old ApiServer POST endpoints that are no longer used\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4620",children:"#4620"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Remove unused config variables\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4651",children:"#4651"}),")"]}),"\n"]}),"\n"]})]})}function o(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},85517:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/and-and-or-00607dbde90a80863c2b3757c6f0d133.png"},88368:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/deprecated-and-and-or-0de2824bb4ab35a49af1eddb03a8b7d5.png"},54614:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/settings-style-120cf2773ad6341933230eeebdf0efac.png"},49602:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/source-sans-pro-c4dd58565ee06d9cbeae114518ec23a0.png"},11151:(e,n,r)=>{r.d(n,{Z:()=>t,a:()=>l});var s=r(67294);const i={},a=s.createContext(i);function l(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/80e8e960.eba66208.js b/assets/js/80e8e960.eba66208.js deleted file mode 100644 index 69d343e9..00000000 --- a/assets/js/80e8e960.eba66208.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[3335],{79642:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>o,frontMatter:()=>a,metadata:()=>t,toc:()=>c});var s=r(85893),i=r(11151);const a={},l="Darklang Release 9",t={id:"changelog/release-9",title:"Darklang Release 9",description:"January 1, 2023",source:"@site/docs-classic/changelog/release-9.md",sourceDirName:"changelog",slug:"/changelog/release-9",permalink:"/changelog/release-9",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-9.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 10 - Jan, 2023",permalink:"/changelog/release-10"},next:{title:"Release 8 - Nov, 2022",permalink:"/changelog/release-8"}},d={},c=[{value:"Language and Standard Library",id:"language-and-standard-library",level:2},{value:"Editor Improvements",id:"editor-improvements",level:2},{value:"Contributor Experience",id:"contributor-experience",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"darklang-release-9",children:"Darklang Release 9"}),"\n",(0,s.jsx)(n.p,{children:"January 1, 2023"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.em,{children:["See the ",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-release-9/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,s.jsx)(n.h2,{id:"language-and-standard-library",children:"Language and Standard Library"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Support short-circuiting ",(0,s.jsx)(n.code,{children:"||"})," and ",(0,s.jsx)(n.code,{children:"&&"})," expressions\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4640",children:"#4640"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4644",children:"#4644"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4674",children:"#4674"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4676",children:"#4676"}),")"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"image",src:r(85517).Z+"",width:"648",height:"381"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["deprecate old ",(0,s.jsx)(n.code,{children:"||"})," and ",(0,s.jsx)(n.code,{children:"&&"})," functions\n",(0,s.jsx)(n.img,{alt:"image",src:r(88368).Z+"",width:"663",height:"402"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["add ",(0,s.jsx)(n.code,{children:"convert-to-short-circuiting"})," command for migrating"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add ",(0,s.jsx)(n.code,{children:"List::partition_v0"})," function to split a list into 2 lists\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4618",children:"#4618"}),")"]}),"\n",(0,s.jsxs)(n.p,{children:["Note: tuples are currently in 'preview,' and this returns a tuple. Enable them\nin ",(0,s.jsx)(n.strong,{children:"Settings/Contributor Settings"})," to use this function."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fix lambda argument names for ",(0,s.jsx)(n.code,{children:"List::all_v0"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4626",children:"#4626"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add functions that operate on characters\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4628",children:"#4628"}),"):"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isUppercase_v0"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isLowercase_v0"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::toUppercase_v1"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::toLowercase_v1"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isDigit_v0"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isASCII_v0"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"Char::isASCIILetter_v0"})}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Allow using ",(0,s.jsx)(n.code,{children:"Char"})," as a function parameter type and return type\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4628",children:"#4628"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Standard library functions that take lambdas have default names provided for\nthe lambda arguments (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4626",children:"#4626"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"editor-improvements",children:"Editor Improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Update the styling of the ",(0,s.jsx)(n.strong,{children:"Settings/Invite"})," page\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4643",children:"#4643"}),")"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"image",src:r(54614).Z+"",width:"2152",height:"768"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Start using a nice non-monospace font (Source Sans Pro) in the editor,\nstarting with ",(0,s.jsx)(n.strong,{children:"Settings"})," pages\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4640",children:"#4640"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4656",children:"#4656"}),")"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Source Sans Pro paragraph",src:r(49602).Z+"",width:"470",height:"152"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"contributor-experience",children:"Contributor Experience"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Add more debugging functions in the client codebase\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4640",children:"#4640"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Merge F# backend code (in ",(0,s.jsx)(n.code,{children:"fsharp-backend"}),") into ",(0,s.jsx)(n.code,{children:"backend"})," directory\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4639",children:"#4639"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Experimentally start storing some traces in Cloud Storage instead of the DB\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4652",children:"#4652"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Add internal function that returns the git hash of the server's current/latest\ndeploy (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4649",children:"#4649"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Check for serialization errors before starting up servers\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4650",children:"#4650"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Moved darksa.com and darkstaticassets.com certificates to Google Certificate\nManager."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Remove unused cloud infrastructure including IP addresses, disks, backups, and\nIAM roles."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Include Dark client version in ApiServer exception tracking\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4645",children:"#4645"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use ",(0,s.jsx)(n.a,{href:"https://www.npmjs.com/package/rescript-webapi",children:"rescript-webapi"})," instead\nof our Native.res (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4630",children:"#4630"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use Tailwind in the Settings view\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4623",children:"#4623"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Rename Match Pattern cases in preparation for Let Patterns\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4622",children:"#4622"}),",\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4629",children:"#4629"}),"))"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:['Rename "Analysis" F# project to "Wasm"\n(',(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4671",children:"#4671"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Remove old ApiServer POST endpoints that are no longer used\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4620",children:"#4620"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Remove unused config variables\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4651",children:"#4651"}),")"]}),"\n"]}),"\n"]})]})}function o(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},85517:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/and-and-or-00607dbde90a80863c2b3757c6f0d133.png"},88368:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/deprecated-and-and-or-0de2824bb4ab35a49af1eddb03a8b7d5.png"},54614:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/settings-style-120cf2773ad6341933230eeebdf0efac.png"},49602:(e,n,r)=>{r.d(n,{Z:()=>s});const s=r.p+"assets/images/source-sans-pro-c4dd58565ee06d9cbeae114518ec23a0.png"},11151:(e,n,r)=>{r.d(n,{Z:()=>t,a:()=>l});var s=r(67294);const i={},a=s.createContext(i);function l(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/86245a5e.64098724.js b/assets/js/86245a5e.64098724.js deleted file mode 100644 index 00994d7c..00000000 --- a/assets/js/86245a5e.64098724.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[373],{58731:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>c,contentTitle:()=>t,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var s=o(85893),n=o(11151);const a={},t="Workers",i={id:"reference/framework/workers",title:"Workers",description:"Darklang supports doing work asynchronously outside the context of an HTTP handler",source:"@site/docs-classic/reference/framework/workers.md",sourceDirName:"reference/framework",slug:"/reference/framework/workers",permalink:"/reference/framework/workers",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/framework/workers.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Datastores",permalink:"/reference/framework/datastores"},next:{title:"Cron",permalink:"/reference/framework/cron"}},c={},l=[{value:"Worker Basics",id:"worker-basics",level:2},{value:"Creating a Worker",id:"creating-a-worker",level:2},{value:"FAQ",id:"faq",level:2},{value:"How do I access the data from emit in the worker?",id:"how-do-i-access-the-data-from-emit-in-the-worker",level:3},{value:"Do workers execute in parallel?",id:"do-workers-execute-in-parallel",level:3},{value:"Can I control the concurrency of my worker?",id:"can-i-control-the-concurrency-of-my-worker",level:3},{value:"Can I un-enqueue a message?",id:"can-i-un-enqueue-a-message",level:3},{value:"Do workers guarantee exactly-once delivery?",id:"do-workers-guarantee-exactly-once-delivery",level:3},{value:"How do I wait for a worker to finish?",id:"how-do-i-wait-for-a-worker-to-finish",level:3},{value:"Can I call emit from a Worker?",id:"can-i-call-emit-from-a-worker",level:3},{value:"How can I tell how long a message was enqueued?",id:"how-can-i-tell-how-long-a-message-was-enqueued",level:3},{value:"Why does my worker show pending messages that aren\u2019t being processed?",id:"why-does-my-worker-show-pending-messages-that-arent-being-processed",level:3},{value:"What happens when a message fails?",id:"what-happens-when-a-message-fails",level:3},{value:"How long will it take my worker to execute?",id:"how-long-will-it-take-my-worker-to-execute",level:3},{value:"Future Improvements",id:"future-improvements",level:2}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.h1,{id:"workers",children:"Workers"}),"\n",(0,s.jsxs)(r.p,{children:["Darklang supports doing work asynchronously outside the context of an HTTP handler\nusing a ",(0,s.jsx)(r.strong,{children:"Worker"}),". Each worker has a queue of messages, which are processed\nloosely in-order, executing the code within the Worker once for each message.\nMessages are created by calling ",(0,s.jsx)(r.code,{children:"emit"})," from any other code, and can contain\narbitrary event data."]}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"REPL with emit to worker",src:o(87504).Z+"",width:"772",height:"323"})}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"basic worker",src:o(94706).Z+"",width:"1202",height:"335"})}),"\n",(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/JpfZIdde_5I",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,s.jsx)(r.h2,{id:"worker-basics",children:"Worker Basics"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["Workers will automatically process each message. The ",(0,s.jsx)(r.code,{children:"event"})," data passed to\n",(0,s.jsx)(r.code,{children:"emit"})," is available in the Worker as a special variable ",(0,s.jsx)(r.code,{children:"event"}),". This can be\nof any type, but it is often convenient to use a Dict holding many other\nvalues."]}),"\n",(0,s.jsx)(r.li,{children:"Workers process messages roughly in the order that they were received.\nGenerally, older messages are processed first, but strict ordering is not\nguaranteed."}),"\n",(0,s.jsx)(r.li,{children:"A message should be processed within a minute of being emitted. Typically,\nprocessing begins within a few seconds."}),"\n",(0,s.jsx)(r.li,{children:"If there are multiple items in the queue, a live count of queue items will\nappear at the top left."}),"\n",(0,s.jsx)(r.li,{children:'You can pause the queue by hitting the "pause" button in case of operational\nissues or if you\'d like to stop and debug.'}),"\n",(0,s.jsx)(r.li,{children:"The last 10 processed events will show as traces that you can use for\ndebugging purposes."}),"\n",(0,s.jsx)(r.li,{children:"Workers will not alert you of failures unless you write logic to do so."}),"\n"]}),"\n",(0,s.jsx)(r.h2,{id:"creating-a-worker",children:"Creating a Worker"}),"\n",(0,s.jsx)(r.p,{children:"Workers can be created from the omnibox or sidebar."}),"\n",(0,s.jsxs)(r.p,{children:["Similar to HTTP handlers, calling ",(0,s.jsx)(r.code,{children:"emit"})," with a nonexistent Worker name will\npopulate that worker in the 404 sidebar section, allowing it to be created."]}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"404 worker",src:o(4275).Z+"",width:"519",height:"110"})}),"\n",(0,s.jsxs)(r.p,{children:["Creating a Worker from a 404 may result in a delay when executing the first\nmessage. When a new worker is created, it immediately processed the first\nmessage in the queue, but returns ",(0,s.jsx)(r.code,{children:"Incomplete"})," because no code has been written\nyet. This causes the message to get automatically retried in 5 minutes, but\nuntil then it may look like no messages are being processed."]}),"\n",(0,s.jsx)(r.p,{children:"This is all quite confusing, so for now we recommend creating the Worker and\ncompleting its code first, before emitting events to it."}),"\n",(0,s.jsx)(r.h2,{id:"faq",children:"FAQ"}),"\n",(0,s.jsxs)(r.h3,{id:"how-do-i-access-the-data-from-emit-in-the-worker",children:["How do I access the data from ",(0,s.jsx)(r.code,{children:"emit"})," in the worker?"]}),"\n",(0,s.jsxs)(r.p,{children:["The data from the ",(0,s.jsx)(r.code,{children:"emit"})," is available in a variable called ",(0,s.jsx)(r.code,{children:"event"})," from within\nthe worker. Its type will be whatever was passed to ",(0,s.jsx)(r.code,{children:"emit"})," (e.g.,\n",(0,s.jsx)(r.code,{children:"emit [1, 2] \u201cmy-worker\u201d"})," will have ",(0,s.jsx)(r.code,{children:"event"})," = ",(0,s.jsx)(r.code,{children:"[1, 2]"})]}),"\n",(0,s.jsx)(r.h3,{id:"do-workers-execute-in-parallel",children:"Do workers execute in parallel?"}),"\n",(0,s.jsx)(r.p,{children:"Yes. Workers across a canvas execute in parallel, and multiple messages for a\nworker may be processed in parallel."}),"\n",(0,s.jsx)(r.h3,{id:"can-i-control-the-concurrency-of-my-worker",children:"Can I control the concurrency of my worker?"}),"\n",(0,s.jsx)(r.p,{children:"No. If multiple messages are enqueued for a worker, the Darklang platform may\nexecute them concurrently. We intend to eventually add controls for managing\nconcurrency."}),"\n",(0,s.jsx)(r.h3,{id:"can-i-un-enqueue-a-message",children:"Can I un-enqueue a message?"}),"\n",(0,s.jsx)(r.p,{children:"No, this is not currently possible. An alternative would be to give each message\na unique UUID, then create a datastore of message IDs to ignore, checking it\nwithin your worker."}),"\n",(0,s.jsx)(r.h3,{id:"do-workers-guarantee-exactly-once-delivery",children:"Do workers guarantee exactly-once delivery?"}),"\n",(0,s.jsx)(r.p,{children:"No. Messages have at-least-once delivery semantics. Adding a unique UUID to\nevery message can be useful in keeping track of which messages have been seen by\nyour worker already."}),"\n",(0,s.jsx)(r.h3,{id:"how-do-i-wait-for-a-worker-to-finish",children:"How do I wait for a worker to finish?"}),"\n",(0,s.jsxs)(r.p,{children:["The code that calls ",(0,s.jsx)(r.code,{children:"emit"})," has no way to know when a worker has completed. If\nyou need a synchronous call, consider a function instead."]}),"\n",(0,s.jsxs)(r.h3,{id:"can-i-call-emit-from-a-worker",children:["Can I call ",(0,s.jsx)(r.code,{children:"emit"})," from a Worker?"]}),"\n",(0,s.jsx)(r.p,{children:"Yes. This can be useful to do fan-out of work or batch processing of data."}),"\n",(0,s.jsxs)(r.p,{children:["In fact, you can ",(0,s.jsx)(r.code,{children:"emit"})," to the same Worker that's processing the message. Just\nbe careful that you don't cause a infinite loop or positive feedback loop. (We\nare likely to disable your Worker if this happens, as it can cause instability\nof the entire worker infrastructure right now.)"]}),"\n",(0,s.jsx)(r.h3,{id:"how-can-i-tell-how-long-a-message-was-enqueued",children:"How can I tell how long a message was enqueued?"}),"\n",(0,s.jsxs)(r.p,{children:["We currently don\u2019t have a way to get this information directly. You can\ncalculate this yourself by adding a timestamp to each message when you call\n",(0,s.jsx)(r.code,{children:"emit"}),"."]}),"\n",(0,s.jsx)(r.h3,{id:"why-does-my-worker-show-pending-messages-that-arent-being-processed",children:"Why does my worker show pending messages that aren\u2019t being processed?"}),"\n",(0,s.jsx)(r.p,{children:"Your worker is paused and will not process messages while paused. Click the play\nbutton at the top left of the worker to resume processing."}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"paused worker with pending messages",src:o(6975).Z+"",width:"270",height:"84"})}),"\n",(0,s.jsxs)(r.p,{children:["Alternatively, you emitted messages to a non-existent Worker and then created it\nfrom the 404 section (see the warning above in ",(0,s.jsx)(r.strong,{children:"Creating a Worker"}),"). Complete\nthe code in the handler and wait up to 5 minutes for the message to be\nre-processed."]}),"\n",(0,s.jsx)(r.h3,{id:"what-happens-when-a-message-fails",children:"What happens when a message fails?"}),"\n",(0,s.jsx)(r.p,{children:"Nothing special. A message that causes a worker to throw a runtime error (for\nexample by returning Incomplete or having a function call go to the Error Rail)\nwill be silently ignored and the worker will process the next message. We plan\nto eventually add more error handling capabilities such as automatic retries and\ndead-letter-queues."}),"\n",(0,s.jsx)(r.h3,{id:"how-long-will-it-take-my-worker-to-execute",children:"How long will it take my worker to execute?"}),"\n",(0,s.jsx)(r.p,{children:"Your Worker executes code the same as any other Darklang component. For example,\nmaking external HTTP calls will cause execution to take longer."}),"\n",(0,s.jsx)(r.h2,{id:"future-improvements",children:"Future Improvements"}),"\n",(0,s.jsxs)(r.p,{children:["This is a list of improvements we'd like to make to Workers. If you have\nopinions on how these might work, or are interested in contributing any\nfunctionality, please reach out via\n",(0,s.jsx)(r.a,{href:"https://darklang.com/discord-invite",children:"Discord"}),"."]}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"Error handling: automatic retry, dead-letter queue"}),"\n",(0,s.jsx)(r.li,{children:"Concurrency control, allowing for tuning how many messages a Worker will\nprocess in parallel"}),"\n",(0,s.jsx)(r.li,{children:"Queue introspection to see more about the messages in the queue"}),"\n"]})]})}function d(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},4275:(e,r,o)=>{o.d(r,{Z:()=>s});const s="data:image/png;base64,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"},87504:(e,r,o)=>{o.d(r,{Z:()=>s});const s=o.p+"assets/images/emit-fb51694b9704f9f6c480f55f499ba2bc.png"},6975:(e,r,o)=>{o.d(r,{Z:()=>s});const s="data:image/png;base64,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"},94706:(e,r,o)=>{o.d(r,{Z:()=>s});const s=o.p+"assets/images/worker-e3ddac9e1d84ed436426731fe1aab6e2.png"},11151:(e,r,o)=>{o.d(r,{Z:()=>i,a:()=>t});var s=o(67294);const n={},a=s.createContext(n);function t(e){const r=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:t(e.components),s.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/86245a5e.935ebe54.js b/assets/js/86245a5e.935ebe54.js new file mode 100644 index 00000000..0e6890c4 --- /dev/null +++ b/assets/js/86245a5e.935ebe54.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[373],{58731:(e,r,o)=>{o.r(r),o.d(r,{assets:()=>c,contentTitle:()=>t,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var s=o(85893),n=o(11151);const a={},t="Workers",i={id:"reference/framework/workers",title:"Workers",description:"Darklang supports doing work asynchronously outside the context of an HTTP handler",source:"@site/docs-classic/reference/framework/workers.md",sourceDirName:"reference/framework",slug:"/reference/framework/workers",permalink:"/reference/framework/workers",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/framework/workers.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Datastores",permalink:"/reference/framework/datastores"},next:{title:"Cron",permalink:"/reference/framework/cron"}},c={},l=[{value:"Worker Basics",id:"worker-basics",level:2},{value:"Creating a Worker",id:"creating-a-worker",level:2},{value:"FAQ",id:"faq",level:2},{value:"How do I access the data from emit in the worker?",id:"how-do-i-access-the-data-from-emit-in-the-worker",level:3},{value:"Do workers execute in parallel?",id:"do-workers-execute-in-parallel",level:3},{value:"Can I control the concurrency of my worker?",id:"can-i-control-the-concurrency-of-my-worker",level:3},{value:"Can I un-enqueue a message?",id:"can-i-un-enqueue-a-message",level:3},{value:"Do workers guarantee exactly-once delivery?",id:"do-workers-guarantee-exactly-once-delivery",level:3},{value:"How do I wait for a worker to finish?",id:"how-do-i-wait-for-a-worker-to-finish",level:3},{value:"Can I call emit from a Worker?",id:"can-i-call-emit-from-a-worker",level:3},{value:"How can I tell how long a message was enqueued?",id:"how-can-i-tell-how-long-a-message-was-enqueued",level:3},{value:"Why does my worker show pending messages that aren\u2019t being processed?",id:"why-does-my-worker-show-pending-messages-that-arent-being-processed",level:3},{value:"What happens when a message fails?",id:"what-happens-when-a-message-fails",level:3},{value:"How long will it take my worker to execute?",id:"how-long-will-it-take-my-worker-to-execute",level:3},{value:"Future Improvements",id:"future-improvements",level:2}];function h(e){const r={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r.header,{children:(0,s.jsx)(r.h1,{id:"workers",children:"Workers"})}),"\n",(0,s.jsxs)(r.p,{children:["Darklang supports doing work asynchronously outside the context of an HTTP handler\nusing a ",(0,s.jsx)(r.strong,{children:"Worker"}),". Each worker has a queue of messages, which are processed\nloosely in-order, executing the code within the Worker once for each message.\nMessages are created by calling ",(0,s.jsx)(r.code,{children:"emit"})," from any other code, and can contain\narbitrary event data."]}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"REPL with emit to worker",src:o(87504).Z+"",width:"772",height:"323"})}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"basic worker",src:o(94706).Z+"",width:"1202",height:"335"})}),"\n",(0,s.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/JpfZIdde_5I",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,s.jsx)(r.h2,{id:"worker-basics",children:"Worker Basics"}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsxs)(r.li,{children:["Workers will automatically process each message. The ",(0,s.jsx)(r.code,{children:"event"})," data passed to\n",(0,s.jsx)(r.code,{children:"emit"})," is available in the Worker as a special variable ",(0,s.jsx)(r.code,{children:"event"}),". This can be\nof any type, but it is often convenient to use a Dict holding many other\nvalues."]}),"\n",(0,s.jsx)(r.li,{children:"Workers process messages roughly in the order that they were received.\nGenerally, older messages are processed first, but strict ordering is not\nguaranteed."}),"\n",(0,s.jsx)(r.li,{children:"A message should be processed within a minute of being emitted. Typically,\nprocessing begins within a few seconds."}),"\n",(0,s.jsx)(r.li,{children:"If there are multiple items in the queue, a live count of queue items will\nappear at the top left."}),"\n",(0,s.jsx)(r.li,{children:'You can pause the queue by hitting the "pause" button in case of operational\nissues or if you\'d like to stop and debug.'}),"\n",(0,s.jsx)(r.li,{children:"The last 10 processed events will show as traces that you can use for\ndebugging purposes."}),"\n",(0,s.jsx)(r.li,{children:"Workers will not alert you of failures unless you write logic to do so."}),"\n"]}),"\n",(0,s.jsx)(r.h2,{id:"creating-a-worker",children:"Creating a Worker"}),"\n",(0,s.jsx)(r.p,{children:"Workers can be created from the omnibox or sidebar."}),"\n",(0,s.jsxs)(r.p,{children:["Similar to HTTP handlers, calling ",(0,s.jsx)(r.code,{children:"emit"})," with a nonexistent Worker name will\npopulate that worker in the 404 sidebar section, allowing it to be created."]}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"404 worker",src:o(4275).Z+"",width:"519",height:"110"})}),"\n",(0,s.jsxs)(r.p,{children:["Creating a Worker from a 404 may result in a delay when executing the first\nmessage. When a new worker is created, it immediately processed the first\nmessage in the queue, but returns ",(0,s.jsx)(r.code,{children:"Incomplete"})," because no code has been written\nyet. This causes the message to get automatically retried in 5 minutes, but\nuntil then it may look like no messages are being processed."]}),"\n",(0,s.jsx)(r.p,{children:"This is all quite confusing, so for now we recommend creating the Worker and\ncompleting its code first, before emitting events to it."}),"\n",(0,s.jsx)(r.h2,{id:"faq",children:"FAQ"}),"\n",(0,s.jsxs)(r.h3,{id:"how-do-i-access-the-data-from-emit-in-the-worker",children:["How do I access the data from ",(0,s.jsx)(r.code,{children:"emit"})," in the worker?"]}),"\n",(0,s.jsxs)(r.p,{children:["The data from the ",(0,s.jsx)(r.code,{children:"emit"})," is available in a variable called ",(0,s.jsx)(r.code,{children:"event"})," from within\nthe worker. Its type will be whatever was passed to ",(0,s.jsx)(r.code,{children:"emit"})," (e.g.,\n",(0,s.jsx)(r.code,{children:"emit [1, 2] \u201cmy-worker\u201d"})," will have ",(0,s.jsx)(r.code,{children:"event"})," = ",(0,s.jsx)(r.code,{children:"[1, 2]"})]}),"\n",(0,s.jsx)(r.h3,{id:"do-workers-execute-in-parallel",children:"Do workers execute in parallel?"}),"\n",(0,s.jsx)(r.p,{children:"Yes. Workers across a canvas execute in parallel, and multiple messages for a\nworker may be processed in parallel."}),"\n",(0,s.jsx)(r.h3,{id:"can-i-control-the-concurrency-of-my-worker",children:"Can I control the concurrency of my worker?"}),"\n",(0,s.jsx)(r.p,{children:"No. If multiple messages are enqueued for a worker, the Darklang platform may\nexecute them concurrently. We intend to eventually add controls for managing\nconcurrency."}),"\n",(0,s.jsx)(r.h3,{id:"can-i-un-enqueue-a-message",children:"Can I un-enqueue a message?"}),"\n",(0,s.jsx)(r.p,{children:"No, this is not currently possible. An alternative would be to give each message\na unique UUID, then create a datastore of message IDs to ignore, checking it\nwithin your worker."}),"\n",(0,s.jsx)(r.h3,{id:"do-workers-guarantee-exactly-once-delivery",children:"Do workers guarantee exactly-once delivery?"}),"\n",(0,s.jsx)(r.p,{children:"No. Messages have at-least-once delivery semantics. Adding a unique UUID to\nevery message can be useful in keeping track of which messages have been seen by\nyour worker already."}),"\n",(0,s.jsx)(r.h3,{id:"how-do-i-wait-for-a-worker-to-finish",children:"How do I wait for a worker to finish?"}),"\n",(0,s.jsxs)(r.p,{children:["The code that calls ",(0,s.jsx)(r.code,{children:"emit"})," has no way to know when a worker has completed. If\nyou need a synchronous call, consider a function instead."]}),"\n",(0,s.jsxs)(r.h3,{id:"can-i-call-emit-from-a-worker",children:["Can I call ",(0,s.jsx)(r.code,{children:"emit"})," from a Worker?"]}),"\n",(0,s.jsx)(r.p,{children:"Yes. This can be useful to do fan-out of work or batch processing of data."}),"\n",(0,s.jsxs)(r.p,{children:["In fact, you can ",(0,s.jsx)(r.code,{children:"emit"})," to the same Worker that's processing the message. Just\nbe careful that you don't cause a infinite loop or positive feedback loop. (We\nare likely to disable your Worker if this happens, as it can cause instability\nof the entire worker infrastructure right now.)"]}),"\n",(0,s.jsx)(r.h3,{id:"how-can-i-tell-how-long-a-message-was-enqueued",children:"How can I tell how long a message was enqueued?"}),"\n",(0,s.jsxs)(r.p,{children:["We currently don\u2019t have a way to get this information directly. You can\ncalculate this yourself by adding a timestamp to each message when you call\n",(0,s.jsx)(r.code,{children:"emit"}),"."]}),"\n",(0,s.jsx)(r.h3,{id:"why-does-my-worker-show-pending-messages-that-arent-being-processed",children:"Why does my worker show pending messages that aren\u2019t being processed?"}),"\n",(0,s.jsx)(r.p,{children:"Your worker is paused and will not process messages while paused. Click the play\nbutton at the top left of the worker to resume processing."}),"\n",(0,s.jsx)(r.p,{children:(0,s.jsx)(r.img,{alt:"paused worker with pending messages",src:o(6975).Z+"",width:"270",height:"84"})}),"\n",(0,s.jsxs)(r.p,{children:["Alternatively, you emitted messages to a non-existent Worker and then created it\nfrom the 404 section (see the warning above in ",(0,s.jsx)(r.strong,{children:"Creating a Worker"}),"). Complete\nthe code in the handler and wait up to 5 minutes for the message to be\nre-processed."]}),"\n",(0,s.jsx)(r.h3,{id:"what-happens-when-a-message-fails",children:"What happens when a message fails?"}),"\n",(0,s.jsx)(r.p,{children:"Nothing special. A message that causes a worker to throw a runtime error (for\nexample by returning Incomplete or having a function call go to the Error Rail)\nwill be silently ignored and the worker will process the next message. We plan\nto eventually add more error handling capabilities such as automatic retries and\ndead-letter-queues."}),"\n",(0,s.jsx)(r.h3,{id:"how-long-will-it-take-my-worker-to-execute",children:"How long will it take my worker to execute?"}),"\n",(0,s.jsx)(r.p,{children:"Your Worker executes code the same as any other Darklang component. For example,\nmaking external HTTP calls will cause execution to take longer."}),"\n",(0,s.jsx)(r.h2,{id:"future-improvements",children:"Future Improvements"}),"\n",(0,s.jsxs)(r.p,{children:["This is a list of improvements we'd like to make to Workers. If you have\nopinions on how these might work, or are interested in contributing any\nfunctionality, please reach out via\n",(0,s.jsx)(r.a,{href:"https://darklang.com/discord-invite",children:"Discord"}),"."]}),"\n",(0,s.jsxs)(r.ul,{children:["\n",(0,s.jsx)(r.li,{children:"Error handling: automatic retry, dead-letter queue"}),"\n",(0,s.jsx)(r.li,{children:"Concurrency control, allowing for tuning how many messages a Worker will\nprocess in parallel"}),"\n",(0,s.jsx)(r.li,{children:"Queue introspection to see more about the messages in the queue"}),"\n"]})]})}function d(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,s.jsx)(r,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},4275:(e,r,o)=>{o.d(r,{Z:()=>s});const s="data:image/png;base64,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"},87504:(e,r,o)=>{o.d(r,{Z:()=>s});const s=o.p+"assets/images/emit-fb51694b9704f9f6c480f55f499ba2bc.png"},6975:(e,r,o)=>{o.d(r,{Z:()=>s});const s="data:image/png;base64,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"},94706:(e,r,o)=>{o.d(r,{Z:()=>s});const s=o.p+"assets/images/worker-e3ddac9e1d84ed436426731fe1aab6e2.png"},11151:(e,r,o)=>{o.d(r,{Z:()=>i,a:()=>t});var s=o(67294);const n={},a=s.createContext(n);function t(e){const r=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function i(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:t(e.components),s.createElement(a.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.4063089e.js b/assets/js/a7bd4aaa.4063089e.js deleted file mode 100644 index cb5a0c21..00000000 --- a/assets/js/a7bd4aaa.4063089e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8518],{8564:(n,s,e)=>{e.r(s),e.d(s,{default:()=>l});e(67294);var r=e(10833),o=e(43320),t=e(74477),i=e(18790),c=e(90197),a=e(85893);function u(n){var s=n.version;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.Z,{version:s.version,tag:(0,o.os)(s.pluginId,s.version)}),(0,a.jsx)(r.d,{children:s.noIndex&&(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function d(n){var s=n.version,e=n.route;return(0,a.jsx)(r.FG,{className:s.className,children:(0,a.jsx)(t.q,{version:s,children:(0,i.H)(e.routes)})})}function l(n){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(u,Object.assign({},n)),(0,a.jsx)(d,Object.assign({},n))]})}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.56440646.js b/assets/js/a7bd4aaa.56440646.js new file mode 100644 index 00000000..d5730e53 --- /dev/null +++ b/assets/js/a7bd4aaa.56440646.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8518],{8564:(n,s,e)=>{e.r(s),e.d(s,{default:()=>l});e(67294);var r=e(10833),o=e(24165),t=e(73797),i=e(18790),c=e(90197),a=e(85893);function u(n){var s=n.version;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.Z,{version:s.version,tag:(0,o.J)(s.pluginId,s.version)}),(0,a.jsx)(r.d,{children:s.noIndex&&(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function d(n){var s=n.version,e=n.route;return(0,a.jsx)(r.FG,{className:s.className,children:(0,a.jsx)(t.q,{version:s,children:(0,i.H)(e.routes)})})}function l(n){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(u,Object.assign({},n)),(0,a.jsx)(d,Object.assign({},n))]})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.5cb50617.js b/assets/js/a94703ab.5cb50617.js new file mode 100644 index 00000000..020b4e22 --- /dev/null +++ b/assets/js/a94703ab.5cb50617.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4368],{54547:(e,n,t)=>{t.r(n),t.d(n,{default:()=>fe});var a=t(67294),i=t(90512),o=t(10833),r=t(35281),s=t(91423),l=t(34731),c=t(95999),d=t(12466),u=t(85936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=t(85893);function h(){var e=function(e){var n=e.threshold,t=(0,a.useState)(!1),i=t[0],o=t[1],r=(0,a.useRef)(!1),s=(0,d.Ct)(),l=s.startScroll,c=s.cancelScroll;return(0,d.RF)((function(e,t){var a=e.scrollY,i=null==t?void 0:t.scrollY;i&&(r.current?r.current=!1:a>=i?(c(),o(!1)):a{t.d(n,{Z:()=>s});t(67294);var a=t(90512),i=t(95999),o=t(92503),r=t(85893);function s(e){var n=e.className;return(0,r.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",n),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(i.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.d687a6a2.js b/assets/js/a94703ab.d687a6a2.js deleted file mode 100644 index 6e22a8b2..00000000 --- a/assets/js/a94703ab.d687a6a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[4368],{12674:(e,n,t)=>{t.r(n),t.d(n,{default:()=>fe});var a=t(67294),i=t(90512),o=t(10833),r=t(35281),s=t(78425),l=t(1116),c=t(95999),d=t(12466),u=t(85936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=t(85893);function h(){var e=function(e){var n=e.threshold,t=(0,a.useState)(!1),i=t[0],o=t[1],r=(0,a.useRef)(!1),s=(0,d.Ct)(),l=s.startScroll,c=s.cancelScroll;return(0,d.RF)((function(e,t){var a=e.scrollY,i=null==t?void 0:t.scrollY;i&&(r.current?r.current=!1:a>=i?(c(),o(!1)):a{t.d(n,{Z:()=>s});t(67294);var a=t(90512),i=t(95999),o=t(92503),r=t(85893);function s(e){var n=e.className;return(0,r.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",n),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(i.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(i.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/b42d9a9c.2b0dffd6.js b/assets/js/b42d9a9c.2b0dffd6.js deleted file mode 100644 index 589da9d7..00000000 --- a/assets/js/b42d9a9c.2b0dffd6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5131],{26552:(n,e,r)=>{r.r(e),r.d(e,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var t=r(85893),l=r(11151);const s={},a="Darklang Release 10",i={id:"changelog/release-10",title:"Darklang Release 10",description:"Febuary 1, 2023",source:"@site/docs-classic/changelog/release-10.md",sourceDirName:"changelog",slug:"/changelog/release-10",permalink:"/changelog/release-10",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-10.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Changelog",permalink:"/changelog"},next:{title:"Release 9 - Dec, 2022",permalink:"/changelog/release-9"}},d={},c=[{value:"Editor Improvements",id:"editor-improvements",level:2},{value:"Documentation",id:"documentation",level:2},{value:"Contributor Improvements",id:"contributor-improvements",level:2},{value:"Internal",id:"internal",level:2}];function o(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,l.a)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h1,{id:"darklang-release-10",children:"Darklang Release 10"}),"\n",(0,t.jsx)(e.p,{children:"Febuary 1, 2023"}),"\n",(0,t.jsx)(e.h2,{id:"editor-improvements",children:"Editor Improvements"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Reduce the amount of space within the autocomplete dropdown box\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4709",children:"#4709"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Improve styling of tutorial tooltips\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4700",children:"#4700"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Refresh the editor when it is outdated and inactive\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4648",children:"#4648"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Deprecate old ",(0,t.jsx)(e.code,{children:"||"}),"/",(0,t.jsx)(e.code,{children:"&&"})," functions in favor of short-circuiting ",(0,t.jsx)(e.code,{children:"||"}),"/",(0,t.jsx)(e.code,{children:"&&"}),"; add\n",(0,t.jsx)(e.code,{children:"convert-to-short-circuiting"})," command to migrate from old ",(0,t.jsx)(e.code,{children:"||"}),"`&&` functions\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4676",children:"#4676"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4674",children:"#4674"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:['Add new "feedback" and "report a bug" buttons that point to github discussions\nand github issues (',(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4689",children:"#4689"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Improve design of code documentation box\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4664",children:"#4664"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4702",children:"#4702"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4706",children:"#4706"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4713",children:"#4713"}),")"]}),"\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.img,{alt:"improved documentation box",src:r(29270).Z+"",width:"3174",height:"1122"})}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Reduce the amount of space within the autocomplete dropdown box.\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4709",children:"#4709"}),")"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"documentation",children:"Documentation"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:["Generally tidy documentation; fix a bunch of links\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/306",children:"#306"}),")"]}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"contributor-improvements",children:"Contributor Improvements"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Add instructions for testing local editor changes against the production\nbackend (",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/308",children:"#308"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Add GitHub Issue templates for docs repo, namely to make monthly\nchangelog/release process more straight-forward\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/317",children:"#317"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/318",children:"#318"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/320",children:"#320"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/322",children:"#322"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/324",children:"#324"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/326",children:"#326"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/323",children:"#323"}),")"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.h2,{id:"internal",children:"Internal"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Add more infrastructure config to Terraform\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4697",children:"#4697"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["React to a\n",(0,t.jsx)(e.a,{href:"https://circleci.com/blog/jan-4-2023-incident-report",children:"CircleCI incident"}),"\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/313",children:"#313"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4704",children:"#4704"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4691",children:"#4691"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4694",children:"#4694"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4695",children:"#4695"}),")"]}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"rotate our CircleCI keys"}),"\n",(0,t.jsx)(e.li,{children:"make it easier to rotate DB credentials"}),"\n",(0,t.jsxs)(e.li,{children:["see our Release 10\n",(0,t.jsx)(e.a,{href:"https://blog.darklang.com/darklang-release-10",children:"blog post"})," for more\ninformation"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Use Tailwind for the account actions menu, documentation box, and tutorial\ntooltips (",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4689",children:"#4689"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4664",children:"#4664"}),",\n",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4700",children:"#4700"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Mark more standard library functions as Not Queryable instead of Unknown\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4729",children:"#4729"}),")"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsxs)(e.p,{children:["Move deployment lock to a darklang canvas\n(",(0,t.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4703",children:"#4703"}),")"]}),"\n"]}),"\n"]})]})}function h(n={}){const{wrapper:e}={...(0,l.a)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(o,{...n})}):o(n)}},29270:(n,e,r)=>{r.d(e,{Z:()=>t});const t=r.p+"assets/images/improved-documentation-box-c7a1b5f8971eaab69a50248f964f00bc.png"},11151:(n,e,r)=>{r.d(e,{Z:()=>i,a:()=>a});var t=r(67294);const l={},s=t.createContext(l);function a(n){const e=t.useContext(s);return t.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function i(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(l):n.components||l:a(n.components),t.createElement(s.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/b42d9a9c.de27a2d2.js b/assets/js/b42d9a9c.de27a2d2.js new file mode 100644 index 00000000..253ccc15 --- /dev/null +++ b/assets/js/b42d9a9c.de27a2d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[5131],{26552:(n,e,r)=>{r.r(e),r.d(e,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var l=r(85893),t=r(11151);const s={},a="Darklang Release 10",i={id:"changelog/release-10",title:"Darklang Release 10",description:"Febuary 1, 2023",source:"@site/docs-classic/changelog/release-10.md",sourceDirName:"changelog",slug:"/changelog/release-10",permalink:"/changelog/release-10",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-10.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Changelog",permalink:"/changelog"},next:{title:"Release 9 - Dec, 2022",permalink:"/changelog/release-9"}},d={},c=[{value:"Editor Improvements",id:"editor-improvements",level:2},{value:"Documentation",id:"documentation",level:2},{value:"Contributor Improvements",id:"contributor-improvements",level:2},{value:"Internal",id:"internal",level:2}];function o(n){const e={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,t.a)(),...n.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(e.header,{children:(0,l.jsx)(e.h1,{id:"darklang-release-10",children:"Darklang Release 10"})}),"\n",(0,l.jsx)(e.p,{children:"Febuary 1, 2023"}),"\n",(0,l.jsx)(e.h2,{id:"editor-improvements",children:"Editor Improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Reduce the amount of space within the autocomplete dropdown box\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4709",children:"#4709"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Improve styling of tutorial tooltips\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4700",children:"#4700"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Refresh the editor when it is outdated and inactive\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4648",children:"#4648"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Deprecate old ",(0,l.jsx)(e.code,{children:"||"}),"/",(0,l.jsx)(e.code,{children:"&&"})," functions in favor of short-circuiting ",(0,l.jsx)(e.code,{children:"||"}),"/",(0,l.jsx)(e.code,{children:"&&"}),"; add\n",(0,l.jsx)(e.code,{children:"convert-to-short-circuiting"})," command to migrate from old ",(0,l.jsx)(e.code,{children:"||"}),"`&&` functions\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4676",children:"#4676"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4674",children:"#4674"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:['Add new "feedback" and "report a bug" buttons that point to github discussions\nand github issues (',(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4689",children:"#4689"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Improve design of code documentation box\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4664",children:"#4664"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4702",children:"#4702"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4706",children:"#4706"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4713",children:"#4713"}),")"]}),"\n",(0,l.jsx)(e.p,{children:(0,l.jsx)(e.img,{alt:"improved documentation box",src:r(29270).Z+"",width:"3174",height:"1122"})}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Reduce the amount of space within the autocomplete dropdown box.\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4709",children:"#4709"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"documentation",children:"Documentation"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["Generally tidy documentation; fix a bunch of links\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/306",children:"#306"}),")"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"contributor-improvements",children:"Contributor Improvements"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add instructions for testing local editor changes against the production\nbackend (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/308",children:"#308"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add GitHub Issue templates for docs repo, namely to make monthly\nchangelog/release process more straight-forward\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/317",children:"#317"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/318",children:"#318"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/320",children:"#320"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/322",children:"#322"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/324",children:"#324"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/326",children:"#326"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/323",children:"#323"}),")"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(e.h2,{id:"internal",children:"Internal"}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Add more infrastructure config to Terraform\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4697",children:"#4697"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["React to a\n",(0,l.jsx)(e.a,{href:"https://circleci.com/blog/jan-4-2023-incident-report",children:"CircleCI incident"}),"\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/docs/pull/313",children:"#313"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4704",children:"#4704"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4691",children:"#4691"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4694",children:"#4694"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4695",children:"#4695"}),")"]}),"\n",(0,l.jsxs)(e.ul,{children:["\n",(0,l.jsx)(e.li,{children:"rotate our CircleCI keys"}),"\n",(0,l.jsx)(e.li,{children:"make it easier to rotate DB credentials"}),"\n",(0,l.jsxs)(e.li,{children:["see our Release 10\n",(0,l.jsx)(e.a,{href:"https://blog.darklang.com/darklang-release-10",children:"blog post"})," for more\ninformation"]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Use Tailwind for the account actions menu, documentation box, and tutorial\ntooltips (",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4689",children:"#4689"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4664",children:"#4664"}),",\n",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4700",children:"#4700"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Mark more standard library functions as Not Queryable instead of Unknown\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4729",children:"#4729"}),")"]}),"\n"]}),"\n",(0,l.jsxs)(e.li,{children:["\n",(0,l.jsxs)(e.p,{children:["Move deployment lock to a darklang canvas\n(",(0,l.jsx)(e.a,{href:"https://github.com/darklang/dark/pull/4703",children:"#4703"}),")"]}),"\n"]}),"\n"]})]})}function h(n={}){const{wrapper:e}={...(0,t.a)(),...n.components};return e?(0,l.jsx)(e,{...n,children:(0,l.jsx)(o,{...n})}):o(n)}},29270:(n,e,r)=>{r.d(e,{Z:()=>l});const l=r.p+"assets/images/improved-documentation-box-c7a1b5f8971eaab69a50248f964f00bc.png"},11151:(n,e,r)=>{r.d(e,{Z:()=>i,a:()=>a});var l=r(67294);const t={},s=l.createContext(t);function a(n){const e=l.useContext(s);return l.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function i(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(t):n.components||t:a(n.components),l.createElement(s.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/b95b9c00.4944e23b.js b/assets/js/b95b9c00.4944e23b.js deleted file mode 100644 index a4784100..00000000 --- a/assets/js/b95b9c00.4944e23b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[384],{90651:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var t=a(85893),i=a(11151);const r={},s="Backward compatibility",o={id:"reference/backward-compatibility",title:"Backward compatibility",description:"We aim to keep Darklang's behavior consistent and backwards compatible, in order",source:"@site/docs-classic/reference/backward-compatibility.md",sourceDirName:"reference",slug:"/reference/backward-compatibility",permalink:"/reference/backward-compatibility",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/backward-compatibility.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Terms of Service / SLA",permalink:"/reference/terms-of-service"},next:{title:"Desktop Client",permalink:"/reference/desktop-client"}},d={},l=[{value:"Serialized Darklang values",id:"serialized-darklang-values",level:2},{value:"Dictionaries and Database ordering",id:"dictionaries-and-database-ordering",level:2},{value:"Unicode",id:"unicode",level:2},{value:"Language/framework behavior",id:"languageframework-behavior",level:2},{value:"HTTP / Transport",id:"http--transport",level:2},{value:"Timeouts",id:"timeouts",level:2},{value:"Private APIs",id:"private-apis",level:2}];function c(e){const n={code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"backward-compatibility",children:"Backward compatibility"}),"\n",(0,t.jsx)(n.p,{children:"We aim to keep Darklang's behavior consistent and backwards compatible, in order\nto prevent your programs from changing without your knowledge. Sometimes cannot\nachieve this due to the underlying technology (e.g. HTTP servers and proxies,\nJSON parsers/serializers, etc) that we are built-on top of."}),"\n",(0,t.jsx)(n.h2,{id:"serialized-darklang-values",children:"Serialized Darklang values"}),"\n",(0,t.jsxs)(n.p,{children:["Darklang serialized values appear in HTTP responses, in functions like\n",(0,t.jsx)(n.code,{children:"toString"})," and ",(0,t.jsx)(n.code,{children:"Dict::toJSON"}),", and are sent to servers using ",(0,t.jsx)(n.code,{children:"HttpClient::"}),"\nfunctions."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Darklang may change the formatting of values as they are serialized to users.\nTypically, we will only do this to correct incorrect behavior."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Darklang tries to generate standard JSON. We don't always, and where we\ngenerate non-standard JSON, we may switch to generating more standard JSON."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"We may switch the format of JSON (indentation, spacing, etc), at any point to\nmake it prettier."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Darklang serializes integers to JSON as integers, even when they are larger\nthan standard JSON values."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Darklang does not promise to parse non-standard JSON (it may do so in some\ncases, please do not rely on this). Where Darklang does parse non-standard\nJSON, it may stop doing so without warning."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"dictionaries-and-database-ordering",children:"Dictionaries and Database ordering"}),"\n",(0,t.jsx)(n.p,{children:"When fetching lists of data from databases, or converting dictionaries or sets\nto lists, we make no promises as to the ordering of values, and may change them\nwithout warning."}),"\n",(0,t.jsx)(n.h2,{id:"unicode",children:"Unicode"}),"\n",(0,t.jsx)(n.p,{children:"Unicode is a moving standard, and Darklang strings will upgrade behind the\nscenes based on the latest standard. The changes will not necessarily happen in\nbackwards compatible ways."}),"\n",(0,t.jsx)(n.h2,{id:"languageframework-behavior",children:"Language/framework behavior"}),"\n",(0,t.jsx)(n.p,{children:"Error messages in Darklang may change at any time. We recommend that you do not\nuse Darklang error messages as user-facing values, or if you do, set\nexpectations that they may change."}),"\n",(0,t.jsx)(n.h2,{id:"http--transport",children:"HTTP / Transport"}),"\n",(0,t.jsx)(n.p,{children:"Darklang may move to newer version of HTTP (HTTP/2, HTTP3) without warning and\nwithout maintaining exact HTTP/1.1 compatibility."}),"\n",(0,t.jsx)(n.h2,{id:"timeouts",children:"Timeouts"}),"\n",(0,t.jsx)(n.p,{children:"Not all parts of Darklang have timeouts, but we may add or change timeouts to\nmake the service run better."}),"\n",(0,t.jsx)(n.h2,{id:"private-apis",children:"Private APIs"}),"\n",(0,t.jsx)(n.p,{children:"Darklang's APIs (such as those used in the editor) are private and may change at\nany time. Feel free to use them, but do not rely on them in any way. If you wish\nto build on them, please contact us and we may be able to find ways to help."})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>o,a:()=>s});var t=a(67294);const i={},r=t.createContext(i);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b95b9c00.dcfc5214.js b/assets/js/b95b9c00.dcfc5214.js new file mode 100644 index 00000000..c6450f8c --- /dev/null +++ b/assets/js/b95b9c00.dcfc5214.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[384],{90651:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var t=a(85893),i=a(11151);const r={},s="Backward compatibility",o={id:"reference/backward-compatibility",title:"Backward compatibility",description:"We aim to keep Darklang's behavior consistent and backwards compatible, in order",source:"@site/docs-classic/reference/backward-compatibility.md",sourceDirName:"reference",slug:"/reference/backward-compatibility",permalink:"/reference/backward-compatibility",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/backward-compatibility.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Terms of Service / SLA",permalink:"/reference/terms-of-service"},next:{title:"Desktop Client",permalink:"/reference/desktop-client"}},d={},l=[{value:"Serialized Darklang values",id:"serialized-darklang-values",level:2},{value:"Dictionaries and Database ordering",id:"dictionaries-and-database-ordering",level:2},{value:"Unicode",id:"unicode",level:2},{value:"Language/framework behavior",id:"languageframework-behavior",level:2},{value:"HTTP / Transport",id:"http--transport",level:2},{value:"Timeouts",id:"timeouts",level:2},{value:"Private APIs",id:"private-apis",level:2}];function c(e){const n={code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"backward-compatibility",children:"Backward compatibility"})}),"\n",(0,t.jsx)(n.p,{children:"We aim to keep Darklang's behavior consistent and backwards compatible, in order\nto prevent your programs from changing without your knowledge. Sometimes cannot\nachieve this due to the underlying technology (e.g. HTTP servers and proxies,\nJSON parsers/serializers, etc) that we are built-on top of."}),"\n",(0,t.jsx)(n.h2,{id:"serialized-darklang-values",children:"Serialized Darklang values"}),"\n",(0,t.jsxs)(n.p,{children:["Darklang serialized values appear in HTTP responses, in functions like\n",(0,t.jsx)(n.code,{children:"toString"})," and ",(0,t.jsx)(n.code,{children:"Dict::toJSON"}),", and are sent to servers using ",(0,t.jsx)(n.code,{children:"HttpClient::"}),"\nfunctions."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Darklang may change the formatting of values as they are serialized to users.\nTypically, we will only do this to correct incorrect behavior."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Darklang tries to generate standard JSON. We don't always, and where we\ngenerate non-standard JSON, we may switch to generating more standard JSON."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"We may switch the format of JSON (indentation, spacing, etc), at any point to\nmake it prettier."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Darklang serializes integers to JSON as integers, even when they are larger\nthan standard JSON values."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Darklang does not promise to parse non-standard JSON (it may do so in some\ncases, please do not rely on this). Where Darklang does parse non-standard\nJSON, it may stop doing so without warning."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"dictionaries-and-database-ordering",children:"Dictionaries and Database ordering"}),"\n",(0,t.jsx)(n.p,{children:"When fetching lists of data from databases, or converting dictionaries or sets\nto lists, we make no promises as to the ordering of values, and may change them\nwithout warning."}),"\n",(0,t.jsx)(n.h2,{id:"unicode",children:"Unicode"}),"\n",(0,t.jsx)(n.p,{children:"Unicode is a moving standard, and Darklang strings will upgrade behind the\nscenes based on the latest standard. The changes will not necessarily happen in\nbackwards compatible ways."}),"\n",(0,t.jsx)(n.h2,{id:"languageframework-behavior",children:"Language/framework behavior"}),"\n",(0,t.jsx)(n.p,{children:"Error messages in Darklang may change at any time. We recommend that you do not\nuse Darklang error messages as user-facing values, or if you do, set\nexpectations that they may change."}),"\n",(0,t.jsx)(n.h2,{id:"http--transport",children:"HTTP / Transport"}),"\n",(0,t.jsx)(n.p,{children:"Darklang may move to newer version of HTTP (HTTP/2, HTTP3) without warning and\nwithout maintaining exact HTTP/1.1 compatibility."}),"\n",(0,t.jsx)(n.h2,{id:"timeouts",children:"Timeouts"}),"\n",(0,t.jsx)(n.p,{children:"Not all parts of Darklang have timeouts, but we may add or change timeouts to\nmake the service run better."}),"\n",(0,t.jsx)(n.h2,{id:"private-apis",children:"Private APIs"}),"\n",(0,t.jsx)(n.p,{children:"Darklang's APIs (such as those used in the editor) are private and may change at\nany time. Feel free to use them, but do not rely on them in any way. If you wish\nto build on them, please contact us and we may be able to find ways to help."})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>o,a:()=>s});var t=a(67294);const i={},r=t.createContext(i);function s(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba298920.7d84bed8.js b/assets/js/ba298920.7d84bed8.js new file mode 100644 index 00000000..bb0c1c44 --- /dev/null +++ b/assets/js/ba298920.7d84bed8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8959],{66637:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>r,contentTitle:()=>d,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>l});var a=n(85893),c=n(11151);const t={},d="Packages",i={id:"reference/packages",title:"Packages",description:"Overview",source:"@site/docs-classic/reference/packages.md",sourceDirName:"reference",slug:"/reference/packages",permalink:"/reference/packages",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/packages.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Built-in Function reference",permalink:"/reference/function-reference"},next:{title:"HTTP Client",permalink:"/reference/httpclient"}},r={},l=[{value:"Overview",id:"overview",level:2},{value:"Slack",id:"slack",level:2},{value:"getAllConversations",id:"getallconversations",level:3},{value:"getConversations",id:"getconversations",level:3},{value:"getConversationsWithDetails",id:"getconversationswithdetails",level:3},{value:"getNewConversations",id:"getnewconversations",level:3},{value:"getPrivateConversations",id:"getprivateconversations",level:3},{value:"oauth",id:"oauth",level:3},{value:"postMarkdownMessage",id:"postmarkdownmessage",level:3},{value:"postMessage",id:"postmessage",level:3},{value:"scheduleMessage",id:"schedulemessage",level:3},{value:"Asana Package",id:"asana-package",level:2},{value:"createProject",id:"createproject",level:3},{value:"createTask",id:"createtask",level:3},{value:"createTaskWithDueDate",id:"createtaskwithduedate",level:3},{value:"getAllProjects",id:"getallprojects",level:3},{value:"getAllWorkspaces",id:"getallworkspaces",level:3},{value:"Mailchimp Package",id:"mailchimp-package",level:2},{value:"subscribe",id:"subscribe",level:3},{value:"Stripe Package",id:"stripe-package",level:2},{value:"createCharge",id:"createcharge",level:3},{value:"createCheckoutSession",id:"createcheckoutsession",level:3},{value:"createCustomer",id:"createcustomer",level:3},{value:"createFullRefund",id:"createfullrefund",level:3},{value:"createPartialRefund",id:"createpartialrefund",level:3},{value:"getAllCharges",id:"getallcharges",level:3},{value:"getAllCustomers",id:"getallcustomers",level:3},{value:"getAllTransactions",id:"getalltransactions",level:3},{value:"getAvailableBalance",id:"getavailablebalance",level:3},{value:"getCustomer",id:"getcustomer",level:3},{value:"getPendingBalance",id:"getpendingbalance",level:3},{value:"Trello Package",id:"trello-package",level:2},{value:"addBoardstoDB",id:"addboardstodb",level:3},{value:"addListstoDB",id:"addliststodb",level:3},{value:"createNewCard",id:"createnewcard",level:3},{value:"getAllBoardsWithDetails",id:"getallboardswithdetails",level:3},{value:"getAllListsWithDetails",id:"getalllistswithdetails",level:3},{value:"getAllOpenCardsForMemberWithDetails",id:"getallopencardsformemberwithdetails",level:3},{value:"lookUpBoardID",id:"lookupboardid",level:3},{value:"lookUpListID",id:"lookuplistid",level:3},{value:"Contributions",id:"contributions",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",...(0,c.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.header,{children:(0,a.jsx)(s.h1,{id:"packages",children:"Packages"})}),"\n",(0,a.jsx)(s.h2,{id:"overview",children:"Overview"}),"\n",(0,a.jsx)(s.p,{children:"Darklang's alpha package manager allows re-using Darklang functions from other\nusers or canvases. Today, only Darklang employees can add functions to the\npackage manager. Packages are named by the creator, package, function, and\nversion and are accessible via autocomplete. The package manager today is\nintended for connections to third party services and APIs."}),"\n",(0,a.jsxs)(s.p,{children:["In the future, packages will be imported vs. being continually accessible, and\ncommunity members will be able to contribute directly. If you would like to\nrequest or contribute a package today, please reach out via\n",(0,a.jsx)(s.a,{href:"https://darklang.com/discord-invite",children:"Discord"}),"."]}),"\n",(0,a.jsx)(s.h2,{id:"slack",children:"Slack"}),"\n",(0,a.jsx)(s.h3,{id:"getallconversations",children:(0,a.jsx)(s.code,{children:"getAllConversations"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns a ",(0,a.jsx)(s.code,{children:"list"})," of records containing\nboth your public and private Slack channel names and ids."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllConversations",src:n(77495).Z+"",width:"1042",height:"454"})}),"\n",(0,a.jsx)(s.h3,{id:"getconversations",children:(0,a.jsx)(s.code,{children:"getConversations"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns a ",(0,a.jsx)(s.code,{children:"list"})," of records containing\nyour public Slack channel names and ids."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getConversations",src:n(54998).Z+"",width:"990",height:"654"})}),"\n",(0,a.jsx)(s.h3,{id:"getconversationswithdetails",children:(0,a.jsx)(s.code,{children:"getConversationsWithDetails"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns a ",(0,a.jsx)(s.code,{children:"list"})," of records containing\nthe channel name, id, created at date (in Epoch seconds), creator, count of\nmembers, purpose and current topic. Does not include archived channels."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getConversationsWithDetails",src:n(20528).Z+"",width:"982",height:"1024"})}),"\n",(0,a.jsx)(s.h3,{id:"getnewconversations",children:(0,a.jsx)(s.code,{children:"getNewConversations"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and ",(0,a.jsx)(s.code,{children:"checkFromSeconds"})," as an ",(0,a.jsx)(s.code,{children:"Int"}),", and\nreturns a list of conversations (as records) where the created at date is\ngreater than the current time minus the ",(0,a.jsx)(s.code,{children:"checkFromSeconds"})," time. Each entry\ncontains the channel name, id, created at date (in Epoch seconds), creator,\ncount of members, purpose and current topic."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getNewConversations",src:n(89747).Z+"",width:"1176",height:"648"})}),"\n",(0,a.jsx)(s.h3,{id:"getprivateconversations",children:(0,a.jsx)(s.code,{children:"getPrivateConversations"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns a ",(0,a.jsx)(s.code,{children:"list"})," of records containing\nyour private Slack channel names and ids."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getPrivateConversations",src:n(59141).Z+"",width:"1068",height:"936"})}),"\n",(0,a.jsx)(s.h3,{id:"oauth",children:(0,a.jsx)(s.code,{children:"oauth"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack client ID (",(0,a.jsx)(s.code,{children:"String"}),"), client secret (",(0,a.jsx)(s.code,{children:"String"}),"), token datastore\n(",(0,a.jsx)(s.code,{children:"Any"})," - but should be the name of your datastore), and OAuth code (",(0,a.jsx)(s.code,{children:"String"}),")\nand returns a ",(0,a.jsx)(s.code,{children:"Result"}),". Using this function enables you to easily set up Slack\nOAuth."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"oauth",src:n(46384).Z+"",width:"1104",height:"1084"})}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"oauth example",src:n(62690).Z+"",width:"1270",height:"212"})}),"\n",(0,a.jsx)(s.h3,{id:"postmarkdownmessage",children:(0,a.jsx)(s.code,{children:"postMarkdownMessage"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token, channel id and text as ",(0,a.jsx)(s.code,{children:"String"}),"s and posts the text to\nthe Slack channel as a markdown message."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"postMarkdownMessage",src:n(44406).Z+"",width:"998",height:"712"})}),"\n",(0,a.jsx)(s.h3,{id:"postmessage",children:(0,a.jsx)(s.code,{children:"postMessage"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token, channel id and text as ",(0,a.jsx)(s.code,{children:"String"}),"s and posts the text to\nthe Slack channel."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"postMessage",src:n(12746).Z+"",width:"1070",height:"968"})}),"\n",(0,a.jsx)(s.h3,{id:"schedulemessage",children:(0,a.jsx)(s.code,{children:"scheduleMessage"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes an Epoch time (",(0,a.jsx)(s.code,{children:"Int"}),"), Slack token (",(0,a.jsx)(s.code,{children:"String"}),"), channel id (",(0,a.jsx)(s.code,{children:"String"}),") and\ntext (",(0,a.jsx)(s.code,{children:"String"}),") and schedules a message to be posted at the time specified."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"scheduleMessage",src:n(19615).Z+"",width:"1614",height:"1052"})}),"\n",(0,a.jsx)(s.h2,{id:"asana-package",children:"Asana Package"}),"\n",(0,a.jsx)(s.h3,{id:"createproject",children:(0,a.jsx)(s.code,{children:"createProject"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a name (",(0,a.jsx)(s.code,{children:"String"}),"), notes (",(0,a.jsx)(s.code,{children:"String"}),"), workspace (",(0,a.jsx)(s.code,{children:"String"}),") and Asana token\n(",(0,a.jsx)(s.code,{children:"String"}),") and creates a new project in the specified workspace."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createProject",src:n(73605).Z+"",width:"974",height:"1082"})}),"\n",(0,a.jsx)(s.h3,{id:"createtask",children:(0,a.jsx)(s.code,{children:"createTask"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a name (",(0,a.jsx)(s.code,{children:"String"}),"), assignee (",(0,a.jsx)(s.code,{children:"String"}),"), project (",(0,a.jsx)(s.code,{children:"String"}),"), notes\n(",(0,a.jsx)(s.code,{children:"String"}),") and Asana token (",(0,a.jsx)(s.code,{children:"String"}),") and creates a new task in the specified\nworkspace. The assignee can be a user gid, email or null."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createTask",src:n(28311).Z+"",width:"968",height:"1242"})}),"\n",(0,a.jsx)(s.h3,{id:"createtaskwithduedate",children:(0,a.jsx)(s.code,{children:"createTaskWithDueDate"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a name (",(0,a.jsx)(s.code,{children:"String"}),"), assignee (",(0,a.jsx)(s.code,{children:"String"}),"), due date (",(0,a.jsx)(s.code,{children:"String"})," - 'YYYY-MM-DD'\nformat) project (",(0,a.jsx)(s.code,{children:"String"}),"), notes (",(0,a.jsx)(s.code,{children:"String"}),") and Asana token (",(0,a.jsx)(s.code,{children:"String"}),") and\ncreates a new task in the specified workspace. The assignee can be a user gid,\nemail or null."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createTaskWithDueDate",src:n(17216).Z+"",width:"974",height:"1362"})}),"\n",(0,a.jsx)(s.h3,{id:"getallprojects",children:(0,a.jsx)(s.code,{children:"getAllProjects"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes an Asana token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns details of all projects that\ntoken has access to."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllProjects",src:n(51720).Z+"",width:"970",height:"508"})}),"\n",(0,a.jsx)(s.h3,{id:"getallworkspaces",children:(0,a.jsx)(s.code,{children:"getAllWorkspaces"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes an Asana token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns details of all workspaces that\ntoken has access to."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllWorkspaces",src:n(9455).Z+"",width:"972",height:"480"})}),"\n",(0,a.jsx)(s.h2,{id:"mailchimp-package",children:"Mailchimp Package"}),"\n",(0,a.jsx)(s.h3,{id:"subscribe",children:(0,a.jsx)(s.code,{children:"subscribe"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes an audience ID (",(0,a.jsx)(s.code,{children:"String"}),"), email (",(0,a.jsx)(s.code,{children:"String"}),"), first name (",(0,a.jsx)(s.code,{children:"String"}),"), last\nname (",(0,a.jsx)(s.code,{children:"String"}),"), Mailchimp username (",(0,a.jsx)(s.code,{children:"String"}),"), Mailchimp API key (",(0,a.jsx)(s.code,{children:"String"}),"),\nand Mailchimp data center (",(0,a.jsx)(s.code,{children:"String"}),") and posts to the\n",(0,a.jsx)(s.a,{href:"https://mailchimp.com/developer/guides/manage-subscribers-with-the-mailchimp-api/#Add_a_contact_to_a_list%2Faudience",children:"Mailchimp Subscribers API"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"subscribe",src:n(95896).Z+"",width:"1612",height:"1146"})}),"\n",(0,a.jsx)(s.h2,{id:"stripe-package",children:"Stripe Package"}),"\n",(0,a.jsx)(s.h3,{id:"createcharge",children:(0,a.jsx)(s.code,{children:"createCharge"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),"), the amount for the charge (",(0,a.jsx)(s.code,{children:"String"}),"), the\ncurrency (",(0,a.jsx)(s.code,{children:"String"}),"), a customer id (",(0,a.jsx)(s.code,{children:"String"}),") and a card id (",(0,a.jsx)(s.code,{children:"String"}),") and\ncreates a charge on that customer's card."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createCharge",src:n(19383).Z+"",width:"906",height:"1078"})}),"\n",(0,a.jsx)(s.h3,{id:"createcheckoutsession",children:(0,a.jsx)(s.code,{children:"createCheckoutSession"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"list"})," of line items (amount, name, quantity, price, and currency), a\ncustomer ID (",(0,a.jsx)(s.code,{children:"Any"}),"), a stripe key (",(0,a.jsx)(s.code,{children:"String"}),"), a ",(0,a.jsx)(s.code,{children:"cancelUrl"})," (",(0,a.jsx)(s.code,{children:"String"}),") and a\n",(0,a.jsx)(s.code,{children:"successUrl"})," (",(0,a.jsx)(s.code,{children:"String"}),")."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createCheckout",src:n(79629).Z+"",width:"1150",height:"1492"})}),"\n",(0,a.jsx)(s.h3,{id:"createcustomer",children:(0,a.jsx)(s.code,{children:"createCustomer"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),"), a description (",(0,a.jsx)(s.code,{children:"String"}),"), an email address\n(",(0,a.jsx)(s.code,{children:"String"}),"), a name (",(0,a.jsx)(s.code,{children:"String"}),") and a phone number (",(0,a.jsx)(s.code,{children:"String"}),") and creates a\ncustomer in Stripe."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createCustomer",src:n(48469).Z+"",width:"904",height:"1088"})}),"\n",(0,a.jsx)(s.h3,{id:"createfullrefund",children:(0,a.jsx)(s.code,{children:"createFullRefund"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and charge id (",(0,a.jsx)(s.code,{children:"String"}),") and issues a full refund\nfor that charge."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createFullRefund",src:n(5037).Z+"",width:"900",height:"808"})}),"\n",(0,a.jsx)(s.h3,{id:"createpartialrefund",children:(0,a.jsx)(s.code,{children:"createPartialRefund"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),"), charge id (",(0,a.jsx)(s.code,{children:"String"}),") and amount (",(0,a.jsx)(s.code,{children:"String"}),") and\nissues a refund of that amount to the charge."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createPartialRefund",src:n(83877).Z+"",width:"906",height:"886"})}),"\n",(0,a.jsx)(s.h3,{id:"getallcharges",children:(0,a.jsx)(s.code,{children:"getAllCharges"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns all charges for that account."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllCharges",src:n(14133).Z+"",width:"906",height:"548"})}),"\n",(0,a.jsx)(s.h3,{id:"getallcustomers",children:(0,a.jsx)(s.code,{children:"getAllCustomers"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns all customers for that account."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllCustomers",src:n(80792).Z+"",width:"900",height:"548"})}),"\n",(0,a.jsx)(s.h3,{id:"getalltransactions",children:(0,a.jsx)(s.code,{children:"getAllTransactions"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns all transactions for that account."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllTransactions",src:n(52730).Z+"",width:"910",height:"620"})}),"\n",(0,a.jsx)(s.h3,{id:"getavailablebalance",children:(0,a.jsx)(s.code,{children:"getAvailableBalance"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns the available balance for that\naccount."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAvailableBalance",src:n(16125).Z+"",width:"998",height:"672"})}),"\n",(0,a.jsx)(s.h3,{id:"getcustomer",children:(0,a.jsx)(s.code,{children:"getCustomer"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and a customer id (",(0,a.jsx)(s.code,{children:"String"}),") and returns\ninformation about that customer."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getCustomer",src:n(36786).Z+"",width:"1030",height:"616"})}),"\n",(0,a.jsx)(s.h3,{id:"getpendingbalance",children:(0,a.jsx)(s.code,{children:"getPendingBalance"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns the pending balance for that account."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getPendingBalance",src:n(42311).Z+"",width:"990",height:"676"})}),"\n",(0,a.jsx)(s.h2,{id:"trello-package",children:"Trello Package"}),"\n",(0,a.jsx)(s.h3,{id:"addboardstodb",children:(0,a.jsx)(s.code,{children:"addBoardstoDB"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"list"})," of boards and a board Datastore. Adds the name and ID of each of\nthe boards to the datastore."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"addBoardstoDB",src:n(66695).Z+"",width:"814",height:"666"})}),"\n",(0,a.jsx)(s.h3,{id:"addliststodb",children:(0,a.jsx)(s.code,{children:"addListstoDB"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"list"})," of Trello lists and a list Datastore. Adds the name and id of\neach of the lists to the datastore."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"addListstoDB",src:n(12364).Z+"",width:"818",height:"670"})}),"\n",(0,a.jsx)(s.h3,{id:"createnewcard",children:(0,a.jsx)(s.code,{children:"createNewCard"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"listID"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloKey"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloToken"})," (",(0,a.jsx)(s.code,{children:"String"}),"),\nname (",(0,a.jsx)(s.code,{children:"String"}),") and description (",(0,a.jsx)(s.code,{children:"String"}),"). Adds card with that name and\ndescription to the list specified."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createNewCard",src:n(94229).Z+"",width:"974",height:"1138"})}),"\n",(0,a.jsx)(s.h3,{id:"getallboardswithdetails",children:(0,a.jsx)(s.code,{children:"getAllBoardsWithDetails"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"trelloOrgID"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloKey"})," (",(0,a.jsx)(s.code,{children:"String"}),") and ",(0,a.jsx)(s.code,{children:"trelloToken"}),"\n(",(0,a.jsx)(s.code,{children:"String"}),") and returns all boards for that Trello org."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllBoardsWithDetails",src:n(86966).Z+"",width:"1378",height:"922"})}),"\n",(0,a.jsx)(s.h3,{id:"getalllistswithdetails",children:(0,a.jsx)(s.code,{children:"getAllListsWithDetails"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"trelloKey"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloToken"})," (",(0,a.jsx)(s.code,{children:"String"}),") and Trello board id\n(",(0,a.jsx)(s.code,{children:"String"}),") and returns all lists for that Trello board."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllListsWithDetails",src:n(5744).Z+"",width:"1178",height:"930"})}),"\n",(0,a.jsx)(s.h3,{id:"getallopencardsformemberwithdetails",children:(0,a.jsx)(s.code,{children:"getAllOpenCardsForMemberWithDetails"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"trelloKey"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloToken"})," (",(0,a.jsx)(s.code,{children:"String"}),") and username (",(0,a.jsx)(s.code,{children:"String"}),")\nand returns all open cards for that Trello user."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllOpenCardsForMembersWithDetails",src:n(87305).Z+"",width:"1402",height:"1126"})}),"\n",(0,a.jsx)(s.h3,{id:"lookupboardid",children:(0,a.jsx)(s.code,{children:"lookUpBoardID"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a board Datastore (containing names & ids) and a name (",(0,a.jsx)(s.code,{children:"String"}),") and\nreturns the board id matching the name."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"lookUpBoardID",src:n(1768).Z+"",width:"1110",height:"478"})}),"\n",(0,a.jsx)(s.h3,{id:"lookuplistid",children:(0,a.jsx)(s.code,{children:"lookUpListID"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a list Datastore (containing names & ids) and a name (",(0,a.jsx)(s.code,{children:"String"}),") and\nreturns the list id matching the name."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"lookUpListID",src:n(52152).Z+"",width:"1086",height:"476"})}),"\n",(0,a.jsx)(s.h2,{id:"contributions",children:"Contributions"}),"\n",(0,a.jsx)(s.p,{children:"If you'd like to share a function to the community, please send us a link to the\nfunction and we will set it up to be shared back! We love contributions for\nthird party APIs."})]})}function h(e={}){const{wrapper:s}={...(0,c.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(o,{...e})}):o(e)}},73605:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createProject-09f7cc57d1e06394cfcc3cde517972bc.png"},28311:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createTask-d430ee1c6311907db15b3def81270c97.png"},17216:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createTaskWithDueDate-54c34a0b615f4081d5001d253bdf1931.png"},51720:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllProjects-e4897f369e497a15589ade8253cbcd57.png"},9455:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllWorkspaces-89fad98a0d420f2fa0f2265ac0bcc910.png"},95896:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/subscribe-563297eec03365cb65b1b5c3e1b8def2.png"},77495:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllConversations-1beddd0ca23a5115322d5d05aea1317b.png"},54998:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getConversations-aa6760960ca9a75b4dc35b34d5ce0cf6.png"},20528:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getConversationsWithDetails-8635d9d7705050ae92634b4a92b7d2fb.png"},89747:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getNewConversations-ae77179cf06ed672a22c97f60916d69c.png"},59141:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getPrivateConversations-7c47a55b1c48981c3c54e28e649ef5cf.png"},46384:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/oauth-541bb4b1abcbe72a98806f8ccc426b1b.png"},62690:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/oauthexample-fbc913c587d73ac001edbc12e2b169f5.png"},44406:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/postMarkdownMessage-9b8d8106f2939915d83cdf599e4694fb.png"},12746:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/postMessage-a003776ef2d449200873ea881efa50dc.png"},19615:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/scheduleMessage-d131885f47531e6ebf889089f4ae9c77.png"},19383:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createCharge-823c4e6c4771014108377be56a866b9f.png"},79629:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createCheckout-28a281402d4f4258c3fc1b822ff9e608.png"},48469:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createCustomer-25bb74bb7332bd89c38366720b4a5af0.png"},5037:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createFullRefund-702d0ef339b8adc42d0da822a11a698a.png"},83877:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createPartialRefund-7cf5ffdfd8b2ae5416fd87afaeaace73.png"},14133:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllCharges-a636a4b6130f58b181fc1221652045eb.png"},80792:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllCustomers-67e12b52c47a9488b93470d671448d12.png"},52730:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllTransactions-20af0a89d81bdf9ceb28d0dafc406031.png"},16125:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAvailableBalance-ceedab558879461375990507fb9df45f.png"},36786:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getCustomer-667183cea8afe982c2e5643a1316d67d.png"},42311:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getPendingBalance-5f7da2ca8c8c546ccb8020aee2b544c6.png"},66695:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/addBoardsToDB-85cbe023f4a8d0f97e45da1386619dae.png"},12364:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/addListsToDB-0942409292978292a4a42aa6bfb5b859.png"},94229:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createNewCard-e24343b1d8f37e7308088224190cd6cc.png"},86966:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllBoardsWithDetails-7495cbd9a80b7f2fa611bccf17b8a6d3.png"},5744:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllListsWithDetails-07f03ea570897ff0e0f8b0d2ef48dc9a.png"},87305:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllOpenCardsForMembersWithDetails-c01eea9fc3718c5ec0f87ec6cdd1e598.png"},1768:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/lookUpBoardID-b7e8ced1382e75ac987e5ee25af3cec9.png"},52152:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/lookUpListID-24c67e0f7f71b2141d564fed2a1aa4ee.png"},11151:(e,s,n)=>{n.d(s,{Z:()=>i,a:()=>d});var a=n(67294);const c={},t=a.createContext(c);function d(e){const s=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:d(e.components),a.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ba298920.faaab3d9.js b/assets/js/ba298920.faaab3d9.js deleted file mode 100644 index 47bc4532..00000000 --- a/assets/js/ba298920.faaab3d9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[8959],{66637:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>r,contentTitle:()=>d,default:()=>h,frontMatter:()=>t,metadata:()=>i,toc:()=>l});var a=n(85893),c=n(11151);const t={},d="Packages",i={id:"reference/packages",title:"Packages",description:"Overview",source:"@site/docs-classic/reference/packages.md",sourceDirName:"reference",slug:"/reference/packages",permalink:"/reference/packages",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/packages.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Built-in Function reference",permalink:"/reference/function-reference"},next:{title:"HTTP Client",permalink:"/reference/httpclient"}},r={},l=[{value:"Overview",id:"overview",level:2},{value:"Slack",id:"slack",level:2},{value:"getAllConversations",id:"getallconversations",level:3},{value:"getConversations",id:"getconversations",level:3},{value:"getConversationsWithDetails",id:"getconversationswithdetails",level:3},{value:"getNewConversations",id:"getnewconversations",level:3},{value:"getPrivateConversations",id:"getprivateconversations",level:3},{value:"oauth",id:"oauth",level:3},{value:"postMarkdownMessage",id:"postmarkdownmessage",level:3},{value:"postMessage",id:"postmessage",level:3},{value:"scheduleMessage",id:"schedulemessage",level:3},{value:"Asana Package",id:"asana-package",level:2},{value:"createProject",id:"createproject",level:3},{value:"createTask",id:"createtask",level:3},{value:"createTaskWithDueDate",id:"createtaskwithduedate",level:3},{value:"getAllProjects",id:"getallprojects",level:3},{value:"getAllWorkspaces",id:"getallworkspaces",level:3},{value:"Mailchimp Package",id:"mailchimp-package",level:2},{value:"subscribe",id:"subscribe",level:3},{value:"Stripe Package",id:"stripe-package",level:2},{value:"createCharge",id:"createcharge",level:3},{value:"createCheckoutSession",id:"createcheckoutsession",level:3},{value:"createCustomer",id:"createcustomer",level:3},{value:"createFullRefund",id:"createfullrefund",level:3},{value:"createPartialRefund",id:"createpartialrefund",level:3},{value:"getAllCharges",id:"getallcharges",level:3},{value:"getAllCustomers",id:"getallcustomers",level:3},{value:"getAllTransactions",id:"getalltransactions",level:3},{value:"getAvailableBalance",id:"getavailablebalance",level:3},{value:"getCustomer",id:"getcustomer",level:3},{value:"getPendingBalance",id:"getpendingbalance",level:3},{value:"Trello Package",id:"trello-package",level:2},{value:"addBoardstoDB",id:"addboardstodb",level:3},{value:"addListstoDB",id:"addliststodb",level:3},{value:"createNewCard",id:"createnewcard",level:3},{value:"getAllBoardsWithDetails",id:"getallboardswithdetails",level:3},{value:"getAllListsWithDetails",id:"getalllistswithdetails",level:3},{value:"getAllOpenCardsForMemberWithDetails",id:"getallopencardsformemberwithdetails",level:3},{value:"lookUpBoardID",id:"lookupboardid",level:3},{value:"lookUpListID",id:"lookuplistid",level:3},{value:"Contributions",id:"contributions",level:2}];function o(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",...(0,c.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"packages",children:"Packages"}),"\n",(0,a.jsx)(s.h2,{id:"overview",children:"Overview"}),"\n",(0,a.jsx)(s.p,{children:"Darklang's alpha package manager allows re-using Darklang functions from other\nusers or canvases. Today, only Darklang employees can add functions to the\npackage manager. Packages are named by the creator, package, function, and\nversion and are accessible via autocomplete. The package manager today is\nintended for connections to third party services and APIs."}),"\n",(0,a.jsxs)(s.p,{children:["In the future, packages will be imported vs. being continually accessible, and\ncommunity members will be able to contribute directly. If you would like to\nrequest or contribute a package today, please reach out via\n",(0,a.jsx)(s.a,{href:"https://darklang.com/discord-invite",children:"Discord"}),"."]}),"\n",(0,a.jsx)(s.h2,{id:"slack",children:"Slack"}),"\n",(0,a.jsx)(s.h3,{id:"getallconversations",children:(0,a.jsx)(s.code,{children:"getAllConversations"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns a ",(0,a.jsx)(s.code,{children:"list"})," of records containing\nboth your public and private Slack channel names and ids."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllConversations",src:n(77495).Z+"",width:"1042",height:"454"})}),"\n",(0,a.jsx)(s.h3,{id:"getconversations",children:(0,a.jsx)(s.code,{children:"getConversations"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns a ",(0,a.jsx)(s.code,{children:"list"})," of records containing\nyour public Slack channel names and ids."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getConversations",src:n(54998).Z+"",width:"990",height:"654"})}),"\n",(0,a.jsx)(s.h3,{id:"getconversationswithdetails",children:(0,a.jsx)(s.code,{children:"getConversationsWithDetails"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns a ",(0,a.jsx)(s.code,{children:"list"})," of records containing\nthe channel name, id, created at date (in Epoch seconds), creator, count of\nmembers, purpose and current topic. Does not include archived channels."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getConversationsWithDetails",src:n(20528).Z+"",width:"982",height:"1024"})}),"\n",(0,a.jsx)(s.h3,{id:"getnewconversations",children:(0,a.jsx)(s.code,{children:"getNewConversations"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and ",(0,a.jsx)(s.code,{children:"checkFromSeconds"})," as an ",(0,a.jsx)(s.code,{children:"Int"}),", and\nreturns a list of conversations (as records) where the created at date is\ngreater than the current time minus the ",(0,a.jsx)(s.code,{children:"checkFromSeconds"})," time. Each entry\ncontains the channel name, id, created at date (in Epoch seconds), creator,\ncount of members, purpose and current topic."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getNewConversations",src:n(89747).Z+"",width:"1176",height:"648"})}),"\n",(0,a.jsx)(s.h3,{id:"getprivateconversations",children:(0,a.jsx)(s.code,{children:"getPrivateConversations"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns a ",(0,a.jsx)(s.code,{children:"list"})," of records containing\nyour private Slack channel names and ids."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getPrivateConversations",src:n(59141).Z+"",width:"1068",height:"936"})}),"\n",(0,a.jsx)(s.h3,{id:"oauth",children:(0,a.jsx)(s.code,{children:"oauth"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack client ID (",(0,a.jsx)(s.code,{children:"String"}),"), client secret (",(0,a.jsx)(s.code,{children:"String"}),"), token datastore\n(",(0,a.jsx)(s.code,{children:"Any"})," - but should be the name of your datastore), and OAuth code (",(0,a.jsx)(s.code,{children:"String"}),")\nand returns a ",(0,a.jsx)(s.code,{children:"Result"}),". Using this function enables you to easily set up Slack\nOAuth."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"oauth",src:n(46384).Z+"",width:"1104",height:"1084"})}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"oauth example",src:n(62690).Z+"",width:"1270",height:"212"})}),"\n",(0,a.jsx)(s.h3,{id:"postmarkdownmessage",children:(0,a.jsx)(s.code,{children:"postMarkdownMessage"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token, channel id and text as ",(0,a.jsx)(s.code,{children:"String"}),"s and posts the text to\nthe Slack channel as a markdown message."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"postMarkdownMessage",src:n(44406).Z+"",width:"998",height:"712"})}),"\n",(0,a.jsx)(s.h3,{id:"postmessage",children:(0,a.jsx)(s.code,{children:"postMessage"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes your Slack token, channel id and text as ",(0,a.jsx)(s.code,{children:"String"}),"s and posts the text to\nthe Slack channel."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"postMessage",src:n(12746).Z+"",width:"1070",height:"968"})}),"\n",(0,a.jsx)(s.h3,{id:"schedulemessage",children:(0,a.jsx)(s.code,{children:"scheduleMessage"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes an Epoch time (",(0,a.jsx)(s.code,{children:"Int"}),"), Slack token (",(0,a.jsx)(s.code,{children:"String"}),"), channel id (",(0,a.jsx)(s.code,{children:"String"}),") and\ntext (",(0,a.jsx)(s.code,{children:"String"}),") and schedules a message to be posted at the time specified."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"scheduleMessage",src:n(19615).Z+"",width:"1614",height:"1052"})}),"\n",(0,a.jsx)(s.h2,{id:"asana-package",children:"Asana Package"}),"\n",(0,a.jsx)(s.h3,{id:"createproject",children:(0,a.jsx)(s.code,{children:"createProject"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a name (",(0,a.jsx)(s.code,{children:"String"}),"), notes (",(0,a.jsx)(s.code,{children:"String"}),"), workspace (",(0,a.jsx)(s.code,{children:"String"}),") and Asana token\n(",(0,a.jsx)(s.code,{children:"String"}),") and creates a new project in the specified workspace."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createProject",src:n(73605).Z+"",width:"974",height:"1082"})}),"\n",(0,a.jsx)(s.h3,{id:"createtask",children:(0,a.jsx)(s.code,{children:"createTask"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a name (",(0,a.jsx)(s.code,{children:"String"}),"), assignee (",(0,a.jsx)(s.code,{children:"String"}),"), project (",(0,a.jsx)(s.code,{children:"String"}),"), notes\n(",(0,a.jsx)(s.code,{children:"String"}),") and Asana token (",(0,a.jsx)(s.code,{children:"String"}),") and creates a new task in the specified\nworkspace. The assignee can be a user gid, email or null."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createTask",src:n(28311).Z+"",width:"968",height:"1242"})}),"\n",(0,a.jsx)(s.h3,{id:"createtaskwithduedate",children:(0,a.jsx)(s.code,{children:"createTaskWithDueDate"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a name (",(0,a.jsx)(s.code,{children:"String"}),"), assignee (",(0,a.jsx)(s.code,{children:"String"}),"), due date (",(0,a.jsx)(s.code,{children:"String"})," - 'YYYY-MM-DD'\nformat) project (",(0,a.jsx)(s.code,{children:"String"}),"), notes (",(0,a.jsx)(s.code,{children:"String"}),") and Asana token (",(0,a.jsx)(s.code,{children:"String"}),") and\ncreates a new task in the specified workspace. The assignee can be a user gid,\nemail or null."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createTaskWithDueDate",src:n(17216).Z+"",width:"974",height:"1362"})}),"\n",(0,a.jsx)(s.h3,{id:"getallprojects",children:(0,a.jsx)(s.code,{children:"getAllProjects"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes an Asana token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns details of all projects that\ntoken has access to."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllProjects",src:n(51720).Z+"",width:"970",height:"508"})}),"\n",(0,a.jsx)(s.h3,{id:"getallworkspaces",children:(0,a.jsx)(s.code,{children:"getAllWorkspaces"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes an Asana token as a ",(0,a.jsx)(s.code,{children:"String"})," and returns details of all workspaces that\ntoken has access to."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllWorkspaces",src:n(9455).Z+"",width:"972",height:"480"})}),"\n",(0,a.jsx)(s.h2,{id:"mailchimp-package",children:"Mailchimp Package"}),"\n",(0,a.jsx)(s.h3,{id:"subscribe",children:(0,a.jsx)(s.code,{children:"subscribe"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes an audience ID (",(0,a.jsx)(s.code,{children:"String"}),"), email (",(0,a.jsx)(s.code,{children:"String"}),"), first name (",(0,a.jsx)(s.code,{children:"String"}),"), last\nname (",(0,a.jsx)(s.code,{children:"String"}),"), Mailchimp username (",(0,a.jsx)(s.code,{children:"String"}),"), Mailchimp API key (",(0,a.jsx)(s.code,{children:"String"}),"),\nand Mailchimp data center (",(0,a.jsx)(s.code,{children:"String"}),") and posts to the\n",(0,a.jsx)(s.a,{href:"https://mailchimp.com/developer/guides/manage-subscribers-with-the-mailchimp-api/#Add_a_contact_to_a_list%2Faudience",children:"Mailchimp Subscribers API"}),"."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"subscribe",src:n(95896).Z+"",width:"1612",height:"1146"})}),"\n",(0,a.jsx)(s.h2,{id:"stripe-package",children:"Stripe Package"}),"\n",(0,a.jsx)(s.h3,{id:"createcharge",children:(0,a.jsx)(s.code,{children:"createCharge"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),"), the amount for the charge (",(0,a.jsx)(s.code,{children:"String"}),"), the\ncurrency (",(0,a.jsx)(s.code,{children:"String"}),"), a customer id (",(0,a.jsx)(s.code,{children:"String"}),") and a card id (",(0,a.jsx)(s.code,{children:"String"}),") and\ncreates a charge on that customer's card."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createCharge",src:n(19383).Z+"",width:"906",height:"1078"})}),"\n",(0,a.jsx)(s.h3,{id:"createcheckoutsession",children:(0,a.jsx)(s.code,{children:"createCheckoutSession"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"list"})," of line items (amount, name, quantity, price, and currency), a\ncustomer ID (",(0,a.jsx)(s.code,{children:"Any"}),"), a stripe key (",(0,a.jsx)(s.code,{children:"String"}),"), a ",(0,a.jsx)(s.code,{children:"cancelUrl"})," (",(0,a.jsx)(s.code,{children:"String"}),") and a\n",(0,a.jsx)(s.code,{children:"successUrl"})," (",(0,a.jsx)(s.code,{children:"String"}),")."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createCheckout",src:n(79629).Z+"",width:"1150",height:"1492"})}),"\n",(0,a.jsx)(s.h3,{id:"createcustomer",children:(0,a.jsx)(s.code,{children:"createCustomer"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),"), a description (",(0,a.jsx)(s.code,{children:"String"}),"), an email address\n(",(0,a.jsx)(s.code,{children:"String"}),"), a name (",(0,a.jsx)(s.code,{children:"String"}),") and a phone number (",(0,a.jsx)(s.code,{children:"String"}),") and creates a\ncustomer in Stripe."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createCustomer",src:n(48469).Z+"",width:"904",height:"1088"})}),"\n",(0,a.jsx)(s.h3,{id:"createfullrefund",children:(0,a.jsx)(s.code,{children:"createFullRefund"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and charge id (",(0,a.jsx)(s.code,{children:"String"}),") and issues a full refund\nfor that charge."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createFullRefund",src:n(5037).Z+"",width:"900",height:"808"})}),"\n",(0,a.jsx)(s.h3,{id:"createpartialrefund",children:(0,a.jsx)(s.code,{children:"createPartialRefund"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),"), charge id (",(0,a.jsx)(s.code,{children:"String"}),") and amount (",(0,a.jsx)(s.code,{children:"String"}),") and\nissues a refund of that amount to the charge."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createPartialRefund",src:n(83877).Z+"",width:"906",height:"886"})}),"\n",(0,a.jsx)(s.h3,{id:"getallcharges",children:(0,a.jsx)(s.code,{children:"getAllCharges"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns all charges for that account."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllCharges",src:n(14133).Z+"",width:"906",height:"548"})}),"\n",(0,a.jsx)(s.h3,{id:"getallcustomers",children:(0,a.jsx)(s.code,{children:"getAllCustomers"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns all customers for that account."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllCustomers",src:n(80792).Z+"",width:"900",height:"548"})}),"\n",(0,a.jsx)(s.h3,{id:"getalltransactions",children:(0,a.jsx)(s.code,{children:"getAllTransactions"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns all transactions for that account."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllTransactions",src:n(52730).Z+"",width:"910",height:"620"})}),"\n",(0,a.jsx)(s.h3,{id:"getavailablebalance",children:(0,a.jsx)(s.code,{children:"getAvailableBalance"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns the available balance for that\naccount."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAvailableBalance",src:n(16125).Z+"",width:"998",height:"672"})}),"\n",(0,a.jsx)(s.h3,{id:"getcustomer",children:(0,a.jsx)(s.code,{children:"getCustomer"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and a customer id (",(0,a.jsx)(s.code,{children:"String"}),") and returns\ninformation about that customer."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getCustomer",src:n(36786).Z+"",width:"1030",height:"616"})}),"\n",(0,a.jsx)(s.h3,{id:"getpendingbalance",children:(0,a.jsx)(s.code,{children:"getPendingBalance"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a Stripe key (",(0,a.jsx)(s.code,{children:"String"}),") and returns the pending balance for that account."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getPendingBalance",src:n(42311).Z+"",width:"990",height:"676"})}),"\n",(0,a.jsx)(s.h2,{id:"trello-package",children:"Trello Package"}),"\n",(0,a.jsx)(s.h3,{id:"addboardstodb",children:(0,a.jsx)(s.code,{children:"addBoardstoDB"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"list"})," of boards and a board Datastore. Adds the name and ID of each of\nthe boards to the datastore."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"addBoardstoDB",src:n(66695).Z+"",width:"814",height:"666"})}),"\n",(0,a.jsx)(s.h3,{id:"addliststodb",children:(0,a.jsx)(s.code,{children:"addListstoDB"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"list"})," of Trello lists and a list Datastore. Adds the name and id of\neach of the lists to the datastore."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"addListstoDB",src:n(12364).Z+"",width:"818",height:"670"})}),"\n",(0,a.jsx)(s.h3,{id:"createnewcard",children:(0,a.jsx)(s.code,{children:"createNewCard"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"listID"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloKey"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloToken"})," (",(0,a.jsx)(s.code,{children:"String"}),"),\nname (",(0,a.jsx)(s.code,{children:"String"}),") and description (",(0,a.jsx)(s.code,{children:"String"}),"). Adds card with that name and\ndescription to the list specified."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"createNewCard",src:n(94229).Z+"",width:"974",height:"1138"})}),"\n",(0,a.jsx)(s.h3,{id:"getallboardswithdetails",children:(0,a.jsx)(s.code,{children:"getAllBoardsWithDetails"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"trelloOrgID"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloKey"})," (",(0,a.jsx)(s.code,{children:"String"}),") and ",(0,a.jsx)(s.code,{children:"trelloToken"}),"\n(",(0,a.jsx)(s.code,{children:"String"}),") and returns all boards for that Trello org."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllBoardsWithDetails",src:n(86966).Z+"",width:"1378",height:"922"})}),"\n",(0,a.jsx)(s.h3,{id:"getalllistswithdetails",children:(0,a.jsx)(s.code,{children:"getAllListsWithDetails"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"trelloKey"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloToken"})," (",(0,a.jsx)(s.code,{children:"String"}),") and Trello board id\n(",(0,a.jsx)(s.code,{children:"String"}),") and returns all lists for that Trello board."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllListsWithDetails",src:n(5744).Z+"",width:"1178",height:"930"})}),"\n",(0,a.jsx)(s.h3,{id:"getallopencardsformemberwithdetails",children:(0,a.jsx)(s.code,{children:"getAllOpenCardsForMemberWithDetails"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a ",(0,a.jsx)(s.code,{children:"trelloKey"})," (",(0,a.jsx)(s.code,{children:"String"}),"), ",(0,a.jsx)(s.code,{children:"trelloToken"})," (",(0,a.jsx)(s.code,{children:"String"}),") and username (",(0,a.jsx)(s.code,{children:"String"}),")\nand returns all open cards for that Trello user."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"getAllOpenCardsForMembersWithDetails",src:n(87305).Z+"",width:"1402",height:"1126"})}),"\n",(0,a.jsx)(s.h3,{id:"lookupboardid",children:(0,a.jsx)(s.code,{children:"lookUpBoardID"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a board Datastore (containing names & ids) and a name (",(0,a.jsx)(s.code,{children:"String"}),") and\nreturns the board id matching the name."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"lookUpBoardID",src:n(1768).Z+"",width:"1110",height:"478"})}),"\n",(0,a.jsx)(s.h3,{id:"lookuplistid",children:(0,a.jsx)(s.code,{children:"lookUpListID"})}),"\n",(0,a.jsxs)(s.p,{children:["Takes a list Datastore (containing names & ids) and a name (",(0,a.jsx)(s.code,{children:"String"}),") and\nreturns the list id matching the name."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"lookUpListID",src:n(52152).Z+"",width:"1086",height:"476"})}),"\n",(0,a.jsx)(s.h2,{id:"contributions",children:"Contributions"}),"\n",(0,a.jsx)(s.p,{children:"If you'd like to share a function to the community, please send us a link to the\nfunction and we will set it up to be shared back! We love contributions for\nthird party APIs."})]})}function h(e={}){const{wrapper:s}={...(0,c.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(o,{...e})}):o(e)}},73605:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createProject-09f7cc57d1e06394cfcc3cde517972bc.png"},28311:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createTask-d430ee1c6311907db15b3def81270c97.png"},17216:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createTaskWithDueDate-54c34a0b615f4081d5001d253bdf1931.png"},51720:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllProjects-e4897f369e497a15589ade8253cbcd57.png"},9455:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllWorkspaces-89fad98a0d420f2fa0f2265ac0bcc910.png"},95896:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/subscribe-563297eec03365cb65b1b5c3e1b8def2.png"},77495:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllConversations-1beddd0ca23a5115322d5d05aea1317b.png"},54998:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getConversations-aa6760960ca9a75b4dc35b34d5ce0cf6.png"},20528:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getConversationsWithDetails-8635d9d7705050ae92634b4a92b7d2fb.png"},89747:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getNewConversations-ae77179cf06ed672a22c97f60916d69c.png"},59141:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getPrivateConversations-7c47a55b1c48981c3c54e28e649ef5cf.png"},46384:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/oauth-541bb4b1abcbe72a98806f8ccc426b1b.png"},62690:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/oauthexample-fbc913c587d73ac001edbc12e2b169f5.png"},44406:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/postMarkdownMessage-9b8d8106f2939915d83cdf599e4694fb.png"},12746:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/postMessage-a003776ef2d449200873ea881efa50dc.png"},19615:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/scheduleMessage-d131885f47531e6ebf889089f4ae9c77.png"},19383:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createCharge-823c4e6c4771014108377be56a866b9f.png"},79629:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createCheckout-28a281402d4f4258c3fc1b822ff9e608.png"},48469:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createCustomer-25bb74bb7332bd89c38366720b4a5af0.png"},5037:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createFullRefund-702d0ef339b8adc42d0da822a11a698a.png"},83877:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createPartialRefund-7cf5ffdfd8b2ae5416fd87afaeaace73.png"},14133:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllCharges-a636a4b6130f58b181fc1221652045eb.png"},80792:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllCustomers-67e12b52c47a9488b93470d671448d12.png"},52730:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllTransactions-20af0a89d81bdf9ceb28d0dafc406031.png"},16125:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAvailableBalance-ceedab558879461375990507fb9df45f.png"},36786:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getCustomer-667183cea8afe982c2e5643a1316d67d.png"},42311:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getPendingBalance-5f7da2ca8c8c546ccb8020aee2b544c6.png"},66695:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/addBoardsToDB-85cbe023f4a8d0f97e45da1386619dae.png"},12364:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/addListsToDB-0942409292978292a4a42aa6bfb5b859.png"},94229:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/createNewCard-e24343b1d8f37e7308088224190cd6cc.png"},86966:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllBoardsWithDetails-7495cbd9a80b7f2fa611bccf17b8a6d3.png"},5744:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllListsWithDetails-07f03ea570897ff0e0f8b0d2ef48dc9a.png"},87305:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/getAllOpenCardsForMembersWithDetails-c01eea9fc3718c5ec0f87ec6cdd1e598.png"},1768:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/lookUpBoardID-b7e8ced1382e75ac987e5ee25af3cec9.png"},52152:(e,s,n)=>{n.d(s,{Z:()=>a});const a=n.p+"assets/images/lookUpListID-24c67e0f7f71b2141d564fed2a1aa4ee.png"},11151:(e,s,n)=>{n.d(s,{Z:()=>i,a:()=>d});var a=n(67294);const c={},t=a.createContext(c);function d(e){const s=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:d(e.components),a.createElement(t.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bcbc79f4.24c6010a.js b/assets/js/bcbc79f4.24c6010a.js new file mode 100644 index 00000000..18b4b493 --- /dev/null +++ b/assets/js/bcbc79f4.24c6010a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6820],{21131:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var s=r(85893),o=r(11151);const t={},a="Terms of Service / SLA",i={id:"reference/terms-of-service",title:"Terms of Service / SLA",description:"Code of conduct / Terms of service",source:"@site/docs-classic/reference/terms-of-service.md",sourceDirName:"reference",slug:"/reference/terms-of-service",permalink:"/reference/terms-of-service",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/terms-of-service.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"FAQs",permalink:"/reference/faqs"},next:{title:"Backward compatibility",permalink:"/reference/backward-compatibility"}},c={},d=[{value:"Code of conduct / Terms of service",id:"code-of-conduct--terms-of-service",level:2},{value:"Service Level",id:"service-level",level:2}];function l(e){const n={a:"a",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",strong:"strong",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"terms-of-service--sla",children:"Terms of Service / SLA"})}),"\n",(0,s.jsx)(n.h2,{id:"code-of-conduct--terms-of-service",children:"Code of conduct / Terms of service"}),"\n",(0,s.jsxs)(n.p,{children:["Darklang does not yet have defined terms of service. As such, ",(0,s.jsx)(n.strong,{children:"we make no\npromises at all"})," about any aspect of our service, including keeping the service\nor your programs running."]}),"\n",(0,s.jsxs)(n.p,{children:["We may disable your account ",(0,s.jsx)(n.strong,{children:"at any time"})," with no notice ",(0,s.jsx)(n.strong,{children:"for any reason"}),".\nIf we disable your account, we ",(0,s.jsx)(n.em,{children:"may"})," give you access to migrate off, or to\nresolve the issue in our service. We may not. If you're an asshole about it, act\nin bad faith in your dealings with us or the community, have violated the\n",(0,s.jsx)(n.a,{href:"https://darklang.com/code-of-conduct",children:"Code of Conduct"}),", or if we're especially\nbusy, we are less likely to do so. It is entirely up to us whether we do this or\nnot, and we choose not to do this for any reason."]}),"\n",(0,s.jsx)(n.h2,{id:"service-level",children:"Service Level"}),"\n",(0,s.jsx)(n.p,{children:"We make a best-effort attempt to keep the service up and running at all times.\nWe recommend Darklang not be used for essential services needing 99% or more\nuptime, though we typically achieve that. We make no promises at all regarding\nuptime, and have no obligations to any customer or user in this regard."}),"\n",(0,s.jsx)(n.p,{children:"We recommend that an individual canvas makes no more than 10 requests per\nsecond."}),"\n",(0,s.jsx)(n.p,{children:"We may disable part or all of a Darklang canvas which is causing issues for us\n(e.g. operational, legal, etc)."}),"\n",(0,s.jsx)(n.p,{children:"Darklang has short downtime approximately four times a year when our hosted DB\nprovider (Google Cloud SQL) performs maintenance. This is scheduled for Tuesdays\naround 8am PST, and often lasts as little as 30 seconds. We usually notify the\n#status channel in our Discord in advance, and as it happens."})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var s=r(67294);const o={},t=s.createContext(o);function a(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bcbc79f4.8eab3181.js b/assets/js/bcbc79f4.8eab3181.js deleted file mode 100644 index ef3a5c27..00000000 --- a/assets/js/bcbc79f4.8eab3181.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6820],{21131:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>i,toc:()=>d});var s=r(85893),o=r(11151);const t={},a="Terms of Service / SLA",i={id:"reference/terms-of-service",title:"Terms of Service / SLA",description:"Code of conduct / Terms of service",source:"@site/docs-classic/reference/terms-of-service.md",sourceDirName:"reference",slug:"/reference/terms-of-service",permalink:"/reference/terms-of-service",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/terms-of-service.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"FAQs",permalink:"/reference/faqs"},next:{title:"Backward compatibility",permalink:"/reference/backward-compatibility"}},c={},d=[{value:"Code of conduct / Terms of service",id:"code-of-conduct--terms-of-service",level:2},{value:"Service Level",id:"service-level",level:2}];function l(e){const n={a:"a",em:"em",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"terms-of-service--sla",children:"Terms of Service / SLA"}),"\n",(0,s.jsx)(n.h2,{id:"code-of-conduct--terms-of-service",children:"Code of conduct / Terms of service"}),"\n",(0,s.jsxs)(n.p,{children:["Darklang does not yet have defined terms of service. As such, ",(0,s.jsx)(n.strong,{children:"we make no\npromises at all"})," about any aspect of our service, including keeping the service\nor your programs running."]}),"\n",(0,s.jsxs)(n.p,{children:["We may disable your account ",(0,s.jsx)(n.strong,{children:"at any time"})," with no notice ",(0,s.jsx)(n.strong,{children:"for any reason"}),".\nIf we disable your account, we ",(0,s.jsx)(n.em,{children:"may"})," give you access to migrate off, or to\nresolve the issue in our service. We may not. If you're an asshole about it, act\nin bad faith in your dealings with us or the community, have violated the\n",(0,s.jsx)(n.a,{href:"https://darklang.com/code-of-conduct",children:"Code of Conduct"}),", or if we're especially\nbusy, we are less likely to do so. It is entirely up to us whether we do this or\nnot, and we choose not to do this for any reason."]}),"\n",(0,s.jsx)(n.h2,{id:"service-level",children:"Service Level"}),"\n",(0,s.jsx)(n.p,{children:"We make a best-effort attempt to keep the service up and running at all times.\nWe recommend Darklang not be used for essential services needing 99% or more\nuptime, though we typically achieve that. We make no promises at all regarding\nuptime, and have no obligations to any customer or user in this regard."}),"\n",(0,s.jsx)(n.p,{children:"We recommend that an individual canvas makes no more than 10 requests per\nsecond."}),"\n",(0,s.jsx)(n.p,{children:"We may disable part or all of a Darklang canvas which is causing issues for us\n(e.g. operational, legal, etc)."}),"\n",(0,s.jsx)(n.p,{children:"Darklang has short downtime approximately four times a year when our hosted DB\nprovider (Google Cloud SQL) performs maintenance. This is scheduled for Tuesdays\naround 8am PST, and often lasts as little as 30 seconds. We usually notify the\n#status channel in our Discord in advance, and as it happens."})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var s=r(67294);const o={},t=s.createContext(o);function a(e){const n=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bff81009.28e403a2.js b/assets/js/bff81009.28e403a2.js new file mode 100644 index 00000000..7be40647 --- /dev/null +++ b/assets/js/bff81009.28e403a2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6031],{12574:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>s,metadata:()=>i,toc:()=>o});var t=r(85893),l=r(11151);const s={},a="Darklang Release 4",i={id:"changelog/release-4",title:"Darklang Release 4",description:"August 1, 2022",source:"@site/docs-classic/changelog/release-4.md",sourceDirName:"changelog",slug:"/changelog/release-4",permalink:"/changelog/release-4",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-4.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 5 - Aug, 2022",permalink:"/changelog/release-5"},next:{title:"Release 3 - June, 2022",permalink:"/changelog/release-3"}},d={},o=[{value:"Standard library improvements",id:"standard-library-improvements",level:2},{value:"Contributor improvements",id:"contributor-improvements",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"darklang-release-4",children:"Darklang Release 4"})}),"\n",(0,t.jsx)(n.p,{children:"August 1, 2022"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsxs)(n.em,{children:["See the ",(0,t.jsx)(n.a,{href:"https://blog.darklang.com/darklang-release-4/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,t.jsx)(n.h2,{id:"standard-library-improvements",children:"Standard library improvements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Many standard library functions now have better descriptions, including much\nbetter formatting (",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4273",children:"#4273"}),").\n",(0,t.jsx)(n.img,{alt:"Better formatting",src:r(72439).Z+"",width:"738",height:"436"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add new version of ",(0,t.jsx)(n.code,{children:"Result::fromOption"}),", which allows non-string errors\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4272",children:"#4272"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add new version of ",(0,t.jsx)(n.code,{children:"Bytes::base64Decode"}),", which fails properly on invalid\ninput (",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4287",children:"#4287"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Bug fix: In the editor, Dates were incorrectly offset based on your timezone\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4260",children:"#4260"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Improved handling of 64-bit ints in editor\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4257",children:"#4257"}),")."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"contributor-improvements",children:"Contributor improvements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Allow contributors with ARM64 Macs to build Dark codebase\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4237",children:"#4237"}),")."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["We are in the process of rewriting the backend of the editor on top of Dark,\nincluding exposing more Editor-related functions\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4278",children:"#4278"}),"), and moving existing\nfunctionality to the new ",(0,t.jsx)(n.code,{children:"dark-editor"})," canvas\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4294",children:"#4294"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Tuples are not ready ready to release, but much of the behind the scenes work\nis done, including adding standard library functions\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4311",children:"#4311"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["We are working to expose more useful information in the editor, especially\nmaking the backend metadata accessible from the client\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4277",children:"#4277"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4254",children:"#4254"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4284",children:"#4284"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4288",children:"#4288"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4281",children:"#4281"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4282",children:"#4282"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4252",children:"#4252"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4256",children:"#4256"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4279",children:"#4279"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4331",children:"#4331"}),")."]}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},72439:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/images/pretty-descriptions-9d25b2983d23520ab354012a89f54f1a.png"},11151:(e,n,r)=>{r.d(n,{Z:()=>i,a:()=>a});var t=r(67294);const l={},s=t.createContext(l);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bff81009.91b1ce9e.js b/assets/js/bff81009.91b1ce9e.js deleted file mode 100644 index 76291b35..00000000 --- a/assets/js/bff81009.91b1ce9e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6031],{12574:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>o});var t=r(85893),l=r(11151);const s={},i="Darklang Release 4",a={id:"changelog/release-4",title:"Darklang Release 4",description:"August 1, 2022",source:"@site/docs-classic/changelog/release-4.md",sourceDirName:"changelog",slug:"/changelog/release-4",permalink:"/changelog/release-4",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-4.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 5 - Aug, 2022",permalink:"/changelog/release-5"},next:{title:"Release 3 - June, 2022",permalink:"/changelog/release-3"}},d={},o=[{value:"Standard library improvements",id:"standard-library-improvements",level:2},{value:"Contributor improvements",id:"contributor-improvements",level:2},{value:"Internal improvements",id:"internal-improvements",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,l.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"darklang-release-4",children:"Darklang Release 4"}),"\n",(0,t.jsx)(n.p,{children:"August 1, 2022"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsxs)(n.em,{children:["See the ",(0,t.jsx)(n.a,{href:"https://blog.darklang.com/darklang-release-4/",children:"blog post"})," for further\ndiscussion."]})}),"\n",(0,t.jsx)(n.h2,{id:"standard-library-improvements",children:"Standard library improvements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Many standard library functions now have better descriptions, including much\nbetter formatting (",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4273",children:"#4273"}),").\n",(0,t.jsx)(n.img,{alt:"Better formatting",src:r(72439).Z+"",width:"738",height:"436"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add new version of ",(0,t.jsx)(n.code,{children:"Result::fromOption"}),", which allows non-string errors\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4272",children:"#4272"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add new version of ",(0,t.jsx)(n.code,{children:"Bytes::base64Decode"}),", which fails properly on invalid\ninput (",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4287",children:"#4287"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Bug fix: In the editor, Dates were incorrectly offset based on your timezone\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4260",children:"#4260"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Improved handling of 64-bit ints in editor\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4257",children:"#4257"}),")."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"contributor-improvements",children:"Contributor improvements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Allow contributors with ARM64 Macs to build Dark codebase\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4237",children:"#4237"}),")."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"internal-improvements",children:"Internal improvements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["We are in the process of rewriting the backend of the editor on top of Dark,\nincluding exposing more Editor-related functions\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4278",children:"#4278"}),"), and moving existing\nfunctionality to the new ",(0,t.jsx)(n.code,{children:"dark-editor"})," canvas\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4294",children:"#4294"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Tuples are not ready ready to release, but much of the behind the scenes work\nis done, including adding standard library functions\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4311",children:"#4311"}),")."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["We are working to expose more useful information in the editor, especially\nmaking the backend metadata accessible from the client\n(",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4277",children:"#4277"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4254",children:"#4254"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4284",children:"#4284"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4288",children:"#4288"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4281",children:"#4281"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4282",children:"#4282"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4252",children:"#4252"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4256",children:"#4256"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4279",children:"#4279"}),",\n",(0,t.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4331",children:"#4331"}),")."]}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},72439:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/images/pretty-descriptions-9d25b2983d23520ab354012a89f54f1a.png"},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>i});var t=r(67294);const l={},s=t.createContext(l);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d15cb1ed.30ff97ae.js b/assets/js/d15cb1ed.30ff97ae.js new file mode 100644 index 00000000..663aa9c3 --- /dev/null +++ b/assets/js/d15cb1ed.30ff97ae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6582],{74594:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>o,frontMatter:()=>a,metadata:()=>t,toc:()=>c});var s=r(85893),l=r(11151);const a={},i="Darklang Release 7",t={id:"changelog/release-7",title:"Darklang Release 7",description:"November 1, 2022",source:"@site/docs-classic/changelog/release-7.md",sourceDirName:"changelog",slug:"/changelog/release-7",permalink:"/changelog/release-7",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-7.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 8 - Nov, 2022",permalink:"/changelog/release-8"},next:{title:"Release 6 - Sept, 2022",permalink:"/changelog/release-6"}},d={},c=[{value:"Editor improvements",id:"editor-improvements",level:2},{value:"Standard library",id:"standard-library",level:2},{value:"HTTP server",id:"http-server",level:2},{value:"Documentation",id:"documentation",level:2},{value:"Internal",id:"internal",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"darklang-release-7",children:"Darklang Release 7"})}),"\n",(0,s.jsx)(n.p,{children:"November 1, 2022"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.em,{children:["See the ",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-releases-7-and-8/",children:"blog post"})," for\nfurther discussion."]})}),"\n",(0,s.jsx)(n.h2,{id:"editor-improvements",children:"Editor improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Remove expandable sidebar, make collapsed sidebar more reliable\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4511",children:"#4511"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Improve editor load time, using preconnects and preloads\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4520",children:"#4520"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4519",children:"#4519"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Show the return type of called functions in the documentation box\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4510",children:"#4510"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fix parameter display when using package functions\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4516",children:"#4516"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Deleting a selected range of code now handles situations where the code\nreflows during deletion (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4531",children:"#4531"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fix bugs when copy/pasting match expressions and patterns\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4513",children:"#4513"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Upgrade icons to Fontawesome 6\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4565",children:"#4565"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fix a few tuple interactions\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4521",children:"#4521"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"standard-library",children:"Standard library"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Rename ",(0,s.jsx)(n.code,{children:"String::toFloat_v1"})," to ",(0,s.jsx)(n.code,{children:"Float::parse_v0"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4536",children:"#4536"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["All standard library functions now use pretty formatting in their docstrings\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4535",children:"#4535"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"http-server",children:"HTTP server"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Use new logo in favicon (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4562",children:"#4562"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"documentation",children:"Documentation"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Document\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/keyboard-mapping",children:"mouse-based shortcuts"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/281",children:"#281"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Document\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/discussion/structured-editing#command-palette",children:"additional shortcut to bring up command palette"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/268",children:"#268"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Redo the ",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/sharing-dark",children:"sharing Dark"})," page\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/282",children:"#282"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use new Darklang logos; optimize using tinypng.io\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/282",children:"#282"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/283",children:"#283"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/support",children:"Mention GitHub Discussions"})," as a\nfeedback forum (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/269",children:"#269"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Explain how the\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/http-framework",children:"HTTP handlers"}),"\nwork (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/267",children:"#267"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"internal",children:"Internal"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use exact package versions and prevent hang during ",(0,s.jsx)(n.code,{children:"npm install"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4566",children:"#4566"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use gcloud storage commands instead of gsutil for deployment\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4525",children:"#4525"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Remove old ",(0,s.jsx)(n.code,{children:"backend/templates"})," directory\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4517",children:"#4517"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Update sidebar to use Tailwind\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4511",children:"#4511"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Refactor and simplify editor loading, move FontAwesome to a CDN, combine\nmultiple files, remove old implementation\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4520",children:"#4520"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4519",children:"#4519"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create dependabot.yml for docs, update packages\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/270",children:"#270"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/271",children:"#271"}),")"]}),"\n"]}),"\n"]})]})}function o(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>t,a:()=>i});var s=r(67294);const l={},a=s.createContext(l);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d15cb1ed.c5fb5a3e.js b/assets/js/d15cb1ed.c5fb5a3e.js deleted file mode 100644 index 7bb5ed82..00000000 --- a/assets/js/d15cb1ed.c5fb5a3e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[6582],{74594:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>o,frontMatter:()=>a,metadata:()=>t,toc:()=>c});var s=r(85893),l=r(11151);const a={},i="Darklang Release 7",t={id:"changelog/release-7",title:"Darklang Release 7",description:"November 1, 2022",source:"@site/docs-classic/changelog/release-7.md",sourceDirName:"changelog",slug:"/changelog/release-7",permalink:"/changelog/release-7",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/changelog/release-7.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Release 8 - Nov, 2022",permalink:"/changelog/release-8"},next:{title:"Release 6 - Sept, 2022",permalink:"/changelog/release-6"}},d={},c=[{value:"Editor improvements",id:"editor-improvements",level:2},{value:"Standard library",id:"standard-library",level:2},{value:"HTTP server",id:"http-server",level:2},{value:"Documentation",id:"documentation",level:2},{value:"Internal",id:"internal",level:2}];function h(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,l.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"darklang-release-7",children:"Darklang Release 7"}),"\n",(0,s.jsx)(n.p,{children:"November 1, 2022"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsxs)(n.em,{children:["See the ",(0,s.jsx)(n.a,{href:"https://blog.darklang.com/darklang-releases-7-and-8/",children:"blog post"})," for\nfurther discussion."]})}),"\n",(0,s.jsx)(n.h2,{id:"editor-improvements",children:"Editor improvements"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Remove expandable sidebar, make collapsed sidebar more reliable\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4511",children:"#4511"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Improve editor load time, using preconnects and preloads\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4520",children:"#4520"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4519",children:"#4519"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Show the return type of called functions in the documentation box\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4510",children:"#4510"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fix parameter display when using package functions\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4516",children:"#4516"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Deleting a selected range of code now handles situations where the code\nreflows during deletion (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4531",children:"#4531"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fix bugs when copy/pasting match expressions and patterns\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4513",children:"#4513"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Upgrade icons to Fontawesome 6\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4565",children:"#4565"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Fix a few tuple interactions\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4521",children:"#4521"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"standard-library",children:"Standard library"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Rename ",(0,s.jsx)(n.code,{children:"String::toFloat_v1"})," to ",(0,s.jsx)(n.code,{children:"Float::parse_v0"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4536",children:"#4536"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["All standard library functions now use pretty formatting in their docstrings\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4535",children:"#4535"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"http-server",children:"HTTP server"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Use new logo in favicon (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4562",children:"#4562"}),")"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"documentation",children:"Documentation"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Document\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/keyboard-mapping",children:"mouse-based shortcuts"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/281",children:"#281"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Document\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/discussion/structured-editing#command-palette",children:"additional shortcut to bring up command palette"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/268",children:"#268"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Redo the ",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/sharing-dark",children:"sharing Dark"})," page\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/282",children:"#282"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use new Darklang logos; optimize using tinypng.io\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/282",children:"#282"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/283",children:"#283"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/support",children:"Mention GitHub Discussions"})," as a\nfeedback forum (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/269",children:"#269"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Explain how the\n",(0,s.jsx)(n.a,{href:"https://docs.darklang.com/reference/framework/http-framework",children:"HTTP handlers"}),"\nwork (",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/267",children:"#267"}),")"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"internal",children:"Internal"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use exact package versions and prevent hang during ",(0,s.jsx)(n.code,{children:"npm install"}),"\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4566",children:"#4566"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Use gcloud storage commands instead of gsutil for deployment\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4525",children:"#4525"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Remove old ",(0,s.jsx)(n.code,{children:"backend/templates"})," directory\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4517",children:"#4517"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Update sidebar to use Tailwind\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4511",children:"#4511"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Refactor and simplify editor loading, move FontAwesome to a CDN, combine\nmultiple files, remove old implementation\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4520",children:"#4520"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/dark/pull/4519",children:"#4519"}),")"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create dependabot.yml for docs, update packages\n(",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/270",children:"#270"}),",\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pull/271",children:"#271"}),")"]}),"\n"]}),"\n"]})]})}function o(e={}){const{wrapper:n}={...(0,l.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>t,a:()=>i});var s=r(67294);const l={},a=s.createContext(l);function i(e){const n=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:i(e.components),s.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d33dcbd3.22c05f58.js b/assets/js/d33dcbd3.22c05f58.js new file mode 100644 index 00000000..6f064200 --- /dev/null +++ b/assets/js/d33dcbd3.22c05f58.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9458],{74345:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var r=n(85893),c=n(11151);const i={},s="HTTP Client",d={id:"reference/httpclient",title:"HTTP Client",description:"Overview",source:"@site/docs-classic/reference/httpclient.md",sourceDirName:"reference",slug:"/reference/httpclient",permalink:"/reference/httpclient",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/httpclient.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Packages",permalink:"/reference/packages"},next:{title:"HTTP Framework",permalink:"/reference/framework/http-framework"}},o={},a=[{value:"Overview",id:"overview",level:2},{value:"HttpClient",id:"httpclient",level:3}];function l(e){const t={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"http-client",children:"HTTP Client"})}),"\n",(0,r.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,r.jsxs)(t.p,{children:["Darklang is designed for interacting with 3rd party APIs over HTTP. The\n",(0,r.jsx)(t.code,{children:"HttpClient::"})," module has a set of functions for calling out to other HTTP\nservices and APIs."]}),"\n",(0,r.jsx)(t.h3,{id:"httpclient",children:"HttpClient"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"HttpClient::"})," supports the core verbs: ",(0,r.jsx)(t.code,{children:"GET"}),", ",(0,r.jsx)(t.code,{children:"POST"}),", ",(0,r.jsx)(t.code,{children:"PATCH"}),", ",(0,r.jsx)(t.code,{children:"PUT"}),", and\n",(0,r.jsx)(t.code,{children:"DELETE"}),", as well as ",(0,r.jsx)(t.code,{children:"OPTIONS"}),". Each takes 3-4 parameters: ",(0,r.jsx)(t.code,{children:"uri"}),", ",(0,r.jsx)(t.code,{children:"query"}),",\n",(0,r.jsx)(t.code,{children:"body"}),", and ",(0,r.jsx)(t.code,{children:"header"}),". ",(0,r.jsx)(t.code,{children:"GET"}),", ",(0,r.jsx)(t.code,{children:"DELETE"}),", and ",(0,r.jsx)(t.code,{children:"OPTIONS"})," do not take a body."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"HttpClientPost",src:n(11710).Z+"",width:"1438",height:"206"})}),"\n",(0,r.jsxs)(t.p,{children:["There are built-in header functions for commonly used headers, including for\nauthentication (",(0,r.jsx)(t.code,{children:"HttpClient::basicAuth"})," and ",(0,r.jsx)(t.code,{children:"HttpClient::BearerToken"}),") and\ncontent types for plain text, JSON, HTML, and forms. Headers are dictionaries;\nto combine two headers, use ",(0,r.jsx)(t.code,{children:"Dict::merge"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"HttpClientPost",src:n(35890).Z+"",width:"1776",height:"320"})})]})}function h(e={}){const{wrapper:t}={...(0,c.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},35890:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/header-3298dd4dc7942a0bc68d8e2f4641a593.png"},11710:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/httpclientpost-7dd998f9674f2bffb1276f6f7cd8f866.png"},11151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>s});var r=n(67294);const c={},i=r.createContext(c);function s(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:s(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d33dcbd3.f240e6dd.js b/assets/js/d33dcbd3.f240e6dd.js deleted file mode 100644 index 555d91d7..00000000 --- a/assets/js/d33dcbd3.f240e6dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9458],{74345:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>h,frontMatter:()=>i,metadata:()=>d,toc:()=>l});var r=n(85893),c=n(11151);const i={},s="HTTP Client",d={id:"reference/httpclient",title:"HTTP Client",description:"Overview",source:"@site/docs-classic/reference/httpclient.md",sourceDirName:"reference",slug:"/reference/httpclient",permalink:"/reference/httpclient",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/httpclient.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Packages",permalink:"/reference/packages"},next:{title:"HTTP Framework",permalink:"/reference/framework/http-framework"}},o={},l=[{value:"Overview",id:"overview",level:2},{value:"HttpClient",id:"httpclient",level:3}];function a(e){const t={code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",...(0,c.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"http-client",children:"HTTP Client"}),"\n",(0,r.jsx)(t.h2,{id:"overview",children:"Overview"}),"\n",(0,r.jsxs)(t.p,{children:["Darklang is designed for interacting with 3rd party APIs over HTTP. The\n",(0,r.jsx)(t.code,{children:"HttpClient::"})," module has a set of functions for calling out to other HTTP\nservices and APIs."]}),"\n",(0,r.jsx)(t.h3,{id:"httpclient",children:"HttpClient"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.code,{children:"HttpClient::"})," supports the core verbs: ",(0,r.jsx)(t.code,{children:"GET"}),", ",(0,r.jsx)(t.code,{children:"POST"}),", ",(0,r.jsx)(t.code,{children:"PATCH"}),", ",(0,r.jsx)(t.code,{children:"PUT"}),", and\n",(0,r.jsx)(t.code,{children:"DELETE"}),", as well as ",(0,r.jsx)(t.code,{children:"OPTIONS"}),". Each takes 3-4 parameters: ",(0,r.jsx)(t.code,{children:"uri"}),", ",(0,r.jsx)(t.code,{children:"query"}),",\n",(0,r.jsx)(t.code,{children:"body"}),", and ",(0,r.jsx)(t.code,{children:"header"}),". ",(0,r.jsx)(t.code,{children:"GET"}),", ",(0,r.jsx)(t.code,{children:"DELETE"}),", and ",(0,r.jsx)(t.code,{children:"OPTIONS"})," do not take a body."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"HttpClientPost",src:n(11710).Z+"",width:"1438",height:"206"})}),"\n",(0,r.jsxs)(t.p,{children:["There are built-in header functions for commonly used headers, including for\nauthentication (",(0,r.jsx)(t.code,{children:"HttpClient::basicAuth"})," and ",(0,r.jsx)(t.code,{children:"HttpClient::BearerToken"}),") and\ncontent types for plain text, JSON, HTML, and forms. Headers are dictionaries;\nto combine two headers, use ",(0,r.jsx)(t.code,{children:"Dict::merge"}),"."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{alt:"HttpClientPost",src:n(35890).Z+"",width:"1776",height:"320"})})]})}function h(e={}){const{wrapper:t}={...(0,c.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},35890:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/header-3298dd4dc7942a0bc68d8e2f4641a593.png"},11710:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/httpclientpost-7dd998f9674f2bffb1276f6f7cd8f866.png"},11151:(e,t,n)=>{n.d(t,{Z:()=>d,a:()=>s});var r=n(67294);const c={},i=r.createContext(c);function s(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:s(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e1c588c6.9cc6cb1b.js b/assets/js/e1c588c6.9cc6cb1b.js new file mode 100644 index 00000000..204e9853 --- /dev/null +++ b/assets/js/e1c588c6.9cc6cb1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9230],{17504:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>o});var s=t(85893),a=t(11151);const i={},c="Javascript cheat sheet",r={id:"reference/cheatsheets/javascript-cheatsheet",title:"Javascript cheat sheet",description:"This guide will help you learn Darklang if you're familiar with Javascript.",source:"@site/docs-classic/reference/cheatsheets/javascript-cheatsheet.md",sourceDirName:"reference/cheatsheets",slug:"/reference/cheatsheets/javascript-cheatsheet",permalink:"/reference/cheatsheets/javascript-cheatsheet",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/cheatsheets/javascript-cheatsheet.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Python Cheat Sheet",permalink:"/reference/cheatsheets/python-cheatsheet"},next:{title:"Built-in Function reference",permalink:"/reference/function-reference"}},h={},o=[{value:"Comments",id:"comments",level:2},{value:"Strings",id:"strings",level:2},{value:"Functions",id:"functions",level:2},{value:"Standard Library/Built-in Functions",id:"standard-librarybuilt-in-functions",level:2},{value:"If/Else statements",id:"ifelse-statements",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"javascript-cheat-sheet",children:"Javascript cheat sheet"})}),"\n",(0,s.jsx)(n.p,{children:"This guide will help you learn Darklang if you're familiar with Javascript."}),"\n",(0,s.jsxs)(n.p,{children:["Have a tip to add to the guide?\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pulls",children:"Submit a PR"}),"!"]}),"\n",(0,s.jsx)(n.h2,{id:"comments",children:"Comments"}),"\n",(0,s.jsxs)(n.p,{children:["In Javascript, you use a ",(0,s.jsx)(n.code,{children:"//"})," to start a single line comment, or ",(0,s.jsx)(n.code,{children:"/*"})," and ",(0,s.jsx)(n.code,{children:"*/"}),"\nto wrap a multiline comment.:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:"// This is a comment\n\n/* This is\nalso a\ncomment */\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In Darklang, you use a ",(0,s.jsx)(n.code,{children:"let _ ="})," to start a comment, and you write the comment as a\nString:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/comment.png",src:t(39718).Z+"",width:"742",height:"152"})}),"\n",(0,s.jsx)(n.h2,{id:"strings",children:"Strings"}),"\n",(0,s.jsx)(n.p,{children:"In Javascript, you can write a String in multiple ways:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:"\"This is a string\"\n'This is also a string'\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In Darklang, you always use double quotes:\n",(0,s.jsx)(n.img,{alt:"from-python/string.png",src:t(5198).Z+"",width:"742",height:"124"})]}),"\n",(0,s.jsx)(n.h2,{id:"functions",children:"Functions"}),"\n",(0,s.jsxs)(n.p,{children:["In Javascript, you use the ",(0,s.jsx)(n.code,{children:"function"})," keyword to define a function:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:'function helloWorld(){\n return "Hello World";\n}\n'})}),"\n",(0,s.jsx)(n.p,{children:"and you call a function with the function name, followed by parentheses:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:"helloWorld();\n"})}),"\n",(0,s.jsx)(n.p,{children:"In Darklang, you create a function from the sidebar:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/functionside.png",src:t(28322).Z+"",width:"624",height:"250"})}),"\n",(0,s.jsx)(n.p,{children:"This will open a new function in the function space, where you can define the\nname of the function and its contents:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/function.png",src:t(64475).Z+"",width:"1046",height:"342"})}),"\n",(0,s.jsx)(n.h2,{id:"standard-librarybuilt-in-functions",children:"Standard Library/Built-in Functions"}),"\n",(0,s.jsx)(n.p,{children:"Javascript defines a set of built in functions that are called like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:"// This returns 2 to the power of 2.\nMath.pow(2,2)\n"})}),"\n",(0,s.jsx)(n.p,{children:"Darklang has a set of built in functions as well, which can be accessed via the\nautocomplete:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/power.gif",src:t(70980).Z+"",width:"930",height:"548"})}),"\n",(0,s.jsx)(n.h2,{id:"ifelse-statements",children:"If/Else statements"}),"\n",(0,s.jsxs)(n.p,{children:["In Javascript, you would write an ",(0,s.jsx)(n.code,{children:"if"})," statement like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:'var a = 5\nvar b = 10\n\nif (b > a) {\n return "b is greater than a";\n}\nelse if (a == b) {\n return "a and b are equal";\n}\nelse\n return "a is greater than b";\n'})}),"\n",(0,s.jsx)(n.p,{children:"In Darklang, the same statement would look this this:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/ifs.png",src:t(41298).Z+"",width:"798",height:"482"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that we highlight the path your code takes - so if we were to change the\nvalues, a different piece of the ",(0,s.jsx)(n.code,{children:"If"})," statement would be highlighted:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/ifs2.png",src:t(50563).Z+"",width:"796",height:"508"})})]})}function d(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},39718:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/comment-31d6d49158d5fb9df9f157bf7aac703b.png"},64475:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/function-2a3cb08413c103bd95ff89e7cf1c1ed9.png"},28322:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/functionside-ae5554dbc3021497c1b1710b65443cc1.png"},41298:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/ifs-d21faa266d0f403b717b2278706494b6.png"},50563:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/ifs2-4559f37c703f4406dea70e90aab24161.png"},70980:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/power-a4ade5fff8ecfd57c39b737dc301fa5f.gif"},5198:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/string-170049731f56bfe52d41ac15ccc0fe50.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>c});var s=t(67294);const a={},i=s.createContext(a);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e1c588c6.fcfcd422.js b/assets/js/e1c588c6.fcfcd422.js deleted file mode 100644 index 561926ea..00000000 --- a/assets/js/e1c588c6.fcfcd422.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9230],{17504:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>h,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>o});var s=t(85893),a=t(11151);const i={},c="Javascript cheat sheet",r={id:"reference/cheatsheets/javascript-cheatsheet",title:"Javascript cheat sheet",description:"This guide will help you learn Darklang if you're familiar with Javascript.",source:"@site/docs-classic/reference/cheatsheets/javascript-cheatsheet.md",sourceDirName:"reference/cheatsheets",slug:"/reference/cheatsheets/javascript-cheatsheet",permalink:"/reference/cheatsheets/javascript-cheatsheet",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/cheatsheets/javascript-cheatsheet.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Python Cheat Sheet",permalink:"/reference/cheatsheets/python-cheatsheet"},next:{title:"Built-in Function reference",permalink:"/reference/function-reference"}},h={},o=[{value:"Comments",id:"comments",level:2},{value:"Strings",id:"strings",level:2},{value:"Functions",id:"functions",level:2},{value:"Standard Library/Built-in Functions",id:"standard-librarybuilt-in-functions",level:2},{value:"If/Else statements",id:"ifelse-statements",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"javascript-cheat-sheet",children:"Javascript cheat sheet"}),"\n",(0,s.jsx)(n.p,{children:"This guide will help you learn Darklang if you're familiar with Javascript."}),"\n",(0,s.jsxs)(n.p,{children:["Have a tip to add to the guide?\n",(0,s.jsx)(n.a,{href:"https://github.com/darklang/docs/pulls",children:"Submit a PR"}),"!"]}),"\n",(0,s.jsx)(n.h2,{id:"comments",children:"Comments"}),"\n",(0,s.jsxs)(n.p,{children:["In Javascript, you use a ",(0,s.jsx)(n.code,{children:"//"})," to start a single line comment, or ",(0,s.jsx)(n.code,{children:"/*"})," and ",(0,s.jsx)(n.code,{children:"*/"}),"\nto wrap a multiline comment.:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:"// This is a comment\n\n/* This is\nalso a\ncomment */\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In Darklang, you use a ",(0,s.jsx)(n.code,{children:"let _ ="})," to start a comment, and you write the comment as a\nString:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/comment.png",src:t(39718).Z+"",width:"742",height:"152"})}),"\n",(0,s.jsx)(n.h2,{id:"strings",children:"Strings"}),"\n",(0,s.jsx)(n.p,{children:"In Javascript, you can write a String in multiple ways:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:"\"This is a string\"\n'This is also a string'\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In Darklang, you always use double quotes:\n",(0,s.jsx)(n.img,{alt:"from-python/string.png",src:t(5198).Z+"",width:"742",height:"124"})]}),"\n",(0,s.jsx)(n.h2,{id:"functions",children:"Functions"}),"\n",(0,s.jsxs)(n.p,{children:["In Javascript, you use the ",(0,s.jsx)(n.code,{children:"function"})," keyword to define a function:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:'function helloWorld(){\n return "Hello World";\n}\n'})}),"\n",(0,s.jsx)(n.p,{children:"and you call a function with the function name, followed by parentheses:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:"helloWorld();\n"})}),"\n",(0,s.jsx)(n.p,{children:"In Darklang, you create a function from the sidebar:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/functionside.png",src:t(28322).Z+"",width:"624",height:"250"})}),"\n",(0,s.jsx)(n.p,{children:"This will open a new function in the function space, where you can define the\nname of the function and its contents:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/function.png",src:t(64475).Z+"",width:"1046",height:"342"})}),"\n",(0,s.jsx)(n.h2,{id:"standard-librarybuilt-in-functions",children:"Standard Library/Built-in Functions"}),"\n",(0,s.jsx)(n.p,{children:"Javascript defines a set of built in functions that are called like this:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:"// This returns 2 to the power of 2.\nMath.pow(2,2)\n"})}),"\n",(0,s.jsx)(n.p,{children:"Darklang has a set of built in functions as well, which can be accessed via the\nautocomplete:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/power.gif",src:t(70980).Z+"",width:"930",height:"548"})}),"\n",(0,s.jsx)(n.h2,{id:"ifelse-statements",children:"If/Else statements"}),"\n",(0,s.jsxs)(n.p,{children:["In Javascript, you would write an ",(0,s.jsx)(n.code,{children:"if"})," statement like this:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-Javascript",children:'var a = 5\nvar b = 10\n\nif (b > a) {\n return "b is greater than a";\n}\nelse if (a == b) {\n return "a and b are equal";\n}\nelse\n return "a is greater than b";\n'})}),"\n",(0,s.jsx)(n.p,{children:"In Darklang, the same statement would look this this:"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/ifs.png",src:t(41298).Z+"",width:"798",height:"482"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that we highlight the path your code takes - so if we were to change the\nvalues, a different piece of the ",(0,s.jsx)(n.code,{children:"If"})," statement would be highlighted:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"from-python/ifs2.png",src:t(50563).Z+"",width:"796",height:"508"})})]})}function d(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},39718:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/comment-31d6d49158d5fb9df9f157bf7aac703b.png"},64475:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/function-2a3cb08413c103bd95ff89e7cf1c1ed9.png"},28322:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/functionside-ae5554dbc3021497c1b1710b65443cc1.png"},41298:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/ifs-d21faa266d0f403b717b2278706494b6.png"},50563:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/ifs2-4559f37c703f4406dea70e90aab24161.png"},70980:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/power-a4ade5fff8ecfd57c39b737dc301fa5f.gif"},5198:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/string-170049731f56bfe52d41ac15ccc0fe50.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>c});var s=t(67294);const a={},i=s.createContext(a);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f32a52c7.618290c4.js b/assets/js/f32a52c7.618290c4.js deleted file mode 100644 index ec5a9890..00000000 --- a/assets/js/f32a52c7.618290c4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9080],{73407:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>o});var t=s(85893),i=s(11151);const r={},a="Datastores",d={id:"reference/framework/datastores",title:"Datastores",description:"Overview",source:"@site/docs-classic/reference/framework/datastores.md",sourceDirName:"reference/framework",slug:"/reference/framework/datastores",permalink:"/reference/framework/datastores",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/framework/datastores.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"HTTP Framework",permalink:"/reference/framework/http-framework"},next:{title:"Workers",permalink:"/reference/framework/workers"}},l={},o=[{value:"Overview",id:"overview",level:2},{value:"Keys",id:"keys",level:3},{value:"Values",id:"values",level:3},{value:"DB Functions",id:"db-functions",level:2},{value:"Adding a record to a Datastore",id:"adding-a-record-to-a-datastore",level:3},{value:"Datastore meta-actions",id:"datastore-meta-actions",level:3},{value:"Querying by key, DB::get",id:"querying-by-key-dbget",level:3},{value:"Querying by record field, DB::queryExactField",id:"querying-by-record-field-dbqueryexactfield",level:3},{value:"Querying by criteria, DB::query (experimental SQL Compiler)",id:"querying-by-criteria-dbquery-experimental-sql-compiler",level:3},{value:"Creating References Between DBs",id:"creating-references-between-dbs",level:3},{value:"Migrations, Locking, and Unlocking",id:"migrations-locking-and-unlocking",level:2},{value:"Using an External Datastore",id:"using-an-external-datastore",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"datastores",children:"Datastores"}),"\n",(0,t.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(n.p,{children:"Datastores in Darklang are key-value based (persistent hash-maps). When you create a\nnew datastore, you specify the schema for the record."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Empty Datastore",src:s(16086).Z+"",width:"810",height:"230"})}),"\n",(0,t.jsxs)(n.p,{children:["The key is the unique identifier for each record, and is always of type\n",(0,t.jsx)(n.code,{children:"string"}),". ",(0,t.jsx)(n.strong,{children:"The key is not visible when looking at the Datastore's schema on the\ncanvas."})," You cannot mark a record field as the key, but you can use the same\nvalue for the field and the key when using ",(0,t.jsx)(n.code,{children:"Db::set"}),". An expected response when\nretrieving a set of records, with keys, is as following:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"[{key: { key1: value1, key2: value2} }, {key: { key1: value3, key2: value4}]"})}),"\n",(0,t.jsx)(n.p,{children:"You query datastores in four ways:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["By key (",(0,t.jsx)(n.code,{children:"DB::get"})," family)"]}),"\n",(0,t.jsxs)(n.li,{children:["By specific field (",(0,t.jsx)(n.code,{children:"DB::queryExactField"})," family)"]}),"\n",(0,t.jsxs)(n.li,{children:["By criteria for a specific field (",(0,t.jsx)(n.code,{children:"DB::query"})," family)"]}),"\n",(0,t.jsx)(n.li,{children:"By gathering information about the entire datastore"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Datastores return one or many results, with or without keys."}),"\n",(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/_LqlHR55GZQ",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,t.jsx)(n.h3,{id:"keys",children:"Keys"}),"\n",(0,t.jsx)(n.p,{children:"The schema is the same for all of these key examples:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Datastore Schema",src:s(3338).Z+"",width:"828",height:"380"})}),"\n",(0,t.jsx)(n.p,{children:"Some common key choices:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A unique field (like ",(0,t.jsx)(n.code,{children:"userId"}),"). If the field is not already a string use\n",(0,t.jsx)(n.code,{children:"toString"}),". The key is shown in the preview data."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:'[{"1": { userId: 1, name: "Ellen", pets: ["Gutenberg"]} }, {"2": { userId: 2, name: "Paul", pets: []}]'})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A unique derivative of a field (like name and ",(0,t.jsx)(n.code,{children:"UserId"}),", or a slug)."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:'[{"ellen1": { userId: 1, name: "Ellen", pets: ["Gutenberg"]} }, {"paul2": { userId: 2, name: "Paul", pets: []}]'})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A unique identifier generated programmatically (",(0,t.jsx)(n.code,{children:"DB::generateKey"}),")."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:'[{"dee09c7e-6ede-402d-9ea4-4ee8fe843688": { id: 1, name: "Ellen", pets: ["Gutenberg"]} }, {"ac7d4f1f-a164-4450-96f3-728b087bb9f4": { id: 2, name: "Paul", pets: []}]'})}),"\n",(0,t.jsx)(n.h3,{id:"values",children:"Values"}),"\n",(0,t.jsx)(n.p,{children:"The datastore holds records. In the future, datastores will be defined by type,\nbut for now you manually create the schema. Available types are: String, Int,\nBool, Float, Password, Date, UUID, Dict (and lists of those)."}),"\n",(0,t.jsx)(n.h2,{id:"db-functions",children:"DB Functions"}),"\n",(0,t.jsx)(n.p,{children:"Datastore operators are built into the language. All functions are independently\nversioned. In your canvas you will see the latest version, as well as any\nversions you are currently using."}),"\n",(0,t.jsxs)(n.p,{children:["A list of all datastore functions is available\n",(0,t.jsx)(n.a,{href:"https://ops-documentation.builtwithdark.com/?pretty=1",children:"in the function reference"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"adding-a-record-to-a-datastore",children:"Adding a record to a Datastore"}),"\n",(0,t.jsxs)(n.p,{children:["To add items into a datastore, use ",(0,t.jsx)(n.code,{children:"DB::set"}),". ",(0,t.jsx)(n.code,{children:"DB::set"})," takes three parameters\n(the record to be added, its unique key, and the datastore)."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"DBset",src:s(37049).Z+"",width:"1034",height:"176"})}),"\n",(0,t.jsxs)(n.p,{children:["For the earlier example datastore, using this with ",(0,t.jsx)(n.code,{children:"userID"})," as the key would\nlook as follows:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"DBset",src:s(10903).Z+"",width:"834",height:"462"})}),"\n",(0,t.jsxs)(n.p,{children:["Using the a generated key with ",(0,t.jsx)(n.code,{children:"DB::generateKey"})," would look like this instead:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"DBset",src:s(10416).Z+"",width:"834",height:"434"})}),"\n",(0,t.jsx)(n.h3,{id:"datastore-meta-actions",children:"Datastore meta-actions"}),"\n",(0,t.jsx)(n.p,{children:"Some datastore functions provide ability to do something to the entire\ndatastore, and only require the datastore as the parameter."}),"\n",(0,t.jsxs)(n.p,{children:["Any datastore function that includes 'with keys' returns both the key and the\nvalue, a list of nested dictionaries\n",(0,t.jsx)(n.code,{children:'[{"1": { userId: 1, name: "Ellen", pets: ["Gutenberg"]} }, {"2": { userId: 2, name: "Paul", pets: []}]'})]}),"\n",(0,t.jsxs)(n.p,{children:["Functions that do not include 'with keys' return just the values, a list of\ndictionaries\n",(0,t.jsx)(n.code,{children:'[{ userId: 1, name: "Ellen", pets: ["Gutenberg"]} , {userId: 2, name: "Paul", pets: []}]'})]}),"\n",(0,t.jsx)(n.p,{children:"These include:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::count"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::deleteAll"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::getAll"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::getAllwithKeys"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::keys"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::schemaFields"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::schema"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["To easily see is in your Datastore, create a REPL and running ",(0,t.jsx)(n.code,{children:"DB::getAll"}),"."]}),"\n",(0,t.jsxs)(n.h3,{id:"querying-by-key-dbget",children:["Querying by key, ",(0,t.jsx)(n.code,{children:"DB::get"})]}),"\n",(0,t.jsxs)(n.p,{children:["The key is a good way to be able to find information in the datastore. DB::get\nfinds records by key (reminder: ",(0,t.jsx)(n.code,{children:"withKeys"})," returns nested dictionaries including\nkeys, so ",(0,t.jsx)(n.code,{children:"DB::get"})," does not return the key). Datastore functions that allow\naction based on key are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::delete"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::get"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::getMany"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::getManywithKeys"})}),"\n"]}),"\n",(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/qNA8FzGkdWI",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,t.jsxs)(n.h3,{id:"querying-by-record-field-dbqueryexactfield",children:["Querying by record field, ",(0,t.jsx)(n.code,{children:"DB::queryExactField"})]}),"\n",(0,t.jsxs)(n.p,{children:["Using ",(0,t.jsx)(n.code,{children:"DB::queryExactField"})," checks for a specific field within the record.\n",(0,t.jsx)(n.code,{children:"DB::queryOnewithExactField"})," finds one response, whereas ",(0,t.jsx)(n.code,{children:"DB::queryExactFields"}),"\nwill return as many as exist. (reminder: ",(0,t.jsx)(n.code,{children:"withKeys"})," returns nested dictionaries\nincluding keys)."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::queryExactFields"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::queryExactFieldswithKey"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::queryOnewithExactField"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::queryOneWithExactFieldWithKey"})}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"querying-by-criteria-dbquery-experimental-sql-compiler",children:["Querying by criteria, ",(0,t.jsx)(n.code,{children:"DB::query"})," (experimental SQL Compiler)"]}),"\n",(0,t.jsxs)(n.p,{children:["For being able to run more effective datastore queries, we also have a query\ncompiler. More about this feature is in this\n",(0,t.jsx)(n.a,{href:"https://blog.darklang.com/compiling-dark-to-sql",children:"blog post"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"This allows you to write a function that can be evaluated for the datastore."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"DBset",src:s(76049).Z+"",width:"1414",height:"466"})}),"\n",(0,t.jsx)(n.p,{children:"DB::query allows taking a datastore and a block filter. Note that this does not\ncheck every value in the table but rather is optimized to find data with\nindexes. Errors at compile-time if Darklang's compiler does not yet support the code\nin question (please let us know when you hit this, and which function you wanted\nto use!)"}),"\n",(0,t.jsxs)(n.p,{children:["You can also use ",(0,t.jsx)(n.code,{children:"DB::querywithKey"})," to get both the key and record,\n",(0,t.jsx)(n.code,{children:"DB::queryOne"})," to get only one response, and ",(0,t.jsx)(n.code,{children:"DB::queryOnewithKey"})," to get only\none response, with the key and record."]}),"\n",(0,t.jsx)(n.h3,{id:"creating-references-between-dbs",children:"Creating References Between DBs"}),"\n",(0,t.jsxs)(n.p,{children:["This canvas shows the way to create a reference between two datastores: in this\ncase between Darklang employees and their pets:\n",(0,t.jsx)(n.a,{href:"https://darklang.com/a/sample-database",children:"https://darklang.com/a/sample-datastore"})]}),"\n",(0,t.jsx)(n.p,{children:"Users have a pets field, which is a list of strings. The keys for the pets are\nadded to that list."}),"\n",(0,t.jsx)(n.h2,{id:"migrations-locking-and-unlocking",children:"Migrations, Locking, and Unlocking"}),"\n",(0,t.jsx)(n.p,{children:"You can edit the DB\u2019s schema (col names and types) until it has data in it, at\nwhich point it \u201clocks.\u201d Once a datastore is locked, there are several options\nfor changing the schema."}),"\n",(0,t.jsxs)(n.p,{children:["If you are still in development and don\u2019t need the data, creating a REPL and\ndeleting all data in a DB will unlock it (",(0,t.jsx)(n.code,{children:"DB::deleteAll"}),")."]}),"\n",(0,t.jsxs)(n.p,{children:["To change your schema without deleting the data, you can use a live migration\nprocess. In the future, this will be built into Darklang, but for now you can follow\n",(0,t.jsx)(n.a,{href:"https://www.notion.so/paulshen/Datastore-migration-in-Dark-e8d50f81366b48fc92c980372f68d316",children:"Paul Shen's excellent guide"}),"\nto the process."]}),"\n",(0,t.jsx)(n.h2,{id:"using-an-external-datastore",children:"Using an External Datastore"}),"\n",(0,t.jsxs)(n.p,{children:["We strongly recommend using this built-in datastore. If you have an external\ndatabase, you can ",(0,t.jsx)(n.a,{href:"/walk-throughs/external-db",children:"connect to it via REST"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},76049:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/dbquery-8de003d4e5f9229982eed2abeac1b6a1.png"},10903:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/dbset-689082b497d7b03806911b3debbd7164.png"},37049:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/dbset_empty-9a3217d832b9b0722724eeffbf556e51.png"},10416:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/dbset_genkey-ed8676f42310ef1abb6499847170b2ba.png"},16086:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/empty-5f599f97ce0de12bdb71910d636b435c.png"},3338:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/schema-915308f4dbbb1ab3c833227fb2d6ac0d.png"},11151:(e,n,s)=>{s.d(n,{Z:()=>d,a:()=>a});var t=s(67294);const i={},r=t.createContext(i);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f32a52c7.6cb526bb.js b/assets/js/f32a52c7.6cb526bb.js new file mode 100644 index 00000000..acb08e29 --- /dev/null +++ b/assets/js/f32a52c7.6cb526bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[9080],{73407:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>o});var t=s(85893),i=s(11151);const r={},a="Datastores",d={id:"reference/framework/datastores",title:"Datastores",description:"Overview",source:"@site/docs-classic/reference/framework/datastores.md",sourceDirName:"reference/framework",slug:"/reference/framework/datastores",permalink:"/reference/framework/datastores",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/framework/datastores.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"HTTP Framework",permalink:"/reference/framework/http-framework"},next:{title:"Workers",permalink:"/reference/framework/workers"}},l={},o=[{value:"Overview",id:"overview",level:2},{value:"Keys",id:"keys",level:3},{value:"Values",id:"values",level:3},{value:"DB Functions",id:"db-functions",level:2},{value:"Adding a record to a Datastore",id:"adding-a-record-to-a-datastore",level:3},{value:"Datastore meta-actions",id:"datastore-meta-actions",level:3},{value:"Querying by key, DB::get",id:"querying-by-key-dbget",level:3},{value:"Querying by record field, DB::queryExactField",id:"querying-by-record-field-dbqueryexactfield",level:3},{value:"Querying by criteria, DB::query (experimental SQL Compiler)",id:"querying-by-criteria-dbquery-experimental-sql-compiler",level:3},{value:"Creating References Between DBs",id:"creating-references-between-dbs",level:3},{value:"Migrations, Locking, and Unlocking",id:"migrations-locking-and-unlocking",level:2},{value:"Using an External Datastore",id:"using-an-external-datastore",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"datastores",children:"Datastores"})}),"\n",(0,t.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,t.jsx)(n.p,{children:"Datastores in Darklang are key-value based (persistent hash-maps). When you create a\nnew datastore, you specify the schema for the record."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Empty Datastore",src:s(16086).Z+"",width:"810",height:"230"})}),"\n",(0,t.jsxs)(n.p,{children:["The key is the unique identifier for each record, and is always of type\n",(0,t.jsx)(n.code,{children:"string"}),". ",(0,t.jsx)(n.strong,{children:"The key is not visible when looking at the Datastore's schema on the\ncanvas."})," You cannot mark a record field as the key, but you can use the same\nvalue for the field and the key when using ",(0,t.jsx)(n.code,{children:"Db::set"}),". An expected response when\nretrieving a set of records, with keys, is as following:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"[{key: { key1: value1, key2: value2} }, {key: { key1: value3, key2: value4}]"})}),"\n",(0,t.jsx)(n.p,{children:"You query datastores in four ways:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["By key (",(0,t.jsx)(n.code,{children:"DB::get"})," family)"]}),"\n",(0,t.jsxs)(n.li,{children:["By specific field (",(0,t.jsx)(n.code,{children:"DB::queryExactField"})," family)"]}),"\n",(0,t.jsxs)(n.li,{children:["By criteria for a specific field (",(0,t.jsx)(n.code,{children:"DB::query"})," family)"]}),"\n",(0,t.jsx)(n.li,{children:"By gathering information about the entire datastore"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Datastores return one or many results, with or without keys."}),"\n",(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/_LqlHR55GZQ",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,t.jsx)(n.h3,{id:"keys",children:"Keys"}),"\n",(0,t.jsx)(n.p,{children:"The schema is the same for all of these key examples:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Datastore Schema",src:s(3338).Z+"",width:"828",height:"380"})}),"\n",(0,t.jsx)(n.p,{children:"Some common key choices:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A unique field (like ",(0,t.jsx)(n.code,{children:"userId"}),"). If the field is not already a string use\n",(0,t.jsx)(n.code,{children:"toString"}),". The key is shown in the preview data."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:'[{"1": { userId: 1, name: "Ellen", pets: ["Gutenberg"]} }, {"2": { userId: 2, name: "Paul", pets: []}]'})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A unique derivative of a field (like name and ",(0,t.jsx)(n.code,{children:"UserId"}),", or a slug)."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:'[{"ellen1": { userId: 1, name: "Ellen", pets: ["Gutenberg"]} }, {"paul2": { userId: 2, name: "Paul", pets: []}]'})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A unique identifier generated programmatically (",(0,t.jsx)(n.code,{children:"DB::generateKey"}),")."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:'[{"dee09c7e-6ede-402d-9ea4-4ee8fe843688": { id: 1, name: "Ellen", pets: ["Gutenberg"]} }, {"ac7d4f1f-a164-4450-96f3-728b087bb9f4": { id: 2, name: "Paul", pets: []}]'})}),"\n",(0,t.jsx)(n.h3,{id:"values",children:"Values"}),"\n",(0,t.jsx)(n.p,{children:"The datastore holds records. In the future, datastores will be defined by type,\nbut for now you manually create the schema. Available types are: String, Int,\nBool, Float, Password, Date, UUID, Dict (and lists of those)."}),"\n",(0,t.jsx)(n.h2,{id:"db-functions",children:"DB Functions"}),"\n",(0,t.jsx)(n.p,{children:"Datastore operators are built into the language. All functions are independently\nversioned. In your canvas you will see the latest version, as well as any\nversions you are currently using."}),"\n",(0,t.jsxs)(n.p,{children:["A list of all datastore functions is available\n",(0,t.jsx)(n.a,{href:"https://ops-documentation.builtwithdark.com/?pretty=1",children:"in the function reference"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"adding-a-record-to-a-datastore",children:"Adding a record to a Datastore"}),"\n",(0,t.jsxs)(n.p,{children:["To add items into a datastore, use ",(0,t.jsx)(n.code,{children:"DB::set"}),". ",(0,t.jsx)(n.code,{children:"DB::set"})," takes three parameters\n(the record to be added, its unique key, and the datastore)."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"DBset",src:s(37049).Z+"",width:"1034",height:"176"})}),"\n",(0,t.jsxs)(n.p,{children:["For the earlier example datastore, using this with ",(0,t.jsx)(n.code,{children:"userID"})," as the key would\nlook as follows:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"DBset",src:s(10903).Z+"",width:"834",height:"462"})}),"\n",(0,t.jsxs)(n.p,{children:["Using the a generated key with ",(0,t.jsx)(n.code,{children:"DB::generateKey"})," would look like this instead:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"DBset",src:s(10416).Z+"",width:"834",height:"434"})}),"\n",(0,t.jsx)(n.h3,{id:"datastore-meta-actions",children:"Datastore meta-actions"}),"\n",(0,t.jsx)(n.p,{children:"Some datastore functions provide ability to do something to the entire\ndatastore, and only require the datastore as the parameter."}),"\n",(0,t.jsxs)(n.p,{children:["Any datastore function that includes 'with keys' returns both the key and the\nvalue, a list of nested dictionaries\n",(0,t.jsx)(n.code,{children:'[{"1": { userId: 1, name: "Ellen", pets: ["Gutenberg"]} }, {"2": { userId: 2, name: "Paul", pets: []}]'})]}),"\n",(0,t.jsxs)(n.p,{children:["Functions that do not include 'with keys' return just the values, a list of\ndictionaries\n",(0,t.jsx)(n.code,{children:'[{ userId: 1, name: "Ellen", pets: ["Gutenberg"]} , {userId: 2, name: "Paul", pets: []}]'})]}),"\n",(0,t.jsx)(n.p,{children:"These include:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::count"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::deleteAll"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::getAll"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::getAllwithKeys"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::keys"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::schemaFields"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::schema"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["To easily see is in your Datastore, create a REPL and running ",(0,t.jsx)(n.code,{children:"DB::getAll"}),"."]}),"\n",(0,t.jsxs)(n.h3,{id:"querying-by-key-dbget",children:["Querying by key, ",(0,t.jsx)(n.code,{children:"DB::get"})]}),"\n",(0,t.jsxs)(n.p,{children:["The key is a good way to be able to find information in the datastore. DB::get\nfinds records by key (reminder: ",(0,t.jsx)(n.code,{children:"withKeys"})," returns nested dictionaries including\nkeys, so ",(0,t.jsx)(n.code,{children:"DB::get"})," does not return the key). Datastore functions that allow\naction based on key are:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::delete"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::get"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::getMany"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::getManywithKeys"})}),"\n"]}),"\n",(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/qNA8FzGkdWI",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,t.jsxs)(n.h3,{id:"querying-by-record-field-dbqueryexactfield",children:["Querying by record field, ",(0,t.jsx)(n.code,{children:"DB::queryExactField"})]}),"\n",(0,t.jsxs)(n.p,{children:["Using ",(0,t.jsx)(n.code,{children:"DB::queryExactField"})," checks for a specific field within the record.\n",(0,t.jsx)(n.code,{children:"DB::queryOnewithExactField"})," finds one response, whereas ",(0,t.jsx)(n.code,{children:"DB::queryExactFields"}),"\nwill return as many as exist. (reminder: ",(0,t.jsx)(n.code,{children:"withKeys"})," returns nested dictionaries\nincluding keys)."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::queryExactFields"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::queryExactFieldswithKey"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::queryOnewithExactField"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"DB::queryOneWithExactFieldWithKey"})}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"querying-by-criteria-dbquery-experimental-sql-compiler",children:["Querying by criteria, ",(0,t.jsx)(n.code,{children:"DB::query"})," (experimental SQL Compiler)"]}),"\n",(0,t.jsxs)(n.p,{children:["For being able to run more effective datastore queries, we also have a query\ncompiler. More about this feature is in this\n",(0,t.jsx)(n.a,{href:"https://blog.darklang.com/compiling-dark-to-sql",children:"blog post"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"This allows you to write a function that can be evaluated for the datastore."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"DBset",src:s(76049).Z+"",width:"1414",height:"466"})}),"\n",(0,t.jsx)(n.p,{children:"DB::query allows taking a datastore and a block filter. Note that this does not\ncheck every value in the table but rather is optimized to find data with\nindexes. Errors at compile-time if Darklang's compiler does not yet support the code\nin question (please let us know when you hit this, and which function you wanted\nto use!)"}),"\n",(0,t.jsxs)(n.p,{children:["You can also use ",(0,t.jsx)(n.code,{children:"DB::querywithKey"})," to get both the key and record,\n",(0,t.jsx)(n.code,{children:"DB::queryOne"})," to get only one response, and ",(0,t.jsx)(n.code,{children:"DB::queryOnewithKey"})," to get only\none response, with the key and record."]}),"\n",(0,t.jsx)(n.h3,{id:"creating-references-between-dbs",children:"Creating References Between DBs"}),"\n",(0,t.jsxs)(n.p,{children:["This canvas shows the way to create a reference between two datastores: in this\ncase between Darklang employees and their pets:\n",(0,t.jsx)(n.a,{href:"https://darklang.com/a/sample-database",children:"https://darklang.com/a/sample-datastore"})]}),"\n",(0,t.jsx)(n.p,{children:"Users have a pets field, which is a list of strings. The keys for the pets are\nadded to that list."}),"\n",(0,t.jsx)(n.h2,{id:"migrations-locking-and-unlocking",children:"Migrations, Locking, and Unlocking"}),"\n",(0,t.jsx)(n.p,{children:"You can edit the DB\u2019s schema (col names and types) until it has data in it, at\nwhich point it \u201clocks.\u201d Once a datastore is locked, there are several options\nfor changing the schema."}),"\n",(0,t.jsxs)(n.p,{children:["If you are still in development and don\u2019t need the data, creating a REPL and\ndeleting all data in a DB will unlock it (",(0,t.jsx)(n.code,{children:"DB::deleteAll"}),")."]}),"\n",(0,t.jsxs)(n.p,{children:["To change your schema without deleting the data, you can use a live migration\nprocess. In the future, this will be built into Darklang, but for now you can follow\n",(0,t.jsx)(n.a,{href:"https://www.notion.so/paulshen/Datastore-migration-in-Dark-e8d50f81366b48fc92c980372f68d316",children:"Paul Shen's excellent guide"}),"\nto the process."]}),"\n",(0,t.jsx)(n.h2,{id:"using-an-external-datastore",children:"Using an External Datastore"}),"\n",(0,t.jsxs)(n.p,{children:["We strongly recommend using this built-in datastore. If you have an external\ndatabase, you can ",(0,t.jsx)(n.a,{href:"/walk-throughs/external-db",children:"connect to it via REST"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},76049:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/dbquery-8de003d4e5f9229982eed2abeac1b6a1.png"},10903:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/dbset-689082b497d7b03806911b3debbd7164.png"},37049:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/dbset_empty-9a3217d832b9b0722724eeffbf556e51.png"},10416:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/dbset_genkey-ed8676f42310ef1abb6499847170b2ba.png"},16086:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/empty-5f599f97ce0de12bdb71910d636b435c.png"},3338:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/schema-915308f4dbbb1ab3c833227fb2d6ac0d.png"},11151:(e,n,s)=>{s.d(n,{Z:()=>d,a:()=>a});var t=s(67294);const i={},r=t.createContext(i);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f5438704.baeb859c.js b/assets/js/f5438704.baeb859c.js deleted file mode 100644 index 4cdba187..00000000 --- a/assets/js/f5438704.baeb859c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2227],{35229:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=r(85893),o=r(11151);const i={},l="Cron",a={id:"reference/framework/cron",title:"Cron",description:"Darklang supports scheduled jobs via a Cron component. Use a Cron when you want to",source:"@site/docs-classic/reference/framework/cron.md",sourceDirName:"reference/framework",slug:"/reference/framework/cron",permalink:"/reference/framework/cron",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/framework/cron.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Workers",permalink:"/reference/framework/workers"},next:{title:"Sample Canvases",permalink:"/reference/sample-canvases"}},s={},c=[{value:"Cron Basics",id:"cron-basics",level:2},{value:"FAQ",id:"faq",level:2},{value:"Can I set the exact time my Cron will run?",id:"can-i-set-the-exact-time-my-cron-will-run",level:3},{value:"Can I pause a Cron to keep it from running?",id:"can-i-pause-a-cron-to-keep-it-from-running",level:3},{value:"Will a Cron ever be executed more than once in parallel?",id:"will-a-cron-ever-be-executed-more-than-once-in-parallel",level:3},{value:"Does the execution time of my Cron affect its scheduling?",id:"does-the-execution-time-of-my-cron-affect-its-scheduling",level:3},{value:"My Every 1min Cron is not running every minute. Help?",id:"my-every-1min-cron-is-not-running-every-minute-help",level:3},{value:"Future Improvements",id:"future-improvements",level:2}];function u(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"cron",children:"Cron"}),"\n",(0,t.jsx)(n.p,{children:"Darklang supports scheduled jobs via a Cron component. Use a Cron when you want to\nschedule something to occur on a timed interval."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Cron Intervals",src:r(84961).Z+"",width:"522",height:"161"})}),"\n",(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/2ffObUyM1jc",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,t.jsx)(n.h2,{id:"cron-basics",children:"Cron Basics"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Crons run automatically once per interval. (Note: due to the distributed\nnature of the Darklang platform, it's possible that a Cron may erroneously run\nmore than once per interval.)"}),"\n",(0,t.jsxs)(n.li,{children:["There is currently no guarantee when within an interval that the Cron will\nrun. Eg, A Cron created at ",(0,t.jsx)(n.code,{children:"09:15"})," and marked as ",(0,t.jsx)(n.code,{children:"Every 1 hour"})," will run\nroughly every hours, but there is no guarantee the next run will be at exactly\n",(0,t.jsx)(n.code,{children:"10:15"}),". We plan to eventually add more fine-grained scheduling."]}),"\n",(0,t.jsxs)(n.li,{children:["The trace information on Cron will show the most recent 10 times the Cron has\nrun. A Cron never has input data, so the trace will always say\n",(0,t.jsx)(n.code,{children:"No input parameters"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"To run a Cron on-demand, use the replay button the upper right. Running\non-demand does not affect the next scheduled runtime."}),"\n",(0,t.jsx)(n.li,{children:"Crons will not alert you of failures unless you write logic to do so."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"faq",children:"FAQ"}),"\n",(0,t.jsx)(n.h3,{id:"can-i-set-the-exact-time-my-cron-will-run",children:"Can I set the exact time my Cron will run?"}),"\n",(0,t.jsx)(n.p,{children:"No, not currently. We plan to eventually support this."}),"\n",(0,t.jsx)(n.h3,{id:"can-i-pause-a-cron-to-keep-it-from-running",children:"Can I pause a Cron to keep it from running?"}),"\n",(0,t.jsx)(n.p,{children:"No, not currently. We plan to eventually support this."}),"\n",(0,t.jsx)(n.h3,{id:"will-a-cron-ever-be-executed-more-than-once-in-parallel",children:"Will a Cron ever be executed more than once in parallel?"}),"\n",(0,t.jsx)(n.p,{children:"Yes, if the cron takes longer to complete than its scheduling interval, multiple\nexecutions could overlap and be running in parallel. (See the next question\nalso.)"}),"\n",(0,t.jsx)(n.h3,{id:"does-the-execution-time-of-my-cron-affect-its-scheduling",children:"Does the execution time of my Cron affect its scheduling?"}),"\n",(0,t.jsxs)(n.p,{children:["No. Scheduling happens independently from execution of the Cron's code. Even if\nexecution of a ",(0,t.jsx)(n.code,{children:"Every 1 min"})," Cron takes 2 minutes to complete, the Cron will\nstill be scheduled every 1 minute."]}),"\n",(0,t.jsxs)(n.h3,{id:"my-every-1min-cron-is-not-running-every-minute-help",children:["My ",(0,t.jsx)(n.code,{children:"Every 1min"})," Cron is not running every minute. Help?"]}),"\n",(0,t.jsx)(n.p,{children:"Please let us know the canvas, Cron name, and approximate time of the problem\nand we can look into it."}),"\n",(0,t.jsx)(n.h2,{id:"future-improvements",children:"Future Improvements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Granular scheduling, allowing more complex and more precise scheduling (every\nother hour at 15 minutes past the hour)"}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},84961:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/images/intervals-4b9da0c92ab4b86f79fea1c9cdbfcb84.png"},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>l});var t=r(67294);const o={},i=t.createContext(o);function l(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f5438704.bdd9a463.js b/assets/js/f5438704.bdd9a463.js new file mode 100644 index 00000000..acfdb48b --- /dev/null +++ b/assets/js/f5438704.bdd9a463.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[2227],{35229:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=r(85893),o=r(11151);const i={},l="Cron",a={id:"reference/framework/cron",title:"Cron",description:"Darklang supports scheduled jobs via a Cron component. Use a Cron when you want to",source:"@site/docs-classic/reference/framework/cron.md",sourceDirName:"reference/framework",slug:"/reference/framework/cron",permalink:"/reference/framework/cron",draft:!1,unlisted:!1,editUrl:"https://github.com/darklang/docs/edit/main/docs-classic/reference/framework/cron.md",tags:[],version:"current",frontMatter:{},sidebar:"docs",previous:{title:"Workers",permalink:"/reference/framework/workers"},next:{title:"Sample Canvases",permalink:"/reference/sample-canvases"}},s={},c=[{value:"Cron Basics",id:"cron-basics",level:2},{value:"FAQ",id:"faq",level:2},{value:"Can I set the exact time my Cron will run?",id:"can-i-set-the-exact-time-my-cron-will-run",level:3},{value:"Can I pause a Cron to keep it from running?",id:"can-i-pause-a-cron-to-keep-it-from-running",level:3},{value:"Will a Cron ever be executed more than once in parallel?",id:"will-a-cron-ever-be-executed-more-than-once-in-parallel",level:3},{value:"Does the execution time of my Cron affect its scheduling?",id:"does-the-execution-time-of-my-cron-affect-its-scheduling",level:3},{value:"My Every 1min Cron is not running every minute. Help?",id:"my-every-1min-cron-is-not-running-every-minute-help",level:3},{value:"Future Improvements",id:"future-improvements",level:2}];function u(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"cron",children:"Cron"})}),"\n",(0,t.jsx)(n.p,{children:"Darklang supports scheduled jobs via a Cron component. Use a Cron when you want to\nschedule something to occur on a timed interval."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Cron Intervals",src:r(84961).Z+"",width:"522",height:"161"})}),"\n",(0,t.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/2ffObUyM1jc",frameborder:"0",allow:"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,t.jsx)(n.h2,{id:"cron-basics",children:"Cron Basics"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Crons run automatically once per interval. (Note: due to the distributed\nnature of the Darklang platform, it's possible that a Cron may erroneously run\nmore than once per interval.)"}),"\n",(0,t.jsxs)(n.li,{children:["There is currently no guarantee when within an interval that the Cron will\nrun. Eg, A Cron created at ",(0,t.jsx)(n.code,{children:"09:15"})," and marked as ",(0,t.jsx)(n.code,{children:"Every 1 hour"})," will run\nroughly every hours, but there is no guarantee the next run will be at exactly\n",(0,t.jsx)(n.code,{children:"10:15"}),". We plan to eventually add more fine-grained scheduling."]}),"\n",(0,t.jsxs)(n.li,{children:["The trace information on Cron will show the most recent 10 times the Cron has\nrun. A Cron never has input data, so the trace will always say\n",(0,t.jsx)(n.code,{children:"No input parameters"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"To run a Cron on-demand, use the replay button the upper right. Running\non-demand does not affect the next scheduled runtime."}),"\n",(0,t.jsx)(n.li,{children:"Crons will not alert you of failures unless you write logic to do so."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"faq",children:"FAQ"}),"\n",(0,t.jsx)(n.h3,{id:"can-i-set-the-exact-time-my-cron-will-run",children:"Can I set the exact time my Cron will run?"}),"\n",(0,t.jsx)(n.p,{children:"No, not currently. We plan to eventually support this."}),"\n",(0,t.jsx)(n.h3,{id:"can-i-pause-a-cron-to-keep-it-from-running",children:"Can I pause a Cron to keep it from running?"}),"\n",(0,t.jsx)(n.p,{children:"No, not currently. We plan to eventually support this."}),"\n",(0,t.jsx)(n.h3,{id:"will-a-cron-ever-be-executed-more-than-once-in-parallel",children:"Will a Cron ever be executed more than once in parallel?"}),"\n",(0,t.jsx)(n.p,{children:"Yes, if the cron takes longer to complete than its scheduling interval, multiple\nexecutions could overlap and be running in parallel. (See the next question\nalso.)"}),"\n",(0,t.jsx)(n.h3,{id:"does-the-execution-time-of-my-cron-affect-its-scheduling",children:"Does the execution time of my Cron affect its scheduling?"}),"\n",(0,t.jsxs)(n.p,{children:["No. Scheduling happens independently from execution of the Cron's code. Even if\nexecution of a ",(0,t.jsx)(n.code,{children:"Every 1 min"})," Cron takes 2 minutes to complete, the Cron will\nstill be scheduled every 1 minute."]}),"\n",(0,t.jsxs)(n.h3,{id:"my-every-1min-cron-is-not-running-every-minute-help",children:["My ",(0,t.jsx)(n.code,{children:"Every 1min"})," Cron is not running every minute. Help?"]}),"\n",(0,t.jsx)(n.p,{children:"Please let us know the canvas, Cron name, and approximate time of the problem\nand we can look into it."}),"\n",(0,t.jsx)(n.h2,{id:"future-improvements",children:"Future Improvements"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Granular scheduling, allowing more complex and more precise scheduling (every\nother hour at 15 minutes past the hour)"}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},84961:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/images/intervals-4b9da0c92ab4b86f79fea1c9cdbfcb84.png"},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>l});var t=r(67294);const o={},i=t.createContext(o);function l(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.4c54e680.js b/assets/js/main.4c54e680.js deleted file mode 100644 index 0bb33bc0..00000000 --- a/assets/js/main.4c54e680.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.4c54e680.js.LICENSE.txt */ -(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{20830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(67294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20","aria-hidden":"true"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});n(67294);var r=n(68356),a=n.n(r),o=n(16887);const i={"06d8c526":[function(){return n.e(3681).then(n.bind(n,12490))},"@site/docs-classic/changelog/release-3.md",12490],"0742f8ef":[function(){return n.e(2320).then(n.bind(n,25456))},"@site/docs-classic/tutorials/03-create-tool-repl.md",25456],"08616192":[function(){return n.e(1874).then(n.bind(n,19387))},"@site/docs-classic/contributing/general-concepts.md",19387],"09fa56e2":[function(){return n.e(331).then(n.bind(n,39494))},"@site/docs-classic/changelog/release-6.md",39494],"0aa21778":[function(){return n.e(7953).then(n.bind(n,58625))},"@site/docs-classic/reference/languagedetails.md",58625],"0b9525aa":[function(){return n.e(7932).then(n.bind(n,26289))},"@site/docs-classic/reference/cheatsheets/python-cheatsheet.md",26289],"10df8161":[function(){return n.e(9534).then(n.t.bind(n,57428,19))},"@generated/docusaurus-plugin-content-docs/default/p/category-how-to-ee1.json",57428],"13b89620":[function(){return n.e(7709).then(n.bind(n,90393))},"@site/docs-classic/reference/sample-canvases.md",90393],"14eb3368":[function(){return Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,34228))},"@theme/DocCategoryGeneratedIndexPage",34228],17896441:[function(){return Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,18504))},"@theme/DocItem",18504],"18d58ddb":[function(){return n.e(7680).then(n.bind(n,9921))},"@site/docs-classic/walk-throughs/slack-asana.md",9921],"198abb01":[function(){return n.e(5009).then(n.bind(n,60168))},"@site/docs-classic/discussion/structured-editing.md",60168],"19d0bdf3":[function(){return n.e(7662).then(n.bind(n,80477))},"@site/docs/reference/cloud-framework/cloud-framework.md",80477],"1a4e3797":[function(){return Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,39172))},"@theme/SearchPage",39172],"1a9698d7":[function(){return n.e(410).then(n.bind(n,43948))},"@site/docs-classic/changelog/release-2.md",43948],"1cc5ba5a":[function(){return n.e(7842).then(n.bind(n,40908))},"@site/docs-classic/how-to/custom-domains.md",40908],"1e1670cf":[function(){return n.e(9924).then(n.bind(n,35794))},"@site/docs-classic/contributing/if-you-dont-know-our-stack.md",35794],"22dd74f7":[function(){return n.e(4980).then(n.t.bind(n,5904,19))},"@generated/docusaurus-plugin-content-docs/default/p/index-466.json",5904],"22e6bdb1":[function(){return n.e(4989).then(n.bind(n,77197))},"@site/docs-classic/walk-throughs/ifttt-events.md",77197],"23e9924b":[function(){return n.e(8105).then(n.t.bind(n,74247,19))},"@generated/docusaurus-plugin-content-docs/docs-next/p/next-c91.json",74247],"26d37a56":[function(){return n.e(5039).then(n.bind(n,11008))},"@site/docs-classic/introduction.md",11008],"277ac59f":[function(){return n.e(741).then(n.bind(n,76569))},"@site/docs-classic/reference/framework/http-framework.md",76569],"2795507a":[function(){return n.e(7529).then(n.bind(n,14183))},"@site/docs-classic/how-to/collaborate.md",14183],"28fb0ad1":[function(){return n.e(9858).then(n.bind(n,21189))},"@site/docs-classic/reference/function-reference.md",21189],"29a0dee3":[function(){return n.e(1753).then(n.bind(n,90618))},"@site/docs-classic/changelog/release-1.md",90618],"2a706240":[function(){return n.e(8143).then(n.bind(n,70660))},"@site/docs-classic/contributing/making-your-first-pull-request.md",70660],"2fbae9ea":[function(){return n.e(8483).then(n.bind(n,99401))},"@site/docs-classic/discussion/trace-driven-development.md",99401],"314369cd":[function(){return n.e(3778).then(n.bind(n,45330))},"@site/docs-classic/reference/desktop-client.md",45330],"3145fc41":[function(){return n.e(3190).then(n.bind(n,45267))},"@site/docs-classic/tutorials/05-create-daily-job-cron-handler.md",45267],"32b6348c":[function(){return n.e(333).then(n.bind(n,42414))},"@site/docs-classic/contributing/new-release-checklist.md",42414],"381edc8d":[function(){return n.e(1452).then(n.bind(n,5649))},"@site/docs-classic/discussion/languageoverview.md",5649],"38a40129":[function(){return n.e(9192).then(n.bind(n,19374))},"@site/docs-classic/reference/support.md",19374],"3db17606":[function(){return n.e(8163).then(n.bind(n,83331))},"@site/docs-classic/contributing/troubleshooting.md",83331],"3fb192b7":[function(){return n.e(5283).then(n.bind(n,53183))},"@site/docs/reference/language-reference/option-result.md",53183],"42add81a":[function(){return n.e(2927).then(n.t.bind(n,71772,19))},"@generated/docusaurus-plugin-content-docs/docs-next/p/next-category-how-to-guides-9a6.json",71772],"4e84f88b":[function(){return n.e(3496).then(n.bind(n,95115))},"@site/docs-classic/contributing/getting-started.md",95115],"5127552d":[function(){return n.e(5465).then(n.bind(n,39382))},"@site/docs-classic/changelog/release-5.md",39382],"52531e63":[function(){return n.e(9518).then(n.bind(n,51880))},"@site/docs-classic/contributing/setting-up-the-repo.md",51880],"545633dd":[function(){return n.e(6133).then(n.bind(n,13922))},"@site/docs/reference/language-reference/language-reference.md",13922],"549d800f":[function(){return n.e(5831).then(n.bind(n,41973))},"@site/docs/how-to/walk-throughs/base.md",41973],55853783:[function(){return n.e(835).then(n.bind(n,59886))},"@site/docs/reference/language-reference/built-in-types/int.md",59886],"56ef55a3":[function(){return n.e(5290).then(n.bind(n,28638))},"@site/docs-classic/tutorials/08-call-external-api.md",28638],"5e9223d8":[function(){return n.e(2307).then(n.t.bind(n,98910,19))},"@generated/docusaurus-plugin-content-docs/docs-next/p/next-category-step-by-step-guides-60b.json",98910],"5e95c892":[function(){return n.e(9661).then(n.bind(n,41892))},"@theme/DocsRoot",41892],61131253:[function(){return n.e(3619).then(n.t.bind(n,20105,19))},"@generated/docusaurus-plugin-content-docs/default/p/category-reference-828.json",20105],"642cd407":[function(){return n.e(7499).then(n.bind(n,21165))},"@site/docs-classic/walk-throughs/airtable.md",21165],"680699f2":[function(){return n.e(3094).then(n.bind(n,90911))},"@site/docs-classic/reference/sharing-your-dark-projects.md",90911],"6b334fd5":[function(){return n.e(1412).then(n.bind(n,95674))},"@site/docs-classic/walk-throughs/slack-app.md",95674],"6b8a9c0f":[function(){return n.e(7924).then(n.t.bind(n,22301,19))},"@generated/docusaurus-plugin-content-docs/default/p/category-discussion-b2a.json",22301],"6bc5e5c6":[function(){return n.e(5606).then(n.bind(n,56200))},"@site/docs-classic/tutorials/06-process-background-jobs-worker.md",56200],"6bcd9759":[function(){return n.e(5013).then(n.bind(n,24902))},"@site/docs-classic/contributing/adding-your-first-test.md",24902],"6be60596":[function(){return n.e(5888).then(n.t.bind(n,52457,19))},"@generated/docusaurus-plugin-content-docs/default/p/category-walk-throughs-7fb.json",52457],"6e9a774b":[function(){return n.e(6193).then(n.bind(n,26119))},"@site/docs-classic/tutorials/07-extract-function.md",26119],"6f680c08":[function(){return n.e(8879).then(n.t.bind(n,92116,19))},"@generated/docusaurus-plugin-content-docs/docs-next/__plugin.json",92116],"6f6d4e84":[function(){return n.e(841).then(n.bind(n,60667))},"@site/docs/reference/language-reference/built-in-types/bool.md",60667],"700c3238":[function(){return n.e(9536).then(n.bind(n,70210))},"@site/docs-classic/contributing/tour-of-backend.md",70210],"70318b87":[function(){return n.e(131).then(n.bind(n,20514))},"@site/docs-classic/discussion/error-handling.md",20514],"7163ce62":[function(){return n.e(9251).then(n.bind(n,46754))},"@site/docs/reference/language-reference/built-in-types/record.md",46754],"76014f2f":[function(){return n.e(6693).then(n.bind(n,27796))},"@site/docs-classic/discussion/dark-backend-components.md",27796],"7692d98d":[function(){return n.e(4637).then(n.bind(n,6364))},"@site/docs-classic/discussion/functional-aspects.md",6364],"76baf974":[function(){return n.e(6181).then(n.bind(n,72803))},"@site/docs-classic/walk-throughs/external-db.md",72803],"784c7ef0":[function(){return n.e(4624).then(n.bind(n,44202))},"@site/docs-classic/changelog/release-8.md",44202],"78e76951":[function(){return n.e(424).then(n.bind(n,9364))},"@site/docs/how-to/base.md",9364],"80e8e960":[function(){return n.e(3335).then(n.bind(n,79642))},"@site/docs-classic/changelog/release-9.md",79642],"836bb1f9":[function(){return n.e(5265).then(n.bind(n,40326))},"@site/docs-classic/contributing/adding-a-language-feature.md",40326],"8498fc51":[function(){return n.e(2095).then(n.bind(n,50611))},"@site/docs-classic/tutorials/04-save-data-to-datastore.md",50611],"85c57e1a":[function(){return n.e(8175).then(n.t.bind(n,7362,19))},"@generated/docusaurus-plugin-content-docs/default/p/category-tutorial-450.json",7362],"86245a5e":[function(){return n.e(373).then(n.bind(n,58731))},"@site/docs-classic/reference/framework/workers.md",58731],"879102f7":[function(){return n.e(3463).then(n.bind(n,86677))},"@site/docs-classic/reference/keyboard-mapping.md",86677],"87ad1a04":[function(){return n.e(948).then(n.bind(n,26375))},"@site/docs/reference/language-reference/built-in-types/built-in-types.md",26375],"87e9fc23":[function(){return n.e(41).then(n.bind(n,78041))},"@site/docs/reference/language-reference/built-in-types/enum.md",78041],"8da0d7b8":[function(){return n.e(3582).then(n.t.bind(n,34670,19))},"@generated/docusaurus-plugin-content-docs/docs-next/p/next-category-reference-5bb.json",34670],"96fe2268":[function(){return n.e(5571).then(n.t.bind(n,82291,19))},"@generated/docusaurus-plugin-content-docs/docs-next/p/next-category-tutorials-02b.json",82291],"99b95ea1":[function(){return n.e(1290).then(n.t.bind(n,82641,19))},"@generated/docusaurus-plugin-content-docs/docs-next/p/next-category-discussion-3aa.json",82641],"9beb87c2":[function(){return n.e(80).then(n.bind(n,19569))},"@site/docs/changelog.md",19569],a1e0e988:[function(){return n.e(7406).then(n.bind(n,84607))},"@site/docs-classic/tutorials/handle-error-errorrail.md",84607],a406f60e:[function(){return n.e(5616).then(n.bind(n,12179))},"@site/docs-classic/tutorials/10-next-steps.md",12179],a74a06f9:[function(){return n.e(2931).then(n.bind(n,95694))},"@site/docs-classic/contributing/making-a-pull-request.md",95694],a7bd4aaa:[function(){return n.e(8518).then(n.bind(n,8564))},"@theme/DocVersionRoot",8564],a8b8173d:[function(){return n.e(6952).then(n.bind(n,17595))},"@site/docs-classic/tutorials/01-first-dark-application.md",17595],a94703ab:[function(){return Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,12674))},"@theme/DocRoot",12674],aba21aa0:[function(){return n.e(3629).then(n.t.bind(n,41765,19))},"@generated/docusaurus-plugin-content-docs/default/__plugin.json",41765],b42d9a9c:[function(){return n.e(5131).then(n.bind(n,26552))},"@site/docs-classic/changelog/release-10.md",26552],b46a50ec:[function(){return n.e(5233).then(n.bind(n,3441))},"@site/docs-classic/walk-throughs/slack-channel-check.md",3441],b59f887f:[function(){return n.e(3237).then(n.bind(n,68682))},"@site/docs-classic/contributing/adding-a-function.md",68682],b5eb0c99:[function(){return n.e(2249).then(n.bind(n,34217))},"@site/docs-classic/how-to/static-assets.md",34217],b84cc12e:[function(){return n.e(4135).then(n.bind(n,26440))},"@site/docs-classic/changelog.md",26440],b95b9c00:[function(){return n.e(384).then(n.bind(n,90651))},"@site/docs-classic/reference/backward-compatibility.md",90651],ba298920:[function(){return n.e(8959).then(n.bind(n,66637))},"@site/docs-classic/reference/packages.md",66637],bb7c8313:[function(){return n.e(3828).then(n.bind(n,34053))},"@site/docs-classic/walk-throughs/react-app.md",34053],bc8cf436:[function(){return n.e(8073).then(n.bind(n,16440))},"@site/docs-classic/tutorials/09-complete-first-application.md",16440],bcbc79f4:[function(){return n.e(6820).then(n.bind(n,21131))},"@site/docs-classic/reference/terms-of-service.md",21131],bfebf415:[function(){return n.e(1599).then(n.bind(n,21752))},"@site/docs-classic/how-to/write-tests.md",21752],bff81009:[function(){return n.e(6031).then(n.bind(n,12574))},"@site/docs-classic/changelog/release-4.md",12574],c08505eb:[function(){return n.e(3655).then(n.bind(n,72839))},"@site/docs-classic/how-to/feature-flags.md",72839],c09629fb:[function(){return n.e(3882).then(n.bind(n,57627))},"@site/docs-classic/contributing/glossary.md",57627],c141421f:[function(){return n.e(1004).then(n.t.bind(n,51324,19))},"@generated/docusaurus-theme-search-algolia/default/__plugin.json",51324],c46a09aa:[function(){return n.e(9509).then(n.bind(n,7644))},"@site/docs-classic/contributing/adding-a-refactoring.md",7644],c7785ab7:[function(){return n.e(1068).then(n.bind(n,16148))},"@site/docs/reference/language-reference/operators.md",16148],cc0ad427:[function(){return n.e(1712).then(n.bind(n,42136))},"@site/docs/01-introduction.md",42136],ce7b462f:[function(){return n.e(4890).then(n.bind(n,83345))},"@site/docs/discussion/base.md",83345],d15cb1ed:[function(){return n.e(6582).then(n.bind(n,74594))},"@site/docs-classic/changelog/release-7.md",74594],d23660b3:[function(){return n.e(4834).then(n.bind(n,16172))},"@site/docs-classic/discussion/unique-aspects.md",16172],d33dcbd3:[function(){return n.e(9458).then(n.bind(n,74345))},"@site/docs-classic/reference/httpclient.md",74345],d39babb2:[function(){return n.e(8255).then(n.bind(n,74798))},"@site/docs-classic/discussion/queues.md",74798],d4755aff:[function(){return n.e(450).then(n.bind(n,42636))},"@site/docs-classic/tutorials/02-create-http-handler.md",42636],d53b0029:[function(){return n.e(6563).then(n.bind(n,33299))},"@site/docs-classic/reference/faqs.md",33299],db7a24d5:[function(){return n.e(9111).then(n.bind(n,71791))},"@site/docs-classic/contributing/debugging.md",71791],db877717:[function(){return n.e(5650).then(n.bind(n,40670))},"@site/docs/reference/language-reference/type-checking.md",40670],dbb3a877:[function(){return n.e(8673).then(n.bind(n,41555))},"@site/docs-classic/walk-throughs/slack-trello.md",41555],e00fda25:[function(){return n.e(2597).then(n.bind(n,84895))},"@site/docs-classic/walk-throughs/freshdesk.md",84895],e0e5d888:[function(){return n.e(4685).then(n.bind(n,54054))},"@site/docs-classic/contributing/repo-layout.md",54054],e1c588c6:[function(){return n.e(9230).then(n.bind(n,17504))},"@site/docs-classic/reference/cheatsheets/javascript-cheatsheet.md",17504],e320ddb2:[function(){return n.e(9618).then(n.bind(n,58828))},"@site/docs-classic/walk-throughs/twilio-app.md",58828],e8147d87:[function(){return n.e(3808).then(n.bind(n,64084))},"@site/docs-classic/contributing/next-contribution.md",64084],ed88c1f4:[function(){return n.e(7286).then(n.bind(n,61333))},"@site/docs/reference/darklang-cli/darklang-cli.md",61333],f32a52c7:[function(){return n.e(9080).then(n.bind(n,73407))},"@site/docs-classic/reference/framework/datastores.md",73407],f43c1deb:[function(){return n.e(2294).then(n.bind(n,11568))},"@site/docs/tutorials/first-dark-application.md",11568],f4fba3ce:[function(){return n.e(8015).then(n.bind(n,84176))},"@site/docs-classic/how-to/cors.md",84176],f5438704:[function(){return n.e(2227).then(n.bind(n,35229))},"@site/docs-classic/reference/framework/cron.md",35229],fbeb040e:[function(){return n.e(644).then(n.bind(n,62361))},"@site/docs-classic/contributing/fsharp-for-dark-developers.md",62361],fcbea2bf:[function(){return n.e(2811).then(n.bind(n,23921))},"@site/docs-classic/discussion/when-dark.md",23921]};var l=n(85893);function s(e){var t=e.error,n=e.retry,r=e.pastDelay;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(99670),u=n(30226);function d(e,t){if("*"===e)return a()({loading:s,loader:function(){return n.e(1772).then(n.bind(n,51772))},modules:["@theme/NotFound"],webpack:function(){return[51772]},render:function(e,t){var n=e.default;return(0,l.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,Object.assign({},t))})}});var r=o[e+"-"+t],d={},f=[],p=[],h=(0,c.Z)(r);return Object.entries(h).forEach((function(e){var t=e[0],n=e[1],r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:s,loader:d,modules:f,webpack:function(){return p},render:function(t,n){var a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((function(t){var n=t[0],r=t[1],o=r.default;if(!o)throw new Error("The page component at "+e+" doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.");"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((function(e){return"default"!==e})).forEach((function(e){o[e]=r[e]}));var i=a,l=n.split(".");l.slice(0,-1).forEach((function(e){i=i[e]})),i[l[l.length-1]]=o}));var o=a.__comp;delete a.__comp;var i=a.__context;delete a.__context;var s=a.__props;return delete a.__props,(0,l.jsx)(u.z,{value:i,children:(0,l.jsx)(o,Object.assign({},a,s,n))})}})}const f=[{path:"/search",component:d("/search","5de"),exact:!0},{path:"/next",component:d("/next","fce"),routes:[{path:"/next",component:d("/next","6ef"),routes:[{path:"/next",component:d("/next","63e"),routes:[{path:"/next/category/discussion",component:d("/next/category/discussion","12d"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/category/how-to-guides",component:d("/next/category/how-to-guides","b00"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/category/reference",component:d("/next/category/reference","011"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/category/step-by-step-guides",component:d("/next/category/step-by-step-guides","a75"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/category/tutorials",component:d("/next/category/tutorials","f81"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/changelog",component:d("/next/changelog","264"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/discussion/base",component:d("/next/discussion/base","3f8"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/how-to/base",component:d("/next/how-to/base","66d"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/how-to/walk-throughs/base",component:d("/next/how-to/walk-throughs/base","fcf"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/introduction",component:d("/next/introduction","a75"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/cloud-framework",component:d("/next/reference/cloud-framework","494"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/darklang-cli",component:d("/next/reference/darklang-cli","a50"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference",component:d("/next/reference/language-reference","ddd"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference/built-in-types",component:d("/next/reference/language-reference/built-in-types","081"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference/built-in-types/bool",component:d("/next/reference/language-reference/built-in-types/bool","acc"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference/built-in-types/enum",component:d("/next/reference/language-reference/built-in-types/enum","f15"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference/built-in-types/int",component:d("/next/reference/language-reference/built-in-types/int","77f"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference/built-in-types/record",component:d("/next/reference/language-reference/built-in-types/record","78e"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference/operators",component:d("/next/reference/language-reference/operators","efb"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference/option-result",component:d("/next/reference/language-reference/option-result","6a3"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/reference/language-reference/type-checking",component:d("/next/reference/language-reference/type-checking","dcc"),exact:!0,sidebar:"myAutogeneratedSidebar"},{path:"/next/tutorials/first-dark-application",component:d("/next/tutorials/first-dark-application","38d"),exact:!0,sidebar:"myAutogeneratedSidebar"}]}]}]},{path:"/",component:d("/","123"),routes:[{path:"/",component:d("/","c5c"),routes:[{path:"/",component:d("/","83d"),routes:[{path:"/category/discussion",component:d("/category/discussion","3a9"),exact:!0,sidebar:"docs"},{path:"/category/how-to",component:d("/category/how-to","509"),exact:!0,sidebar:"docs"},{path:"/category/reference",component:d("/category/reference","c8e"),exact:!0,sidebar:"docs"},{path:"/category/tutorial",component:d("/category/tutorial","f5c"),exact:!0,sidebar:"docs"},{path:"/category/walk-throughs",component:d("/category/walk-throughs","475"),exact:!0,sidebar:"docs"},{path:"/changelog",component:d("/changelog","d6d"),exact:!0,sidebar:"docs"},{path:"/changelog/release-1",component:d("/changelog/release-1","962"),exact:!0,sidebar:"docs"},{path:"/changelog/release-10",component:d("/changelog/release-10","4ca"),exact:!0,sidebar:"docs"},{path:"/changelog/release-2",component:d("/changelog/release-2","801"),exact:!0,sidebar:"docs"},{path:"/changelog/release-3",component:d("/changelog/release-3","520"),exact:!0,sidebar:"docs"},{path:"/changelog/release-4",component:d("/changelog/release-4","6a0"),exact:!0,sidebar:"docs"},{path:"/changelog/release-5",component:d("/changelog/release-5","574"),exact:!0,sidebar:"docs"},{path:"/changelog/release-6",component:d("/changelog/release-6","2ec"),exact:!0,sidebar:"docs"},{path:"/changelog/release-7",component:d("/changelog/release-7","5d3"),exact:!0,sidebar:"docs"},{path:"/changelog/release-8",component:d("/changelog/release-8","4f0"),exact:!0,sidebar:"docs"},{path:"/changelog/release-9",component:d("/changelog/release-9","a8a"),exact:!0,sidebar:"docs"},{path:"/contributing/adding-a-function",component:d("/contributing/adding-a-function","491"),exact:!0,sidebar:"Contributing"},{path:"/contributing/adding-a-language-feature",component:d("/contributing/adding-a-language-feature","595"),exact:!0,sidebar:"Contributing"},{path:"/contributing/adding-a-refactoring",component:d("/contributing/adding-a-refactoring","dc0"),exact:!0,sidebar:"Contributing"},{path:"/contributing/adding-your-first-test",component:d("/contributing/adding-your-first-test","7d5"),exact:!0,sidebar:"Contributing"},{path:"/contributing/debugging",component:d("/contributing/debugging","9d4"),exact:!0,sidebar:"Contributing"},{path:"/contributing/fsharp-for-dark-developers",component:d("/contributing/fsharp-for-dark-developers","5a3"),exact:!0,sidebar:"Contributing"},{path:"/contributing/general-concepts",component:d("/contributing/general-concepts","28f"),exact:!0,sidebar:"Contributing"},{path:"/contributing/getting-started",component:d("/contributing/getting-started","37b"),exact:!0,sidebar:"Contributing"},{path:"/contributing/glossary",component:d("/contributing/glossary","7d6"),exact:!0,sidebar:"Contributing"},{path:"/contributing/if-you-dont-know-our-stack",component:d("/contributing/if-you-dont-know-our-stack","a13"),exact:!0,sidebar:"Contributing"},{path:"/contributing/making-a-pull-request",component:d("/contributing/making-a-pull-request","c59"),exact:!0,sidebar:"Contributing"},{path:"/contributing/making-your-first-pull-request",component:d("/contributing/making-your-first-pull-request","760"),exact:!0,sidebar:"Contributing"},{path:"/contributing/new-release-checklist",component:d("/contributing/new-release-checklist","352"),exact:!0,sidebar:"Contributing"},{path:"/contributing/next-contribution",component:d("/contributing/next-contribution","0ae"),exact:!0,sidebar:"Contributing"},{path:"/contributing/repo-layout",component:d("/contributing/repo-layout","7b1"),exact:!0,sidebar:"Contributing"},{path:"/contributing/setting-up-the-repo",component:d("/contributing/setting-up-the-repo","769"),exact:!0,sidebar:"Contributing"},{path:"/contributing/tour-of-backend",component:d("/contributing/tour-of-backend","5a6"),exact:!0,sidebar:"Contributing"},{path:"/contributing/troubleshooting",component:d("/contributing/troubleshooting","e95"),exact:!0,sidebar:"Contributing"},{path:"/discussion/dark-backend-components",component:d("/discussion/dark-backend-components","869"),exact:!0,sidebar:"docs"},{path:"/discussion/error-handling",component:d("/discussion/error-handling","606"),exact:!0,sidebar:"docs"},{path:"/discussion/functional-aspects",component:d("/discussion/functional-aspects","864"),exact:!0,sidebar:"docs"},{path:"/discussion/languageoverview",component:d("/discussion/languageoverview","f9a"),exact:!0,sidebar:"docs"},{path:"/discussion/queues",component:d("/discussion/queues","3aa"),exact:!0,sidebar:"docs"},{path:"/discussion/structured-editing",component:d("/discussion/structured-editing","bbd"),exact:!0,sidebar:"docs"},{path:"/discussion/trace-driven-development",component:d("/discussion/trace-driven-development","d65"),exact:!0,sidebar:"docs"},{path:"/discussion/unique-aspects",component:d("/discussion/unique-aspects","e7f"),exact:!0,sidebar:"docs"},{path:"/discussion/when-dark",component:d("/discussion/when-dark","7f6"),exact:!0,sidebar:"docs"},{path:"/how-to/collaborate",component:d("/how-to/collaborate","911"),exact:!0,sidebar:"docs"},{path:"/how-to/cors",component:d("/how-to/cors","5ea"),exact:!0,sidebar:"docs"},{path:"/how-to/custom-domains",component:d("/how-to/custom-domains","d9f"),exact:!0,sidebar:"docs"},{path:"/how-to/feature-flags",component:d("/how-to/feature-flags","e8c"),exact:!0,sidebar:"docs"},{path:"/how-to/static-assets",component:d("/how-to/static-assets","1f2"),exact:!0,sidebar:"docs"},{path:"/how-to/write-tests",component:d("/how-to/write-tests","28d"),exact:!0,sidebar:"docs"},{path:"/introduction",component:d("/introduction","a09"),exact:!0,sidebar:"docs"},{path:"/reference/backward-compatibility",component:d("/reference/backward-compatibility","2e9"),exact:!0,sidebar:"docs"},{path:"/reference/cheatsheets/javascript-cheatsheet",component:d("/reference/cheatsheets/javascript-cheatsheet","741"),exact:!0,sidebar:"docs"},{path:"/reference/cheatsheets/python-cheatsheet",component:d("/reference/cheatsheets/python-cheatsheet","a4a"),exact:!0,sidebar:"docs"},{path:"/reference/desktop-client",component:d("/reference/desktop-client","8bf"),exact:!0,sidebar:"docs"},{path:"/reference/faqs",component:d("/reference/faqs","656"),exact:!0,sidebar:"docs"},{path:"/reference/framework/cron",component:d("/reference/framework/cron","350"),exact:!0,sidebar:"docs"},{path:"/reference/framework/datastores",component:d("/reference/framework/datastores","809"),exact:!0,sidebar:"docs"},{path:"/reference/framework/http-framework",component:d("/reference/framework/http-framework","51d"),exact:!0,sidebar:"docs"},{path:"/reference/framework/workers",component:d("/reference/framework/workers","9f5"),exact:!0,sidebar:"docs"},{path:"/reference/function-reference",component:d("/reference/function-reference","da2"),exact:!0,sidebar:"docs"},{path:"/reference/httpclient",component:d("/reference/httpclient","512"),exact:!0,sidebar:"docs"},{path:"/reference/keyboard-mapping",component:d("/reference/keyboard-mapping","9b1"),exact:!0,sidebar:"docs"},{path:"/reference/languagedetails",component:d("/reference/languagedetails","c72"),exact:!0,sidebar:"docs"},{path:"/reference/packages",component:d("/reference/packages","b1d"),exact:!0,sidebar:"docs"},{path:"/reference/sample-canvases",component:d("/reference/sample-canvases","19d"),exact:!0,sidebar:"docs"},{path:"/reference/sharing-dark",component:d("/reference/sharing-dark","390"),exact:!0,sidebar:"docs"},{path:"/reference/support",component:d("/reference/support","344"),exact:!0,sidebar:"docs"},{path:"/reference/terms-of-service",component:d("/reference/terms-of-service","886"),exact:!0,sidebar:"docs"},{path:"/tutorials/call-external-api",component:d("/tutorials/call-external-api","2ba"),exact:!0,sidebar:"docs"},{path:"/tutorials/complete-first-application",component:d("/tutorials/complete-first-application","46e"),exact:!0,sidebar:"docs"},{path:"/tutorials/create-daily-job-cron-handler",component:d("/tutorials/create-daily-job-cron-handler","ac2"),exact:!0,sidebar:"docs"},{path:"/tutorials/create-http-handler",component:d("/tutorials/create-http-handler","60b"),exact:!0,sidebar:"docs"},{path:"/tutorials/create-tool-repl",component:d("/tutorials/create-tool-repl","a26"),exact:!0,sidebar:"docs"},{path:"/tutorials/extract-function",component:d("/tutorials/extract-function","dd0"),exact:!0,sidebar:"docs"},{path:"/tutorials/first-dark-application",component:d("/tutorials/first-dark-application","337"),exact:!0,sidebar:"docs"},{path:"/tutorials/handle-error-errorrail",component:d("/tutorials/handle-error-errorrail","745"),exact:!0,sidebar:"docs"},{path:"/tutorials/next-steps",component:d("/tutorials/next-steps","307"),exact:!0,sidebar:"docs"},{path:"/tutorials/process-background-jobs-worker",component:d("/tutorials/process-background-jobs-worker","cf2"),exact:!0,sidebar:"docs"},{path:"/tutorials/save-data-to-datastore",component:d("/tutorials/save-data-to-datastore","52e"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/airtable",component:d("/walk-throughs/airtable","c29"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/external-db",component:d("/walk-throughs/external-db","4c7"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/freshdesk",component:d("/walk-throughs/freshdesk","1b7"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/ifttt-events",component:d("/walk-throughs/ifttt-events","ea1"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/react-app",component:d("/walk-throughs/react-app","053"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/slack-app",component:d("/walk-throughs/slack-app","d4a"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/slack-asana",component:d("/walk-throughs/slack-asana","495"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/slack-channel-check",component:d("/walk-throughs/slack-channel-check","da6"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/slack-trello",component:d("/walk-throughs/slack-trello","09d"),exact:!0,sidebar:"docs"},{path:"/walk-throughs/twilio-app",component:d("/walk-throughs/twilio-app","413"),exact:!0,sidebar:"docs"}]}]}]},{path:"*",component:d("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(67294),a=n(85893),o=r.createContext(!1);function i(e){var t=e.children,n=(0,r.useState)(!1),i=n[0],l=n[1];return(0,r.useEffect)((function(){l(!0)}),[]),(0,a.jsx)(o.Provider,{value:i,children:t})}},97221:(e,t,n)=>{"use strict";var r=n(67294),a=n(20745),o=n(70405),i=n(73727),l=n(36809),s=n(10412);const c=[n(74367),n(32497),n(3310),n(18320),n(52295)];var u=n(723),d=n(16550),f=n(18790),p=n(85893);function h(e){var t=e.children;return(0,p.jsx)(p.Fragment,{children:t})}var g=n(35742),m=n(52263),b=n(44996),y=n(86668),v=n(10833),w=n(94711),k=n(19727),x=n(43320),S=n(18780),_=n(90197);function E(){var e=(0,m.Z)().i18n,t=e.currentLocale,n=e.defaultLocale,r=e.localeConfigs,a=(0,w.l)(),o=r[t].htmlLang,i=function(e){return e.replace("-","_")};return(0,p.jsxs)(g.Z,{children:[Object.entries(r).map((function(e){var t=e[0],n=e[1].htmlLang;return(0,p.jsx)("link",{rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:a.createUrl({locale:n,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:i(o)}),Object.values(r).filter((function(e){return o!==e.htmlLang})).map((function(e){return(0,p.jsx)("meta",{property:"og:locale:alternate",content:i(e.htmlLang)},"meta-og-"+e.htmlLang)}))]})}function C(e){var t=e.permalink,n=(0,m.Z)().siteConfig.url,r=function(){var e=(0,m.Z)().siteConfig,t=e.url,n=e.baseUrl,r=e.trailingSlash,a=(0,d.TH)().pathname;return t+(0,S.applyTrailingSlash)((0,b.ZP)(a),{trailingSlash:r,baseUrl:n})}(),a=t?""+n+t:r;return(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:a}),(0,p.jsx)("link",{rel:"canonical",href:a})]})}function T(){var e=(0,m.Z)().i18n.currentLocale,t=(0,y.L)(),n=t.metadata,r=t.image;return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:k.h})]}),r&&(0,p.jsx)(v.d,{image:r}),(0,p.jsx)(C,{}),(0,p.jsx)(E,{}),(0,p.jsx)(_.Z,{tag:x.HX,locale:e}),(0,p.jsx)(g.Z,{children:n.map((function(e,t){return(0,p.jsx)("meta",Object.assign({},e),t)}))})]})}var j=new Map;var A=n(98934),L=n(58940),R=n(94578),O=n(20469);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+'

\n

We suggest trying baseUrl =

\n\n'}(e)).replace(/{"use strict";n.d(t,{_:()=>d,M:()=>f});var r=n(67294),a=n(36809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"introduction","docs":[{"id":"changelog","path":"/changelog","sidebar":"docs"},{"id":"changelog/release-1","path":"/changelog/release-1","sidebar":"docs"},{"id":"changelog/release-10","path":"/changelog/release-10","sidebar":"docs"},{"id":"changelog/release-2","path":"/changelog/release-2","sidebar":"docs"},{"id":"changelog/release-3","path":"/changelog/release-3","sidebar":"docs"},{"id":"changelog/release-4","path":"/changelog/release-4","sidebar":"docs"},{"id":"changelog/release-5","path":"/changelog/release-5","sidebar":"docs"},{"id":"changelog/release-6","path":"/changelog/release-6","sidebar":"docs"},{"id":"changelog/release-7","path":"/changelog/release-7","sidebar":"docs"},{"id":"changelog/release-8","path":"/changelog/release-8","sidebar":"docs"},{"id":"changelog/release-9","path":"/changelog/release-9","sidebar":"docs"},{"id":"contributing/adding-a-function","path":"/contributing/adding-a-function","sidebar":"Contributing"},{"id":"contributing/adding-a-language-feature","path":"/contributing/adding-a-language-feature","sidebar":"Contributing"},{"id":"contributing/adding-a-refactoring","path":"/contributing/adding-a-refactoring","sidebar":"Contributing"},{"id":"contributing/adding-your-first-test","path":"/contributing/adding-your-first-test","sidebar":"Contributing"},{"id":"contributing/debugging","path":"/contributing/debugging","sidebar":"Contributing"},{"id":"contributing/fsharp-for-dark-developers","path":"/contributing/fsharp-for-dark-developers","sidebar":"Contributing"},{"id":"contributing/general-concepts","path":"/contributing/general-concepts","sidebar":"Contributing"},{"id":"contributing/getting-started","path":"/contributing/getting-started","sidebar":"Contributing"},{"id":"contributing/glossary","path":"/contributing/glossary","sidebar":"Contributing"},{"id":"contributing/if-you-dont-know-our-stack","path":"/contributing/if-you-dont-know-our-stack","sidebar":"Contributing"},{"id":"contributing/making-a-pull-request","path":"/contributing/making-a-pull-request","sidebar":"Contributing"},{"id":"contributing/making-your-first-pull-request","path":"/contributing/making-your-first-pull-request","sidebar":"Contributing"},{"id":"contributing/new-release-checklist","path":"/contributing/new-release-checklist","sidebar":"Contributing"},{"id":"contributing/next-contribution","path":"/contributing/next-contribution","sidebar":"Contributing"},{"id":"contributing/repo-layout","path":"/contributing/repo-layout","sidebar":"Contributing"},{"id":"contributing/setting-up-the-repo","path":"/contributing/setting-up-the-repo","sidebar":"Contributing"},{"id":"contributing/tour-of-backend","path":"/contributing/tour-of-backend","sidebar":"Contributing"},{"id":"contributing/troubleshooting","path":"/contributing/troubleshooting","sidebar":"Contributing"},{"id":"discussion/dark-backend-components","path":"/discussion/dark-backend-components","sidebar":"docs"},{"id":"discussion/error-handling","path":"/discussion/error-handling","sidebar":"docs"},{"id":"discussion/functional-aspects","path":"/discussion/functional-aspects","sidebar":"docs"},{"id":"discussion/languageoverview","path":"/discussion/languageoverview","sidebar":"docs"},{"id":"discussion/queues","path":"/discussion/queues","sidebar":"docs"},{"id":"discussion/structured-editing","path":"/discussion/structured-editing","sidebar":"docs"},{"id":"discussion/trace-driven-development","path":"/discussion/trace-driven-development","sidebar":"docs"},{"id":"discussion/unique-aspects","path":"/discussion/unique-aspects","sidebar":"docs"},{"id":"discussion/when-dark","path":"/discussion/when-dark","sidebar":"docs"},{"id":"how-to/collaborate","path":"/how-to/collaborate","sidebar":"docs"},{"id":"how-to/cors","path":"/how-to/cors","sidebar":"docs"},{"id":"how-to/custom-domains","path":"/how-to/custom-domains","sidebar":"docs"},{"id":"how-to/feature-flags","path":"/how-to/feature-flags","sidebar":"docs"},{"id":"how-to/static-assets","path":"/how-to/static-assets","sidebar":"docs"},{"id":"how-to/write-tests","path":"/how-to/write-tests","sidebar":"docs"},{"id":"introduction","path":"/introduction","sidebar":"docs"},{"id":"reference/backward-compatibility","path":"/reference/backward-compatibility","sidebar":"docs"},{"id":"reference/cheatsheets/javascript-cheatsheet","path":"/reference/cheatsheets/javascript-cheatsheet","sidebar":"docs"},{"id":"reference/cheatsheets/python-cheatsheet","path":"/reference/cheatsheets/python-cheatsheet","sidebar":"docs"},{"id":"reference/desktop-client","path":"/reference/desktop-client","sidebar":"docs"},{"id":"reference/faqs","path":"/reference/faqs","sidebar":"docs"},{"id":"reference/framework/cron","path":"/reference/framework/cron","sidebar":"docs"},{"id":"reference/framework/datastores","path":"/reference/framework/datastores","sidebar":"docs"},{"id":"reference/framework/http-framework","path":"/reference/framework/http-framework","sidebar":"docs"},{"id":"reference/framework/workers","path":"/reference/framework/workers","sidebar":"docs"},{"id":"reference/function-reference","path":"/reference/function-reference","sidebar":"docs"},{"id":"reference/httpclient","path":"/reference/httpclient","sidebar":"docs"},{"id":"reference/keyboard-mapping","path":"/reference/keyboard-mapping","sidebar":"docs"},{"id":"reference/languagedetails","path":"/reference/languagedetails","sidebar":"docs"},{"id":"reference/packages","path":"/reference/packages","sidebar":"docs"},{"id":"reference/sample-canvases","path":"/reference/sample-canvases","sidebar":"docs"},{"id":"reference/sharing-dark","path":"/reference/sharing-dark","sidebar":"docs"},{"id":"reference/support","path":"/reference/support","sidebar":"docs"},{"id":"reference/terms-of-service","path":"/reference/terms-of-service","sidebar":"docs"},{"id":"tutorials/call-external-api","path":"/tutorials/call-external-api","sidebar":"docs"},{"id":"tutorials/complete-first-application","path":"/tutorials/complete-first-application","sidebar":"docs"},{"id":"tutorials/create-daily-job-cron-handler","path":"/tutorials/create-daily-job-cron-handler","sidebar":"docs"},{"id":"tutorials/create-http-handler","path":"/tutorials/create-http-handler","sidebar":"docs"},{"id":"tutorials/create-tool-repl","path":"/tutorials/create-tool-repl","sidebar":"docs"},{"id":"tutorials/extract-function","path":"/tutorials/extract-function","sidebar":"docs"},{"id":"tutorials/first-dark-application","path":"/tutorials/first-dark-application","sidebar":"docs"},{"id":"tutorials/handle-error-errorrail","path":"/tutorials/handle-error-errorrail","sidebar":"docs"},{"id":"tutorials/next-steps","path":"/tutorials/next-steps","sidebar":"docs"},{"id":"tutorials/process-background-jobs-worker","path":"/tutorials/process-background-jobs-worker","sidebar":"docs"},{"id":"tutorials/save-data-to-datastore","path":"/tutorials/save-data-to-datastore","sidebar":"docs"},{"id":"walk-throughs/airtable","path":"/walk-throughs/airtable","sidebar":"docs"},{"id":"walk-throughs/external-db","path":"/walk-throughs/external-db","sidebar":"docs"},{"id":"walk-throughs/freshdesk","path":"/walk-throughs/freshdesk","sidebar":"docs"},{"id":"walk-throughs/ifttt-events","path":"/walk-throughs/ifttt-events","sidebar":"docs"},{"id":"walk-throughs/react-app","path":"/walk-throughs/react-app","sidebar":"docs"},{"id":"walk-throughs/slack-app","path":"/walk-throughs/slack-app","sidebar":"docs"},{"id":"walk-throughs/slack-asana","path":"/walk-throughs/slack-asana","sidebar":"docs"},{"id":"walk-throughs/slack-channel-check","path":"/walk-throughs/slack-channel-check","sidebar":"docs"},{"id":"walk-throughs/slack-trello","path":"/walk-throughs/slack-trello","sidebar":"docs"},{"id":"walk-throughs/twilio-app","path":"/walk-throughs/twilio-app","sidebar":"docs"},{"id":"/category/tutorial","path":"/category/tutorial","sidebar":"docs"},{"id":"/category/walk-throughs","path":"/category/walk-throughs","sidebar":"docs"},{"id":"/category/how-to","path":"/category/how-to","sidebar":"docs"},{"id":"/category/discussion","path":"/category/discussion","sidebar":"docs"},{"id":"/category/reference","path":"/category/reference","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/introduction","label":"introduction"}},"Contributing":{"link":{"path":"/contributing/getting-started","label":"contributing/getting-started"}}}}],"breadcrumbs":true},"docs-next":{"path":"/next","versions":[{"name":"current","label":"Next","isLast":true,"path":"/next","mainDocId":"introduction","docs":[{"id":"changelog","path":"/next/changelog","sidebar":"myAutogeneratedSidebar"},{"id":"discussion/base","path":"/next/discussion/base","sidebar":"myAutogeneratedSidebar"},{"id":"how-to/base","path":"/next/how-to/base","sidebar":"myAutogeneratedSidebar"},{"id":"how-to/walk-throughs/base","path":"/next/how-to/walk-throughs/base","sidebar":"myAutogeneratedSidebar"},{"id":"introduction","path":"/next/introduction","sidebar":"myAutogeneratedSidebar"},{"id":"reference/cloud-framework/cloud-framework","path":"/next/reference/cloud-framework/","sidebar":"myAutogeneratedSidebar"},{"id":"reference/darklang-cli/darklang-cli","path":"/next/reference/darklang-cli/","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/built-in-types/bool","path":"/next/reference/language-reference/built-in-types/bool","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/built-in-types/built-in-types","path":"/next/reference/language-reference/built-in-types/","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/built-in-types/enum","path":"/next/reference/language-reference/built-in-types/enum","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/built-in-types/int","path":"/next/reference/language-reference/built-in-types/int","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/built-in-types/record","path":"/next/reference/language-reference/built-in-types/record","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/language-reference","path":"/next/reference/language-reference/","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/operators","path":"/next/reference/language-reference/operators","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/option-result","path":"/next/reference/language-reference/option-result","sidebar":"myAutogeneratedSidebar"},{"id":"reference/language-reference/type-checking","path":"/next/reference/language-reference/type-checking","sidebar":"myAutogeneratedSidebar"},{"id":"tutorials/first-dark-application","path":"/next/tutorials/first-dark-application","sidebar":"myAutogeneratedSidebar"},{"id":"/category/tutorials","path":"/next/category/tutorials","sidebar":"myAutogeneratedSidebar"},{"id":"/category/how-to-guides","path":"/next/category/how-to-guides","sidebar":"myAutogeneratedSidebar"},{"id":"/category/step-by-step-guides","path":"/next/category/step-by-step-guides","sidebar":"myAutogeneratedSidebar"},{"id":"/category/reference","path":"/next/category/reference","sidebar":"myAutogeneratedSidebar"},{"id":"/category/discussion","path":"/next/category/discussion","sidebar":"myAutogeneratedSidebar"}],"draftIds":[],"sidebars":{"myAutogeneratedSidebar":{"link":{"path":"/next/introduction","label":"Overview"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(57529);const s=JSON.parse('{"docusaurusVersion":"3.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-google-analytics":{"type":"package","name":"@docusaurus/plugin-google-analytics","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.4.0"}}}');var c=n(85893),u={siteConfig:a.Z,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},d=r.createContext(u);function f(e){var t=e.children;return(0,c.jsx)(d.Provider,{value:u,children:t})}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>m});var r=n(94578),a=n(67294),o=n(10412),i=n(35742),l=n(18780),s=n(7372),c=n(30226),u=n(85893);function d(e){var t=e.error,n=e.tryAgain;return(0,u.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.jsx)(f,{error:t})]})}function f(e){var t=e.error,n=(0,l.getErrorCausalChain)(t).map((function(e){return e.message})).join("\n\nCause:\n");return(0,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){var t=e.children;return(0,u.jsx)(c.z,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function h(e){var t=e.error,n=e.tryAgain;return(0,u.jsx)(p,{children:(0,u.jsxs)(m,{fallback:function(){return(0,u.jsx)(d,{error:t,tryAgain:n})},children:[(0,u.jsx)(i.Z,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(s.Z,{children:(0,u.jsx)(d,{error:t,tryAgain:n})})]})})}var g=function(e){return(0,u.jsx)(h,Object.assign({},e))},m=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={error:null},n}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidCatch=function(e){o.Z.canUseDOM&&this.setState({error:e})},n.render=function(){var e=this,t=this.props.children,n=this.state.error;if(n){var r,a={error:n,tryAgain:function(){return e.setState({error:null})}};return(null!=(r=this.props.fallback)?r:g)(a)}return null!=t?t:null},t}(a.Component)},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document;const a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);var r=n(70405),a=n(85893);function o(e){return(0,a.jsx)(r.ql,Object.assign({},e))}},33692:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(63366),a=n(67294),o=n(73727),i=n(18780),l=n(52263),s=n(13919),c=n(10412),u=n(28138),d=n(44996),f=n(85893),p=["isNavLink","to","href","activeClassName","isActive","data-noBrokenLinkCheck","autoAddBaseUrl"];function h(e,t){var n,h,g,m=e.isNavLink,b=e.to,y=e.href,v=e.activeClassName,w=e.isActive,k=e["data-noBrokenLinkCheck"],x=e.autoAddBaseUrl,S=void 0===x||x,_=(0,r.Z)(e,p),E=(0,l.Z)().siteConfig,C=E.trailingSlash,T=E.baseUrl,j=E.future.experimental_router,A=(0,d.Cg)().withBaseUrl,L=(0,u.Z)(),R=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(function(){return R.current}));var O=b||y;var P,N,I=(0,s.Z)(O),D=null==O?void 0:O.replace("pathname://",""),M=void 0!==D?(P=D,S&&function(e){return e.startsWith("/")}(P)?A(P):P):void 0;"hash"===j&&null!=(n=M)&&n.startsWith("./")&&(M=null==(N=M)?void 0:N.slice(1));M&&I&&(M=(0,i.applyTrailingSlash)(M,{trailingSlash:C,baseUrl:T}));var F=(0,a.useRef)(!1),B=m?o.OL:o.rU,z=c.Z.canUseIntersectionObserver,U=(0,a.useRef)(),q=function(){F.current||null==M||(window.docusaurus.preload(M),F.current=!0)};(0,a.useEffect)((function(){return!z&&I&&null!=M&&window.docusaurus.prefetch(M),function(){z&&U.current&&U.current.disconnect()}}),[U,M,z,I]);var Z=null!=(h=null==(g=M)?void 0:g.startsWith("#"))&&h,$=!_.target||"_self"===_.target,H=!M||!I||!$;return k||!Z&&H||L.collectLink(M),_.id&&L.collectAnchor(_.id),H?(0,f.jsx)("a",Object.assign({ref:R,href:M},O&&!I&&{target:"_blank",rel:"noopener noreferrer"},_)):(0,f.jsx)(B,Object.assign({},_,{onMouseEnter:q,onTouchStart:q,innerRef:function(e){R.current=e,z&&e&&I&&(U.current=new window.IntersectionObserver((function(t){t.forEach((function(t){e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(U.current.unobserve(e),U.current.disconnect(),null!=M&&window.docusaurus.prefetch(M))}))})),U.current.observe(e))},to:M},m&&{isActive:w,activeClassName:v}))}const g=a.forwardRef(h)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>s});var r=n(67294),a=n(85893);function o(e,t){var n=e.split(/(\{\w+\})/).map((function(e,n){if(n%2==1){var r=null==t?void 0:t[e.slice(1,-1)];if(void 0!==r)return r}return e}));return n.some((function(e){return(0,r.isValidElement)(e)}))?n.map((function(e,t){return(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e})).filter((function(e){return""!==e})):n.join("")}var i=n(57529);function l(e){var t,n,r=e.id,a=e.message;if(void 0===r&&void 0===a)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return null!=(t=null!=(n=i[null!=r?r:a])?n:a)?t:r}function s(e,t){return o(l({message:e.message,id:e.id}),t)}function c(e){var t=e.children,n=e.id,r=e.values;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");var i=l({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});var r="default"},13919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},44996:(e,t,n)=>{"use strict";n.d(t,{Cg:()=>i,ZP:()=>l});var r=n(67294),a=n(52263),o=n(13919);function i(){var e=(0,a.Z)().siteConfig,t=e.baseUrl,n=e.url,i=e.future.experimental_router,l=(0,r.useCallback)((function(e,r){return function(e){var t=e.siteUrl,n=e.baseUrl,r=e.url,a=e.options,i=void 0===a?{}:a,l=i.forcePrependBaseUrl,s=void 0!==l&&l,c=i.absolute,u=void 0!==c&&c,d=e.router;if(!r||r.startsWith("#")||(0,o.b)(r))return r;if("hash"===d)return r.startsWith("/")?"."+r:"./"+r;if(s)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;var f=r.startsWith(n)?r:n+r.replace(/^\//,"");return u?t+f:f}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})}),[n,t,i]);return{withBaseUrl:l}}function l(e,t){return void 0===t&&(t={}),(0,i().withBaseUrl)(e,t)}},28138:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(67294),a=(n(85893),r.createContext({collectAnchor:function(){},collectLink:function(){}})),o=function(){return(0,r.useContext)(a)};function i(){return o()}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(58940);function o(){return(0,r.useContext)(a._)}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(98934);function o(){return(0,r.useContext)(a._)}},20469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294);const a=n(10412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(e){return"object"==typeof e&&!!e&&Object.keys(e).length>0};function a(e){var t={};return function e(n,a){Object.entries(n).forEach((function(n){var o=n[0],i=n[1],l=a?a+"."+o:o;r(i)?e(i,l):t[l]=i}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(67294),a=n(85893),o=r.createContext(null);function i(e){var t=e.children,n=e.value,i=r.useContext(o),l=(0,r.useMemo)((function(){return function(e){var t=e.parent,n=e.value;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}var r=Object.assign({},t.data,null==n?void 0:n.data);return{plugin:t.plugin,data:r}}({parent:i,value:n})}),[i,n]);return(0,a.jsx)(o.Provider,{value:l,children:t})}},80143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>p,WS:()=>h,_r:()=>d,Jo:()=>y,zh:()=>f,yW:()=>m,gB:()=>g});var r=n(16550),a=n(52263),o=n(29935);function i(e,t){void 0===t&&(t={});var n=(0,a.Z)().globalData[e];if(!n&&t.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin.');return n}var l=function(e){return e.versions.find((function(e){return e.isLast}))};function s(e,t){var n=l(e);return[].concat(e.versions.filter((function(e){return e!==n})),[n]).find((function(e){return!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})}))}function c(e,t){var n,a,o=s(e,t),i=null==o?void 0:o.docs.find((function(e){return!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})}));return{activeVersion:o,activeDoc:i,alternateDocVersions:i?(n=i.id,a={},e.versions.forEach((function(e){e.docs.forEach((function(t){t.id===n&&(a[e.name]=t)}))})),a):{}}}var u={},d=function(){var e;return null!=(e=i("docusaurus-plugin-content-docs"))?e:u},f=function(e){try{return function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});var r=i(e),a=null==r?void 0:r[t];if(!a&&n.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin with id "'+t+'".');return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":" (pluginId="+e),{cause:t})}};function p(e){return void 0===e&&(e={}),function(e,t,n){void 0===n&&(n={});var a=Object.entries(e).sort((function(e,t){return t[1].path.localeCompare(e[1].path)})).find((function(e){var n=e[1];return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error("Can't find active docs plugin for \""+t+'" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: '+Object.values(e).map((function(e){return e.path})).join(", "));return o}(d(),(0,r.TH)().pathname,e)}function h(e){void 0===e&&(e={});var t=p(e),n=(0,r.TH)().pathname;if(t)return{activePlugin:t,activeVersion:s(t.pluginData,n)}}function g(e){return f(e).versions}function m(e){var t=f(e);return l(t)}function b(e){return c(f(e),(0,r.TH)().pathname)}function y(e){return function(e,t){var n=l(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(f(e),(0,r.TH)().pathname)}},74367:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate:function(e){var t=e.location,n=e.previousLocation;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||(window.ga("set","page",t.pathname+t.search+t.hash),window.ga("send","pageview"))}}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(74865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate:function(e){var t=e.location,n=e.previousLocation;if(n&&t.pathname!==n.pathname){var r=window.setTimeout((function(){a().start()}),200);return function(){return window.clearTimeout(r)}}},onRouteDidUpdate:function(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r,a,o=n(42573),i=n(36809);r=o.p1,a=i.Z.themeConfig.prism.additionalLanguages,globalThis.Prism=r,a.forEach((function(e){"php"===e&&n(96854),n(6726)("./prism-"+e)})),delete globalThis.Prism},92503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(63366),a=(n(67294),n(90512)),o=n(95999),i=n(86668),l=n(33692),s=n(28138);const c={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(85893),d=["as","id"];function f(e){var t=e.as,n=e.id,f=(0,r.Z)(e,d),p=(0,s.Z)(),h=(0,i.L)().navbar.hideOnScroll;if("h1"===t||!n)return(0,u.jsx)(t,Object.assign({},f,{id:void 0}));p.collectAnchor(n);var g=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof f.children?f.children:n});return(0,u.jsxs)(t,Object.assign({},f,{className:(0,a.Z)("anchor",h?c.anchorWithHideOnScrollNavbar:c.anchorWithStickyNavbar,f.className),id:n,children:[f.children,(0,u.jsx)(l.Z,{className:"hash-link",to:"#"+n,"aria-label":g,title:g,children:"\u200b"})]}))}},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(85893);function o(e){var t=e.width,n=void 0===t?13.5:t,o=e.height,i=void 0===o?13.5:o;return(0,a.jsx)("svg",{width:n,height:i,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},7372:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Jt});var r=n(67294),a=n(90512),o=n(44763),i=n(10833),l=n(16550),s=n(95999),c=n(85936),u=n(85893),d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){var e=(0,r.useRef)(null),t=(0,l.k6)().action,n=(0,r.useCallback)((function(e){e.preventDefault();var t,n=null!=(t=document.querySelector("main:first-of-type"))?t:document.getElementById(d);n&&f(n)}),[]);return(0,c.S)((function(n){var r=n.location;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}var h=(0,s.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){var t,n=null!=(t=e.children)?t:h,r=p(),a=r.containerRef,o=r.onClick;return(0,u.jsx)("div",{ref:a,role:"region","aria-label":h,children:(0,u.jsx)("a",Object.assign({},e,{href:"#"+d,onClick:o,children:n}))})}var m=n(35281),b=n(19727);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(g,{className:y.skipToContent})}var w=n(86668),k=n(59689),x=n(63366),S=["width","height","color","strokeWidth","className"];function _(e){var t=e.width,n=void 0===t?21:t,r=e.height,a=void 0===r?21:r,o=e.color,i=void 0===o?"currentColor":o,l=e.strokeWidth,s=void 0===l?1.2:l,c=(e.className,(0,x.Z)(e,S));return(0,u.jsx)("svg",Object.assign({viewBox:"0 0 15 15",width:n,height:a},c,{children:(0,u.jsx)("g",{stroke:i,strokeWidth:s,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})}))}const E={closeButton:"closeButton_CVFx"};function C(e){return(0,u.jsx)("button",Object.assign({type:"button","aria-label":(0,s.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",E.closeButton,e.className),children:(0,u.jsx)(_,{width:14,height:14,strokeWidth:3.1})}))}const T={content:"content_knG7"};function j(e){var t=(0,w.L)().announcementBar.content;return(0,u.jsx)("div",Object.assign({},e,{className:(0,a.Z)(T.content,e.className),dangerouslySetInnerHTML:{__html:t}}))}const A={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function L(){var e=(0,w.L)().announcementBar,t=(0,k.n)(),n=t.isActive,r=t.close;if(!n)return null;var a=e.backgroundColor,o=e.textColor,i=e.isCloseable;return(0,u.jsxs)("div",{className:A.announcementBar,style:{backgroundColor:a,color:o},role:"banner",children:[i&&(0,u.jsx)("div",{className:A.announcementBarPlaceholder}),(0,u.jsx)(j,{className:A.announcementBarContent}),i&&(0,u.jsx)(C,{onClick:r,className:A.announcementBarClose})]})}var R=n(93163),O=n(12466);var P=n(69688),N=n(13102),I=r.createContext(null);function D(e){var t,n,a,o,i,l,s,c=e.children,d=(t=(0,R.e)(),n=(0,N.HY)(),a=(0,r.useState)(!1),o=a[0],i=a[1],l=null!==n.component,s=(0,P.D9)(l),(0,r.useEffect)((function(){l&&!s&&i(!0)}),[l,s]),(0,r.useEffect)((function(){l?t.shown||i(!0):i(!1)}),[t.shown,l]),(0,r.useMemo)((function(){return[o,i]}),[o]));return(0,u.jsx)(I.Provider,{value:d,children:c})}function M(e){if(e.component){var t=e.component;return(0,u.jsx)(t,Object.assign({},e.props))}}function F(){var e=(0,r.useContext)(I);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");var t=e[0],n=e[1],a=(0,r.useCallback)((function(){return n(!1)}),[n]),o=(0,N.HY)();return(0,r.useMemo)((function(){return{shown:t,hide:a,content:M(o)}}),[a,o,t])}function B(e){var t=e.header,n=e.primaryMenu,r=e.secondaryMenu,o=F().shown;return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var z=n(92949),U=n(72389);function q(e){return(0,u.jsx)("svg",Object.assign({viewBox:"0 0 24 24",width:24,height:24},e,{children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})}))}function Z(e){return(0,u.jsx)("svg",Object.assign({viewBox:"0 0 24 24",width:24,height:24},e,{children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){var t=e.className,n=e.buttonClassName,r=e.value,o=e.onChange,i=(0,U.Z)(),l=(0,s.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,s.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.Z)($.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.Z)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,n),type:"button",onClick:function(){return o("dark"===r?"light":"dark")},disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,u.jsx)(q,{className:(0,a.Z)($.toggleIcon,$.lightToggleIcon)}),(0,u.jsx)(Z,{className:(0,a.Z)($.toggleIcon,$.darkToggleIcon)})]})})}const V=r.memo(H),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){var t=e.className,n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,a=(0,z.I)(),o=a.colorMode,i=a.setColorMode;return r?null:(0,u.jsx)(V,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var K=n(21327);function Q(){return(0,u.jsx)(K.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){var e=(0,R.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,s.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:function(){return e.toggle()},children:(0,u.jsx)(_,{color:"var(--ifm-color-emphasis-600)"})})}function X(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(Q,{}),(0,u.jsx)(W,{className:"margin-right--md"}),(0,u.jsx)(Y,{})]})}var J=n(33692),ee=n(44996),te=n(13919),ne=n(98022),re=n(39471),ae=["activeBasePath","activeBaseRegex","to","href","label","html","isDropdownLink","prependBaseUrlToHref"];function oe(e){var t=e.activeBasePath,n=e.activeBaseRegex,r=e.to,a=e.href,o=e.label,i=e.html,l=e.isDropdownLink,s=e.prependBaseUrlToHref,c=(0,x.Z)(e,ae),d=(0,ee.ZP)(r),f=(0,ee.ZP)(t),p=(0,ee.ZP)(a,{forcePrependBaseUrl:!0}),h=o&&a&&!(0,te.Z)(a),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,h&&(0,u.jsx)(re.Z,Object.assign({},l&&{width:12,height:12}))]})};return a?(0,u.jsx)(J.Z,Object.assign({href:s?p:a},c,g)):(0,u.jsx)(J.Z,Object.assign({to:d,isNavLink:!0},(t||n)&&{isActive:function(e,t){return n?(0,ne.F)(n,t.pathname):t.pathname.startsWith(f)}},c,g))}var ie=["className","isDropdownItem"],le=["className","isDropdownItem"],se=["mobile","position"];function ce(e){var t=e.className,n=e.isDropdownItem,r=void 0!==n&&n,o=(0,x.Z)(e,ie),i=(0,u.jsx)(oe,Object.assign({className:(0,a.Z)(r?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:r},o));return r?(0,u.jsx)("li",{children:i}):i}function ue(e){var t=e.className,n=(e.isDropdownItem,(0,x.Z)(e,le));return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(oe,Object.assign({className:(0,a.Z)("menu__link",t)},n))})}function de(e){var t,n=e.mobile,r=void 0!==n&&n,a=(e.position,(0,x.Z)(e,se)),o=r?ue:ce;return(0,u.jsx)(o,Object.assign({},a,{activeClassName:null!=(t=a.activeClassName)?t:r?"menu__link--active":"navbar__link--active"}))}var fe=n(86043),pe=n(48596),he=n(52263);const ge={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};var me=["items","position","className","onClick"],be=["items","className","position","onClick"],ye=["mobile"];function ve(e,t){return e.some((function(e){return function(e,t){return!!(0,pe.Mg)(e.to,t)||!!(0,ne.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)}))}function we(e){var t,n=e.items,o=e.position,i=e.className,l=(e.onClick,(0,x.Z)(e,me)),s=(0,r.useRef)(null),c=(0,r.useState)(!1),d=c[0],f=c[1];return(0,r.useEffect)((function(){var e=function(e){s.current&&!s.current.contains(e.target)&&f(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),function(){document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,u.jsxs)("div",{ref:s,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===o,"dropdown--show":d}),children:[(0,u.jsx)(oe,Object.assign({"aria-haspopup":"true","aria-expanded":d,role:"button",href:l.to?void 0:"#",className:(0,a.Z)("navbar__link",i)},l,{onClick:l.to?void 0:function(e){return e.preventDefault()},onKeyDown:function(e){"Enter"===e.key&&(e.preventDefault(),f(!d))},children:null!=(t=l.children)?t:l.label})),(0,u.jsx)("ul",{className:"dropdown__menu",children:n.map((function(e,t){return(0,r.createElement)(st,Object.assign({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))}))})]})}function ke(e){var t,n,o=e.items,i=e.className,s=(e.position,e.onClick),c=(0,x.Z)(e,be),d=(n=(0,he.Z)().siteConfig.baseUrl,(0,l.TH)().pathname.replace(n,"/")),f=ve(o,d),p=(0,fe.u)({initialState:function(){return!f}}),h=p.collapsed,g=p.toggleCollapsed,m=p.setCollapsed;return(0,r.useEffect)((function(){f&&m(!f)}),[d,f,m]),(0,u.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":h}),children:[(0,u.jsx)(oe,Object.assign({role:"button",className:(0,a.Z)(ge.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",i)},c,{onClick:function(e){e.preventDefault(),g()},children:null!=(t=c.children)?t:c.label})),(0,u.jsx)(fe.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:h,children:o.map((function(e,t){return(0,r.createElement)(st,Object.assign({mobile:!0,isDropdownItem:!0,onClick:s,activeClassName:"menu__link--active"},e,{key:t}))}))})]})}function xe(e){var t=e.mobile,n=void 0!==t&&t,r=(0,x.Z)(e,ye),a=n?ke:we;return(0,u.jsx)(a,Object.assign({},r))}var Se=n(94711),_e=["width","height"];function Ee(e){var t=e.width,n=void 0===t?20:t,r=e.height,a=void 0===r?20:r,o=(0,x.Z)(e,_e);return(0,u.jsx)("svg",Object.assign({viewBox:"0 0 24 24",width:n,height:a,"aria-hidden":!0},o,{children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})}))}const Ce="iconLanguage_nlXk";var Te=["mobile","dropdownItemsBefore","dropdownItemsAfter","queryString"];var je=n(73935);function Ae(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var Le=n(20830),Re=["translations"];function Oe(){return Oe=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var De="Ctrl";var Me=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=Ie(e,Re),i=a.buttonText,l=void 0===i?"Search":i,s=a.buttonAriaLabel,c=void 0===s?"Search":s,u=Pe((0,r.useState)(null),2),d=u[0],f=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?f("\u2318"):f(De))}),[]),r.createElement("button",Oe({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(Le.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},l)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement(Fe,{reactsToKey:d===De?De:"Meta"},d===De?r.createElement(Ae,null):d),r.createElement(Fe,{reactsToKey:"k"},"K"))))}));function Fe(e){var t=e.reactsToKey,n=e.children,a=Pe((0,r.useState)(!1),2),o=a[0],i=a[1];return(0,r.useEffect)((function(){if(t)return window.addEventListener("keydown",e),window.addEventListener("keyup",n),function(){window.removeEventListener("keydown",e),window.removeEventListener("keyup",n)};function e(e){e.key===t&&i(!0)}function n(e){e.key!==t&&"Meta"!==e.key||i(!1)}}),[t]),r.createElement("kbd",{className:o?"DocSearch-Button-Key DocSearch-Button-Key--pressed":"DocSearch-Button-Key"},n)}var Be=n(35742),ze=n(66177),Ue=n(239),qe=n(43320);const Ze={button:{buttonText:(0,s.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,s.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,s.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,s.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,s.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,s.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,s.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,s.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,s.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,s.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,s.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,s.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,s.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,s.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,s.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,s.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,s.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,s.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,s.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,s.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,s.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,s.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,s.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,s.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,s.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,s.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,s.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};var $e=["contextualSearch","externalUrlRegex"],He=null;function Ve(e){var t=e.hit,n=e.children;return(0,u.jsx)(J.Z,{to:t.url,children:n})}function Ge(e){var t=e.state,n=e.onClose,r=(0,ze.M)();return(0,u.jsx)(J.Z,{to:r(t.query),onClick:n,children:(0,u.jsx)(s.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function We(e){var t,a,o,i,s,c=e.contextualSearch,d=e.externalUrlRegex,f=(0,x.Z)(e,$e),p=(0,he.Z)().siteMetadata,h=(0,Ue.l)(),g=["language:"+(o=(0,qe._q)()).locale,o.tags.map((function(e){return"docusaurus_tag:"+e}))],m=null!=(t=null==(a=f.searchParameters)?void 0:a.facetFilters)?t:[],b=c?(i=m,[].concat((s=function(e){return"string"==typeof e?[e]:e})(g),s(i))):m,y=Object.assign({},f.searchParameters,{facetFilters:b}),v=(0,l.k6)(),w=(0,r.useRef)(null),k=(0,r.useRef)(null),S=(0,r.useState)(!1),_=S[0],E=S[1],C=(0,r.useState)(void 0),T=C[0],j=C[1],A=(0,r.useCallback)((function(){return He?Promise.resolve():Promise.all([n.e(1426).then(n.bind(n,61426)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,46945)),Promise.all([n.e(532),n.e(8894)]).then(n.bind(n,18894))]).then((function(e){var t=e[0].DocSearchModal;He=t}))}),[]),L=(0,r.useCallback)((function(){if(!w.current){var e=document.createElement("div");w.current=e,document.body.insertBefore(e,document.body.firstChild)}}),[]),R=(0,r.useCallback)((function(){L(),A().then((function(){return E(!0)}))}),[A,L]),O=(0,r.useCallback)((function(){var e;E(!1),null==(e=k.current)||e.focus()}),[]),P=(0,r.useCallback)((function(e){e.preventDefault(),j(e.key),R()}),[R]),N=(0,r.useRef)({navigate:function(e){var t=e.itemUrl;(0,ne.F)(d,t)?window.location.href=t:v.push(t)}}).current,I=(0,r.useRef)((function(e){return f.transformItems?f.transformItems(e):e.map((function(e){return Object.assign({},e,{url:h(e.url)})}))})).current,D=(0,r.useMemo)((function(){return function(e){return(0,u.jsx)(Ge,Object.assign({},e,{onClose:O}))}}),[O]),M=(0,r.useCallback)((function(e){return e.addAlgoliaAgent("docusaurus",p.docusaurusVersion),e}),[p.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:_,onOpen:R,onClose:O,onInput:P,searchButtonRef:k}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Be.Z,{children:(0,u.jsx)("link",{rel:"preconnect",href:"https://"+f.appId+"-dsn.algolia.net",crossOrigin:"anonymous"})}),(0,u.jsx)(Me,{onTouchStart:A,onFocus:A,onMouseOver:A,onClick:R,ref:k,translations:Ze.button}),_&&He&&w.current&&(0,je.createPortal)((0,u.jsx)(He,Object.assign({onClose:O,initialScrollY:window.scrollY,initialQuery:T,navigator:N,transformItems:I,hitComponent:Ve,transformSearchClient:M},f.searchPagePath&&{resultsFooterComponent:D},f,{searchParameters:y,placeholder:Ze.placeholder,translations:Ze.modal})),w.current)]})}function Ke(){var e=(0,he.Z)().siteConfig;return(0,u.jsx)(We,Object.assign({},e.themeConfig.algolia))}const Qe={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Ye(e){var t=e.children,n=e.className;return(0,u.jsx)("div",{className:(0,a.Z)(n,Qe.navbarSearchContainer),children:t})}var Xe=n(80143),Je=n(78425),et=["docId","label","docsPluginId"];var tt=["sidebarId","label","docsPluginId"];var nt=["label","to","docsPluginId"];var rt=n(60373),at=["mobile","docsPluginId","dropdownActiveClassDisabled","dropdownItemsBefore","dropdownItemsAfter"],ot=function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))};const it={default:de,localeDropdown:function(e){var t=e.mobile,n=e.dropdownItemsBefore,r=e.dropdownItemsAfter,a=e.queryString,o=void 0===a?"":a,i=(0,x.Z)(e,Te),c=(0,he.Z)().i18n,d=c.currentLocale,f=c.locales,p=c.localeConfigs,h=(0,Se.l)(),g=(0,l.TH)(),m=g.search,b=g.hash,y=f.map((function(e){var n=""+("pathname://"+h.createUrl({locale:e,fullyQualified:!1}))+m+b+o;return{label:p[e].label,lang:p[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===d?t?"menu__link--active":"dropdown__link--active":""}})),v=[].concat(n,y,r),w=t?(0,s.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):p[d].label;return(0,u.jsx)(xe,Object.assign({},i,{mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Ee,{className:Ce}),w]}),items:v}))},search:function(e){var t=e.mobile,n=e.className;return t?null:(0,u.jsx)(Ye,{className:n,children:(0,u.jsx)(Ke,{})})},dropdown:xe,html:function(e){var t=e.value,n=e.className,r=e.mobile,o=void 0!==r&&r,i=e.isDropdownItem,l=void 0!==i&&i,s=l?"li":"div";return(0,u.jsx)(s,{className:(0,a.Z)({navbar__item:!o&&!l,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){var t=e.docId,n=e.label,r=e.docsPluginId,a=(0,x.Z)(e,et),o=(0,Xe.Iw)(r).activeDoc,i=(0,Je.vY)(t,r),l=(null==o?void 0:o.path)===(null==i?void 0:i.path);return null===i||i.unlisted&&!l?null:(0,u.jsx)(de,Object.assign({exact:!0},a,{isActive:function(){return l||!(null==o||!o.sidebar)&&o.sidebar===i.sidebar},label:null!=n?n:i.id,to:i.path}))},docSidebar:function(e){var t=e.sidebarId,n=e.label,r=e.docsPluginId,a=(0,x.Z)(e,tt),o=(0,Xe.Iw)(r).activeDoc,i=(0,Je.oz)(t,r).link;if(!i)throw new Error('DocSidebarNavbarItem: Sidebar with ID "'+t+"\" doesn't have anything to be linked to.");return(0,u.jsx)(de,Object.assign({exact:!0},a,{isActive:function(){return(null==o?void 0:o.sidebar)===t},label:null!=n?n:i.label,to:i.path}))},docsVersion:function(e){var t=e.label,n=e.to,r=e.docsPluginId,a=(0,x.Z)(e,nt),o=(0,Je.lO)(r)[0],i=null!=t?t:o.label,l=null!=n?n:function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))}(o).path;return(0,u.jsx)(de,Object.assign({},a,{label:i,to:l}))},docsVersionDropdown:function(e){var t=e.mobile,n=e.docsPluginId,r=e.dropdownActiveClassDisabled,a=e.dropdownItemsBefore,o=e.dropdownItemsAfter,i=(0,x.Z)(e,at),c=(0,l.TH)(),d=c.search,f=c.hash,p=(0,Xe.Iw)(n),h=(0,Xe.gB)(n),g=(0,rt.J)(n).savePreferredVersionName,m=h.map((function(e){var t,n=null!=(t=p.alternateDocVersions[e.name])?t:ot(e);return{label:e.label,to:""+n.path+d+f,isActive:function(){return e===p.activeVersion},onClick:function(){return g(e.name)}}})),b=[].concat(a,m,o),y=(0,Je.lO)(n)[0],v=t&&b.length>1?(0,s.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):y.label,w=t&&b.length>1?void 0:ot(y).path;return b.length<=1?(0,u.jsx)(de,Object.assign({},i,{mobile:t,label:v,to:w,isActive:r?function(){return!1}:void 0})):(0,u.jsx)(xe,Object.assign({},i,{mobile:t,label:v,to:w,items:b,isActive:r?function(){return!1}:void 0}))}};var lt=["type"];function st(e){var t=e.type,n=(0,x.Z)(e,lt),r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=it[r];if(!a)throw new Error('No NavbarItem component found for type "'+t+'".');return(0,u.jsx)(a,Object.assign({},n))}function ct(){var e=(0,R.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map((function(t,n){return(0,r.createElement)(st,Object.assign({mobile:!0},t,{onClick:function(){return e.toggle()},key:n}))}))})}function ut(e){return(0,u.jsx)("button",Object.assign({},e,{type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(s.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})}))}function dt(){var e=0===(0,w.L)().navbar.items.length,t=F();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(ut,{onClick:function(){return t.hide()}}),t.content]})}function ft(){var e,t=(0,R.e)();return void 0===(e=t.shown)&&(e=!0),(0,r.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e]),t.shouldRender?(0,u.jsx)(B,{header:(0,u.jsx)(X,{}),primaryMenu:(0,u.jsx)(ct,{}),secondaryMenu:(0,u.jsx)(dt,{})}):null}const pt={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function ht(e){return(0,u.jsx)("div",Object.assign({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function gt(e){var t=e.children,n=(0,w.L)().navbar,o=n.hideOnScroll,i=n.style,l=(0,R.e)(),d=function(e){var t=(0,r.useState)(e),n=t[0],a=t[1],o=(0,r.useRef)(!1),i=(0,r.useRef)(0),l=(0,r.useCallback)((function(e){null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,O.RF)((function(t,n){var r=t.scrollY;if(e)if(r=l?a(!1):r+c0&&(0,u.jsx)(Bt,{links:n}),logo:r&&(0,u.jsx)(Zt,{logo:r}),copyright:t&&(0,u.jsx)($t,{copyright:t})})}const Gt=r.memo(Vt);var Wt=(0,P.Qc)([z.S,k.p,O.OC,rt.L5,i.VC,function(e){var t=e.children;return(0,u.jsx)(N.n2,{children:(0,u.jsx)(R.M,{children:(0,u.jsx)(D,{children:t})})})}]);function Kt(e){var t=e.children;return(0,u.jsx)(Wt,{children:t})}var Qt=n(92503);function Yt(e){var t=e.error,n=e.tryAgain;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Qt.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(s.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(vt,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(wt,{error:t})})]})})})}const Xt={mainWrapper:"mainWrapper_z2l0"};function Jt(e){var t=e.children,n=e.noFooter,r=e.wrapperClassName,l=e.title,s=e.description;return(0,b.t)(),(0,u.jsxs)(Kt,{children:[(0,u.jsx)(i.d,{title:l,description:s}),(0,u.jsx)(v,{}),(0,u.jsx)(L,{}),(0,u.jsx)(Lt,{}),(0,u.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,Xt.mainWrapper,r),children:(0,u.jsx)(o.Z,{fallback:function(e){return(0,u.jsx)(Yt,Object.assign({},e))},children:t})}),!n&&(0,u.jsx)(Gt,{})]})}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(63366),a=(n(67294),n(33692)),o=n(44996),i=n(52263),l=n(86668),s=n(19965),c=n(85893),u=["imageClassName","titleClassName"];function d(e){var t=e.logo,n=e.alt,r=e.imageClassName,a={light:(0,o.ZP)(t.src),dark:(0,o.ZP)(t.srcDark||t.src)},i=(0,c.jsx)(s.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,c.jsx)("div",{className:r,children:i}):i}function f(e){var t,n=(0,i.Z)().siteConfig.title,s=(0,l.L)().navbar,f=s.title,p=s.logo,h=e.imageClassName,g=e.titleClassName,m=(0,r.Z)(e,u),b=(0,o.ZP)((null==p?void 0:p.href)||"/"),y=f?"":n,v=null!=(t=null==p?void 0:p.alt)?t:y;return(0,c.jsxs)(a.Z,Object.assign({to:b},m,(null==p?void 0:p.target)&&{target:p.target},{children:[p&&(0,c.jsx)(d,{logo:p,alt:v,imageClassName:h}),null!=f&&(0,c.jsx)("b",{className:g,children:f})]}))}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);var r=n(35742),a=n(85893);function o(e){var t=e.locale,n=e.version,o=e.tag,i=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},19965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(63366),a=n(67294),o=n(90512),i=n(72389),l=n(92949);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var c=n(85893);function u(e){var t=e.className,n=e.children,r=(0,i.Z)(),u=(0,l.I)().colorMode;return(0,c.jsx)(c.Fragment,{children:(r?"dark"===u?["dark"]:["light"]:["light","dark"]).map((function(e){var r=n({theme:e,className:(0,o.Z)(t,s.themedComponent,s["themedComponent--"+e])});return(0,c.jsx)(a.Fragment,{children:r},e)}))})}var d=["sources","className","alt"];function f(e){var t=e.sources,n=e.className,a=e.alt,o=(0,r.Z)(e,d);return(0,c.jsx)(u,{className:n,children:function(e){var n=e.theme,r=e.className;return(0,c.jsx)("img",Object.assign({src:t[n],alt:a,className:r},o))}})}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>f,z:()=>w});var r=n(63366),a=n(67294),o=n(10412),i=n(20469),l=n(91442),s=n(85893),c=["collapsed"],u=["lazy"],d="ease-in-out";function f(e){var t=e.initialState,n=(0,a.useState)(null!=t&&t),r=n[0],o=n[1],i=(0,a.useCallback)((function(){o((function(e){return!e}))}),[]);return{collapsed:r,setCollapsed:o,toggleCollapsed:i}}var p={display:"none",overflow:"hidden",height:"0px"},h={display:"block",overflow:"visible",height:"auto"};function g(e,t){var n=t?p:h;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function m(e){var t=e.collapsibleRef,n=e.collapsed,r=e.animation,o=(0,a.useRef)(!1);(0,a.useEffect)((function(){var e,a=t.current;function i(){var e,t,n=a.scrollHeight,o=null!=(e=null==r?void 0:r.duration)?e:function(e){if((0,l.n)())return 1;var t=e/36;return Math.round(10*(4+15*Math.pow(t,.25)+t/5))}(n);return{transition:"height "+o+"ms "+(null!=(t=null==r?void 0:r.easing)?t:d),height:n+"px"}}function s(){var e=i();a.style.transition=e.transition,a.style.height=e.height}if(!o.current)return g(a,n),void(o.current=!0);return a.style.willChange="height",e=requestAnimationFrame((function(){n?(s(),requestAnimationFrame((function(){a.style.height=p.height,a.style.overflow=p.overflow}))):(a.style.display="block",requestAnimationFrame((function(){s()})))})),function(){return cancelAnimationFrame(e)}}),[t,n,r])}function b(e){if(!o.Z.canUseDOM)return e?p:h}function y(e){var t=e.as,n=void 0===t?"div":t,r=e.collapsed,o=e.children,i=e.animation,l=e.onCollapseTransitionEnd,c=e.className,u=e.disableSSRStyle,d=(0,a.useRef)(null);return m({collapsibleRef:d,collapsed:r,animation:i}),(0,s.jsx)(n,{ref:d,style:u?void 0:b(r),onTransitionEnd:function(e){"height"===e.propertyName&&(g(d.current,r),null==l||l(r))},className:c,children:o})}function v(e){var t=e.collapsed,n=(0,r.Z)(e,c),o=(0,a.useState)(!t),l=o[0],u=o[1],d=(0,a.useState)(t),f=d[0],p=d[1];return(0,i.Z)((function(){t||u(!0)}),[t]),(0,i.Z)((function(){l&&p(t)}),[l,t]),l?(0,s.jsx)(y,Object.assign({},n,{collapsed:f})):null}function w(e){var t=e.lazy,n=(0,r.Z)(e,u),a=t?v:y;return(0,s.jsx)(a,Object.assign({},n))}},59689:(e,t,n)=>{"use strict";n.d(t,{n:()=>g,p:()=>h});var r=n(67294),a=n(72389),o=n(20812),i=n(69688),l=n(86668),s=n(85893),c=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),d=function(){return"true"===c.get()},f=function(e){return c.set(String(e))},p=r.createContext(null);function h(e){var t=e.children,n=function(){var e=(0,l.L)().announcementBar,t=(0,a.Z)(),n=(0,r.useState)((function(){return!!t&&d()})),o=n[0],i=n[1];(0,r.useEffect)((function(){i(d())}),[]);var s=(0,r.useCallback)((function(){f(!0),i(!0)}),[]);return(0,r.useEffect)((function(){if(e){var t=e.id,n=u.get();"annoucement-bar"===n&&(n="announcement-bar");var r=t!==n;u.set(t),r&&f(!1),!r&&d()||i(!1)}}),[e]),(0,r.useMemo)((function(){return{isActive:!!e&&!o,close:s}}),[e,o,s])}();return(0,s.jsx)(p.Provider,{value:n,children:t})}function g(){var e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>m});var r=n(67294),a=n(10412),o=n(69688),i=n(20812),l=n(86668),s=n(85893),c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),f={light:"light",dark:"dark"},p=function(e){return e===f.dark?f.dark:f.light},h=function(e){return a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e)},g=function(e){d.set(p(e))};function m(e){var t=e.children,n=function(){var e=(0,l.L)().colorMode,t=e.defaultMode,n=e.disableSwitch,a=e.respectPrefersColorScheme,o=(0,r.useState)(h(t)),i=o[0],s=o[1];(0,r.useEffect)((function(){n&&d.del()}),[n]);var c=(0,r.useCallback)((function(e,n){void 0===n&&(n={});var r=n.persist,o=void 0===r||r;e?(s(e),o&&g(e)):(s(a?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:t),d.del())}),[a,t]);(0,r.useEffect)((function(){document.documentElement.setAttribute("data-theme",p(i))}),[i]),(0,r.useEffect)((function(){if(!n){var e=function(e){if(e.key===u){var t=d.get();null!==t&&c(p(t))}};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}}),[n,c]);var m=(0,r.useRef)(!1);return(0,r.useEffect)((function(){if(!n||a){var e=window.matchMedia("(prefers-color-scheme: dark)"),t=function(){window.matchMedia("print").matches||m.current?m.current=window.matchMedia("print").matches:c(null)};return e.addListener(t),function(){return e.removeListener(t)}}}),[c,n,a]),(0,r.useMemo)((function(){return{colorMode:i,setColorMode:c,get isDarkTheme(){return i===f.dark},setLightTheme:function(){c(f.light)},setDarkTheme:function(){c(f.dark)}}}),[i,c])}();return(0,s.jsx)(c.Provider,{value:n,children:t})}function b(){var e=(0,r.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b,Oh:()=>w});var r=n(67294),a=n(80143),o=n(29935),i=n(86668),l=n(78425),s=n(69688),c=n(20812),u=n(85893),d=function(e){return"docs-preferred-version-"+e},f={save:function(e,t,n){(0,c.WA)(d(e),{persistence:t}).set(n)},read:function(e,t){return(0,c.WA)(d(e),{persistence:t}).get()},clear:function(e,t){(0,c.WA)(d(e),{persistence:t}).del()}},p=function(e){return Object.fromEntries(e.map((function(e){return[e,{preferredVersionName:null}]})))};var h=r.createContext(null);function g(){var e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((function(){return Object.keys(e)}),[e]),o=(0,r.useState)((function(){return p(n)})),l=o[0],s=o[1];return(0,r.useEffect)((function(){s(function(e){var t=e.pluginIds,n=e.versionPersistence,r=e.allDocsData;return Object.fromEntries(t.map((function(e){return[e,(t=e,a=f.read(t,n),r[t].versions.some((function(e){return e.name===a}))?{preferredVersionName:a}:(f.clear(t,n),{preferredVersionName:null}))];var t,a})))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]),[l,(0,r.useMemo)((function(){return{savePreferredVersion:function(e,n){f.save(e,t,n),s((function(t){var r;return Object.assign({},t,((r={})[e]={preferredVersionName:n},r))}))}}}),[t])]}function m(e){var t=e.children,n=g();return(0,u.jsx)(h.Provider,{value:n,children:t})}function b(e){var t=e.children;return l.cE?(0,u.jsx)(m,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){var e=(0,r.useContext)(h);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){var t;void 0===e&&(e=o.m);var n=(0,a.zh)(e),i=y(),l=i[0],s=i[1],c=l[e].preferredVersionName;return{preferredVersion:null!=(t=n.versions.find((function(e){return e.name===c})))?t:null,savePreferredVersionName:(0,r.useCallback)((function(t){s.savePreferredVersion(e,t)}),[s,e])}}function w(){var e=(0,a._r)(),t=y()[0];var n=Object.keys(e);return Object.fromEntries(n.map((function(n){return[n,(r=n,o=e[r],i=t[r].preferredVersionName,null!=(a=o.versions.find((function(e){return e.name===i})))?a:null)];var r,a,o,i})))}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>s});var r=n(67294),a=n(69688),o=n(85893),i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){var t=e.children,n=e.name,a=e.items,i=(0,r.useMemo)((function(){return n&&a?{name:n,items:a}:null}),[n,a]);return(0,o.jsx)(l.Provider,{value:i,children:t})}function c(){var e=(0,r.useContext)(l);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},74477:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>l});var r=n(67294),a=n(69688),o=n(85893),i=r.createContext(null);function l(e){var t=e.children,n=e.version;return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){var e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},93163:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(67294),a=n(13102),o=n(87524),i=n(91980),l=n(86668),s=n(69688),c=n(85893),u=r.createContext(void 0);function d(){var e,t=(e=(0,a.HY)(),0===(0,l.L)().navbar.items.length&&!e.component),n=(0,o.i)(),s=!t&&"mobile"===n,c=(0,r.useState)(!1),u=c[0],d=c[1];(0,i.Rb)((function(){if(u)return d(!1),!1}));var f=(0,r.useCallback)((function(){d((function(e){return!e}))}),[]);return(0,r.useEffect)((function(){"desktop"===n&&d(!1)}),[n]),(0,r.useMemo)((function(){return{disabled:t,shouldRender:s,toggle:f,shown:u}}),[t,s,f,u])}function f(e){var t=e.children,n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function p(){var e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>c,n2:()=>l});var r=n(67294),a=n(69688),o=n(85893),i=r.createContext(null);function l(e){var t=e.children,n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function s(){var e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){var t=e.component,n=e.props,o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");var l=o[1],s=(0,a.Ql)(n);return(0,r.useEffect)((function(){l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((function(){return function(){return l({component:null,props:null})}}),[l]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(67294),a="navigation-with-keyboard";function o(){(0,r.useEffect)((function(){function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),function(){document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},66177:(e,t,n)=>{"use strict";n.d(t,{K:()=>l,M:()=>s});var r=n(67294),a=n(52263),o=n(91980),i="q";function l(){return(0,o.Nc)(i)}function s(){var e=(0,a.Z)().siteConfig,t=e.baseUrl,n=e.themeConfig.algolia.searchPagePath;return(0,r.useCallback)((function(e){return""+t+n+"?"+i+"="+encodeURIComponent(e)}),[t,n])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>l});var r=n(67294),a=n(10412),o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){var t=(void 0===e?{}:e).desktopBreakpoint,n=void 0===t?i:t,l=(0,r.useState)((function(){return"ssr"})),s=l[0],c=l[1];return(0,r.useEffect)((function(){function e(){c(function(e){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(n))}return e(),window.addEventListener("resize",e),function(){window.removeEventListener("resize",e)}}),[n]),s}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});var r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:function(e){return"theme-admonition-"+e}},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:function(e){return"theme-doc-sidebar-item-category-level-"+e},docSidebarItemLinkLevel:function(e){return"theme-doc-sidebar-item-link-level-"+e}},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},91442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},78425:(e,t,n)=>{"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}n.d(t,{MN:()=>A,LM:()=>m,_F:()=>w,cE:()=>h,jA:()=>b,xz:()=>g,SN:()=>j,lO:()=>E,vY:()=>T,oz:()=>C,s1:()=>_,f:()=>x});var o=n(67294),i=n(16550),l=n(18790),s=n(80143),c=n(60373),u=n(74477),d=n(1116);function f(e){return Array.from(new Set(e))}var p=n(48596),h=!!s._r;function g(e){var t=(0,u.E)();if(e){var n=t.docs[e];if(!n)throw new Error("no version doc found by id="+e);return n}}function m(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(var t,n=a(e.items);!(t=n()).done;){var r=m(t.value);if(r)return r}}(e):void 0:e.href}function b(){var e=(0,i.TH)().pathname,t=(0,d.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");var n=S({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(e+" is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.");return n}var y=function(e,t){return void 0!==e&&(0,p.Mg)(e,t)},v=function(e,t){return e.some((function(e){return w(e,t)}))};function w(e,t){return"link"===e.type?y(e.href,t):"category"===e.type&&(y(e.href,t)||v(e.items,t))}function k(e,t){switch(e.type){case"category":return w(e,t)||e.items.some((function(e){return k(e,t)}));case"link":return!e.unlisted||w(e,t);default:return!0}}function x(e,t){return(0,o.useMemo)((function(){return e.filter((function(e){return k(e,t)}))}),[e,t])}function S(e){var t=e.sidebarItems,n=e.pathname,r=e.onlyCategories,o=void 0!==r&&r,i=[];return function e(t){for(var r,l=a(t);!(r=l()).done;){var s=r.value;if("category"===s.type&&((0,p.Mg)(s.href,n)||e(s.items))||"link"===s.type&&(0,p.Mg)(s.href,n))return o&&"category"!==s.type||i.unshift(s),!0}return!1}(t),i}function _(){var e,t=(0,d.V)(),n=(0,i.TH)().pathname;return!1!==(null==(e=(0,s.gA)())?void 0:e.pluginData.breadcrumbs)&&t?S({sidebarItems:t.items,pathname:n}):null}function E(e){var t=(0,s.Iw)(e).activeVersion,n=(0,c.J)(e).preferredVersion,r=(0,s.yW)(e);return(0,o.useMemo)((function(){return f([t,n,r].filter(Boolean))}),[t,n,r])}function C(e,t){var n=E(t);return(0,o.useMemo)((function(){var t=n.flatMap((function(e){return e.sidebars?Object.entries(e.sidebars):[]})),r=t.find((function(t){return t[0]===e}));if(!r)throw new Error("Can't find any sidebar with id \""+e+'" in version'+(n.length>1?"s":"")+" "+n.map((function(e){return e.name})).join(", ")+'".\nAvailable sidebar ids are:\n- '+t.map((function(e){return e[0]})).join("\n- "));return r[1]}),[e,n])}function T(e,t){var n=E(t);return(0,o.useMemo)((function(){var t=n.flatMap((function(e){return e.docs})),r=t.find((function(t){return t.id===e}));if(!r){if(n.flatMap((function(e){return e.draftIds})).includes(e))return null;throw new Error("Couldn't find any doc with id \""+e+'" in version'+(n.length>1?"s":"")+' "'+n.map((function(e){return e.name})).join(", ")+'".\nAvailable doc ids are:\n- '+f(t.map((function(e){return e.id}))).join("\n- "))}return r}),[e,n])}function j(e){var t=e.route,n=(0,i.TH)(),r=(0,u.E)(),a=t.routes,o=a.find((function(e){return(0,i.LX)(n.pathname,e)}));if(!o)return null;var s=o.sidebar,c=s?r.docsSidebars[s]:void 0;return{docElement:(0,l.H)(a),sidebarName:s,sidebarItems:c}}function A(e){return e.filter((function(e){return!("category"===e.type||"link"===e.type)||!!m(e)}))}},82128:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(52263);function a(e){var t=(0,r.Z)().siteConfig,n=t.title,a=t.titleDelimiter;return null!=e&&e.trim().length?e.trim()+" "+a+" "+n:n}},91980:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>s,Rb:()=>i});var r=n(67294),a=n(16550),o=n(69688);function i(e){!function(e){var t=(0,a.k6)(),n=(0,o.zX)(e);(0,r.useEffect)((function(){return t.block((function(e,t){return n(e,t)}))}),[t,n])}((function(t,n){if("POP"===n)return e(t,n)}))}function l(e){var t=(0,a.k6)();return(0,r.useSyncExternalStore)(t.listen,(function(){return e(t)}),(function(){return e(t)}))}function s(e){var t,n=null!=(t=function(e){return l((function(t){return null===e?null:new URLSearchParams(t.location.search).get(e)}))}(e))?t:"",o=function(e){var t=(0,a.k6)();return(0,r.useCallback)((function(n,r){var a=new URLSearchParams(t.location.search);n?a.set(e,n):a.delete(e),(null!=r&&r.push?t.push:t.replace)({search:a.toString()})}),[e,t])}(e);return[n,o]}},10833:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>d,VC:()=>h});var r=n(67294),a=n(90512),o=n(35742),i=n(30226);function l(){var e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(44996),c=n(82128),u=n(85893);function d(e){var t=e.title,n=e.description,r=e.keywords,a=e.image,i=e.children,l=(0,c.p)(t),d=(0,s.Cg)().withBaseUrl,f=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.Z,{children:[t&&(0,u.jsx)("title",{children:l}),t&&(0,u.jsx)("meta",{property:"og:title",content:l}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,u.jsx)("meta",{property:"og:image",content:f}),f&&(0,u.jsx)("meta",{name:"twitter:image",content:f}),i]})}var f=r.createContext(void 0);function p(e){var t=e.className,n=e.children,i=r.useContext(f),l=(0,a.Z)(i,t);return(0,u.jsxs)(f.Provider,{value:l,children:[(0,u.jsx)(o.Z,{children:(0,u.jsx)("html",{className:l})}),n]})}function h(e){var t=e.children,n=l(),r="plugin-"+n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,""),o="plugin-id-"+n.plugin.id;return(0,u.jsx)(p,{className:(0,a.Z)(r,o),children:t})}},69688:(e,t,n)=>{"use strict";n.d(t,{i6:()=>h,Qc:()=>m,zX:()=>f,D9:()=>p,Ql:()=>g});var r=n(26528),a=n(94578);function o(e){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},o(e)}var i=n(89611);function l(e,t,n){return l=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&(0,i.Z)(a,n.prototype),a},l.apply(null,arguments)}function s(e){var t="function"==typeof Map?new Map:void 0;return s=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return l(e,arguments,o(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),(0,i.Z)(n,e)},s(e)}var c=n(67294),u=n(20469),d=n(85893);function f(e){var t=(0,c.useRef)(e);return(0,u.Z)((function(){t.current=e}),[e]),(0,c.useCallback)((function(){return t.current.apply(t,arguments)}),[])}function p(e){var t=(0,c.useRef)();return(0,u.Z)((function(){t.current=e})),t.current}var h=function(e){function t(t,n){var a,o,i;return(i=e.call(this)||this).name="ReactContextError",i.message="Hook "+(null!=(a=null==(o=i.stack)||null==(o=o.split("\n")[1])||null==(o=o.match((0,r.Z)(/at (?:\w+\.)?(\w+)/,{name:1})))?void 0:o.groups.name)?a:"")+" is called outside the <"+t+">. "+(null!=n?n:""),i}return(0,a.Z)(t,e),t}(s(Error));function g(e){var t=Object.entries(e);return t.sort((function(e,t){return e[0].localeCompare(t[0])})),(0,c.useMemo)((function(){return e}),t.flat())}function m(e){return function(t){var n=t.children;return(0,d.jsx)(d.Fragment,{children:e.reduceRight((function(e,t){return(0,d.jsx)(t,{children:e})}),n)})}}},98022:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(67294),a=n(723),o=n(52263);function i(e,t){var n=function(e){var t;return null==(t=!e||e.endsWith("/")?e:e+"/")?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){var e=(0,o.Z)().siteConfig.baseUrl;return(0,r.useMemo)((function(){return function(e){var t=e.baseUrl;function n(e){return e.path===t&&!0===e.exact}function r(e){return e.path===t&&!e.exact}return function e(t){if(0!==t.length)return t.find(n)||e(t.filter(r).flatMap((function(e){var t;return null!=(t=e.routes)?t:[]})))}(e.routes)}({routes:a.Z,baseUrl:e})}),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>c,RF:()=>f});var r=n(67294),a=n(10412),o=n(72389),i=(n(20469),n(69688)),l=n(85893);var s=r.createContext(void 0);function c(e){var t,n=e.children,a=(t=(0,r.useRef)(!0),(0,r.useMemo)((function(){return{scrollEventsEnabledRef:t,enableScrollEvents:function(){t.current=!0},disableScrollEvents:function(){t.current=!1}}}),[]));return(0,l.jsx)(s.Provider,{value:a,children:n})}function u(){var e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}var d=function(){return a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null};function f(e,t){void 0===t&&(t=[]);var n=u().scrollEventsEnabledRef,a=(0,r.useRef)(d()),o=(0,i.zX)(e);(0,r.useEffect)((function(){var e=function(){if(n.current){var e=d();o(e,a.current),a.current=e}},t={passive:!0};return e(),window.addEventListener("scroll",e,t),function(){return window.removeEventListener("scroll",e,t)}}),[o,n].concat(t))}function p(){var e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:function(n){e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),function(){}}(n):function(e){var t=null,n=document.documentElement.scrollTop>e;return function r(){var a=document.documentElement.scrollTop;(n&&a>e||!n&&a{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(80143),a=n(52263),o=n(60373),i="default";function l(e,t){return"docs-"+e+"-"+t}function s(){var e=(0,a.Z)().i18n,t=(0,r._r)(),n=(0,r.WS)(),s=(0,o.Oh)();var c=[i].concat(Object.keys(t).map((function(e){var r,a=(null==n?void 0:n.activePlugin.pluginId)===e?n.activeVersion:void 0,o=s[e],i=t[e].versions.find((function(e){return e.isLast}));return l(e,(null!=(r=null!=a?a:o)?r:i).name)})));return{locale:e.currentLocale,tags:c}}},20812:(e,t,n)=>{"use strict";n.d(t,{WA:()=>c});n(67294);const r=JSON.parse('{"d":"localStorage","u":""}');var a=r.d;function o(e){var t=e.key,n=e.oldValue,r=e.newValue,a=e.storage;if(n!==r){var o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}}function i(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}var l=!1;var s={get:function(){return null},set:function(){},del:function(){},listen:function(){return function(){}}};function c(e,t){var n=""+e+r.u;if("undefined"==typeof window)return function(e){function t(){throw new Error('Illegal storage API usage for storage key "'+e+'".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.')}return{get:t,set:t,del:t,listen:t}}(n);var a=i(null==t?void 0:t.persistence);return null===a?s:{get:function(){try{return a.getItem(n)}catch(e){return console.error("Docusaurus storage error, can't get key="+n,e),null}},set:function(e){try{var t=a.getItem(n);a.setItem(n,e),o({key:n,oldValue:t,newValue:e,storage:a})}catch(r){console.error("Docusaurus storage error, can't set "+n+"="+e,r)}},del:function(){try{var e=a.getItem(n);a.removeItem(n),o({key:n,oldValue:e,newValue:null,storage:a})}catch(t){console.error("Docusaurus storage error, can't delete key="+n,t)}},listen:function(e){try{var t=function(t){t.storageArea===a&&t.key===n&&e(t)};return window.addEventListener("storage",t),function(){return window.removeEventListener("storage",t)}}catch(r){return console.error("Docusaurus storage error, can't listen for changes of key="+n,r),function(){}}}}}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(52263),a=n(16550),o=n(18780);function i(){var e=(0,r.Z)(),t=e.siteConfig,n=t.baseUrl,i=t.url,l=t.trailingSlash,s=e.i18n,c=s.defaultLocale,u=s.currentLocale,d=(0,a.TH)().pathname,f=(0,o.applyTrailingSlash)(d,{trailingSlash:l,baseUrl:n}),p=u===c?n:n.replace("/"+u+"/","/"),h=f.replace(n,"");return{createUrl:function(e){var t=e.locale;return""+(e.fullyQualified?i:"")+function(e){return e===c?""+p:""+p+e+"/"}(t)+h}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),a=n(16550),o=n(69688);function i(e){var t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((function(){n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},6278:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},239:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(67294),a=n(98022),o=n(44996),i=n(6278);function l(){var e=(0,o.Cg)().withBaseUrl,t=(0,i.L)().algolia,n=t.externalUrlRegex,l=t.replaceSearchResultPathname;return(0,r.useCallback)((function(t){var r=new URL(t);if((0,a.F)(n,r.href))return t;var o=""+(r.pathname+r.hash);return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(o,l))}),[e,n,l])}},8802:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;var r=n(55913);function a(e){return e.endsWith("/")?e:e+"/"}function o(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=a,t.default=function(e,t){var n=t.trailingSlash,r=t.baseUrl;if(e.startsWith("#"))return e;if(void 0===n)return e;var i,l=e.split(/[#?]/)[0],s="/"===l||l===r?l:(i=l,n?a(i):o(i));return e.replace(l,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o},54143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t].concat(e(t.cause)):[t]}},18780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return a.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return a.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return a.removeTrailingSlash}});var o=n(55913);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return o.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return o.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return o.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return o.removePrefix}});var i=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},55913:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:""+t+e},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:""+e+t},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},99318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>j,Ep:()=>f});var r=n(87462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};var l=n(38776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function h(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(59864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={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},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var a=p(n);a&&a!==h&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),m=0;m{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},32497:(e,t,n)=>{"use strict";n.r(t)},52295:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},14779:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var h=e[i],g=n[2],m=n[3],b=n[4],y=n[5],v=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=g&&null!=h&&h!==g,x="+"===v||"*"===v,S="?"===v||"*"===v,_=n[2]||u,E=b||y;r.push({name:m||o++,prefix:g||"",delimiter:_,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:E?c(E):w?".*":"[^"+s(_)+"]+?"})}}return i{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(29901),a=n(39642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),o.add(e)}))}i.silent=!1,e.exports=i},96854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),h=f.indexOf(p);if(h>-1){++a;var g=f.substring(0,h),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(h+p.length),y=[];g&&y.push.apply(y,i([g])),y.push(m),b&&y.push.apply(y,i([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(Prism)},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},16500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=16500},39642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(c),l=(l||[]).map(c);var u=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var f,p=r(s),h=u;a(h);){for(var g in f={},h){var m=s[g];t(m&&m.modify,(function(e){e in d&&(f[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in p(b))if(y in u){f[b]=!0;break}for(var v in h=f)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var a,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)a=r(e);else{var f=i(u.map((function(e){var t=c(e);return delete s[e],t})));o?a=o(f,(function(){return r(e)})):r(e)}return l[e]=a}for(var u in n)c(u);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,u,t,n)}};return w}}();e.exports=t},92703:(e,t,n)=>{"use strict";var r=n(50414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=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 l.name="Invariant Violation",l}}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:o,resetWarningCache:a};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"},64448:(e,t,n)=>{"use strict";var r=n(67294),a=n(63840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n