diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index b8f094c..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: shalithasuranga -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 22c251b..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Publish website - -on: - push: - branches: [ main ] - -jobs: - deploy: - name: Deploy to GitHub Pages - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v5 - - - uses: actions/setup-node@v5 - with: - node-version: 21.x - cache: yarn - - - name: Build website - run: | - export NODE_OPTIONS=--openssl-legacy-provider - yarn install --frozen-lockfile - yarn build - - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.COMMIT_TOKEN }} - publish_dir: ./build - user_name: github-actions[bot] - user_email: 41898282+github-actions[bot]@users.noreply.github.com diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b2d6de3..0000000 --- a/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# Dependencies -/node_modules - -# Production -/build - -# Generated files -.docusaurus -.cache-loader - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/static/.nojekyll b/.nojekyll similarity index 100% rename from static/.nojekyll rename to .nojekyll diff --git a/404.html b/404.html new file mode 100644 index 0000000..501e861 --- /dev/null +++ b/404.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + +Page Not Found | CodeZri + + + + + +
+
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.

+ + + + + \ No newline at end of file diff --git a/static/CNAME b/CNAME similarity index 100% rename from static/CNAME rename to CNAME diff --git a/README.md b/README.md deleted file mode 100644 index 231a499..0000000 --- a/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Website - -This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. - -## Installation - -```console -yarn install -``` - -## Local Development - -```console -yarn start -``` - -This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. - -## Build - -```console -yarn build -``` - -This command generates static content into the `build` directory and can be served using any static contents hosting service. - -## Deployment - -```console -GIT_USER= USE_SSH=true yarn deploy -``` - -If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/static/ads.txt b/ads.txt similarity index 100% rename from static/ads.txt rename to ads.txt diff --git a/assets/css/styles.c3b3d4ae.css b/assets/css/styles.c3b3d4ae.css new file mode 100644 index 0000000..4f49671 --- /dev/null +++ b/assets/css/styles.c3b3d4ae.css @@ -0,0 +1 @@ +.row .col,img{max-width:100%}.markdown li,body{word-wrap:break-word}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.button,.close{-webkit-appearance:none;cursor:pointer}.button,.react-toggle{-webkit-user-select:none}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.button,.close,.menu__link,.navbar__link{cursor:pointer}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.tabs__item,hr,img{box-sizing:initial}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.react-toggle,html{-webkit-tap-highlight-color:transparent}.footer__items,.menu__list,.pills__item,.sidebarItem_2UVv{list-style-type:none}:root{--ra-admonition-background-color:var(--ifm-alert-background-color);--ra-admonition-border-width:var(--ifm-alert-border-width);--ra-admonition-border-color:var(--ifm-alert-border-color);--ra-admonition-border-radius:var(--ifm-alert-border-radius);--ra-admonition-color:var(--ifm-alert-color);--ra-admonition-padding-vertical:var(--ifm-alert-padding-vertical);--ra-admonition-padding-horizontal:var(--ifm-alert-padding-horizontal);--ra-color-note:var(--ifm-color-secondary);--ra-color-important:var(--ifm-color-info);--ra-color-tip:var(--ifm-color-success);--ra-color-caution:var(--ifm-color-warning);--ra-color-warning:var(--ifm-color-danger);--ra-color-text-dark:var(--ifm-color-gray-900)}.admonition{margin-bottom:1em;--ra-admonition-icon-color:var(--ra-admonition-color)}.admonition:not(.alert){background-color:var(--ra-admonition-background-color);border:var(--ra-admonition-border-width) solid var(--ra-admonition-border-color);border-radius:var(--ra-admonition-border-radius);box-sizing:border-box;color:var(--ra-admonition-color);padding:var(--ra-admonition-padding-vertical) var(--ra-admonition-padding-horizontal);--ra-admonition-background-color:var(--ifm-color-primary)}.container,.row .col{padding:0 var(--ifm-spacing-horizontal);width:100%}.admonition h5{margin-top:0;margin-bottom:8px;text-transform:uppercase}.admonition-icon{display:inline-block;vertical-align:middle;margin-right:.2em}.admonition-icon svg{display:inline-block;width:22px;height:22px;stroke-width:0;fill:var(--ra-admonition-icon-color);stroke:var(--ra-admonition-icon-color)}.admonition-content>:last-child,blockquote>:last-child{margin-bottom:0}.admonition-note{--ra-admonition-color:var(--ra-color-text-dark)}:root{--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-color-primary:#3578e5;--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-secondary:#ebedf0;--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-success:#00a400;--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-info:#54c7ec;--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-warning:#ffba00;--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-danger:#fa383e;--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-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:#606770;--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,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,0.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,0.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,0.2),0 2px 4px 0 rgba(0,0,0,0.1);--ifm-z-index-dropdown:2;--ifm-z-index-fixed:3;--ifm-z-index-overlay:4;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:var(--ifm-color-emphasis-200);--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-color:var(--ifm-color-emphasis-900);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.4rem;--ifm-code-padding-vertical:0.2rem;--ifm-pre-background:var(--ifm-color-emphasis-100);--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:inherit;--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:var(--ifm-color-emphasis-100);--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-color:#6a737d;--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-padding-horizontal:1rem;--ifm-blockquote-padding-vertical:1rem;--ifm-hr-border-color:var(--ifm-color-emphasis-500);--ifm-hr-border-width:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:var(--ifm-global-border-width);--ifm-alert-color:var(--ifm-font-color-base-inverse);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size-sm:2rem;--ifm-avatar-photo-size-md:3rem;--ifm-avatar-photo-size-lg:4rem;--ifm-avatar-photo-size-xl:6rem;--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.0625rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:1rem;--ifm-breadcrumb-padding-vertical:0.5rem;--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-margin: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-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:1rem;--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:1rem;--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:80vw;--ifm-pagination-border-radius:calc(var(--ifm-global-radius)*var(--ifm-pagination-size-multiplier));--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.0625rem;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-size-multiplier:1;--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.0625rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--ifm-tabs-spacing:0.0625rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:#888;--ifm-scrollbar-thumb-hover-background-color:#555;--ifm-color-primary:#f89901;--ifm-color-primary-dark:#e4a700;--ifm-color-primary-darker:#bdb000;--ifm-color-primary-darkest:#b89c00;--ifm-color-primary-light:#e4a700;--ifm-color-primary-lighter:#bdb000;--ifm-color-primary-lightest:#b89c00;--ifm-code-font-size:95%;--docusaurus-announcement-bar-height:auto;--collapse-button-bg-color-dark:#2e333a;--doc-sidebar-width:300px}.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}.navbar--dark,.navbar--primary{--ifm-navbar-search-input-background-color:hsla(0,0%,100%,0.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,0.5)}*{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0;transition:var(--ifm-transition-fast) ease color}.container{margin:0 auto;max-width:var(--ifm-container-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}.container--fluid{max-width:inherit}.row{display:flex;flex-direction:row;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.markdown>:first-child,.tabItem_1uMI{margin-top:0!important}.row .col{--ifm-col-width:100%;flex:1 0;margin-left:0}.row .col.col--1,.row .col.col--2,.row .col.col--3,.row .col[class*=col--]{flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--1{--ifm-col-width:8.33333%}.row .col.col--offset-1{margin-left:8.33333%}.row .col.col--2{--ifm-col-width:16.66667%}.row .col.col--offset-2{margin-left:16.66667%}.row .col.col--3{--ifm-col-width:25%}.row .col.col--offset-3{margin-left:25%}.row .col.col--4{--ifm-col-width:33.33333%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-4{margin-left:33.33333%}.row .col.col--5{--ifm-col-width:41.66667%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--6,.row .col.col--7{flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-5{margin-left:41.66667%}.row .col.col--6{--ifm-col-width:50%}.row .col.col--offset-6{margin-left:50%}.row .col.col--7{--ifm-col-width:58.33333%}.row .col.col--offset-7{margin-left:58.33333%}.row .col.col--8{--ifm-col-width:66.66667%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-8{margin-left:66.66667%}.row .col.col--9{--ifm-col-width:75%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--10,.row .col.col--11{flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-9{margin-left:75%}.row .col.col--10{--ifm-col-width:83.33333%}.row .col.col--offset-10{margin-left:83.33333%}.row .col.col--11{--ifm-col-width:91.66667%}.row .col.col--offset-11{margin-left:91.66667%}.row .col.col--12{--ifm-col-width:100%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-12{margin-left:100%}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-left--none{margin-left:0!important}.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}.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.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-radius:var(--ifm-code-border-radius);color:var(--ifm-code-color);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,pre code{word-wrap:normal}pre code{background-color:initial;display:inline;font-size:100%;line-height:inherit;padding:0;white-space:pre;word-break:normal}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-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}.badge,strong{font-weight:var(--ifm-font-weight-bold)}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{border-style:none}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,hr:after,hr:before{content:"";display:table}.markdown:after,hr:after{clear:both}.markdown>h1{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading));margin-top:calc(var(--ifm-h1-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-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))}.codeBlockContainer_K1bP,.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}.avatar__name,ol ol,ol ul,ul ol,ul ul{margin:0}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);width:100%}.avatar__photo,.card,hr{overflow:hidden}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}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)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration);transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.alert,.alert a{color:var(--ifm-alert-color)}.breadcrumbs__link:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:6px solid var(--ifm-color-emphasis-300);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}hr{border:var(--ifm-hr-border-width) solid var(--ifm-hr-border-color);margin:var(--ifm-hr-margin-vertical) 0}.alert{background-color:var(--ifm-alert-background-color);border-radius:var(--ifm-alert-border-radius);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary);--ifm-alert-border-color:var(--ifm-color-primary)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary);--ifm-alert-border-color:var(--ifm-color-secondary);--ifm-alert-color:var(--ifm-color-gray-900)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success);--ifm-alert-border-color:var(--ifm-color-success)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info);--ifm-alert-border-color:var(--ifm-color-info)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning);--ifm-alert-border-color:var(--ifm-color-warning)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger);--ifm-alert-border-color:var(--ifm-color-danger)}.alert a{text-decoration:underline}.alert .close{margin-right:calc(var(--ifm-alert-padding-horizontal)*-1);margin-top:calc(var(--ifm-alert-padding-vertical)*-1)}.avatar,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.avatar__photo-link{display:block}.avatar__photo{border-radius:50%;height:var(--ifm-avatar-photo-size-md);width:var(--ifm-avatar-photo-size-md)}.avatar__photo--sm{height:var(--ifm-avatar-photo-size-sm);width:var(--ifm-avatar-photo-size-sm)}.avatar__photo--lg{height:var(--ifm-avatar-photo-size-lg);width:var(--ifm-avatar-photo-size-lg)}.avatar__photo--xl{height:var(--ifm-avatar-photo-size-xl);width:var(--ifm-avatar-photo-size-xl)}.avatar__photo+.avatar__intro{margin-left:var(--ifm-avatar-intro-margin)}.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,.menu__link--sublist:after{display:inline-block}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.avatar--vertical .avatar__intro{margin-left:0}.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%;line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal);vertical-align:initial}.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)}.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(:first-child){margin-left:var(--ifm-breadcrumb-spacing)}.breadcrumbs__item:not(:last-child){margin-right:var(--ifm-breadcrumb-spacing)}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) 50%;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 .5rem;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{color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__item--active .breadcrumbs__link,.breadcrumbs__item:not(.breadcrumbs__item--active):hover .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);color:var(--ifm-font-color-base);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-property:background,color;transition-duration:var(--ifm-transition-fast)}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{appearance:none;background-color:var(--ifm-button-background-color);border-radius:var(--ifm-button-border-radius);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);font-size:calc(0.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;user-select:none;vertical-align:middle;white-space:nowrap;transition-property:color,background,border-color;transition-duration:var(--ifm-button-transition-duration)}.button,.button:hover{color:var(--ifm-button-color);text-decoration:none}.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)}.button.button--secondary.button--outline:not(.button--active):not(:hover),.sidebarItemLink_1RT6{color:var(--ifm-font-color-base)}.button--primary{--ifm-button-border-color:var(--ifm-color-primary)}.button--primary:not(.button--outline){--ifm-button-background-color:var(--ifm-color-primary)}.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-border-color:var(--ifm-color-primary-darker);--ifm-button-background-color:var(--ifm-color-primary-darker);background-color:var(--ifm-color-primary-darker);border-color:var(--ifm-color-primary-darker)}.button--secondary{--ifm-button-border-color:var(--ifm-color-secondary)}.button--secondary:not(.button--outline){--ifm-button-background-color:var(--ifm-color-secondary)}.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-border-color:var(--ifm-color-secondary-darker);--ifm-button-background-color:var(--ifm-color-secondary-darker);background-color:var(--ifm-color-secondary-darker);border-color:var(--ifm-color-secondary-darker)}.button--success{--ifm-button-border-color:var(--ifm-color-success)}.button--success:not(.button--outline){--ifm-button-background-color:var(--ifm-color-success)}.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-border-color:var(--ifm-color-success-darker);--ifm-button-background-color:var(--ifm-color-success-darker);background-color:var(--ifm-color-success-darker);border-color:var(--ifm-color-success-darker)}.button--info{--ifm-button-border-color:var(--ifm-color-info)}.button--info:not(.button--outline){--ifm-button-background-color:var(--ifm-color-info)}.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-border-color:var(--ifm-color-info-darker);--ifm-button-background-color:var(--ifm-color-info-darker);background-color:var(--ifm-color-info-darker);border-color:var(--ifm-color-info-darker)}.button--warning{--ifm-button-border-color:var(--ifm-color-warning)}.button--warning:not(.button--outline){--ifm-button-background-color:var(--ifm-color-warning)}.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-border-color:var(--ifm-color-warning-darker);--ifm-button-background-color:var(--ifm-color-warning-darker);background-color:var(--ifm-color-warning-darker);border-color:var(--ifm-color-warning-darker)}.button--danger{--ifm-button-border-color:var(--ifm-color-danger)}.button--danger:not(.button--outline){--ifm-button-background-color:var(--ifm-color-danger)}.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-border-color:var(--ifm-color-danger-darker);--ifm-button-background-color:var(--ifm-color-danger-darker);background-color:var(--ifm-color-danger-darker);border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:var(--ifm-button-group-margin)}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group>.button--active{z-index:1}.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}.card--full-height,body,html{height:100%}.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-type: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)}.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{appearance:none;background:none;border:none;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)}.dropdown__menu,.menu__link,.menu__link:hover{transition-duration:var(--ifm-transition-fast)}.close:hover{opacity:.7}.close:focus{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;transform:scale(1);visibility:visible}.dropdown--right .dropdown__menu{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);list-style:none;min-width:10rem;opacity:0;padding:.5rem;position:absolute;top:100%;transform:scale(.8);visibility:hidden;z-index:var(--ifm-z-index-dropdown);transition-property:opacity,transform,visibility;transition-timing-function:cubic-bezier(.24,.22,.015,1.56)}.dropdown__link{border-radius:.375rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;padding:.375rem .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;vertical-align:middle}.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:10rem}.footer__item,.pills__item+.pills__item{margin-top:0}.footer__title{color:var(--ifm-footer-title-color)}.footer__items{margin-bottom:0;padding-left:0}[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)}.blogPostTitle_GeHD,.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu{font-weight:var(--ifm-font-weight-semibold);overflow-x:hidden}.menu__list{margin:0;padding-left:0}.menu__list .menu__list{margin-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item{margin:.25rem 0}.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__link{border-radius:.25rem;display:flex;justify-content:space-between;line-height:20px;padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__link,.menu__link:hover{color:var(--ifm-menu-color);transition-property:color,background;transition-timing-function:var(--ifm-transition-timing-default)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;visibility:hidden;transition-timing-function:ease-in-out;top:0;left:0}.menu__link:hover{text-decoration:none;background:var(--ifm-menu-color-background-hover)}.menu__link--sublist:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;content:" ";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);width:1.25rem;transition:transform var(--ifm-transition-fast) linear}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.menu__link--active:not(.menu__link--sublist){background:var(--ifm-menu-color-background-active)}.menu--responsive .menu__button{bottom:2rem;display:none;position:fixed;right:1rem;z-index:var(--ifm-z-index-fixed)}.menu--show{background:var(--ifm-background-surface-color);bottom:0;left:0;overscroll-behavior:contain;padding:1rem;position:fixed;right:0;-ms-scroll-chaining:none;top:0;z-index:var(--ifm-z-index-overlay)}.menu--show .menu__list{display:inherit;opacity:1;transition:opacity var(--ifm-transition-fast) linear}.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);width:100%}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{align-items:stretch;display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;color:var(--ifm-navbar-link-color);display:flex;font-weight:700;height:2rem;margin-right:1rem}.navbar__brand:hover{color:inherit;text-decoration:none}.navbar__title{flex-shrink:0;max-width:100%}.navbar__toggle{background:none;border:none;color:inherit;cursor:pointer;display:none;margin-right:.5rem;padding:0}.navbar__item,.navbar__link{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__logo{height:100%;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1 1 auto}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--right{justify-content:flex-end}.navbar__item{display:inline-block}.navbar__item.dropdown{padding:0}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link{color:var(--ifm-navbar-link-color);font-weight:var(--ifm-font-weight-semibold);text-decoration:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark{--ifm-navbar-background-color:#303846;--ifm-navbar-link-color:var(--ifm-color-white);--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-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search{padding-left:var(--ifm-navbar-padding-horizontal)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.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);overflow:auto;position:fixed;transform:translate3d(-100%,0,0);width:var(--ifm-navbar-sidebar-width);transition-property:opacity,visibility,transform;transition-duration:.25s}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar--show .navbar-sidebar{transform:translateZ(0)}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);position:fixed;right:0;transition-property:opacity,visibility;transition-duration:.1s}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.pagination__item,.pagination__link{display:inline-block}.navbar-sidebar__items{padding:.5rem}.pagination{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:not(:first-child){margin-left:var(--ifm-pagination-page-spacing)}.pagination__item:not(:last-child){margin-right:var(--ifm-pagination-page-spacing)}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.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);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}.main-docs-wrapper,.pagination-nav{display:flex}.pagination-nav__item{display:flex;flex:1 50%;max-width:50%}.pagination-nav__item--next{text-align:right}.pagination-nav__item+.pagination-nav__item{margin-left:var(--ifm-spacing-horizontal)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);flex-grow:1;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__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.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,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{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)}.pills__item--active{background:var(--ifm-pills-color-background-active);color:var(--ifm-pills-color-active)}.pills__item:not(.pills__item--active):hover{background-color:var(--ifm-pills-color-background-active)}.pills__item:not(:first-child){margin-left:var(--ifm-pills-spacing)}.pills__item:not(:last-child){margin-right:var(--ifm-pills-spacing)}.pills--block{display:flex;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;padding-left:0}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;margin:0;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-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}.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}.sidebarItemLinkActive_12pM,.sidebarItemLink_1RT6:hover,.text--primary{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}.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}.sidebarItemLink_1RT6:hover,.text--no-decoration,.text--no-decoration:hover{text-decoration:none}.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)}html[data-theme=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:#18191a;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,0.05);--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%);--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%)}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}#nprogress .bar{background:#29d;position:fixed;z-index:5;top:0;left:0;width:100%;height:2px}#nprogress .peg{position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;transform:rotate(3deg) translateY(-4px)}#docusaurus-base-url-issue-banner-container,.collapseSidebarButton_1CGd,.sidebarLogo_3h0W,.themedImage_1VuW{display:none}.skipToContent_1oUP{position:fixed;top:1rem;left:100%;z-index:calc(var(--ifm-z-index-fixed) + 1);padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);color:var(--ifm-color-emphasis-900);background-color:var(--ifm-background-surface-color);border-radius:var(--ifm-global-radius);font:inherit;border:none}.skipToContent_1oUP:focus{left:1rem}.announcementBar_3WsW{position:relative;width:100%;height:var(--docusaurus-announcement-bar-height);background-color:var(--ifm-color-primary);color:var(--ifm-color-black)}.announcementBarClose_38nx{position:absolute;right:0;top:0;width:55px;font-size:1.25rem;padding:0;border:none;cursor:pointer;background:none;color:inherit;height:100%}.announcementBarContent_3EUC{font-size:85%;width:100%;text-align:center;padding:5px 0}.announcementBarCloseable_3myR{margin-right:55px}.announcementBarContent_3EUC a{color:inherit;text-decoration:underline}.toggle_71bT{align-items:center;display:flex;height:10px;justify-content:center;width:10px}.toggle_71bT:before{position:absolute}.react-toggle{touch-action:pan-x;position:relative;cursor:pointer;user-select:none}.react-toggle-screenreader-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;position:absolute;width:1px}.react-toggle--disabled{cursor:not-allowed}.react-toggle-track{width:50px;height:24px;border-radius:30px;background-color:#4d4d4d;transition:.2s}.react-toggle-track-check,.react-toggle-track-x{height:10px;top:0;bottom:0;margin:auto 0;position:absolute}.react-toggle-track-check{width:14px;left:8px;opacity:0;transition:opacity .25s}.react-toggle--checked .react-toggle-track-check,.react-toggle-track-x,[data-theme=dark] .react-toggle .react-toggle-track-check{opacity:1;transition:opacity .25s}.react-toggle-track-x{width:10px;right:10px}.react-toggle--checked .react-toggle-track-x,[data-theme=dark] .react-toggle .react-toggle-track-x{opacity:0}.react-toggle-thumb{position:absolute;top:1px;left:1px;width:22px;height:22px;border:1px solid #4d4d4d;border-radius:50%;background-color:#fafafa;transition:.25s}.react-toggle--checked .react-toggle-thumb,[data-theme=dark] .react-toggle .react-toggle-thumb{left:27px}.react-toggle--focus .react-toggle-thumb,.react-toggle:hover .react-toggle-thumb{box-shadow:0 0 2px 3px var(--ifm-color-primary)}.react-toggle:active:not(.react-toggle--disabled) .react-toggle-thumb{box-shadow:0 0 5px 5px var(--ifm-color-primary)}html[data-theme=dark] .themedImage--dark_hz6m,html[data-theme=light] .themedImage--light_3UqQ{display:initial}.navbarHideable_2qcr{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_3yey{transform:translate3d(0,calc(var(--ifm-navbar-height)*-1),0)}.footerLogoLink_MyFc{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.codeBlockContent_hGly:hover>.copyButton_Ue-o,.codeBlockTitle_eoMF:hover+.codeBlockContent_hGly .copyButton_Ue-o,.copyButton_Ue-o:focus,.footerLogoLink_MyFc:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus{min-height:100%;display:flex;flex-direction:column}.main-wrapper{flex:1 0 auto}.heroBanner_1ZBZ,.heroBanner_2oDy{padding:4rem 0;text-align:center;position:relative;overflow:hidden}.buttons_2sDW,.buttons_irzW{justify-content:center}.buttons_2sDW,.buttons_irzW,.intro_1WvB,.intro_wbBU{display:flex;align-items:center}.intro_1WvB,.intro_wbBU{padding:2rem 0;width:100%}.logo_3-YD{width:100px;background:rgba(0,0,0,.8);border-radius:12px}.sidebarMenuIcon_fgN0{vertical-align:middle}.sidebarMenuCloseIcon_1lpH{display:inline-flex;justify-content:center;align-items:center;height:24px;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:.9;width:24px}.menuLinkExternal_1OhN,.sponsors_2L8w{align-items:center}.menu__list .menu__list{overflow-y:hidden;will-change:height;transition:height var(--ifm-transition-fast) linear}.menu__list-item--collapsed .menu__list{overflow:hidden;height:0!important}.menuLinkExternal_1OhN:after{content:"";height:1.15rem;width:1.15rem;min-width:1.15rem;margin:0 auto 0 3%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M21 13v10H0V4h12v2H2v15h17v-8h2zm3-12H13.012l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07L24 12V1z'/%3E%3C/svg%3E") no-repeat;filter:var(--ifm-menu-link-sublist-icon-filter)}.codeBlockContent_hGly{position:relative;direction:ltr}.codeBlockTitle_eoMF{border-top-left-radius:var(--ifm-global-radius);border-top-right-radius:var(--ifm-global-radius);border-bottom:1px solid var(--ifm-color-emphasis-300);font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_23N8{overflow:auto;border-radius:var(--ifm-global-radius)}.codeBlockWithTitle_2JqI{border-top-left-radius:0;border-top-right-radius:0}.copyButton_Ue-o{background:rgba(0,0,0,.3);border:none;border-radius:var(--ifm-global-radius);color:var(--ifm-color-white);cursor:pointer;opacity:0;-webkit-user-select:none;user-select:none;padding:.4rem .5rem;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2);transition:opacity .2s ease-in-out}.codeBlockLines_39YC{font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);white-space:pre;float:left;min-width:100%;padding:var(--ifm-pre-padding)}.anchor{display:block;position:relative;top:-.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast)}.enhancedAnchor_2LWZ{top:calc(var(--ifm-navbar-height)*-1)}.sidebar_2ahu,.tableOfContents_1nbE,.tableOfContents_2Jxe{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.docMainContainer_3ufF,.docPage_31aa,.sponsors_2L8w{display:flex;width:100%}.sponsors_2L8w{padding:2rem 0}.project_2dF5 img,.sponsors_2L8w img{height:200px;width:200px;border:.5em solid hsla(0,0%,56.5%,.25);border-radius:100%}.blogPostDate_fNvV{font-size:.9rem}.sidebar_2ahu{display:inherit}.sidebarItemTitle_2hhb{margin-bottom:.5rem}.sidebarItemList_2xAf{overflow-y:auto;font-size:.9rem;padding-left:0}.sidebarItem_2UVv{margin:.8rem 0}.features_pzNA,.projects_2Zw2{display:flex;align-items:center;padding:2rem 0;width:100%}.featureSvg_3LcT{height:200px;width:200px}.picture_3v82{width:100%;background:rgba(0,0,0,.8);border-radius:12px}.lastUpdatedDate_1WI_{font-weight:700}.iconEdit_2_ui{margin-right:.3em;vertical-align:sub}.docTitle_1vX4{font-size:3rem;margin-bottom:calc(var(--ifm-leading-desktop)*var(--ifm-leading))}.docItemContainer_1EXp{margin:0 auto;padding:0 .5rem}.tabItemActive_2DSg{animation:.5s ease-in-out 5 a}@keyframes a{0%{background-color:var(--ifm-hover-overlay)}to{background-color:transparent}}@media (min-width:997px){.sidebar_15mo{display:flex;flex-direction:column;max-height:100vh;height:100%;position:sticky;top:0;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width);transition:opacity 50ms}.sidebarWithHideableNavbar_267A{padding-top:0}.sidebarHidden_2kNb{opacity:0;height:0;overflow:hidden;visibility:hidden}.sidebarLogo_3h0W{display:flex!important;align-items:center;margin:0 var(--ifm-navbar-padding-horizontal);min-height:var(--ifm-navbar-height);max-height:var(--ifm-navbar-height);color:inherit!important;text-decoration:none!important}.sidebarLogo_3h0W img{margin-right:.5rem;height:2rem}.menu_Bmed{flex-grow:1;padding:.5rem}.menuLinkText_2aKo{cursor:auto}.menuLinkText_2aKo:hover{background:none}.menuWithAnnouncementBar_2WvA{margin-bottom:var(--docusaurus-announcement-bar-height)}.collapseSidebarButton_1CGd{display:block!important;background-color:var(--ifm-button-background-color);height:40px;position:sticky;bottom:0;border-radius:0;border:1px solid var(--ifm-toc-border-color)}.collapseSidebarButtonIcon_3E-R{transform:rotate(180deg);margin-top:4px}.expandSidebarButtonIcon_1naQ,html[dir=rtl] .collapseSidebarButtonIcon_3E-R{transform:rotate(0)}html[data-theme=dark] .collapseSidebarButton_1CGd,html[data-theme=dark] .collapsedDocSidebar_2JMH:focus,html[data-theme=dark] .collapsedDocSidebar_2JMH:hover{background-color:var(--collapse-button-bg-color-dark)}.collapsedDocSidebar_2JMH:focus,.collapsedDocSidebar_2JMH:hover,html[data-theme=dark] .collapseSidebarButton_1CGd:focus,html[data-theme=dark] .collapseSidebarButton_1CGd:hover{background-color:var(--ifm-color-emphasis-200)}.docMainContainer_3ufF{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_3NYZ{max-width:none}.docSidebarContainer_3Kbt{width:var(--doc-sidebar-width);margin-top:calc(var(--ifm-navbar-height)*-1);border-right:1px solid var(--ifm-toc-border-color);will-change:width;transition:width var(--ifm-transition-fast) ease;-webkit-clip-path:inset(0);clip-path:inset(0)}.docSidebarContainerHidden_3pA8{width:30px;cursor:pointer}.collapsedDocSidebar_2JMH{position:sticky;top:0;height:100%;max-height:100vh;display:flex;align-items:center;justify-content:center;transition:background-color var(--ifm-transition-fast) ease}html[dir=rtl] .expandSidebarButtonIcon_1naQ{transform:rotate(180deg)}.docItemWrapperEnhanced_2vyJ{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))}}@media (min-width:997px) and (max-width:1320px){.docItemWrapper_3FMP{max-width:calc(var(--ifm-container-width) - var(--doc-sidebar-width) - var(--ifm-spacing-horizontal)*2)}.docItemWrapperEnhanced_2vyJ{max-width:calc(var(--ifm-container-width) - var(--ifm-spacing-horizontal)*2)}}@media only screen and (min-width:997px){.docItemCol_2rXS{max-width:75%!important}}@media screen and (min-width:1024px){:root{--docusaurus-announcement-bar-height:30px}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:1200px){h1{--ifm-h1-font-size:calc(1.375rem + 1.5vw)}}@media screen and (max-width:997px){.displayOnlyInLargeViewport_GrZ2{display:none!important}}@media (max-width:996px){.row .col.col.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0;max-width:var(--ifm-col-width)}.footer{--ifm-footer-padding-horizontal:0}.footer__link-separator,.navbar__item{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.menu--responsive .menu__button,.navbar__toggle{display:inherit}.menu--responsive:not(.menu--show) .menu__list{display:none;opacity:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.pills--block .pills__item:not(:first-child){margin-top:var(--ifm-pills-spacing)}.pills--block .pills__item:not(:last-child){margin-bottom:var(--ifm-pills-spacing)}.tabs--block .tabs__item:not(:first-child){margin-top:var(--ifm-tabs-spacing)}.tabs--block .tabs__item:not(:last-child){margin-bottom:var(--ifm-tabs-spacing)}.searchWrapper_3rmH{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docSidebarContainer_3Kbt{margin-top:0}}@media only screen and (max-width:996px){.sidebar_2ahu,.tableOfContents_1nbE,.tableOfContents_2Jxe{display:none}.docItemContainer_1EXp,.docItemContainer_F6pz{padding:0 .3rem}}@media screen and (max-width:966px){.heroBanner_1ZBZ,.heroBanner_2oDy{padding:2rem}}@media screen and (max-width:576px){.announcementBarClose_38nx{width:35px}.announcementBarContent_3EUC{width:auto}.announcementBarCloseable_3myR{margin-right:35px}}@media print{.announcementBar_3WsW,.footer,.menu,.navbar,.pagination-nav,.table-of-contents{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_39YC{white-space:pre-wrap}} \ No newline at end of file diff --git a/blog/media/cover-neutralinojs-roadmap-2022.png b/assets/images/cover-neutralinojs-roadmap-2022-9fe59aaae31d64bb619a501790a5afef.png similarity index 100% rename from blog/media/cover-neutralinojs-roadmap-2022.png rename to assets/images/cover-neutralinojs-roadmap-2022-9fe59aaae31d64bb619a501790a5afef.png diff --git a/blog/media/cover-neutralinojs-roadmap-2023.png b/assets/images/cover-neutralinojs-roadmap-2023-532f704d55bf60f0034cdb83197b5312.png similarity index 100% rename from blog/media/cover-neutralinojs-roadmap-2023.png rename to assets/images/cover-neutralinojs-roadmap-2023-532f704d55bf60f0034cdb83197b5312.png diff --git a/blog/media/cover-neutralinojs-roadmap-2024.png b/assets/images/cover-neutralinojs-roadmap-2024-ea3bf5e1e99f169f6bec4a16c4455d3b.png similarity index 100% rename from blog/media/cover-neutralinojs-roadmap-2024.png rename to assets/images/cover-neutralinojs-roadmap-2024-ea3bf5e1e99f169f6bec4a16c4455d3b.png diff --git a/blog/media/cover-save-time-with-devops.png b/assets/images/cover-save-time-with-devops-62e8967903b51b6ee5a686c2aea71852.png similarity index 100% rename from blog/media/cover-save-time-with-devops.png rename to assets/images/cover-save-time-with-devops-62e8967903b51b6ee5a686c2aea71852.png diff --git a/blog/media/creating-a-release-with-a-click.png b/assets/images/creating-a-release-with-a-click-a8bc8b59e6038f2717baa59d0f6ee541.png similarity index 100% rename from blog/media/creating-a-release-with-a-click.png rename to assets/images/creating-a-release-with-a-click-a8bc8b59e6038f2717baa59d0f6ee541.png diff --git a/blog/media/running-test-suite-for-app-module.png b/assets/images/running-test-suite-for-app-module-ffe9fd81bf4b0d19923c7e76059df827.png similarity index 100% rename from blog/media/running-test-suite-for-app-module.png rename to assets/images/running-test-suite-for-app-module-ffe9fd81bf4b0d19923c7e76059df827.png diff --git a/blog/media/sample-releasezri-release.png b/assets/images/sample-releasezri-release-19181c46c0cce5ebdcb38015c2c9832c.png similarity index 100% rename from blog/media/sample-releasezri-release.png rename to assets/images/sample-releasezri-release-19181c46c0cce5ebdcb38015c2c9832c.png diff --git a/assets/js/002cd966.f8b202e4.js b/assets/js/002cd966.f8b202e4.js new file mode 100644 index 0000000..f17f4fb --- /dev/null +++ b/assets/js/002cd966.f8b202e4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{73:function(e,a,t){"use strict";t.r(a),t.d(a,"default",(function(){return d}));var o=t(0),i=t.n(o),r=t(120),n=t(125),s=(t(122),t(16)),l=(t(126),t(57)),c=t.n(l);function d(){const e=Object(s.default)(),{siteConfig:a={}}=e;return i.a.createElement(n.a,{title:`${a.title} Privacy Policy`,description:"Privacy policy of the CodeZri website"},i.a.createElement("header",{className:Object(r.a)("hero hero--primary",c.a.heroBanner)},i.a.createElement("div",{className:"container"},i.a.createElement("h1",{className:"hero__title"},"Privacy Policy"),i.a.createElement("p",{className:"hero__subtitle"},"Privacy policy of the CodeZri website"))),i.a.createElement("div",{className:c.a.intro},i.a.createElement("div",{className:"container"},i.a.createElement("div",{className:"row"},i.a.createElement("div",{className:"col col--12"},i.a.createElement("p",null,"We use Google Analytics in our website to understand our audience. Therefore, Google Analytics may place cookies inside your browser via the CodeZri website. Also, we display a few ads via Google Adsense which may also place cookies inside your browser to improve their ad experience for users. If you wish not to allow those cookies, please kindly disable cookies for the CodeZri website. If you need to avoid those cookies, please disable cookies for the CodeZri website. We don't collect any personal information via web forms or any hidden mechanism. We only ask for your email address in our contact form to reply you back, and we never expose your email to third party entities.",i.a.createElement("br",null),i.a.createElement("br",null),"We use Google Analytics data to identify frequently visited pages and traffic sources and often make tutorials and content based on those frequently visited page details and traffic sources.",i.a.createElement("br",null),i.a.createElement("br",null),"Please note that this privacy policy statement is valid only for the official website domain `codezri.org`. Make sure that you are browsing the right official domain name which adheres to this privacy policy statement.",i.a.createElement("br",null),i.a.createElement("br",null),"Last updated date: 2023-08-02"))))))}}}]); \ No newline at end of file diff --git a/assets/js/0106ea77.94f0ce97.js b/assets/js/0106ea77.94f0ce97.js new file mode 100644 index 0000000..4949c7e --- /dev/null +++ b/assets/js/0106ea77.94f0ce97.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{74:function(a){a.exports=JSON.parse('{"allTagsPath":"/blog/tags","slug":"framework","name":"framework","count":3,"permalink":"/blog/tags/framework"}')}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.4ff63a3b.js b/assets/js/01a85c17.4ff63a3b.js new file mode 100644 index 0000000..f54ab6b --- /dev/null +++ b/assets/js/01a85c17.4ff63a3b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{128:function(e,a,t){"use strict";t.d(a,"a",(function(){return m}));var l=t(0),n=t.n(l),r=t(120),s=t(122),i=t(58),c=t.n(i);function m(e){let{sidebar:a}=e;return 0===a.items.length?null:n.a.createElement("div",{className:Object(r.a)(c.a.sidebar,"thin-scrollbar")},n.a.createElement("h3",{className:c.a.sidebarItemTitle},a.title),n.a.createElement("ul",{className:c.a.sidebarItemList},a.items.map((e=>n.a.createElement("li",{key:e.permalink,className:c.a.sidebarItem},n.a.createElement(s.a,{isNavLink:!0,to:e.permalink,className:c.a.sidebarItemLink,activeClassName:c.a.sidebarItemLinkActive},e.title))))))}},75:function(e,a,t){"use strict";t.r(a);var l=t(0),n=t.n(l),r=t(125),s=t(122),i=t(128),c=t(123);a.default=function(e){const{tags:a,sidebar:t}=e,l={};Object.keys(a).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e);l[a]=l[a]||[],l[a].push(e)}));const m=Object.entries(l).sort(((e,a)=>{let[t]=e,[l]=a;return t===l?0:t>l?1:-1})).map((e=>{let[t,l]=e;return n.a.createElement("div",{key:t},n.a.createElement("h3",null,t),l.map((e=>n.a.createElement(s.a,{className:"padding-right--md",href:a[e].permalink,key:e},a[e].name," (",a[e].count,")"))),n.a.createElement("hr",null))})).filter((e=>null!=e));return n.a.createElement(r.a,{title:"Tags",description:"Blog Tags",wrapperClassName:"blog-wrapper",searchMetadatas:{tag:"blog_tags_list"}},n.a.createElement("div",{className:"container margin-vert--lg"},n.a.createElement("div",{className:"row"},n.a.createElement("div",{className:"col col--3"},n.a.createElement(i.a,{sidebar:t})),n.a.createElement("main",{className:"col col--7"},n.a.createElement("h1",null,n.a.createElement(c.a,{id:"theme.tags.tagsPageTitle",description:"The title of the tag list page"},"Tags")),n.a.createElement("div",{className:"margin-vert--lg"},m)))))}}}]); \ No newline at end of file diff --git a/assets/js/0b385bb3.4d962a29.js b/assets/js/0b385bb3.4d962a29.js new file mode 100644 index 0000000..b2003e5 --- /dev/null +++ b/assets/js/0b385bb3.4d962a29.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{76:function(n){n.exports=JSON.parse('{"allTagsPath":"/blog/tags","slug":"neutralinojs","name":"neutralinojs","count":4,"permalink":"/blog/tags/neutralinojs"}')}}]); \ No newline at end of file diff --git a/assets/js/0b58657a.41bd895f.js b/assets/js/0b58657a.41bd895f.js new file mode 100644 index 0000000..1aaa607 --- /dev/null +++ b/assets/js/0b58657a.41bd895f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{137:function(e,t,a){"use strict";a.r(t),t.default=a.p+"assets/images/cover-neutralinojs-roadmap-2023-532f704d55bf60f0034cdb83197b5312.png"},77:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return r})),a.d(t,"metadata",(function(){return i})),a.d(t,"toc",(function(){return s})),a.d(t,"default",(function(){return p}));var n=a(3),o=(a(0),a(124));const r={title:"Neutralinojs 2023 Roadmap",authors:["shalithasuranga"],slug:"neutralinojs-2023-roadmap",tags:["neutralinojs","javascript","framework","roadmap"],image:"media/cover-neutralinojs-roadmap-2023.png"},i={permalink:"/blog/neutralinojs-2023-roadmap",source:"@site/blog/2022-12-27-neutralinojs-2023-roadmap.md",description:"We typically publish a set of goals for the upcoming year and let you know the current year's achievements at",date:"2022-12-27T00:00:00.000Z",formattedDate:"December 27, 2022",tags:[{label:"neutralinojs",permalink:"/blog/tags/neutralinojs"},{label:"javascript",permalink:"/blog/tags/javascript"},{label:"framework",permalink:"/blog/tags/framework"},{label:"roadmap",permalink:"/blog/tags/roadmap"}],title:"Neutralinojs 2023 Roadmap",readingTime:4.46,truncated:!0,prevItem:{title:"Neutralinojs 2024 Roadmap",permalink:"/blog/neutralinojs-2024-roadmap"},nextItem:{title:"How We Save Our Time with\xa0DevOps",permalink:"/blog/how-we-save-our-time-with-devops"}},s=[{value:"Achievements in\xa02022",id:"achievements-in-2022",children:[]},{value:"Community",id:"community",children:[]},{value:"Transparency",id:"transparency",children:[]},{value:"Sponsors",id:"sponsors",children:[]},{value:"Roadmap 2023",id:"roadmap-2023",children:[]}],l={toc:s},u="wrapper";function p(e){let{components:t,...r}=e;return Object(o.b)(u,Object(n.a)({},l,r,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,Object(o.b)("img",{src:a(137).default})),Object(o.b)("p",null,"We typically publish a set of goals for the upcoming year and let you know the current year's achievements at\nthe end of every year via a blog post. For example, we published\nthe ",Object(o.b)("a",{parentName:"p",href:"/blog/neutralinojs-2022-roadmap"},'"Neutralinojs 2022 Roadmap"')," article on December 2021.\nSimilarly, we are publishing this article for the year 2023. We are happy to announce that we completed\nmost of the planned goals in 2022. We made Neutralinojs stable and competitive by implementing\nDevOps principles and doing various performance, architectural, security, and source-code-level enhancements."),Object(o.b)("h2",{id:"achievements-in-2022"},"Achievements in\xa02022"),Object(o.b)("p",null,"Look at the following summary of things we achieved in 2022:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Delivered new APIs for accessing the system clipboard, spawning processes, retrieving system information,\nadding custom backend code execution, and handling event-based file streams.\xa0"),Object(o.b)("li",{parentName:"ul"},"Added new functions for the filesystem, os, and storage modules"),Object(o.b)("li",{parentName:"ul"},"Implemented a protection mechanism to prevent loading the app outside of the webview by using an OTT\n(One-Time Token). Read more about Neutralinojs framework security from\nthe ",Object(o.b)("a",{parentName:"li",href:"https://neutralino.js.org/docs/contributing/security"},"official documentation"),"."),Object(o.b)("li",{parentName:"ul"},"Started generating official nightly releases with the ",Object(o.b)("a",{parentName:"li",href:"https://github.com/codezri/releasezri"},"ReleaseZri"),"\nproject. This DevOps improvement helps developers experiment with the latest framework features."),Object(o.b)("li",{parentName:"ul"},"Generated official ARM binaries for Linux (armhf and arm64) and macOS (arm64 for M1 or higher)"),Object(o.b)("li",{parentName:"ul"},"Developed the ",Object(o.b)("a",{parentName:"li",href:"https://github.com/codezri/buildzri"},"BuildZri")," open-source project as the build automation\ntool for compiling the Neutralinojs C++ codebase"),Object(o.b)("li",{parentName:"ul"},"Improved the codebase quality and fixed various bugs to make Neutralinojs stable for developing\nproduction-level apps"),Object(o.b)("li",{parentName:"ul"},"Mentored one project idea with the Google Summer of Code (GSoC) 2022 program"),Object(o.b)("li",{parentName:"ul"},"Added partial ESM (ECMAScript Modules) support (Now, developers\n",Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs/neutralino.js/issues/58#issuecomment-1353276382"},"can")," load the Neutralinojs\nclient as an ES module)")),Object(o.b)("h2",{id:"community"},"Community"),Object(o.b)("p",null,"Behind every successful open-source project, there is indeed a collaborative developer community.\nThe Neutralinojs developer community tends to suggest ideas, submit patches, report bugs, and create\ndeveloper resources."),Object(o.b)("p",null,"See the following community statistics:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"6.2k+ stargazers on GitHub (32% increment)"),Object(o.b)("li",{parentName:"ul"},"885 members on Discord (more than seven times growth)"),Object(o.b)("li",{parentName:"ul"},"82k+ neu CLI downloads (more than four times growth)")),Object(o.b)("p",null,"The well-known ",Object(o.b)("a",{parentName:"p",href:"https://javascriptweekly.com/"},"JavaScript Weekly")," newsletter supports us in reaching a\nwider developer audience by featuring our framework releases in their popular newsletter.\nMany developers build awesome lightweight apps with Neutralinojs, create content for Neutralinojs on\nvarious web platforms, and learn open-source development with Neutralinojs.\xa0"),Object(o.b)("p",null,"Thanks so much, everyone, for being with the Neutralinojs community in 2022. We hope to see more members\nin the community in 2023!"),Object(o.b)("h2",{id:"transparency"},"Transparency"),Object(o.b)("p",null,"Neutralinojs is a free and pure open-source project\u200a","\u2014","you can use it for free, inspect the source, and\ncustomize it if you want. It doesn't come with premium features that are unlockable via monetary payments.\nEvery framework user gets the same set of features. Also, we don't embed telemetry services in the framework\ncore or developer tools for generating usage statistics. Our primary goal is to offer a better lightweight,\ncross-platform development experience for free under the pure open-source model. We motivate every\nNeutralinojs developer to learn framework internals via detailed official documentation and tutorial videos."),Object(o.b)("p",null,"We wrote ",Object(o.b)("a",{parentName:"p",href:"https://neutralino.js.org/docs/contributing/about-neutralinojs"},"this article")," and explained\nNeutralinojs's history, the current development, and the financial side. We explain everything\n(even revenue sources) about Neutralinojs to motivate you to build your own open-source\nprojects and help developers!"),Object(o.b)("h2",{id:"sponsors"},"Sponsors"),Object(o.b)("p",null,"Sponsors and financial donators motivate us to continue development activities productively and consistently.\nMacStadium and Microsoft Azure sponsor Neutralinojs by offering cloud computing infrastructure for free.\nSeven patrons support the author via ",Object(o.b)("a",{parentName:"p",href:"https://www.patreon.com/shalithasuranga"},"Patreon")," and motivate him\nto allocate more time to maintain the project. In 2022, one contributor donated $29 via\n",Object(o.b)("a",{parentName:"p",href:"https://opencollective.com/neutralinojs"},"OpenCollective")," too!"),Object(o.b)("p",null,"We like to thank all sponsors and donators for helping us."),Object(o.b)("h2",{id:"roadmap-2023"},"Roadmap 2023"),Object(o.b)("p",null,"During the 2020\u20132022 period, we did many code refactorings to make the framework stable and production-ready.\nNow, developers use Neutralinojs to build their apps, and some developers experiment with the extension\nsystem and the inbuilt auto-updater tool. Now, the entire framework is stable","\u2014","we won't change native APIs\nwith the upcoming releases. So, you can build Neutralinojs apps without worrying about future framework\nupgrades and time-consuming version-to-version migrations."),Object(o.b)("p",null,"In past years, we mainly focused on stabilizing the framework core via various enhancements.\nOur current primary goal is to make Neutralinojs fully featured by adding APIs that other cross-platform\nframeworks have."),Object(o.b)("p",null,"Here are some crucial goals planned for 2023:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Offer a native network request API to overcome the CORS issue that needs turning off webview\nsecurity layers"),Object(o.b)("li",{parentName:"ul"},"Enable multi-threaded native API calls and improve the framework performance further"),Object(o.b)("li",{parentName:"ul"},"Release the ",Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs-community/neutralinojs-builder"},"Neutralinojs builder"),"\nproject with ",Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs/gsoc2023"},"GSoC 2023")),Object(o.b)("li",{parentName:"ul"},"Fix the window positioning issue on the Windows platform by refactoring the existing webview library version"),Object(o.b)("li",{parentName:"ul"},"Add the Unicode support for the Windows framework version"),Object(o.b)("li",{parentName:"ul"},"Delivering features requested by the developer community")),Object(o.b)("p",null,"Apart from the above milestones, we'll add more APIs, features, and developer tooling to compete with\nother cross-platform frameworks since our framework core is now stable."),Object(o.b)("p",null,"Join our ",Object(o.b)("a",{parentName:"p",href:"https://discord.gg/cybpp4guTJ"},"Discord server")," and become a member of our developer community.\nConsider making a monetary donation if you would like to support the project financially.\nConsider making a code contribution and becoming a project committer if you wish to donate your\ntime to Neutralinojs."),Object(o.b)("p",null,"Send us a pull request to ",Object(o.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/neutralinojs.github.io"},"this GitHub repository"),"\nif you like to list your app on the ",Object(o.b)("a",{parentName:"p",href:"https://neutralino.js.org/apps/"},"Neutralinojs apps page"),"."),Object(o.b)("p",null,"Thanks for reading."),Object(o.b)("p",null,"Build an app with Neutralinojs ","\u2014"," feel the difference ","\u2014"," and join with our journey."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/170d6c86.6763717a.js b/assets/js/170d6c86.6763717a.js new file mode 100644 index 0000000..61ca412 --- /dev/null +++ b/assets/js/170d6c86.6763717a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{78:function(a){a.exports=JSON.parse('{"allTagsPath":"/blog/tags","slug":"roadmap","name":"roadmap","count":3,"permalink":"/blog/tags/roadmap"}')}}]); \ No newline at end of file diff --git a/assets/js/17896441.66c704b8.js b/assets/js/17896441.66c704b8.js new file mode 100644 index 0000000..4337b00 --- /dev/null +++ b/assets/js/17896441.66c704b8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{113:function(e,t,a){"use strict";a.r(t);var n=a(0),l=a.n(n),i=a(122),s=a(123);var r=function(e){const{metadata:t}=e;return l.a.createElement("nav",{className:"pagination-nav","aria-label":Object(s.b)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},l.a.createElement("div",{className:"pagination-nav__item"},t.previous&&l.a.createElement(i.a,{className:"pagination-nav__link",to:t.previous.permalink},l.a.createElement("div",{className:"pagination-nav__sublabel"},l.a.createElement(s.a,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")),l.a.createElement("div",{className:"pagination-nav__label"},"\xab ",t.previous.title))),l.a.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},t.next&&l.a.createElement(i.a,{className:"pagination-nav__link",to:t.next.permalink},l.a.createElement("div",{className:"pagination-nav__sublabel"},l.a.createElement(s.a,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next")),l.a.createElement("div",{className:"pagination-nav__label"},t.next.title," \xbb"))))},o=a(16),c=a(127),d=a(121);function m(e){let{siteTitle:t,versionLabel:a}=e;return l.a.createElement(s.a,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:l.a.createElement("strong",null,a)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")}function u(e){let{siteTitle:t,versionLabel:a}=e;return l.a.createElement(s.a,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:l.a.createElement("strong",null,a)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}function v(e){let{versionLabel:t,to:a,onClick:n}=e;return l.a.createElement(s.a,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label userd to tell the user that he's browsing an unmaintained doc version",values:{versionLabel:t,latestVersionLink:l.a.createElement("strong",null,l.a.createElement(i.a,{to:a,onClick:n},l.a.createElement(s.a,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}var p=function(){const{siteConfig:{title:e}}=Object(o.default)(),{pluginId:t}=Object(c.useActivePlugin)({failfast:!0}),{savePreferredVersionName:a}=Object(d.useDocsPreferredVersion)(t),n=Object(c.useActiveVersion)(t),{latestDocSuggestion:i,latestVersionSuggestion:s}=Object(c.useDocVersionSuggestions)(t);if(!s)return l.a.createElement(l.a.Fragment,null);const r=null!=i?i:(p=s).docs.find((e=>e.id===p.mainDocId));var p;return l.a.createElement("div",{className:"alert alert--warning margin-bottom--md",role:"alert"},l.a.createElement("div",null,"current"===n.name?l.a.createElement(m,{siteTitle:e,versionLabel:n.label}):l.a.createElement(u,{siteTitle:e,versionLabel:n.label})),l.a.createElement("div",{className:"margin-top--md"},l.a.createElement(v,{versionLabel:s.label,to:r.path,onClick:()=>a(s.name)})))},b=a(133),E=a(79),g=a.n(E);function h(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:a}=e;return l.a.createElement(s.a,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:l.a.createElement("time",{dateTime:new Date(1e3*t).toISOString(),className:g.a.lastUpdatedDate},a)}}," on {date}")}function f(e){let{lastUpdatedBy:t}=e;return l.a.createElement(s.a,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:l.a.createElement("strong",null,t)}}," by {user}")}function L(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:a,lastUpdatedBy:n}=e;return l.a.createElement("div",{className:"col text--right"},l.a.createElement("em",null,l.a.createElement("small",null,l.a.createElement(s.a,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&a?l.a.createElement(h,{lastUpdatedAt:t,formattedLastUpdatedAt:a}):"",byUser:n?l.a.createElement(f,{lastUpdatedBy:n}):""}},"Last updated{atDate}{byUser}"),!1)))}var N=a(138),_=a(142),U=a(120),w=a(80),y=a.n(w);const T="table-of-contents__link",O="table-of-contents__link--active",k=100;function A(e){let{toc:t,isChild:a}=e;return t.length?l.a.createElement("ul",{className:a?"":"table-of-contents table-of-contents__left-border"},t.map((e=>l.a.createElement("li",{key:e.id},l.a.createElement("a",{href:`#${e.id}`,className:T,dangerouslySetInnerHTML:{__html:e.value}}),l.a.createElement(A,{isChild:!0,toc:e.children}))))):null}function j(e){let{toc:t}=e;Object(N.a)(T,O,k);const[a,i]=Object(n.useState)(!1),[s,r]=Object(n.useState)(!1);return Object(n.useEffect)((()=>{if(!a){i(!0);try{r("undefined"==typeof ethicalads),ethicalads.load_placements()}catch(e){r(!1)}}})),l.a.createElement("div",{className:Object(U.a)(y.a.tableOfContents,"thin-scrollbar")},l.a.createElement("div",null,l.a.createElement("div",{"data-ea-publisher":"neutralino","data-ea-type":"image",id:"codezri-docs"})),l.a.createElement(A,{toc:t}))}t.default=function(e){const{content:t}=e,{metadata:a,frontMatter:{image:n,keywords:i,hide_title:s,hide_table_of_contents:o}}=t,{description:d,title:m,editUrl:u,lastUpdatedAt:v,formattedLastUpdatedAt:E,lastUpdatedBy:g}=a,{pluginId:h}=Object(c.useActivePlugin)({failfast:!0}),f=Object(c.useVersions)(h),N=Object(c.useActiveVersion)(h),w=f.length>1;return l.a.createElement(l.a.Fragment,null,l.a.createElement(b.a,{title:m,description:d,keywords:i,image:n}),l.a.createElement("div",{className:"row"},l.a.createElement("div",{className:Object(U.a)("col",{[y.a.docItemCol]:!o})},l.a.createElement(p,null),l.a.createElement("div",{className:y.a.docItemContainer},l.a.createElement("article",null,w&&l.a.createElement("div",null,l.a.createElement("span",{className:"badge badge--secondary"},"Version: ",N.label)),!s&&l.a.createElement("header",null,l.a.createElement("h1",{className:y.a.docTitle},m)),l.a.createElement("div",{className:"markdown"},l.a.createElement(t,null))),(u||v||g)&&l.a.createElement("div",{className:"margin-vert--xl"},l.a.createElement("div",{className:"row"},l.a.createElement("div",{className:"col"},u&&l.a.createElement(_.a,{editUrl:u})),(v||g)&&l.a.createElement(L,{lastUpdatedAt:v,formattedLastUpdatedAt:E,lastUpdatedBy:g}))),l.a.createElement("div",{className:"margin-vert--lg"},l.a.createElement(r,{metadata:a})))),!o&&t.toc&&l.a.createElement("div",{className:"col col--3"},l.a.createElement(j,{toc:t.toc}))))}},138:function(e,t,a){"use strict";var n=a(0);t.a=function(e,t,a){const[l,i]=Object(n.useState)(void 0);Object(n.useEffect)((()=>{function n(){const n=function(){const e=Array.from(document.getElementsByClassName("anchor")),t=e.find((e=>{const{top:t}=e.getBoundingClientRect();return t>=a}));if(t){if(t.getBoundingClientRect().top>=a){const a=e[e.indexOf(t)-1];return null!=a?a:t}return t}return e[e.length-1]}();if(n){let a=0,s=!1;const r=document.getElementsByClassName(e);for(;a{document.removeEventListener("scroll",n),document.removeEventListener("resize",n)}}))}},142:function(e,t,a){"use strict";a.d(t,"a",(function(){return m}));var n=a(0),l=a.n(n),i=a(123),s=a(3),r=a(120),o=a(63),c=a.n(o);var d=e=>{let{className:t,...a}=e;return l.a.createElement("svg",Object(s.a)({fill:"currentColor",height:"1.2em",width:"1.2em",preserveAspectRatio:"xMidYMid meet",role:"img",viewBox:"0 0 40 40",className:Object(r.a)(c.a.iconEdit,t),"aria-label":"Edit page"},a),l.a.createElement("g",null,l.a.createElement("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 m(e){let{editUrl:t}=e;return l.a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener"},l.a.createElement(d,null),l.a.createElement(i.a,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}}}]); \ No newline at end of file diff --git a/assets/js/2.c6b0e83a.js b/assets/js/2.c6b0e83a.js new file mode 100644 index 0000000..4843a6b --- /dev/null +++ b/assets/js/2.c6b0e83a.js @@ -0,0 +1,2 @@ +/*! For license information please see 2.c6b0e83a.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{125:function(e,t,a){"use strict";var n=a(0),r=a.n(n),c=a(120),l=a(123),o=a(24),s=a(64),i=a.n(s);function u(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}var d=function(){const e=Object(n.useRef)(null),t=Object(o.useLocation)();return Object(n.useEffect)((()=>{t.hash||u(e.current)}),[t.pathname]),r.a.createElement("div",{ref:e},r.a.createElement("a",{href:"#main",className:i.a.skipToContent,onClick:e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")||document.querySelector(".main-wrapper");t&&u(t)}},r.a.createElement(l.a,{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"},"Skip to main content")))},m=a(121),f=a(135),h=a(65),b=a.n(h);var v=function(){const{isAnnouncementBarClosed:e,closeAnnouncementBar:t}=Object(f.a)(),{announcementBar:a}=Object(m.useThemeConfig)();if(!a)return null;const{content:n,backgroundColor:o,textColor:s,isCloseable:i}=a;return!n||i&&e?null:r.a.createElement("div",{className:b.a.announcementBar,style:{backgroundColor:o,color:s},role:"banner"},r.a.createElement("div",{className:Object(c.a)(b.a.announcementBarContent,{[b.a.announcementBarCloseable]:i}),dangerouslySetInnerHTML:{__html:n}}),i?r.a.createElement("button",{type:"button",className:b.a.announcementBarClose,onClick:t,"aria-label":Object(l.b)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},r.a.createElement("span",{"aria-hidden":"true"},"\xd7")):null)},p=a(3),g=()=>null,k=a(167),E=a.n(k),O=a(16),j=a(66),y=a.n(j);const _=e=>{let{icon:t,style:a}=e;return r.a.createElement("span",{className:Object(c.a)(y.a.toggle,y.a.dark),style:a},t)},C=e=>{let{icon:t,style:a}=e;return r.a.createElement("span",{className:Object(c.a)(y.a.toggle,y.a.light),style:a},t)};var w=function(e){const{colorMode:{switchConfig:{darkIcon:t,darkIconStyle:a,lightIcon:n,lightIconStyle:c}}}=Object(m.useThemeConfig)(),{isClient:l}=Object(O.default)();return r.a.createElement(E.a,Object(p.a)({disabled:!l,icons:{checked:r.a.createElement(_,{icon:t,style:a}),unchecked:r.a.createElement(C,{icon:n,style:c})}},e))},N=a(131),T=a(149);var S=e=>{const t=Object(o.useLocation)(),[a,r]=Object(n.useState)(e),c=Object(n.useRef)(!1),[l,s]=Object(n.useState)(0),[i,u]=Object(n.useState)(0),d=Object(n.useCallback)((e=>{null!==e&&u(e.getBoundingClientRect().height)}),[]);return Object(T.a)((t=>{let{scrollY:a}=t;if(!e)return;if(a=l?r(!1):a+o{e&&l&&r(!0)}),[t.pathname]),Object(n.useEffect)((()=>{e&&t.hash&&(c.current=!0)}),[t.hash]),{navbarRef:d,isNavbarVisible:a}},L=a(150),D=a(151),I=a(132);var x=e=>{let{width:t=20,height:a=20,...n}=e;return r.a.createElement("svg",Object(p.a)({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",width:t,height:a},n),r.a.createElement("path",{fill:"currentColor",d:"M19.753 10.909c-.624-1.707-2.366-2.726-4.661-2.726-.09 0-.176.002-.262.006l-.016-2.063 3.525-.607c.115-.019.133-.119.109-.231-.023-.111-.167-.883-.188-.976-.027-.131-.102-.127-.207-.109-.104.018-3.25.461-3.25.461l-.013-2.078c-.001-.125-.069-.158-.194-.156l-1.025.016c-.105.002-.164.049-.162.148l.033 2.307s-3.061.527-3.144.543c-.084.014-.17.053-.151.143.019.09.19 1.094.208 1.172.018.08.072.129.188.107l2.924-.504.035 2.018c-1.077.281-1.801.824-2.256 1.303-.768.807-1.207 1.887-1.207 2.963 0 1.586.971 2.529 2.328 2.695 3.162.387 5.119-3.06 5.769-4.715 1.097 1.506.256 4.354-2.094 5.98-.043.029-.098.129-.033.207l.619.756c.08.096.206.059.256.023 2.51-1.73 3.661-4.515 2.869-6.683zm-7.386 3.188c-.966-.121-.944-.914-.944-1.453 0-.773.327-1.58.876-2.156a3.21 3.21 0 011.229-.799l.082 4.277a2.773 2.773 0 01-1.243.131zm2.427-.553l.046-4.109c.084-.004.166-.01.252-.01.773 0 1.494.145 1.885.361.391.217-1.023 2.713-2.183 3.758zm-8.95-7.668a.196.196 0 00-.196-.145h-1.95a.194.194 0 00-.194.144L.008 16.916c-.017.051-.011.076.062.076h1.733c.075 0 .099-.023.114-.072l1.008-3.318h3.496l1.008 3.318c.016.049.039.072.113.072h1.734c.072 0 .078-.025.062-.076-.014-.05-3.083-9.741-3.494-11.04zm-2.618 6.318l1.447-5.25 1.447 5.25H3.226z"}))};function A(e){let{mobile:t,dropdownItemsBefore:a,dropdownItemsAfter:n,...c}=e;const{i18n:{currentLocale:l,locales:o,localeConfigs:s}}=Object(O.default)(),i=Object(m.useAlternatePageUtils)();function u(e){return s[e].label}const d=[...a,...o.map((e=>{const t=`pathname://${i.createUrl({locale:e,fullyQualified:!1})}`;return{isNavLink:!0,label:u(e),to:t,target:"_self",autoAddBaseUrl:!1,className:e===l?"dropdown__link--active":""}})),...n],f=t?"Languages":u(l);return r.a.createElement(I.a,Object(p.a)({},c,{href:"#",mobile:t,label:r.a.createElement("span",null,r.a.createElement(x,{style:{verticalAlign:"text-bottom",marginRight:5}}),r.a.createElement("span",null,f)),items:d}))}var B=a(67),M=a.n(B);function P(e){let{mobile:t}=e;return t?null:r.a.createElement("div",{className:M.a.searchWrapper},r.a.createElement(g,null))}const V={default:()=>I.a,localeDropdown:()=>A,search:()=>P,docsVersion:()=>a(172).default,docsVersionDropdown:()=>a(173).default,doc:()=>a(174).default},R=function(e){void 0===e&&(e="default");const t=V[e];if(!t)throw new Error(`No NavbarItem component found for type=${e}.`);return t()};function U(e){let{type:t,...a}=e;const n=R(t);return r.a.createElement(n,a)}var F=a(152),X=a(154),H=a(69),$=a.n(H);const z="right";var G=function(){const{navbar:{items:e,hideOnScroll:t,style:a},colorMode:{disableSwitch:l}}=Object(m.useThemeConfig)(),[o,s]=Object(n.useState)(!1),{isDarkTheme:i,setLightTheme:u,setDarkTheme:d}=Object(N.a)(),{navbarRef:f,isNavbarVisible:h}=S(t);Object(L.a)(o);const b=Object(n.useCallback)((()=>{s(!0)}),[s]),v=Object(n.useCallback)((()=>{s(!1)}),[s]),k=Object(n.useCallback)((e=>e.target.checked?d():u()),[u,d]),E=Object(D.a)();Object(n.useEffect)((()=>{E===D.b.desktop&&s(!1)}),[E]);const O=e.some((e=>"search"===e.type)),{leftItems:j,rightItems:y}=function(e){return{leftItems:e.filter((e=>{var t;return"left"===(null!==(t=e.position)&&void 0!==t?t:z)})),rightItems:e.filter((e=>{var t;return"right"===(null!==(t=e.position)&&void 0!==t?t:z)}))}}(e);return r.a.createElement("nav",{ref:f,className:Object(c.a)("navbar","navbar--fixed-top",{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":o,[$.a.navbarHideable]:t,[$.a.navbarHidden]:t&&!h})},r.a.createElement("div",{className:"navbar__inner"},r.a.createElement("div",{className:"navbar__items"},null!=e&&0!==e.length&&r.a.createElement("button",{"aria-label":"Navigation bar toggle",className:"navbar__toggle",type:"button",tabIndex:0,onClick:b,onKeyDown:b},r.a.createElement(X.a,null)),r.a.createElement(F.a,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:Object(c.a)("navbar__title")}),j.map(((e,t)=>r.a.createElement(U,Object(p.a)({},e,{key:t}))))),r.a.createElement("div",{className:"navbar__items navbar__items--right"},y.map(((e,t)=>r.a.createElement(U,Object(p.a)({},e,{key:t})))),!l&&r.a.createElement(w,{className:$.a.displayOnlyInLargeViewport,"aria-label":"Dark mode toggle",checked:i,onChange:k}),!O&&r.a.createElement(g,null))),r.a.createElement("div",{role:"presentation",className:"navbar-sidebar__backdrop",onClick:v}),r.a.createElement("div",{className:"navbar-sidebar"},r.a.createElement("div",{className:"navbar-sidebar__brand"},r.a.createElement(F.a,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title",onClick:v}),!l&&o&&r.a.createElement(w,{"aria-label":"Dark mode toggle in sidebar",checked:i,onChange:k})),r.a.createElement("div",{className:"navbar-sidebar__items"},r.a.createElement("div",{className:"menu"},r.a.createElement("ul",{className:"menu__list"},e.map(((e,t)=>r.a.createElement(U,Object(p.a)({mobile:!0},e,{onClick:v,key:t})))))))))},W=a(122),Y=a(126),K=a(70),Q=a.n(K),q=a(153);function J(e){let{to:t,href:a,label:n,prependBaseUrlToHref:c,...l}=e;const o=Object(Y.a)(t),s=Object(Y.a)(a,{forcePrependBaseUrl:!0});return r.a.createElement(W.a,Object(p.a)({className:"footer__link-item"},a?{href:c?s:a}:{to:o},l),n)}const Z=e=>{let{sources:t,alt:a}=e;return r.a.createElement(q.a,{className:"footer__logo",alt:a,sources:t})};var ee=function(){const{footer:e}=Object(m.useThemeConfig)(),{copyright:t,links:a=[],logo:n={}}=e||{},l={light:Object(Y.a)(n.src),dark:Object(Y.a)(n.srcDark||n.src)};return e?r.a.createElement("footer",{className:Object(c.a)("footer",{"footer--dark":"dark"===e.style})},r.a.createElement("div",{className:"container"},a&&a.length>0&&r.a.createElement("div",{className:"row footer__links"},a.map(((e,t)=>r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map(((e,t)=>e.html?r.a.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(J,e))))):null)))),(n||t)&&r.a.createElement("div",{className:"footer__bottom text--center"},n&&(n.src||n.srcDark)&&r.a.createElement("div",{className:"margin-bottom--sm"},n.href?r.a.createElement(W.a,{href:n.href,className:Q.a.footerLogoLink},r.a.createElement(Z,{alt:n.alt,sources:l})):r.a.createElement(Z,{alt:n.alt,sources:l})),t?r.a.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}}):null))):null},te=a(7);const ae="light",ne="dark",re=e=>e===ne?ne:ae,ce=e=>{try{localStorage.setItem("theme",re(e))}catch(t){console.error(t)}};var le=()=>{const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:a}}=Object(m.useThemeConfig)(),[r,c]=Object(n.useState)((e=>te.a.canUseDOM?re(document.documentElement.getAttribute("data-theme")):re(e))(e)),l=Object(n.useCallback)((()=>{c(ae),ce(ae)}),[]),o=Object(n.useCallback)((()=>{c(ne),ce(ne)}),[]);return Object(n.useEffect)((()=>{document.documentElement.setAttribute("data-theme",re(r))}),[r]),Object(n.useEffect)((()=>{if(!t)try{const e=localStorage.getItem("theme");null!==e&&c(re(e))}catch(e){console.error(e)}}),[c]),Object(n.useEffect)((()=>{t&&!a||window.matchMedia("(prefers-color-scheme: dark)").addListener((e=>{let{matches:t}=e;c(t?ne:ae)}))}),[]),{isDarkTheme:r===ne,setLightTheme:l,setDarkTheme:o}},oe=a(148);var se=function(e){const{isDarkTheme:t,setLightTheme:a,setDarkTheme:n}=le();return r.a.createElement(oe.a.Provider,{value:{isDarkTheme:t,setLightTheme:a,setDarkTheme:n}},e.children)};const ie="docusaurus.tab.";var ue=()=>{const[e,t]=Object(n.useState)({}),a=Object(n.useCallback)(((e,t)=>{try{localStorage.setItem(`${ie}${e}`,t)}catch(a){console.error(a)}}),[]);return Object(n.useEffect)((()=>{try{const e={};for(let t=0;t{t((t=>({...t,[e]:n}))),a(e,n)}}};const de="docusaurus.announcement.dismiss",me="docusaurus.announcement.id";var fe=()=>{const{announcementBar:e}=Object(m.useThemeConfig)(),[t,a]=Object(n.useState)(!0),r=Object(n.useCallback)((()=>{localStorage.setItem(de,"true"),a(!0)}),[]);return Object(n.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=localStorage.getItem(me);"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;localStorage.setItem(me,t),r&&localStorage.setItem(de,"false"),(r||"false"===localStorage.getItem(de))&&a(!1)}),[]),{isAnnouncementBarClosed:t,closeAnnouncementBar:r}},he=a(147);var be=function(e){const{tabGroupChoices:t,setTabGroupChoices:a}=ue(),{isAnnouncementBarClosed:n,closeAnnouncementBar:c}=fe();return r.a.createElement(he.a.Provider,{value:{tabGroupChoices:t,setTabGroupChoices:a,isAnnouncementBarClosed:n,closeAnnouncementBar:c}},e.children)};function ve(e){let{children:t}=e;return r.a.createElement(se,null,r.a.createElement(be,null,r.a.createElement(m.DocsPreferredVersionContextProvider,null,t)))}var pe=a(25);function ge(e){let{locale:t,version:a,tag:n}=e;return r.a.createElement(pe.a,null,t&&r.a.createElement("meta",{name:"docusaurus_locale",content:`${t}`}),a&&r.a.createElement("meta",{name:"docusaurus_version",content:a}),n&&r.a.createElement("meta",{name:"docusaurus_tag",content:n}))}var ke=a(133);function Ee(){const{i18n:{defaultLocale:e,locales:t}}=Object(O.default)(),a=Object(m.useAlternatePageUtils)();return r.a.createElement(pe.a,null,t.map((e=>r.a.createElement("link",{key:e,rel:"alternate",href:a.createUrl({locale:e,fullyQualified:!0}),hrefLang:e}))),r.a.createElement("link",{rel:"alternate",href:a.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function Oe(e){let{permalink:t}=e;const{siteConfig:{url:a}}=Object(O.default)(),n=function(){const{siteConfig:{url:e}}=Object(O.default)(),{pathname:t}=Object(o.useLocation)();return e+Object(Y.a)(t)}(),c=t?`${a}${t}`:n;return r.a.createElement(pe.a,null,r.a.createElement("meta",{property:"og:url",content:c}),r.a.createElement("link",{rel:"canonical",href:c}))}function je(e){const{siteConfig:t,i18n:{currentLocale:a,localeConfigs:n}}=Object(O.default)(),{favicon:c,themeConfig:{image:l,metadatas:o}}=t,{title:s,description:i,image:u,keywords:d,searchMetadatas:f}=e,h=Object(Y.a)(c),b=a,v=n[a].direction;return r.a.createElement(r.a.Fragment,null,r.a.createElement(pe.a,null,r.a.createElement("html",{lang:b,dir:v}),c&&r.a.createElement("link",{rel:"shortcut icon",href:h})),r.a.createElement(ke.a,{title:s,description:i,keywords:d,image:u||l}),r.a.createElement(Oe,null),r.a.createElement(Ee,null),r.a.createElement(ge,Object(p.a)({tag:m.DEFAULT_SEARCH_TAG,locale:a},f)),r.a.createElement(pe.a,null,o.map(((e,t)=>r.a.createElement("meta",Object(p.a)({key:`metadata_${t}`},e))))))}a(71);var ye=function(){Object(n.useEffect)((()=>{const e="navigation-with-keyboard";function t(t){"keydown"===t.type&&"Tab"===t.key&&document.body.classList.add(e),"mousedown"===t.type&&document.body.classList.remove(e)}return document.addEventListener("keydown",t),document.addEventListener("mousedown",t),()=>{document.body.classList.remove(e),document.removeEventListener("keydown",t),document.removeEventListener("mousedown",t)}}),[])};a(72);t.a=function(e){const{children:t,noFooter:a,wrapperClassName:n}=e;return ye(),r.a.createElement(ve,null,r.a.createElement(je,e),r.a.createElement(d,null),r.a.createElement(v,null),r.a.createElement(G,null),r.a.createElement("div",{className:Object(c.a)("main-wrapper",n)},t),!a&&r.a.createElement(ee,null))}},131:function(e,t,a){"use strict";var n=a(0),r=a(148);t.a=function(){const e=Object(n.useContext)(r.a);if(null==e)throw new Error("`useThemeContext` is used outside of `Layout` Component. See https://v2.docusaurus.io/docs/api/themes/configuration#usethemecontext.");return e}},132:function(e,t,a){"use strict";var n=a(3),r=a(0),c=a.n(r),l=a(120),o=a(122),s=a(126),i=a(24),u=a(121);function d(e){let{activeBasePath:t,activeBaseRegex:a,to:r,href:l,label:i,activeClassName:u="navbar__link--active",prependBaseUrlToHref:d,...m}=e;const f=Object(s.a)(r),h=Object(s.a)(t),b=Object(s.a)(l,{forcePrependBaseUrl:!0});return c.a.createElement(o.a,Object(n.a)({},l?{href:d?b:l}:{isNavLink:!0,activeClassName:u,to:f,...t||a?{isActive:(e,t)=>a?new RegExp(a).test(t.pathname):t.pathname.startsWith(h)}:null},m),i)}function m(e){var t;let{items:a,position:o,className:s,...i}=e;const u=Object(r.useRef)(null),m=Object(r.useRef)(null),[f,h]=Object(r.useState)(!1);Object(r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[u]);const b=function(e,t){return void 0===t&&(t=!1),Object(l.a)({"navbar__item navbar__link":!t,dropdown__link:t},e)};return a?c.a.createElement("div",{ref:u,className:Object(l.a)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--left":"left"===o,"dropdown--right":"right"===o,"dropdown--show":f})},c.a.createElement(d,Object(n.a)({className:b(s)},i,{onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),h(!f))}}),null!==(t=i.children)&&void 0!==t?t:i.label),c.a.createElement("ul",{ref:m,className:"dropdown__menu"},a.map(((e,t)=>{let{className:r,...l}=e;return c.a.createElement("li",{key:t},c.a.createElement(d,Object(n.a)({onKeyDown:e=>{if(t===a.length-1&&"Tab"===e.key){e.preventDefault(),h(!1);const t=u.current.nextElementSibling;t&&t.focus()}},activeClassName:"dropdown__link--active",className:b(r,!0)},l)))})))):c.a.createElement(d,Object(n.a)({className:b(s)},i))}function f(e){var t,a,o;let{items:s,className:m,position:f,...h}=e;const b=Object(r.useRef)(null),{pathname:v}=Object(i.useLocation)(),[p,g]=Object(r.useState)((()=>{var e;return null===(e=!(null!=s&&s.some((e=>Object(u.isSamePath)(e.to,v)))))||void 0===e||e})),k=function(e,t){return void 0===t&&(t=!1),Object(l.a)("menu__link",{"menu__link--sublist":t},e)};if(!s)return c.a.createElement("li",{className:"menu__list-item"},c.a.createElement(d,Object(n.a)({className:k(m)},h)));const E=null!==(t=b.current)&&void 0!==t&&t.scrollHeight?`${null===(a=b.current)||void 0===a?void 0:a.scrollHeight}px`:void 0;return c.a.createElement("li",{className:Object(l.a)("menu__list-item",{"menu__list-item--collapsed":p})},c.a.createElement(d,Object(n.a)({role:"button",className:k(m,!0)},h,{onClick:e=>{e.preventDefault(),g((e=>!e))}}),null!==(o=h.children)&&void 0!==o?o:h.label),c.a.createElement("ul",{className:"menu__list",ref:b,style:{height:p?void 0:E}},s.map(((e,t)=>{let{className:a,...r}=e;return c.a.createElement("li",{className:"menu__list-item",key:t},c.a.createElement(d,Object(n.a)({activeClassName:"menu__link--active",className:k(a)},r,{onClick:h.onClick})))}))))}t.a=function(e){let{mobile:t=!1,...a}=e;const n=t?f:m;return c.a.createElement(n,a)}},148:function(e,t,a){"use strict";var n=a(0);const r=a.n(n).a.createContext(void 0);t.a=r},149:function(e,t,a){"use strict";var n=a(0),r=a(7);const c=()=>({scrollX:r.a.canUseDOM?window.pageXOffset:0,scrollY:r.a.canUseDOM?window.pageYOffset:0});t.a=function(e,t){void 0===t&&(t=[]);const[a,r]=Object(n.useState)(c()),l=()=>{const t=c();r(t),e&&e(t)};return Object(n.useEffect)((()=>{const e={passive:!0};return window.addEventListener("scroll",l,e),()=>window.removeEventListener("scroll",l,e)}),t),a}},150:function(e,t,a){"use strict";var n=a(0);t.a=function(e){void 0===e&&(e=!0),Object(n.useEffect)((()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[e])}},151:function(e,t,a){"use strict";a.d(t,"b",(function(){return c}));var n=a(0),r=a(7);const c={desktop:"desktop",mobile:"mobile"};t.a=function(){const e=r.a.canUseDOM;function t(){if(e)return window.innerWidth>996?c.desktop:c.mobile}const[a,l]=Object(n.useState)(t);return Object(n.useEffect)((()=>{if(e)return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a);function a(){l(t())}}),[]),a}},152:function(e,t,a){"use strict";var n=a(3),r=a(0),c=a.n(r),l=a(122),o=a(153),s=a(126),i=a(16),u=a(121);t.a=e=>{const{isClient:t}=Object(i.default)(),{navbar:{title:a,logo:r={src:""}}}=Object(u.useThemeConfig)(),{imageClassName:d,titleClassName:m,...f}=e,h=Object(s.a)(r.href||"/"),b={light:Object(s.a)(r.src),dark:Object(s.a)(r.srcDark||r.src)};return c.a.createElement(l.a,Object(n.a)({to:h},f,r.target&&{target:r.target}),r.src&&c.a.createElement(o.a,{key:t,className:d,sources:b,alt:r.alt||a||"Logo"}),null!=a&&c.a.createElement("strong",{className:m},a))}},153:function(e,t,a){"use strict";var n=a(3),r=a(0),c=a.n(r),l=a(120),o=a(16),s=a(131),i=a(68),u=a.n(i);t.a=e=>{const{isClient:t}=Object(o.default)(),{isDarkTheme:a}=Object(s.a)(),{sources:r,className:i,alt:d="",...m}=e,f=t?a?["dark"]:["light"]:["light","dark"];return c.a.createElement(c.a.Fragment,null,f.map((e=>c.a.createElement("img",Object(n.a)({key:e,src:r[e],alt:d,className:Object(l.a)(u.a.themedImage,u.a[`themedImage--${e}`],i)},m)))))}},154:function(e,t,a){"use strict";var n=a(3),r=a(0),c=a.n(r);t.a=e=>{let{width:t=30,height:a=30,className:r,...l}=e;return c.a.createElement("svg",Object(n.a)({"aria-label":"Menu",className:r,width:t,height:a,viewBox:"0 0 30 30",role:"img",focusable:"false"},l),c.a.createElement("title",null,"Menu"),c.a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}},167:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=Object.assign||function(e){for(var t=1;tthis.startX&&(this.setState({checked:!0}),this.startX=t,this.activated=ta?this.previouslyChecked!==this.state.checked&&(this.setState({checked:!1}),this.previouslyChecked=this.state.checked,t.click()):this.startX-4=0||Object.prototype.hasOwnProperty.call(e,n)&&(a[n]=e[n]);return a}(t,["className","icons"])),c=(0,o.default)("react-toggle",{"react-toggle--checked":this.state.checked,"react-toggle--focus":this.state.hasFocus,"react-toggle--disabled":this.props.disabled},a);return l.default.createElement("div",{className:c,onClick:this.handleClick,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd},l.default.createElement("div",{className:"react-toggle-track"},l.default.createElement("div",{className:"react-toggle-track-check"},this.getIcon("checked")),l.default.createElement("div",{className:"react-toggle-track-x"},this.getIcon("unchecked"))),l.default.createElement("div",{className:"react-toggle-thumb"}),l.default.createElement("input",n({},r,{ref:function(t){e.input=t},onFocus:this.handleFocus,onBlur:this.handleBlur,className:"react-toggle-screenreader-only",type:"checkbox"})))}}]),t}(c.PureComponent);t.default=f,f.displayName="Toggle",f.defaultProps={icons:{checked:l.default.createElement(i.default,null),unchecked:l.default.createElement(u.default,null)}},f.propTypes={checked:s.default.bool,disabled:s.default.bool,defaultChecked:s.default.bool,onChange:s.default.func,onFocus:s.default.func,onBlur:s.default.func,className:s.default.string,name:s.default.string,value:s.default.string,id:s.default.string,"aria-labelledby":s.default.string,"aria-label":s.default.string,icons:s.default.oneOfType([s.default.bool,s.default.shape({checked:s.default.node,unchecked:s.default.node})])}},168:function(e,t,a){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;t0){var a=t[0];return{x:a.clientX,y:a.clientY}}var n=e.pageX;if(void 0!==n)return{x:n,y:e.pageY}}return{x:0,y:0}}},172:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return u}));var n=a(3),r=a(0),c=a.n(r),l=a(132),o=a(127),s=a(121);const i=e=>e.docs.find((t=>t.id===e.mainDocId));function u(e){var t;let{label:a,to:r,docsPluginId:u,...d}=e;const m=Object(o.useActiveVersion)(u),{preferredVersion:f}=Object(s.useDocsPreferredVersion)(u),h=Object(o.useLatestVersion)(u),b=null!==(t=null!=m?m:f)&&void 0!==t?t:h,v=null!=a?a:b.label,p=null!=r?r:i(b).path;return c.a.createElement(l.a,Object(n.a)({},d,{label:v,to:p}))}},173:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return u}));var n=a(3),r=a(0),c=a.n(r),l=a(132),o=a(127),s=a(121);const i=e=>e.docs.find((t=>t.id===e.mainDocId));function u(e){var t,a;let{mobile:r,docsPluginId:u,dropdownActiveClassDisabled:d,dropdownItemsBefore:m,dropdownItemsAfter:f,...h}=e;const b=Object(o.useActiveDocContext)(u),v=Object(o.useVersions)(u),p=Object(o.useLatestVersion)(u),{preferredVersion:g,savePreferredVersionName:k}=Object(s.useDocsPreferredVersion)(u);const E=null!==(t=null!==(a=b.activeVersion)&&void 0!==a?a:g)&&void 0!==t?t:p,O=r?"Versions":E.label,j=r?void 0:i(E).path;return c.a.createElement(l.a,Object(n.a)({},h,{mobile:r,label:O,to:j,items:function(){const e=v.map((e=>{const t=(null==b?void 0:b.alternateDocVersions[e.name])||i(e);return{isNavLink:!0,label:e.label,to:t.path,isActive:()=>e===(null==b?void 0:b.activeVersion),onClick:()=>{k(e.name)}}})),t=[...m,...e,...f];if(!(t.length<=1))return t}(),isActive:d?()=>!1:void 0}))}},174:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return u}));var n=a(3),r=a(0),c=a.n(r),l=a(132),o=a(127),s=a(120),i=a(121);function u(e){var t;let{docId:a,activeSidebarClassName:r,label:u,docsPluginId:d,...m}=e;const{activeVersion:f,activeDoc:h}=Object(o.useActiveDocContext)(d),{preferredVersion:b}=Object(i.useDocsPreferredVersion)(d),v=Object(o.useLatestVersion)(d),p=null!==(t=null!=f?f:b)&&void 0!==t?t:v,g=p.docs.find((e=>e.id===a));if(!g)throw new Error(`DocNavbarItem: couldn't find any doc with id=${a} in version ${p.name}.\nAvailable docIds=\n- ${p.docs.join("\n- ")}`);return c.a.createElement(l.a,Object(n.a)({exact:!0},m,{className:Object(s.a)(m.className,{[r]:h&&h.sidebar===g.sidebar}),label:null!=u?u:g.id,to:g.path}))}}}]); \ No newline at end of file diff --git a/assets/js/2.c6b0e83a.js.LICENSE.txt b/assets/js/2.c6b0e83a.js.LICENSE.txt new file mode 100644 index 0000000..0c20a87 --- /dev/null +++ b/assets/js/2.c6b0e83a.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ diff --git a/assets/js/29391012.e7e097e4.js b/assets/js/29391012.e7e097e4.js new file mode 100644 index 0000000..7c74131 --- /dev/null +++ b/assets/js/29391012.e7e097e4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{83:function(e,n,i){"use strict";i.r(n),i.d(n,"frontMatter",(function(){return a})),i.d(n,"metadata",(function(){return l})),i.d(n,"toc",(function(){return r})),i.d(n,"default",(function(){return s}));var t=i(3),o=(i(0),i(124));const a={title:"Reference"},l={unversionedId:"buildzri/reference",id:"buildzri/reference",isDocsHomePage:!1,title:"Reference",description:"You can configure the BuildZri program execution via two approches: editing the configuration file or",source:"@site/docs/buildzri/reference.md",slug:"/buildzri/reference",permalink:"/docs/buildzri/reference",editUrl:"https://github.com/codezri/codezri.github.io/edit/master/docs/buildzri/reference.md",version:"current",sidebar:"docs",previous:{title:"How to Use",permalink:"/docs/buildzri/integrate"}},r=[{value:"Configuration file",id:"configuration-file",children:[{value:"std: string",id:"std-string",children:[]},{value:"version: string",id:"version-string",children:[]},{value:"output: string",id:"output-string",children:[]},{value:"include: object",id:"include-object",children:[]},{value:"source: object",id:"source-object",children:[]},{value:"options: object",id:"options-object",children:[]},{value:"definitions: object",id:"definitions-object",children:[]}]},{value:"Command-line arguments",id:"command-line-arguments",children:[{value:"--verbose",id:"--verbose",children:[]}]},{value:"Global variables",id:"global-variables",children:[{value:"BZ_VERSION",id:"bz_version",children:[]},{value:"BZ_OS",id:"bz_os",children:[]},{value:"BZ_ARCHL",id:"bz_archl",children:[]},{value:"BZ_ARCH",id:"bz_arch",children:[]},{value:"BZ_COMMIT",id:"bz_commit",children:[]}]},{value:"Cross-platform definitions",id:"cross-platform-definitions",children:[]}],c={toc:r},b="wrapper";function s(e){let{components:n,...i}=e;return Object(o.b)(b,Object(t.a)({},c,i,{components:n,mdxType:"MDXLayout"}),Object(o.b)("p",null,"You can configure the BuildZri program execution via two approches: editing the configuration file or\nproviding CLI arguments."),Object(o.b)("h2",{id:"configuration-file"},"Configuration file"),Object(o.b)("p",null,"The ",Object(o.b)("inlineCode",{parentName:"p"},"buildzri.config.json")," file holds all build configurations of the particular C++ project. This file\nis mandatory to start compilation with the BuildZri tool."),Object(o.b)("h3",{id:"std-string"},Object(o.b)("inlineCode",{parentName:"h3"},"std: string")),Object(o.b)("p",null,"Defines the standard C++ version. i.e.,: ",Object(o.b)("inlineCode",{parentName:"p"},"c++17")),Object(o.b)("h3",{id:"version-string"},Object(o.b)("inlineCode",{parentName:"h3"},"version: string")),Object(o.b)("p",null,"Project version. i.e.,: ",Object(o.b)("inlineCode",{parentName:"p"},"1.0.0"),". The ",Object(o.b)("inlineCode",{parentName:"p"},"BZ_VERSION")," global variable receives this value before the compilation\nprocess. The version string won't be validated, so you use any preferred version number format."),Object(o.b)("h3",{id:"output-string"},Object(o.b)("inlineCode",{parentName:"h3"},"output: string")),Object(o.b)("p",null,"Binary file output of the C++ project. BuildZri automatically appends ",Object(o.b)("inlineCode",{parentName:"p"},".exe")," to this value on Windows."),Object(o.b)("h3",{id:"include-object"},Object(o.b)("inlineCode",{parentName:"h3"},"include: object")),Object(o.b)("p",null,"Directories to be included into the compiler execution for searching for header files."),Object(o.b)("p",null,"Example:"),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-json"},'"include": {\n "*": [\n ".",\n "lib",\n "lib/asio/include"\n ],\n "windows": [\n "lib/webview/windows"\n ]\n}\n')),Object(o.b)("h3",{id:"source-object"},Object(o.b)("inlineCode",{parentName:"h3"},"source: object")),Object(o.b)("p",null,"Source files to be included into the compiler execution. Supports wildcard definitions with the\nPython ",Object(o.b)("a",{parentName:"p",href:"https://docs.python.org/3/library/glob.html#glob.glob"},"glob syntax"),"."),Object(o.b)("p",null,"Example:"),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-json"},'"source": {\n "*": [\n "api/*/*.cpp",\n "process.cpp",\n "ui.cpp"\n ],\n "windows": [\n "window_win.cpp"\n ],\n "darwin": [\n "window_mac.mm"\n ],\n "linux": [\n "window_linux.cpp",\n "lib/linux/*.cpp"\n ]\n}\n')),Object(o.b)("h3",{id:"options-object"},Object(o.b)("inlineCode",{parentName:"h3"},"options: object")),Object(o.b)("p",null,"Additional compiler flags for each compiler implementation. Check the following documentations to learn\nmore about compiler flags:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"GNU C/C++ compiler flags: ",Object(o.b)("a",{parentName:"li",href:"https://man7.org/linux/man-pages/man1/gcc.1.html"},"manual")),Object(o.b)("li",{parentName:"ul"},"Apple Clang LLVM compiler flags: ",Object(o.b)("a",{parentName:"li",href:"https://clang.llvm.org/docs/UsersManual.html"},"manual")),Object(o.b)("li",{parentName:"ul"},"Microsoft Visual C++ compiler flags: ",Object(o.b)("a",{parentName:"li",href:"https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options"},"manual"))),Object(o.b)("p",null,"Example:"),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-json"},'"options": {\n "windows": [\n "/EHsc"\n ],\n "darwin": [\n "-framework Cocoa"\n ],\n "linux": [\n "-Os",\n "-pipe"\n ]\n}\n')),Object(o.b)("h3",{id:"definitions-object"},Object(o.b)("inlineCode",{parentName:"h3"},"definitions: object")),Object(o.b)("p",null,"C/C++ preprocessor macro defnitions."),Object(o.b)("p",null,"Example:"),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-json"},'"definitions": {\n "*": [\n "PROGRAM_VERSION=\\\\\\"${BZ_VERSION}\\\\\\""\n ],\n "linux": [\n "WEBVIEW_GTK=1",\n ],\n "darwin": [\n "WEBVIEW_COCOA=1"\n ],\n "windows": [\n "_HAS_STD_BYTE=0"\n ]\n}\n')),Object(o.b)("h2",{id:"command-line-arguments"},"Command-line arguments"),Object(o.b)("p",null,"Command-line arguments help you to change the build tool execution behavior without changing the configuration\nfile."),Object(o.b)("h3",{id:"--verbose"},Object(o.b)("inlineCode",{parentName:"h3"},"--verbose")),Object(o.b)("p",null,"Prints build tool progress into the console. This CLI argument is helpful for diagnosing errors in the pre-compilation\nstages."),Object(o.b)("h2",{id:"global-variables"},"Global variables"),Object(o.b)("p",null,"Global variables can be used to change the configuration values dynamically before the compilation process.\nYou can use global variables with ",Object(o.b)("inlineCode",{parentName:"p"},"output"),", ",Object(o.b)("inlineCode",{parentName:"p"},"definitions"),", and ",Object(o.b)("inlineCode",{parentName:"p"},"options")," configuration keys.\nGlobal variables come with the following syntax."),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre"},"${BZ_VARIABLE_NAME}\n")),Object(o.b)("p",null,"BuildZri supports the following global variables:"),Object(o.b)("h3",{id:"bz_version"},Object(o.b)("inlineCode",{parentName:"h3"},"BZ_VERSION")),Object(o.b)("p",null,"Project version from the configuration file."),Object(o.b)("h3",{id:"bz_os"},Object(o.b)("inlineCode",{parentName:"h3"},"BZ_OS")),Object(o.b)("p",null,"Operating system shortname: ",Object(o.b)("inlineCode",{parentName:"p"},"linux"),", ",Object(o.b)("inlineCode",{parentName:"p"},"mac"),", or ",Object(o.b)("inlineCode",{parentName:"p"},"win")),Object(o.b)("h3",{id:"bz_archl"},Object(o.b)("inlineCode",{parentName:"h3"},"BZ_ARCHL")),Object(o.b)("p",null,"The current machine's CPU architecture. This value is obtained with the ",Object(o.b)("inlineCode",{parentName:"p"},"platform.machine().lower()"),"\nPython code snippet."),Object(o.b)("h3",{id:"bz_arch"},Object(o.b)("inlineCode",{parentName:"h3"},"BZ_ARCH")),Object(o.b)("p",null,"Shortname of the ",Object(o.b)("inlineCode",{parentName:"p"},"BZ_ARCHL")," value. i.e.,: This variable will return ",Object(o.b)("inlineCode",{parentName:"p"},"x64")," instead of ",Object(o.b)("inlineCode",{parentName:"p"},"amd64")," or ",Object(o.b)("inlineCode",{parentName:"p"},"x86_64"),"."),Object(o.b)("h3",{id:"bz_commit"},Object(o.b)("inlineCode",{parentName:"h3"},"BZ_COMMIT")),Object(o.b)("p",null,"The latest commit hash of the Git repository. This value is extracted by using the following Git command via\nthe Python script:"),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-bash"},'git log -n 1 main --pretty=format:"%H"\n')),Object(o.b)("p",null,"Example usage:"),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-json"},'"definitions": {\n "*": [\n "PROGRAM_COMMIT=\\\\\\"${BZ_COMMIT}\\\\\\""\n ],\n')),Object(o.b)("h2",{id:"cross-platform-definitions"},"Cross-platform definitions"),Object(o.b)("p",null,"BuildZri is a cross-platform C/C++ build tool, so how to define configuration values for each operating system?\nCross-platform configuration objects typically accept the following properties:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"*"),": For all operating systems"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"linux"),": For GNU/Linux platforms"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"darwin"),": For macOS"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"windows"),": For Windows")),Object(o.b)("p",null,"You can define configurations for each operating system by using the above properties."),Object(o.b)("p",null,"For example, the following JSON snippet set platform-specific macros for each operating system and\nset one generic macro for all operating systems:"),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-json"},'"definitions": {\n "*": [\n "PROGRAM_VERSION=\\\\\\"${BZ_VERSION}\\\\\\""\n ],\n "linux": [\n "WEBVIEW_GTK=1",\n ],\n "darwin": [\n "WEBVIEW_COCOA=1"\n ],\n "windows": [\n "_HAS_STD_BYTE=0"\n ]\n}\n')),Object(o.b)("p",null,"This cross-platform definition syntax works with ",Object(o.b)("inlineCode",{parentName:"p"},"source"),", ",Object(o.b)("inlineCode",{parentName:"p"},"include"),", ",Object(o.b)("inlineCode",{parentName:"p"},"definitions"),", and ",Object(o.b)("inlineCode",{parentName:"p"},"options")," configuration\nobjects."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/37b74aca.ed21aeb5.js b/assets/js/37b74aca.ed21aeb5.js new file mode 100644 index 0000000..7afd0e5 --- /dev/null +++ b/assets/js/37b74aca.ed21aeb5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{84:function(a){a.exports=JSON.parse('{"allTagsPath":"/blog/tags","slug":"c","name":"c++","count":1,"permalink":"/blog/tags/c"}')}}]); \ No newline at end of file diff --git a/assets/js/39.f7005d52.js b/assets/js/39.f7005d52.js new file mode 100644 index 0000000..dfe4f6d --- /dev/null +++ b/assets/js/39.f7005d52.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{128:function(e,t,a){"use strict";a.d(t,"a",(function(){return c}));var n=a(0),r=a.n(n),l=a(120),o=a(122),s=a(58),i=a.n(s);function c(e){let{sidebar:t}=e;return 0===t.items.length?null:r.a.createElement("div",{className:Object(l.a)(i.a.sidebar,"thin-scrollbar")},r.a.createElement("h3",{className:i.a.sidebarItemTitle},t.title),r.a.createElement("ul",{className:i.a.sidebarItemList},t.items.map((e=>r.a.createElement("li",{key:e.permalink,className:i.a.sidebarItem},r.a.createElement(o.a,{isNavLink:!0,to:e.permalink,className:i.a.sidebarItemLink,activeClassName:i.a.sidebarItemLinkActive},e.title))))))}},129:function(e,t){function a(e){let t,a=[];for(let n of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(n))a.push(parseInt(n,10));else if(t=n.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,n,r,l]=t;if(n&&l){n=parseInt(n),l=parseInt(l);const e=n0&&e[a-1]===t?e:e.concat(t)};function h(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(a[n]=e[n]);return a}var y=function(e){function t(){for(var t=this,a=[],n=arguments.length;n--;)a[n]=arguments[n];e.apply(this,a),m(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var a=e.theme?function(e,t){var a=e.plain,n=Object.create(null),r=e.styles.reduce((function(e,a){var n=a.languages,r=a.style;return n&&!n.includes(t)||a.types.forEach((function(t){var a=p({},e[t],r);e[t]=a})),e}),n);return r.root=a,r.plain=p({},a,{backgroundColor:null}),r}(e.theme,e.language):void 0;return t.themeDict=a})),m(this,"getLineProps",(function(e){var a=e.key,n=e.className,r=e.style,l=p({},h(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),o=t.getThemeDict(t.props);return void 0!==o&&(l.style=o.plain),void 0!==r&&(l.style=void 0!==l.style?p({},l.style,r):r),void 0!==a&&(l.key=a),n&&(l.className+=" "+n),l})),m(this,"getStyleForToken",(function(e){var a=e.types,n=e.empty,r=a.length,l=t.getThemeDict(t.props);if(void 0!==l){if(1===r&&"plain"===a[0])return n?{display:"inline-block"}:void 0;if(1===r&&!n)return l[a[0]];var o=n?{display:"inline-block"}:{},s=a.map((function(e){return l[e]}));return Object.assign.apply(Object,[o].concat(s))}})),m(this,"getTokenProps",(function(e){var a=e.key,n=e.className,r=e.style,l=e.token,o=p({},h(e,["key","className","style","token"]),{className:"token "+l.types.join(" "),children:l.content,style:t.getStyleForToken(l),key:void 0});return void 0!==r&&(o.style=void 0!==o.style?p({},o.style,r):r),void 0!==a&&(o.key=a),n&&(o.className+=" "+n),o})),m(this,"tokenize",(function(e,t,a,n){var r={code:t,grammar:a,language:n,tokens:[]};e.hooks.run("before-tokenize",r);var l=r.tokens=e.tokenize(r.code,r.grammar,r.language);return e.hooks.run("after-tokenize",r),l}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,a=e.language,n=e.code,r=e.children,l=this.getThemeDict(this.props),o=t.languages[a];return r({tokens:function(e){for(var t=[[]],a=[e],n=[0],r=[e.length],l=0,o=0,s=[],i=[s];o>-1;){for(;(l=n[o]++)0?m:["plain"],c=p):(m=g(m,p.type),p.alias&&(m=g(m,p.alias)),c=p.content),"string"==typeof c){var h=c.split(u),y=h.length;s.push({types:m,content:h[0]});for(var b=1;b{const{prism:e}=Object(j.useThemeConfig)(),{isDarkTheme:t}=Object(E.a)(),a=e.theme||k,n=e.darkTheme||a;return t?n:a},O=a(123),T=a(59),_=a.n(T);const x=/{([\d,-]+)}/,L=function(e){void 0===e&&(e=["js","jsBlock","jsx","python","html"]);const t={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},python:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},a=["highlight-next-line","highlight-start","highlight-end"].join("|"),n=e.map((e=>`(?:${t[e].start}\\s*(${a})\\s*${t[e].end})`)).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)},w=/(?:title=")(.*)(?:")/;function C(e){let{children:t,className:a,metastring:l}=e;const{prism:i}=Object(j.useThemeConfig)(),[m,p]=Object(n.useState)(!1),[u,d]=Object(n.useState)(!1);Object(n.useEffect)((()=>{d(!0)}),[]);const g=Object(n.useRef)(null);let h=[],y="";const v=N(),k=Array.isArray(t)?t.join(""):t;if(l&&x.test(l)){const e=l.match(x)[1];h=f()(e).filter((e=>e>0))}l&&w.test(l)&&(y=l.match(w)[1]);let E=a&&a.replace(/language-/,"");!E&&i.defaultLanguage&&(E=i.defaultLanguage);let T=k.replace(/\n$/,"");if(0===h.length&&void 0!==E){let e="";const t=(e=>{switch(e){case"js":case"javascript":case"ts":case"typescript":return L(["js","jsBlock"]);case"jsx":case"tsx":return L(["js","jsBlock","jsx"]);case"html":return L(["js","jsBlock","html"]);case"python":case"py":return L(["python"]);default:return L()}})(E),a=k.replace(/\n$/,"").split("\n");let n;for(let r=0;re||t),void 0)){case"highlight-next-line":e+=`${l},`;break;case"highlight-start":n=l;break;case"highlight-end":e+=`${n}-${l-1},`}a.splice(r,1)}else r+=1}h=f()(e),T=a.join("\n")}const C=()=>{!function(e,{target:t=document.body}={}){const a=document.createElement("textarea"),n=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";const r=document.getSelection();let l=!1;r.rangeCount>0&&(l=r.getRangeAt(0)),t.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;let o=!1;try{o=document.execCommand("copy")}catch{}a.remove(),l&&(r.removeAllRanges(),r.addRange(l)),n&&n.focus()}(T),p(!0),setTimeout((()=>p(!1)),2e3)};return r.a.createElement(b,Object(o.a)({},c,{key:String(u),theme:v,code:T,language:E}),(e=>{let{className:t,style:a,tokens:n,getLineProps:l,getTokenProps:i}=e;return r.a.createElement("div",{className:_.a.codeBlockContainer},y&&r.a.createElement("div",{style:a,className:_.a.codeBlockTitle},y),r.a.createElement("div",{className:Object(s.a)(_.a.codeBlockContent,E)},r.a.createElement("div",{tabIndex:0,className:Object(s.a)(t,_.a.codeBlock,"thin-scrollbar",{[_.a.codeBlockWithTitle]:y})},r.a.createElement("div",{className:_.a.codeBlockLines,style:a},n.map(((e,t)=>{1===e.length&&""===e[0].content&&(e[0].content="\n");const a=l({line:e,key:t});return h.includes(t+1)&&(a.className=`${a.className} docusaurus-highlight-code-line`),r.a.createElement("div",Object(o.a)({key:t},a),e.map(((e,t)=>r.a.createElement("span",Object(o.a)({key:t},i({token:e,key:t}))))))})))),r.a.createElement("button",{ref:g,type:"button","aria-label":Object(O.b)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:Object(s.a)(_.a.copyButton),onClick:C},m?r.a.createElement(O.a,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):r.a.createElement(O.a,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy"))))}))}a(60);var P=a(61),B=a.n(P);var I=e=>function(t){let{id:a,...n}=t;const{navbar:{hideOnScroll:l}}=Object(j.useThemeConfig)();return a?r.a.createElement(e,n,r.a.createElement("a",{"aria-hidden":"true",tabIndex:-1,className:Object(s.a)("anchor",{[B.a.enhancedAnchor]:!l}),id:a}),n.children,r.a.createElement("a",{className:"hash-link",href:`#${a}`,title:Object(O.b)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"#")):r.a.createElement(e,n)};const A={code:e=>{const{children:t}=e;return"string"==typeof t?t.includes("\n")?r.a.createElement(C,e):r.a.createElement("code",e):t},a:e=>r.a.createElement(l.a,e),pre:e=>{const{children:t}=e;return r.a.createElement(C,Object(n.isValidElement)(t)?null==t?void 0:t.props:{children:t})},h1:I("h1"),h2:I("h2"),h3:I("h3"),h4:I("h4"),h5:I("h5"),h6:I("h6")};t.a=A},134:function(e,t,a){"use strict";var n=a(0),r=a.n(n),l=a(120),o=a(124),s=a(123),i=a(122),c=a(130),m=a(133),p=a(62),u=a.n(p),d=a(121);t.a=function(e){const t=function(){const{selectMessage:e}=Object(d.usePluralForm)();return t=>{const a=Math.ceil(t);return e(a,Object(s.b)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". 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 min read|{readingTime} min read"},{readingTime:a}))}}(),{children:a,frontMatter:n,metadata:p,truncated:g,isBlogPostPage:h=!1}=e,{date:y,formattedDate:b,permalink:v,tags:f,readingTime:k}=p,{author:E,title:j,image:N,keywords:O}=n,T=n.author_url||n.authorURL,_=n.author_title||n.authorTitle,x=n.author_image_url||n.authorImageURL;return r.a.createElement(r.a.Fragment,null,r.a.createElement(m.a,{keywords:O,image:N}),r.a.createElement("article",{className:h?void 0:"margin-bottom--xl"},(()=>{const e=h?"h1":"h2";return r.a.createElement("header",null,r.a.createElement(e,{className:Object(l.a)("margin-bottom--sm",u.a.blogPostTitle)},h?j:r.a.createElement(i.a,{to:v},j)),r.a.createElement("div",{className:"margin-vert--md"},r.a.createElement("time",{dateTime:y,className:u.a.blogPostDate},b,k&&r.a.createElement(r.a.Fragment,null," \xb7 ",t(k)))),r.a.createElement("div",{className:"avatar margin-vert--md"},x&&r.a.createElement(i.a,{className:"avatar__photo-link avatar__photo",href:T},r.a.createElement("img",{src:x,alt:E})),r.a.createElement("div",{className:"avatar__intro"},E&&r.a.createElement(r.a.Fragment,null,r.a.createElement("h4",{className:"avatar__name"},r.a.createElement(i.a,{href:T},E)),r.a.createElement("small",{className:"avatar__subtitle"},_)))))})(),r.a.createElement("div",{className:"markdown"},r.a.createElement(o.a,{components:c.a},a)),(f.length>0||g)&&r.a.createElement("footer",{className:"row margin-vert--lg"},f.length>0&&r.a.createElement("div",{className:"col"},r.a.createElement("strong",null,r.a.createElement(s.a,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),f.map((e=>{let{label:t,permalink:a}=e;return r.a.createElement(i.a,{key:a,className:"margin-horiz--sm",to:a},t)}))),g&&r.a.createElement("div",{className:"col text--right"},r.a.createElement(i.a,{to:p.permalink,"aria-label":`Read more about ${j}`},r.a.createElement("strong",null,r.a.createElement(s.a,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More")))))))}},138:function(e,t,a){"use strict";var n=a(0);t.a=function(e,t,a){const[r,l]=Object(n.useState)(void 0);Object(n.useEffect)((()=>{function n(){const n=function(){const e=Array.from(document.getElementsByClassName("anchor")),t=e.find((e=>{const{top:t}=e.getBoundingClientRect();return t>=a}));if(t){if(t.getBoundingClientRect().top>=a){const a=e[e.indexOf(t)-1];return null!=a?a:t}return t}return e[e.length-1]}();if(n){let a=0,o=!1;const s=document.getElementsByClassName(e);for(;a{document.removeEventListener("scroll",n),document.removeEventListener("resize",n)}}))}},142:function(e,t,a){"use strict";a.d(t,"a",(function(){return p}));var n=a(0),r=a.n(n),l=a(123),o=a(3),s=a(120),i=a(63),c=a.n(i);var m=e=>{let{className:t,...a}=e;return r.a.createElement("svg",Object(o.a)({fill:"currentColor",height:"1.2em",width:"1.2em",preserveAspectRatio:"xMidYMid meet",role:"img",viewBox:"0 0 40 40",className:Object(s.a)(c.a.iconEdit,t),"aria-label":"Edit page"},a),r.a.createElement("g",null,r.a.createElement("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 p(e){let{editUrl:t}=e;return r.a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener"},r.a.createElement(m,null),r.a.createElement(l.a,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},181:function(e,t,a){"use strict";var n=a(0),r=a.n(n),l=a(123),o=a(122);t.a=function(e){const{nextItem:t,prevItem:a}=e;return r.a.createElement("nav",{className:"pagination-nav","aria-label":Object(l.b)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},r.a.createElement("div",{className:"pagination-nav__item"},a&&r.a.createElement(o.a,{className:"pagination-nav__link",to:a.permalink},r.a.createElement("div",{className:"pagination-nav__sublabel"},r.a.createElement(l.a,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")),r.a.createElement("div",{className:"pagination-nav__label"},"\xab ",a.title))),r.a.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},t&&r.a.createElement(o.a,{className:"pagination-nav__link",to:t.permalink},r.a.createElement("div",{className:"pagination-nav__sublabel"},r.a.createElement(l.a,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post")),r.a.createElement("div",{className:"pagination-nav__label"},t.title," \xbb"))))}}}]); \ No newline at end of file diff --git a/assets/js/40.f824a1ad.js b/assets/js/40.f824a1ad.js new file mode 100644 index 0000000..ee2533b --- /dev/null +++ b/assets/js/40.f824a1ad.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{117:function(e,t,a){"use strict";a.r(t);var n=a(0),r=a.n(n),l=a(16),o=a(125),s=a(134),c=a(122),i=a(123);var m=function(e){const{metadata:t}=e,{previousPage:a,nextPage:n}=t;return r.a.createElement("nav",{className:"pagination-nav","aria-label":Object(i.b)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},r.a.createElement("div",{className:"pagination-nav__item"},a&&r.a.createElement(c.a,{className:"pagination-nav__link",to:a},r.a.createElement("div",{className:"pagination-nav__label"},"\xab"," ",r.a.createElement(i.a,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")))),r.a.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},n&&r.a.createElement(c.a,{className:"pagination-nav__link",to:n},r.a.createElement("div",{className:"pagination-nav__label"},r.a.createElement(i.a,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries")," ","\xbb"))))},p=a(128);t.default=function(e){const{metadata:t,items:a,sidebar:n}=e,{siteConfig:{title:c}}=Object(l.default)(),{blogDescription:i,blogTitle:d,permalink:u}=t,g="/"===u?c:d;return r.a.createElement(o.a,{title:g,description:i,wrapperClassName:"blog-wrapper",searchMetadatas:{tag:"blog_posts_list"}},r.a.createElement("div",{className:"container margin-vert--lg"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--3"},r.a.createElement(p.a,{sidebar:n})),r.a.createElement("main",{className:"col col--7"},a.map((e=>{let{content:t}=e;return r.a.createElement(s.a,{key:t.metadata.permalink,frontMatter:t.frontMatter,metadata:t.metadata,truncated:t.metadata.truncated},r.a.createElement(t,null))})),r.a.createElement(m,{metadata:t})))))}},128:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(0),r=a.n(n),l=a(120),o=a(122),s=a(58),c=a.n(s);function i(e){let{sidebar:t}=e;return 0===t.items.length?null:r.a.createElement("div",{className:Object(l.a)(c.a.sidebar,"thin-scrollbar")},r.a.createElement("h3",{className:c.a.sidebarItemTitle},t.title),r.a.createElement("ul",{className:c.a.sidebarItemList},t.items.map((e=>r.a.createElement("li",{key:e.permalink,className:c.a.sidebarItem},r.a.createElement(o.a,{isNavLink:!0,to:e.permalink,className:c.a.sidebarItemLink,activeClassName:c.a.sidebarItemLinkActive},e.title))))))}},129:function(e,t){function a(e){let t,a=[];for(let n of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(n))a.push(parseInt(n,10));else if(t=n.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,n,r,l]=t;if(n&&l){n=parseInt(n),l=parseInt(l);const e=n0&&e[a-1]===t?e:e.concat(t)};function h(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(a[n]=e[n]);return a}var y=function(e){function t(){for(var t=this,a=[],n=arguments.length;n--;)a[n]=arguments[n];e.apply(this,a),m(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var a=e.theme?function(e,t){var a=e.plain,n=Object.create(null),r=e.styles.reduce((function(e,a){var n=a.languages,r=a.style;return n&&!n.includes(t)||a.types.forEach((function(t){var a=p({},e[t],r);e[t]=a})),e}),n);return r.root=a,r.plain=p({},a,{backgroundColor:null}),r}(e.theme,e.language):void 0;return t.themeDict=a})),m(this,"getLineProps",(function(e){var a=e.key,n=e.className,r=e.style,l=p({},h(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),o=t.getThemeDict(t.props);return void 0!==o&&(l.style=o.plain),void 0!==r&&(l.style=void 0!==l.style?p({},l.style,r):r),void 0!==a&&(l.key=a),n&&(l.className+=" "+n),l})),m(this,"getStyleForToken",(function(e){var a=e.types,n=e.empty,r=a.length,l=t.getThemeDict(t.props);if(void 0!==l){if(1===r&&"plain"===a[0])return n?{display:"inline-block"}:void 0;if(1===r&&!n)return l[a[0]];var o=n?{display:"inline-block"}:{},s=a.map((function(e){return l[e]}));return Object.assign.apply(Object,[o].concat(s))}})),m(this,"getTokenProps",(function(e){var a=e.key,n=e.className,r=e.style,l=e.token,o=p({},h(e,["key","className","style","token"]),{className:"token "+l.types.join(" "),children:l.content,style:t.getStyleForToken(l),key:void 0});return void 0!==r&&(o.style=void 0!==o.style?p({},o.style,r):r),void 0!==a&&(o.key=a),n&&(o.className+=" "+n),o})),m(this,"tokenize",(function(e,t,a,n){var r={code:t,grammar:a,language:n,tokens:[]};e.hooks.run("before-tokenize",r);var l=r.tokens=e.tokenize(r.code,r.grammar,r.language);return e.hooks.run("after-tokenize",r),l}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,a=e.language,n=e.code,r=e.children,l=this.getThemeDict(this.props),o=t.languages[a];return r({tokens:function(e){for(var t=[[]],a=[e],n=[0],r=[e.length],l=0,o=0,s=[],c=[s];o>-1;){for(;(l=n[o]++)0?m:["plain"],i=p):(m=g(m,p.type),p.alias&&(m=g(m,p.alias)),i=p.content),"string"==typeof i){var h=i.split(d),y=h.length;s.push({types:m,content:h[0]});for(var b=1;b{const{prism:e}=Object(N.useThemeConfig)(),{isDarkTheme:t}=Object(E.a)(),a=e.theme||k,n=e.darkTheme||a;return t?n:a},T=a(123),O=a(59),_=a.n(O);const w=/{([\d,-]+)}/,x=function(e){void 0===e&&(e=["js","jsBlock","jsx","python","html"]);const t={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},python:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},a=["highlight-next-line","highlight-start","highlight-end"].join("|"),n=e.map((e=>`(?:${t[e].start}\\s*(${a})\\s*${t[e].end})`)).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)},L=/(?:title=")(.*)(?:")/;function C(e){let{children:t,className:a,metastring:l}=e;const{prism:c}=Object(N.useThemeConfig)(),[m,p]=Object(n.useState)(!1),[d,u]=Object(n.useState)(!1);Object(n.useEffect)((()=>{u(!0)}),[]);const g=Object(n.useRef)(null);let h=[],y="";const v=j(),k=Array.isArray(t)?t.join(""):t;if(l&&w.test(l)){const e=l.match(w)[1];h=f()(e).filter((e=>e>0))}l&&L.test(l)&&(y=l.match(L)[1]);let E=a&&a.replace(/language-/,"");!E&&c.defaultLanguage&&(E=c.defaultLanguage);let O=k.replace(/\n$/,"");if(0===h.length&&void 0!==E){let e="";const t=(e=>{switch(e){case"js":case"javascript":case"ts":case"typescript":return x(["js","jsBlock"]);case"jsx":case"tsx":return x(["js","jsBlock","jsx"]);case"html":return x(["js","jsBlock","html"]);case"python":case"py":return x(["python"]);default:return x()}})(E),a=k.replace(/\n$/,"").split("\n");let n;for(let r=0;re||t),void 0)){case"highlight-next-line":e+=`${l},`;break;case"highlight-start":n=l;break;case"highlight-end":e+=`${n}-${l-1},`}a.splice(r,1)}else r+=1}h=f()(e),O=a.join("\n")}const C=()=>{!function(e,{target:t=document.body}={}){const a=document.createElement("textarea"),n=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";const r=document.getSelection();let l=!1;r.rangeCount>0&&(l=r.getRangeAt(0)),t.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;let o=!1;try{o=document.execCommand("copy")}catch{}a.remove(),l&&(r.removeAllRanges(),r.addRange(l)),n&&n.focus()}(O),p(!0),setTimeout((()=>p(!1)),2e3)};return r.a.createElement(b,Object(o.a)({},i,{key:String(d),theme:v,code:O,language:E}),(e=>{let{className:t,style:a,tokens:n,getLineProps:l,getTokenProps:c}=e;return r.a.createElement("div",{className:_.a.codeBlockContainer},y&&r.a.createElement("div",{style:a,className:_.a.codeBlockTitle},y),r.a.createElement("div",{className:Object(s.a)(_.a.codeBlockContent,E)},r.a.createElement("div",{tabIndex:0,className:Object(s.a)(t,_.a.codeBlock,"thin-scrollbar",{[_.a.codeBlockWithTitle]:y})},r.a.createElement("div",{className:_.a.codeBlockLines,style:a},n.map(((e,t)=>{1===e.length&&""===e[0].content&&(e[0].content="\n");const a=l({line:e,key:t});return h.includes(t+1)&&(a.className=`${a.className} docusaurus-highlight-code-line`),r.a.createElement("div",Object(o.a)({key:t},a),e.map(((e,t)=>r.a.createElement("span",Object(o.a)({key:t},c({token:e,key:t}))))))})))),r.a.createElement("button",{ref:g,type:"button","aria-label":Object(T.b)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:Object(s.a)(_.a.copyButton),onClick:C},m?r.a.createElement(T.a,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):r.a.createElement(T.a,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy"))))}))}a(60);var P=a(61),B=a.n(P);var $=e=>function(t){let{id:a,...n}=t;const{navbar:{hideOnScroll:l}}=Object(N.useThemeConfig)();return a?r.a.createElement(e,n,r.a.createElement("a",{"aria-hidden":"true",tabIndex:-1,className:Object(s.a)("anchor",{[B.a.enhancedAnchor]:!l}),id:a}),n.children,r.a.createElement("a",{className:"hash-link",href:`#${a}`,title:Object(T.b)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"#")):r.a.createElement(e,n)};const D={code:e=>{const{children:t}=e;return"string"==typeof t?t.includes("\n")?r.a.createElement(C,e):r.a.createElement("code",e):t},a:e=>r.a.createElement(l.a,e),pre:e=>{const{children:t}=e;return r.a.createElement(C,Object(n.isValidElement)(t)?null==t?void 0:t.props:{children:t})},h1:$("h1"),h2:$("h2"),h3:$("h3"),h4:$("h4"),h5:$("h5"),h6:$("h6")};t.a=D},134:function(e,t,a){"use strict";var n=a(0),r=a.n(n),l=a(120),o=a(124),s=a(123),c=a(122),i=a(130),m=a(133),p=a(62),d=a.n(p),u=a(121);t.a=function(e){const t=function(){const{selectMessage:e}=Object(u.usePluralForm)();return t=>{const a=Math.ceil(t);return e(a,Object(s.b)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". 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 min read|{readingTime} min read"},{readingTime:a}))}}(),{children:a,frontMatter:n,metadata:p,truncated:g,isBlogPostPage:h=!1}=e,{date:y,formattedDate:b,permalink:v,tags:f,readingTime:k}=p,{author:E,title:N,image:j,keywords:T}=n,O=n.author_url||n.authorURL,_=n.author_title||n.authorTitle,w=n.author_image_url||n.authorImageURL;return r.a.createElement(r.a.Fragment,null,r.a.createElement(m.a,{keywords:T,image:j}),r.a.createElement("article",{className:h?void 0:"margin-bottom--xl"},(()=>{const e=h?"h1":"h2";return r.a.createElement("header",null,r.a.createElement(e,{className:Object(l.a)("margin-bottom--sm",d.a.blogPostTitle)},h?N:r.a.createElement(c.a,{to:v},N)),r.a.createElement("div",{className:"margin-vert--md"},r.a.createElement("time",{dateTime:y,className:d.a.blogPostDate},b,k&&r.a.createElement(r.a.Fragment,null," \xb7 ",t(k)))),r.a.createElement("div",{className:"avatar margin-vert--md"},w&&r.a.createElement(c.a,{className:"avatar__photo-link avatar__photo",href:O},r.a.createElement("img",{src:w,alt:E})),r.a.createElement("div",{className:"avatar__intro"},E&&r.a.createElement(r.a.Fragment,null,r.a.createElement("h4",{className:"avatar__name"},r.a.createElement(c.a,{href:O},E)),r.a.createElement("small",{className:"avatar__subtitle"},_)))))})(),r.a.createElement("div",{className:"markdown"},r.a.createElement(o.a,{components:i.a},a)),(f.length>0||g)&&r.a.createElement("footer",{className:"row margin-vert--lg"},f.length>0&&r.a.createElement("div",{className:"col"},r.a.createElement("strong",null,r.a.createElement(s.a,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),f.map((e=>{let{label:t,permalink:a}=e;return r.a.createElement(c.a,{key:a,className:"margin-horiz--sm",to:a},t)}))),g&&r.a.createElement("div",{className:"col text--right"},r.a.createElement(c.a,{to:p.permalink,"aria-label":`Read more about ${N}`},r.a.createElement("strong",null,r.a.createElement(s.a,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More")))))))}}}]); \ No newline at end of file diff --git a/assets/js/402f66d1.b5724dc1.js b/assets/js/402f66d1.b5724dc1.js new file mode 100644 index 0000000..8bb4f98 --- /dev/null +++ b/assets/js/402f66d1.b5724dc1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{139:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/cover-save-time-with-devops-62e8967903b51b6ee5a686c2aea71852.png"},175:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/running-test-suite-for-app-module-ffe9fd81bf4b0d19923c7e76059df827.png"},176:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/creating-a-release-with-a-click-a8bc8b59e6038f2717baa59d0f6ee541.png"},177:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/sample-releasezri-release-19181c46c0cce5ebdcb38015c2c9832c.png"},85:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return s})),n.d(t,"toc",(function(){return r})),n.d(t,"default",(function(){return c}));var a=n(3),o=(n(0),n(124));const i={title:"How We Save Our Time with\xa0DevOps",authors:["shalithasuranga"],slug:"how-we-save-our-time-with-devops",tags:["devops","neutralinojs","javascript","c++","automation"],image:"media/cover-save-time-with-devops.png"},s={permalink:"/blog/how-we-save-our-time-with-devops",source:"@site/blog/2022-01-03-how-we-save-our-time-with-devops.md",description:"Earlier, the software development lifecycle was simple—we didn't have automated feature delivery,",date:"2022-01-03T00:00:00.000Z",formattedDate:"January 3, 2022",tags:[{label:"devops",permalink:"/blog/tags/devops"},{label:"neutralinojs",permalink:"/blog/tags/neutralinojs"},{label:"javascript",permalink:"/blog/tags/javascript"},{label:"c++",permalink:"/blog/tags/c"},{label:"automation",permalink:"/blog/tags/automation"}],title:"How We Save Our Time with\xa0DevOps",readingTime:6.79,truncated:!0,prevItem:{title:"Neutralinojs 2023 Roadmap",permalink:"/blog/neutralinojs-2023-roadmap"},nextItem:{title:"Neutralinojs 2022 Roadmap",permalink:"/blog/neutralinojs-2022-roadmap"}},r=[{value:"Troubles with the Manual Repetitive Activities",id:"troubles-with-the-manual-repetitive-activities",children:[]},{value:"How We Implemented DevOps\xa0Concepts",id:"how-we-implemented-devops-concepts",children:[{value:"Step 0: Writing Some Shell Scripts to Boost Developers' Productivity",id:"step-0-writing-some-shell-scripts-to-boost-developers-productivity",children:[]},{value:"Step 1: Building a Better Test\xa0Suite",id:"step-1-building-a-better-test-suite",children:[]},{value:"Step 2: Building the Continuous Integration (CI)\xa0Workflow",id:"step-2-building-the-continuous-integration-ci-workflow",children:[]},{value:"Step 3: Building the Continuous Delivery (CD)\xa0Workflow",id:"step-3-building-the-continuous-delivery-cd-workflow",children:[]}]},{value:"Conclusion",id:"conclusion",children:[]}],l={toc:r},u="wrapper";function c(e){let{components:t,...i}=e;return Object(o.b)(u,Object(a.a)({},l,i,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,Object(o.b)("img",{src:n(139).default})),Object(o.b)("p",null,"Earlier, the software development lifecycle was simple","\u2014","we didn't have automated feature delivery,\ncomplex application health checks, cloud-based test suites, etc. Later, the DevOps movement drastically\nchanged the software development processes by motivating developers to automate everything.\nDevOps helped software development teams to productively build high-quality software, deliver features/patches\nso fast, and make software systems stable."),Object(o.b)("p",null,"There were no DevOps practices in the early development stages of the Neutralinojs framework. We did framework\nreleases manually by manually collecting release notes. We manually compiled the framework on different\nplatforms before releasing a new version. The release process was too much time-consuming since there were\nno automated workflows to support our development-related activities."),Object(o.b)("p",null,"Now we save many hours thanks to the newly implemented DevOps-first development process. In this article,\nwe'll explain how Neutralinojs's DevOps processes work","\u2014","and how automation helps us to save development time.\nYou can use these DevOps practices in your projects to save your time too."),Object(o.b)("h2",{id:"troubles-with-the-manual-repetitive-activities"},"Troubles with the Manual Repetitive Activities"),Object(o.b)("p",null,"We didn't use any automated workflow with initial Neutralinojs development activities","\u2014","and had only three\nbuild scripts to produce framework's binaries on Linux, macOS, and Windows. We faced the following troubles\nbefore implementing a DevOps-first development environment."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"The maintainer had to compile every pull request manually before merging to the main development branch."),Object(o.b)("li",{parentName:"ul"},"Releases had too many changes and ",Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs/neutralinojs/issues/654#issuecomment-945853188"},"broke APIs"),"\nsometimes due to the time-consuming manual release process."),Object(o.b)("li",{parentName:"ul"},"The release note generation process was too time-consuming","\u2014","we had to go through old commits manually and\nbuild up a summary before every release."),Object(o.b)("li",{parentName:"ul"},"If a new source code modification broke an existing feature, we typically noticed it when a developer\nreported the issue via a GitHub issue."),Object(o.b)("li",{parentName:"ul"},"Developers didn't have scripts to automate their development activities in their local computers.\nThey didn't have scoped test cases to verify code modifications locally before pushing to the GitHub repository.")),Object(o.b)("p",null,"As you already noticed, the previous development workflow isn't DevOps-first and not suitable for\nmodern open-source projects."),Object(o.b)("h2",{id:"how-we-implemented-devops-concepts"},"How We Implemented DevOps\xa0Concepts"),Object(o.b)("p",null,"We cannot integrate DevOps concepts into our projects instantly","\u2014","DevOps integration is a step-by-step\nprocess that we need to do by selecting the most suitable tools and workflows. Our goal was to build a\nDevOps pipeline for the following critical requirements."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Verifying every code change (commit) with a cloud-based automated test suite"),Object(o.b)("li",{parentName:"ul"},"Creating a release package with pre-built binaries for Linux, macOS, and Windows"),Object(o.b)("li",{parentName:"ul"},"Generating meaningful release notes based on a changelog file"),Object(o.b)("li",{parentName:"ul"},"Implementing a way for developers to verify their code changes locally with scoped test cases\n(This is basically about running the automated test suite locally for a specific module)"),Object(o.b)("li",{parentName:"ul"},"Boost developers' productivity by offering some Shell scripts to automate manual tasks")),Object(o.b)("p",null,"We built our DevOps pipeline with the following steps."),Object(o.b)("h3",{id:"step-0-writing-some-shell-scripts-to-boost-developers-productivity"},"Step 0: Writing Some Shell Scripts to Boost Developers' Productivity"),Object(o.b)("p",null,"We need to automate local development activities before we think about remote CI/CD workflows. Entering\nthe same Unix commands set multiple times reduces programmers' programming productivity. Therefore, we\ninitially wrote the following Shell scripts to automate local development activities."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs/neutralinojs/blob/main/scripts/update_client.sh"},Object(o.b)("inlineCode",{parentName:"a"},"scripts/update_client.sh")),":\nUpdates the test app's JavaScript client library by building a new version\nfrom the source. This script is helpful when a developer adds new features to the Neutralinojs JavaScript API."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs/neutralinojs/blob/main/scripts/make_res_neu.sh"},Object(o.b)("inlineCode",{parentName:"a"},"scripts/make_res_neu.sh")),":\nUpdates the test app's resources bundle by building it again from local files.\nThis script is helpful when a developer works with the resource loader and static file server modules.")),Object(o.b)("h3",{id:"step-1-building-a-better-test-suite"},"Step 1: Building a Better Test\xa0Suite"),Object(o.b)("p",null,"Programmers often change source files to add new features and fix software bugs. A simple code change\ncan silently introduce a new software bug even though you review the code changes thoroughly. Therefore,\nwe need test suites to prevent software bugs."),Object(o.b)("p",null,"Neutralinojs is written in two languages: C++ and JavaScript. Therefore, we wrote an integration test\nsuite to test both C++ and JavaScript code changes at once. Our integration test suite uses the\n",Object(o.b)("a",{parentName:"p",href:"https://github.com/mochajs/mocha"},"Mocha")," test framework. Neutralinojs JavaScript API communicates with\nthe main framework runtime via a WebSocket connection, so how can we build an integration test suite\naround this?"),Object(o.b)("p",null,"Every Neutralinojs test case spawns a Neutralinojs app instance and captures the serialized program output\nfrom a file. You can browse the source code of this test runner program from the\n",Object(o.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/neutralinojs/blob/main/spec/runner.js"},Object(o.b)("inlineCode",{parentName:"a"},"spec/runner.js"))," file.\nSee how we test the ",Object(o.b)("a",{parentName:"p",href:"https://neutralino.js.org/docs/api/os#osexeccommandcommand-options"},Object(o.b)("inlineCode",{parentName:"a"},"os.execCommand")),"\nAPI function with the following specification."),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-js"},"describe('os.execCommand', () => {\n it('executes a command and returns result', async () => {\n runner.run(`\n let info = await Neutralino.os\n .execCommand('node --version');\n await __close(JSON.stringify(info));\n `);\n let info = JSON.parse(runner.getOutput());\n assert.ok(typeof info == 'object');\n assert.ok(typeof info.pid == 'number');\n assert.ok(typeof info.stdErr == 'string');\n assert.ok(typeof info.stdOut == 'string');\n assert.ok(typeof info.exitCode == 'number');\n\n assert.ok(info.stdOut.charAt(0) == 'v');\n });\n\n it('accepts stdIn', async () => {\n runner.run(`\n let info = await Neutralino.os.execCommand('node',\n {stdIn: 'console.log(\"N\");'});\n await __close(JSON.stringify(info));\n `);\n let info = JSON.parse(runner.getOutput());\n\n assert.ok(info.stdOut.charAt(0) == 'N');\n });\n});\n")),Object(o.b)("p",null,"Here we can use ",Object(o.b)("inlineCode",{parentName:"p"},"runner.run()")," function to execute an arbitrary JavaScript code inside a Neutralinojs\napplication instance via the Node.js context. The ",Object(o.b)("inlineCode",{parentName:"p"},"__close()")," function helps to save the output and\nclose the application via the application context. Finally, we can use the ",Object(o.b)("inlineCode",{parentName:"p"},"runner.getOutput()")," function to\nread the application instance output. We wrote our entire integration test suite by using this approach."),Object(o.b)("p",null,"You can learn more internal details about our test suite from the following YouTube video:"),Object(o.b)("iframe",{height:"480",width:"100%",src:"https://www.youtube.com/embed/DdlzDklYHVs",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),Object(o.b)("p",null,"Also, you can browse the full source code of our integration test suite from\n",Object(o.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/neutralinojs/tree/main/spec"},"here"),".\nWe can verify our code changes before pushing them to the remote repository via the following command."),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-bash"},"cd spec\nnpm run test \n")),Object(o.b)("p",null,"For example, if you've done a modification in the app module, you can enter ",Object(o.b)("inlineCode",{parentName:"p"},"npm run test app")," for running\napp test cases that are defined in the app scope, as shown below."),Object(o.b)("p",null,Object(o.b)("img",{src:n(175).default})),Object(o.b)("h3",{id:"step-2-building-the-continuous-integration-ci-workflow"},"Step 2: Building the Continuous Integration (CI)\xa0Workflow"),Object(o.b)("p",null,"We use a pull request-based source code management model, but sometimes we push quick fixes directly to the\nmain development stream. Therefore, our GitHub Actions-based CI workflow gets invoked on every pull request\nand commit. Once the workflow is invoked, it does the following operations:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Compiling binaries on Linux, macOS, and Windows"),Object(o.b)("li",{parentName:"ul"},"Running the test suite on Linux and macOS")),Object(o.b)("p",null,"GitHub Actions VMs doesn't have built-in display devices, so our test suite runs on Linux with the\n",Object(o.b)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Xvfb"},"Xvfb")," (X virtual frame buffer) tool. You can check the source code\nof the CI workflow from ",Object(o.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/neutralinojs/blob/main/.github/workflows/test_suite.yml"},"here"),"."),Object(o.b)("h3",{id:"step-3-building-the-continuous-delivery-cd-workflow"},"Step 3: Building the Continuous Delivery (CD)\xa0Workflow"),Object(o.b)("p",null,"Nowadays, everyone tends to generate release notes automatically via commit messages. But, we implemented\na changelog-based release note generation concept due to the following problematic situations."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"We didn't like to force new contributors to follow a strict commit convention."),Object(o.b)("li",{parentName:"ul"},"Commit messages are literally saying what's changed","\u2014","they don't give a meaningful overview about what\nwe are delivering in a particular release.")),Object(o.b)("p",null,"Therefore, we built our own minimal release note generation solution called\n",Object(o.b)("a",{parentName:"p",href:"https://github.com/codezri/releasezri"},"ReleaseZri"),". ReleaseZri generates\nrelease notes based on a changelog file and markdown template. Now when the maintainer invokes the\nframework's CD workflow with a version number, the following operations will happen automatically."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Building x64 binaries on Linux, macOS, and Windows"),Object(o.b)("li",{parentName:"ul"},"Generating release notes from the CHANGELOG.md file"),Object(o.b)("li",{parentName:"ul"},"Publishing a new GitHub release with build artifacts and release notes"),Object(o.b)("li",{parentName:"ul"},"Notifying the developer community via a Discord bot")),Object(o.b)("p",null,"ReleaseZri helped us to automate the CD workflow of the following repositories."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs/neutralinojs"},"Neutralinojs framework")),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs/neutralino.js"},"Neutralinojs client library"),"\xa0"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs/neutralinojs-cli"},"Neutralinojs CLI"))),Object(o.b)("h2",{id:"conclusion"},"Conclusion"),Object(o.b)("p",null,"Now every software development team strives to implement DevOps workflows to release features rapidly\nand stay competitive in the modern software development market. DevOps concepts help us to build high-quality\nsoftware products by automating every manual step."),Object(o.b)("p",null,"We save many hours with the DevOps culture at the Neutralinojs codebase. Now we can generate releases\nwith a single mouse click with GitHub Actions, as shown below."),Object(o.b)("p",null,Object(o.b)("img",{src:n(176).default})),Object(o.b)("p",null,"The above action creates a ",Object(o.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/neutralinojs/releases/tag/v4.1.0"},"release"),"\nwith meaningful release notes, as shown below."),Object(o.b)("p",null,Object(o.b)("img",{src:n(177).default})),Object(o.b)("p",null,"If your software product doesn't follow a DevOps-first\narchitecture yet, consider implementing some DevOps principles, see how much time you can save."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/41.2c21b09a.js b/assets/js/41.2c21b09a.js new file mode 100644 index 0000000..0fcdb84 --- /dev/null +++ b/assets/js/41.2c21b09a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{128:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(0),r=a.n(n),l=a(120),s=a(122),o=a(58),c=a.n(o);function i(e){let{sidebar:t}=e;return 0===t.items.length?null:r.a.createElement("div",{className:Object(l.a)(c.a.sidebar,"thin-scrollbar")},r.a.createElement("h3",{className:c.a.sidebarItemTitle},t.title),r.a.createElement("ul",{className:c.a.sidebarItemList},t.items.map((e=>r.a.createElement("li",{key:e.permalink,className:c.a.sidebarItem},r.a.createElement(s.a,{isNavLink:!0,to:e.permalink,className:c.a.sidebarItemLink,activeClassName:c.a.sidebarItemLinkActive},e.title))))))}},129:function(e,t){function a(e){let t,a=[];for(let n of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(n))a.push(parseInt(n,10));else if(t=n.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,n,r,l]=t;if(n&&l){n=parseInt(n),l=parseInt(l);const e=n0&&e[a-1]===t?e:e.concat(t)};function h(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(a[n]=e[n]);return a}var y=function(e){function t(){for(var t=this,a=[],n=arguments.length;n--;)a[n]=arguments[n];e.apply(this,a),m(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var a=e.theme?function(e,t){var a=e.plain,n=Object.create(null),r=e.styles.reduce((function(e,a){var n=a.languages,r=a.style;return n&&!n.includes(t)||a.types.forEach((function(t){var a=u({},e[t],r);e[t]=a})),e}),n);return r.root=a,r.plain=u({},a,{backgroundColor:null}),r}(e.theme,e.language):void 0;return t.themeDict=a})),m(this,"getLineProps",(function(e){var a=e.key,n=e.className,r=e.style,l=u({},h(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),s=t.getThemeDict(t.props);return void 0!==s&&(l.style=s.plain),void 0!==r&&(l.style=void 0!==l.style?u({},l.style,r):r),void 0!==a&&(l.key=a),n&&(l.className+=" "+n),l})),m(this,"getStyleForToken",(function(e){var a=e.types,n=e.empty,r=a.length,l=t.getThemeDict(t.props);if(void 0!==l){if(1===r&&"plain"===a[0])return n?{display:"inline-block"}:void 0;if(1===r&&!n)return l[a[0]];var s=n?{display:"inline-block"}:{},o=a.map((function(e){return l[e]}));return Object.assign.apply(Object,[s].concat(o))}})),m(this,"getTokenProps",(function(e){var a=e.key,n=e.className,r=e.style,l=e.token,s=u({},h(e,["key","className","style","token"]),{className:"token "+l.types.join(" "),children:l.content,style:t.getStyleForToken(l),key:void 0});return void 0!==r&&(s.style=void 0!==s.style?u({},s.style,r):r),void 0!==a&&(s.key=a),n&&(s.className+=" "+n),s})),m(this,"tokenize",(function(e,t,a,n){var r={code:t,grammar:a,language:n,tokens:[]};e.hooks.run("before-tokenize",r);var l=r.tokens=e.tokenize(r.code,r.grammar,r.language);return e.hooks.run("after-tokenize",r),l}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,a=e.language,n=e.code,r=e.children,l=this.getThemeDict(this.props),s=t.languages[a];return r({tokens:function(e){for(var t=[[]],a=[e],n=[0],r=[e.length],l=0,s=0,o=[],c=[o];s>-1;){for(;(l=n[s]++)0?m:["plain"],i=u):(m=g(m,u.type),u.alias&&(m=g(m,u.alias)),i=u.content),"string"==typeof i){var h=i.split(p),y=h.length;o.push({types:m,content:h[0]});for(var b=1;b{const{prism:e}=Object(j.useThemeConfig)(),{isDarkTheme:t}=Object(E.a)(),a=e.theme||k,n=e.darkTheme||a;return t?n:a},T=a(123),O=a(59),w=a.n(O);const x=/{([\d,-]+)}/,P=function(e){void 0===e&&(e=["js","jsBlock","jsx","python","html"]);const t={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},python:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},a=["highlight-next-line","highlight-start","highlight-end"].join("|"),n=e.map((e=>`(?:${t[e].start}\\s*(${a})\\s*${t[e].end})`)).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)},_=/(?:title=")(.*)(?:")/;function L(e){let{children:t,className:a,metastring:l}=e;const{prism:c}=Object(j.useThemeConfig)(),[m,u]=Object(n.useState)(!1),[p,d]=Object(n.useState)(!1);Object(n.useEffect)((()=>{d(!0)}),[]);const g=Object(n.useRef)(null);let h=[],y="";const f=N(),k=Array.isArray(t)?t.join(""):t;if(l&&x.test(l)){const e=l.match(x)[1];h=v()(e).filter((e=>e>0))}l&&_.test(l)&&(y=l.match(_)[1]);let E=a&&a.replace(/language-/,"");!E&&c.defaultLanguage&&(E=c.defaultLanguage);let O=k.replace(/\n$/,"");if(0===h.length&&void 0!==E){let e="";const t=(e=>{switch(e){case"js":case"javascript":case"ts":case"typescript":return P(["js","jsBlock"]);case"jsx":case"tsx":return P(["js","jsBlock","jsx"]);case"html":return P(["js","jsBlock","html"]);case"python":case"py":return P(["python"]);default:return P()}})(E),a=k.replace(/\n$/,"").split("\n");let n;for(let r=0;re||t),void 0)){case"highlight-next-line":e+=`${l},`;break;case"highlight-start":n=l;break;case"highlight-end":e+=`${n}-${l-1},`}a.splice(r,1)}else r+=1}h=v()(e),O=a.join("\n")}const L=()=>{!function(e,{target:t=document.body}={}){const a=document.createElement("textarea"),n=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";const r=document.getSelection();let l=!1;r.rangeCount>0&&(l=r.getRangeAt(0)),t.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;let s=!1;try{s=document.execCommand("copy")}catch{}a.remove(),l&&(r.removeAllRanges(),r.addRange(l)),n&&n.focus()}(O),u(!0),setTimeout((()=>u(!1)),2e3)};return r.a.createElement(b,Object(s.a)({},i,{key:String(p),theme:f,code:O,language:E}),(e=>{let{className:t,style:a,tokens:n,getLineProps:l,getTokenProps:c}=e;return r.a.createElement("div",{className:w.a.codeBlockContainer},y&&r.a.createElement("div",{style:a,className:w.a.codeBlockTitle},y),r.a.createElement("div",{className:Object(o.a)(w.a.codeBlockContent,E)},r.a.createElement("div",{tabIndex:0,className:Object(o.a)(t,w.a.codeBlock,"thin-scrollbar",{[w.a.codeBlockWithTitle]:y})},r.a.createElement("div",{className:w.a.codeBlockLines,style:a},n.map(((e,t)=>{1===e.length&&""===e[0].content&&(e[0].content="\n");const a=l({line:e,key:t});return h.includes(t+1)&&(a.className=`${a.className} docusaurus-highlight-code-line`),r.a.createElement("div",Object(s.a)({key:t},a),e.map(((e,t)=>r.a.createElement("span",Object(s.a)({key:t},c({token:e,key:t}))))))})))),r.a.createElement("button",{ref:g,type:"button","aria-label":Object(T.b)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:Object(o.a)(w.a.copyButton),onClick:L},m?r.a.createElement(T.a,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):r.a.createElement(T.a,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy"))))}))}a(60);var C=a(61),B=a.n(C);var $=e=>function(t){let{id:a,...n}=t;const{navbar:{hideOnScroll:l}}=Object(j.useThemeConfig)();return a?r.a.createElement(e,n,r.a.createElement("a",{"aria-hidden":"true",tabIndex:-1,className:Object(o.a)("anchor",{[B.a.enhancedAnchor]:!l}),id:a}),n.children,r.a.createElement("a",{className:"hash-link",href:`#${a}`,title:Object(T.b)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"#")):r.a.createElement(e,n)};const D={code:e=>{const{children:t}=e;return"string"==typeof t?t.includes("\n")?r.a.createElement(L,e):r.a.createElement("code",e):t},a:e=>r.a.createElement(l.a,e),pre:e=>{const{children:t}=e;return r.a.createElement(L,Object(n.isValidElement)(t)?null==t?void 0:t.props:{children:t})},h1:$("h1"),h2:$("h2"),h3:$("h3"),h4:$("h4"),h5:$("h5"),h6:$("h6")};t.a=D},134:function(e,t,a){"use strict";var n=a(0),r=a.n(n),l=a(120),s=a(124),o=a(123),c=a(122),i=a(130),m=a(133),u=a(62),p=a.n(u),d=a(121);t.a=function(e){const t=function(){const{selectMessage:e}=Object(d.usePluralForm)();return t=>{const a=Math.ceil(t);return e(a,Object(o.b)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". 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 min read|{readingTime} min read"},{readingTime:a}))}}(),{children:a,frontMatter:n,metadata:u,truncated:g,isBlogPostPage:h=!1}=e,{date:y,formattedDate:b,permalink:f,tags:v,readingTime:k}=u,{author:E,title:j,image:N,keywords:T}=n,O=n.author_url||n.authorURL,w=n.author_title||n.authorTitle,x=n.author_image_url||n.authorImageURL;return r.a.createElement(r.a.Fragment,null,r.a.createElement(m.a,{keywords:T,image:N}),r.a.createElement("article",{className:h?void 0:"margin-bottom--xl"},(()=>{const e=h?"h1":"h2";return r.a.createElement("header",null,r.a.createElement(e,{className:Object(l.a)("margin-bottom--sm",p.a.blogPostTitle)},h?j:r.a.createElement(c.a,{to:f},j)),r.a.createElement("div",{className:"margin-vert--md"},r.a.createElement("time",{dateTime:y,className:p.a.blogPostDate},b,k&&r.a.createElement(r.a.Fragment,null," \xb7 ",t(k)))),r.a.createElement("div",{className:"avatar margin-vert--md"},x&&r.a.createElement(c.a,{className:"avatar__photo-link avatar__photo",href:O},r.a.createElement("img",{src:x,alt:E})),r.a.createElement("div",{className:"avatar__intro"},E&&r.a.createElement(r.a.Fragment,null,r.a.createElement("h4",{className:"avatar__name"},r.a.createElement(c.a,{href:O},E)),r.a.createElement("small",{className:"avatar__subtitle"},w)))))})(),r.a.createElement("div",{className:"markdown"},r.a.createElement(s.a,{components:i.a},a)),(v.length>0||g)&&r.a.createElement("footer",{className:"row margin-vert--lg"},v.length>0&&r.a.createElement("div",{className:"col"},r.a.createElement("strong",null,r.a.createElement(o.a,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),v.map((e=>{let{label:t,permalink:a}=e;return r.a.createElement(c.a,{key:a,className:"margin-horiz--sm",to:a},t)}))),g&&r.a.createElement("div",{className:"col text--right"},r.a.createElement(c.a,{to:u.permalink,"aria-label":`Read more about ${j}`},r.a.createElement("strong",null,r.a.createElement(o.a,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More")))))))}},90:function(e,t,a){"use strict";a.r(t);var n=a(0),r=a.n(n),l=a(125),s=a(134),o=a(122),c=a(128),i=a(123),m=a(121);function u(e){let{tagName:t,count:a}=e;const n=function(){const{selectMessage:e}=Object(m.usePluralForm)();return t=>e(t,Object(i.b)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". 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 post|{count} posts"},{count:t}))}();return r.a.createElement(i.a,{id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",values:{nPosts:n(a),tagName:t}},'{nPosts} tagged with "{tagName}"')}t.default=function(e){const{metadata:t,items:a,sidebar:n}=e,{allTagsPath:m,name:p,count:d}=t;return r.a.createElement(l.a,{title:`Posts tagged "${p}"`,description:`Blog | Tagged "${p}"`,wrapperClassName:"blog-wrapper",searchMetadatas:{tag:"blog_tags_posts"}},r.a.createElement("div",{className:"container margin-vert--lg"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--3"},r.a.createElement(c.a,{sidebar:n})),r.a.createElement("main",{className:"col col--7"},r.a.createElement("h1",null,r.a.createElement(u,{count:d,tagName:p})),r.a.createElement(o.a,{href:m},r.a.createElement(i.a,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags")),r.a.createElement("div",{className:"margin-vert--xl"},a.map((e=>{let{content:t}=e;return r.a.createElement(s.a,{key:t.metadata.permalink,frontMatter:t.frontMatter,metadata:t.metadata,truncated:!0},r.a.createElement(t,null))})))))))}}}]); \ No newline at end of file diff --git a/assets/js/42.2b92178f.js b/assets/js/42.2b92178f.js new file mode 100644 index 0000000..a17a4b7 --- /dev/null +++ b/assets/js/42.2b92178f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[42,43],{114:function(e,t,a){"use strict";a.r(t);var n=a(0),o=a.n(n),l=a(124),c=a(16),r=a(27),s=a(125),i=a(3),d=a(120),u=a(121),p=a(135),m=a(150),b=a(151),h=a(149),y=a(122),g=a(136),f=a(152);var v=e=>o.a.createElement("svg",Object(i.a)({width:"20",height:"20",role:"img"},e),o.a.createElement("g",{fill:"#7a7a7a"},o.a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),o.a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"}))),k=a(154),j=a(123),E=a(81),O=a.n(E);const N=(e,t)=>"link"===e.type?Object(u.isSamePath)(e.href,t):"category"===e.type&&e.items.some((e=>N(e,t)));function C(e){let{item:t,onItemClick:a,collapsible:l,activePath:c,...r}=e;const{items:s,label:u}=t,p=N(t,c),m=function(e){const t=Object(n.useRef)(e);return Object(n.useEffect)((()=>{t.current=e}),[e]),t.current}(p),[b,h]=Object(n.useState)((()=>!!l&&(!p&&t.collapsed))),y=Object(n.useRef)(null),[g,f]=Object(n.useState)(void 0),v=function(e){var t;void 0===e&&(e=!0),f(e?`${null===(t=y.current)||void 0===t?void 0:t.scrollHeight}px`:void 0)};Object(n.useEffect)((()=>{p&&!m&&b&&h(!1)}),[p,m,b]);const k=Object(n.useCallback)((e=>{e.preventDefault(),g||v(),setTimeout((()=>h((e=>!e))),100)}),[g]);return 0===s.length?null:o.a.createElement("li",{className:Object(d.a)("menu__list-item",{"menu__list-item--collapsed":b}),key:u},o.a.createElement("a",Object(i.a)({className:Object(d.a)("menu__link",{"menu__link--sublist":l,"menu__link--active":l&&p,[O.a.menuLinkText]:!l}),onClick:l?k:void 0,href:l?"#!":void 0},r),u),o.a.createElement("ul",{className:"menu__list",ref:y,style:{height:g},onTransitionEnd:()=>{b||v(!1)}},s.map((e=>o.a.createElement(x,{tabIndex:b?"-1":"0",key:e.label,item:e,onItemClick:a,collapsible:l,activePath:c})))))}function T(e){let{item:t,onItemClick:a,activePath:n,collapsible:l,...c}=e;const{href:r,label:s}=t,u=N(t,n);return o.a.createElement("li",{className:"menu__list-item",key:s},o.a.createElement(y.a,Object(i.a)({className:Object(d.a)("menu__link",{"menu__link--active":u,[O.a.menuLinkExternal]:!Object(g.a)(r)}),to:r},Object(g.a)(r)&&{isNavLink:!0,exact:!0,onClick:a},c),s))}function x(e){return"category"===e.item.type?o.a.createElement(C,e):o.a.createElement(T,e)}var S=function(e){let{path:t,sidebar:a,sidebarCollapsible:l=!0,onCollapse:c,isHidden:r}=e;const[s,i]=Object(n.useState)(!1),{navbar:{hideOnScroll:y},hideableSidebar:g}=Object(u.useThemeConfig)(),{isAnnouncementBarClosed:E}=Object(p.a)(),{scrollY:N}=Object(h.a)();Object(m.a)(s);const C=Object(b.a)();return Object(n.useEffect)((()=>{C===b.b.desktop&&i(!1)}),[C]),o.a.createElement("div",{className:Object(d.a)(O.a.sidebar,{[O.a.sidebarWithHideableNavbar]:y,[O.a.sidebarHidden]:r})},y&&o.a.createElement(f.a,{tabIndex:-1,className:O.a.sidebarLogo}),o.a.createElement("div",{className:Object(d.a)("menu","menu--responsive","thin-scrollbar",O.a.menu,{"menu--show":s,[O.a.menuWithAnnouncementBar]:!E&&0===N})},o.a.createElement("button",{"aria-label":s?Object(j.b)({id:"theme.docs.sidebar.responsiveCloseButtonLabel",message:"Close menu",description:"The ARIA label for close button of mobile doc sidebar"}):Object(j.b)({id:"theme.docs.sidebar.responsiveOpenButtonLabel",message:"Open menu",description:"The ARIA label for open button of mobile doc sidebar"}),"aria-haspopup":"true",className:"button button--secondary button--sm menu__button",type:"button",onClick:()=>{i(!s)}},s?o.a.createElement("span",{className:Object(d.a)(O.a.sidebarMenuIcon,O.a.sidebarMenuCloseIcon)},"\xd7"):o.a.createElement(k.a,{className:O.a.sidebarMenuIcon,height:24,width:24})),o.a.createElement("ul",{className:"menu__list"},a.map((e=>o.a.createElement(x,{key:e.label,item:e,onItemClick:e=>{e.target.blur(),i(!1)},collapsible:l,activePath:t}))))),g&&o.a.createElement("button",{type:"button",title:Object(j.b)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":Object(j.b)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:Object(d.a)("button button--secondary button--outline",O.a.collapseSidebarButton),onClick:c},o.a.createElement(v,{className:O.a.collapseSidebarButtonIcon})))},_=a(130),B=a(143),w=a(24),I=a(82),L=a.n(I);function P(e){var t,a;let{currentDocRoute:r,versionMetadata:i,children:p}=e;const{siteConfig:m,isClient:b}=Object(c.default)(),{pluginId:h,permalinkToSidebar:y,docsSidebars:g,version:f}=i,k=y[r.path],E=g[k],[O,N]=Object(n.useState)(!1),[C,T]=Object(n.useState)(!1),x=Object(n.useCallback)((()=>{C&&T(!1),N(!O)}),[C]);return o.a.createElement(s.a,{key:b,wrapperClassName:"main-docs-wrapper",searchMetadatas:{version:f,tag:Object(u.docVersionSearchTag)(h,f)}},o.a.createElement("div",{className:L.a.docPage},E&&o.a.createElement("div",{className:Object(d.a)(L.a.docSidebarContainer,{[L.a.docSidebarContainerHidden]:O}),onTransitionEnd:e=>{e.currentTarget.classList.contains(L.a.docSidebarContainer)&&O&&T(!0)},role:"complementary"},o.a.createElement(S,{key:k,sidebar:E,path:r.path,sidebarCollapsible:null===(t=null===(a=m.themeConfig)||void 0===a?void 0:a.sidebarCollapsible)||void 0===t||t,onCollapse:x,isHidden:C}),C&&o.a.createElement("div",{className:L.a.collapsedDocSidebar,title:Object(j.b)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":Object(j.b)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:x,onClick:x},o.a.createElement(v,{className:L.a.expandSidebarButtonIcon}))),o.a.createElement("main",{className:Object(d.a)(L.a.docMainContainer,{[L.a.docMainContainerEnhanced]:O})},o.a.createElement("div",{className:Object(d.a)("container padding-vert--lg",L.a.docItemWrapper,{[L.a.docItemWrapperEnhanced]:O})},o.a.createElement(l.a,{components:_.a},p)))))}t.default=function(e){const{route:{routes:t},versionMetadata:a,location:n}=e,l=t.find((e=>Object(w.matchPath)(n.pathname,e)));return l?o.a.createElement(P,{currentDocRoute:l,versionMetadata:a},Object(r.a)(t)):o.a.createElement(B.default,e)}},129:function(e,t){function a(e){let t,a=[];for(let n of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(n))a.push(parseInt(n,10));else if(t=n.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,n,o,l]=t;if(n&&l){n=parseInt(n),l=parseInt(l);const e=n0&&e[a-1]===t?e:e.concat(t)};function h(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(a[n]=e[n]);return a}var y=function(e){function t(){for(var t=this,a=[],n=arguments.length;n--;)a[n]=arguments[n];e.apply(this,a),d(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var a=e.theme?function(e,t){var a=e.plain,n=Object.create(null),o=e.styles.reduce((function(e,a){var n=a.languages,o=a.style;return n&&!n.includes(t)||a.types.forEach((function(t){var a=u({},e[t],o);e[t]=a})),e}),n);return o.root=a,o.plain=u({},a,{backgroundColor:null}),o}(e.theme,e.language):void 0;return t.themeDict=a})),d(this,"getLineProps",(function(e){var a=e.key,n=e.className,o=e.style,l=u({},h(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),c=t.getThemeDict(t.props);return void 0!==c&&(l.style=c.plain),void 0!==o&&(l.style=void 0!==l.style?u({},l.style,o):o),void 0!==a&&(l.key=a),n&&(l.className+=" "+n),l})),d(this,"getStyleForToken",(function(e){var a=e.types,n=e.empty,o=a.length,l=t.getThemeDict(t.props);if(void 0!==l){if(1===o&&"plain"===a[0])return n?{display:"inline-block"}:void 0;if(1===o&&!n)return l[a[0]];var c=n?{display:"inline-block"}:{},r=a.map((function(e){return l[e]}));return Object.assign.apply(Object,[c].concat(r))}})),d(this,"getTokenProps",(function(e){var a=e.key,n=e.className,o=e.style,l=e.token,c=u({},h(e,["key","className","style","token"]),{className:"token "+l.types.join(" "),children:l.content,style:t.getStyleForToken(l),key:void 0});return void 0!==o&&(c.style=void 0!==c.style?u({},c.style,o):o),void 0!==a&&(c.key=a),n&&(c.className+=" "+n),c})),d(this,"tokenize",(function(e,t,a,n){var o={code:t,grammar:a,language:n,tokens:[]};e.hooks.run("before-tokenize",o);var l=o.tokens=e.tokenize(o.code,o.grammar,o.language);return e.hooks.run("after-tokenize",o),l}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,a=e.language,n=e.code,o=e.children,l=this.getThemeDict(this.props),c=t.languages[a];return o({tokens:function(e){for(var t=[[]],a=[e],n=[0],o=[e.length],l=0,c=0,r=[],s=[r];c>-1;){for(;(l=n[c]++)0?d:["plain"],i=u):(d=b(d,u.type),u.alias&&(d=b(d,u.alias)),i=u.content),"string"==typeof i){var h=i.split(p),y=h.length;r.push({types:d,content:h[0]});for(var g=1;g{const{prism:e}=Object(E.useThemeConfig)(),{isDarkTheme:t}=Object(j.a)(),a=e.theme||k,n=e.darkTheme||a;return t?n:a},N=a(123),C=a(59),T=a.n(C);const x=/{([\d,-]+)}/,S=function(e){void 0===e&&(e=["js","jsBlock","jsx","python","html"]);const t={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},python:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},a=["highlight-next-line","highlight-start","highlight-end"].join("|"),n=e.map((e=>`(?:${t[e].start}\\s*(${a})\\s*${t[e].end})`)).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)},_=/(?:title=")(.*)(?:")/;function B(e){let{children:t,className:a,metastring:l}=e;const{prism:s}=Object(E.useThemeConfig)(),[d,u]=Object(n.useState)(!1),[p,m]=Object(n.useState)(!1);Object(n.useEffect)((()=>{m(!0)}),[]);const b=Object(n.useRef)(null);let h=[],y="";const f=O(),k=Array.isArray(t)?t.join(""):t;if(l&&x.test(l)){const e=l.match(x)[1];h=v()(e).filter((e=>e>0))}l&&_.test(l)&&(y=l.match(_)[1]);let j=a&&a.replace(/language-/,"");!j&&s.defaultLanguage&&(j=s.defaultLanguage);let C=k.replace(/\n$/,"");if(0===h.length&&void 0!==j){let e="";const t=(e=>{switch(e){case"js":case"javascript":case"ts":case"typescript":return S(["js","jsBlock"]);case"jsx":case"tsx":return S(["js","jsBlock","jsx"]);case"html":return S(["js","jsBlock","html"]);case"python":case"py":return S(["python"]);default:return S()}})(j),a=k.replace(/\n$/,"").split("\n");let n;for(let o=0;oe||t),void 0)){case"highlight-next-line":e+=`${l},`;break;case"highlight-start":n=l;break;case"highlight-end":e+=`${n}-${l-1},`}a.splice(o,1)}else o+=1}h=v()(e),C=a.join("\n")}const B=()=>{!function(e,{target:t=document.body}={}){const a=document.createElement("textarea"),n=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";const o=document.getSelection();let l=!1;o.rangeCount>0&&(l=o.getRangeAt(0)),t.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;let c=!1;try{c=document.execCommand("copy")}catch{}a.remove(),l&&(o.removeAllRanges(),o.addRange(l)),n&&n.focus()}(C),u(!0),setTimeout((()=>u(!1)),2e3)};return o.a.createElement(g,Object(c.a)({},i,{key:String(p),theme:f,code:C,language:j}),(e=>{let{className:t,style:a,tokens:n,getLineProps:l,getTokenProps:s}=e;return o.a.createElement("div",{className:T.a.codeBlockContainer},y&&o.a.createElement("div",{style:a,className:T.a.codeBlockTitle},y),o.a.createElement("div",{className:Object(r.a)(T.a.codeBlockContent,j)},o.a.createElement("div",{tabIndex:0,className:Object(r.a)(t,T.a.codeBlock,"thin-scrollbar",{[T.a.codeBlockWithTitle]:y})},o.a.createElement("div",{className:T.a.codeBlockLines,style:a},n.map(((e,t)=>{1===e.length&&""===e[0].content&&(e[0].content="\n");const a=l({line:e,key:t});return h.includes(t+1)&&(a.className=`${a.className} docusaurus-highlight-code-line`),o.a.createElement("div",Object(c.a)({key:t},a),e.map(((e,t)=>o.a.createElement("span",Object(c.a)({key:t},s({token:e,key:t}))))))})))),o.a.createElement("button",{ref:b,type:"button","aria-label":Object(N.b)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:Object(r.a)(T.a.copyButton),onClick:B},d?o.a.createElement(N.a,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):o.a.createElement(N.a,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy"))))}))}a(60);var w=a(61),I=a.n(w);var L=e=>function(t){let{id:a,...n}=t;const{navbar:{hideOnScroll:l}}=Object(E.useThemeConfig)();return a?o.a.createElement(e,n,o.a.createElement("a",{"aria-hidden":"true",tabIndex:-1,className:Object(r.a)("anchor",{[I.a.enhancedAnchor]:!l}),id:a}),n.children,o.a.createElement("a",{className:"hash-link",href:`#${a}`,title:Object(N.b)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"#")):o.a.createElement(e,n)};const P={code:e=>{const{children:t}=e;return"string"==typeof t?t.includes("\n")?o.a.createElement(B,e):o.a.createElement("code",e):t},a:e=>o.a.createElement(l.a,e),pre:e=>{const{children:t}=e;return o.a.createElement(B,Object(n.isValidElement)(t)?null==t?void 0:t.props:{children:t})},h1:L("h1"),h2:L("h2"),h3:L("h3"),h4:L("h4"),h5:L("h5"),h6:L("h6")};t.a=P},143:function(e,t,a){"use strict";a.r(t);var n=a(0),o=a.n(n),l=a(125),c=a(123);t.default=function(){return o.a.createElement(l.a,{title:"Page Not Found"},o.a.createElement("main",{className:"container margin-vert--xl"},o.a.createElement("div",{className:"row"},o.a.createElement("div",{className:"col col--6 col--offset-3"},o.a.createElement("h1",{className:"hero__title"},o.a.createElement(c.a,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),o.a.createElement("p",null,o.a.createElement(c.a,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),o.a.createElement("p",null,o.a.createElement(c.a,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"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/43.99b2143f.js b/assets/js/43.99b2143f.js new file mode 100644 index 0000000..024f0c6 --- /dev/null +++ b/assets/js/43.99b2143f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{143:function(e,t,a){"use strict";a.r(t);var n=a(0),o=a.n(n),l=a(125),r=a(123);t.default=function(){return o.a.createElement(l.a,{title:"Page Not Found"},o.a.createElement("main",{className:"container margin-vert--xl"},o.a.createElement("div",{className:"row"},o.a.createElement("div",{className:"col col--6 col--offset-3"},o.a.createElement("h1",{className:"hero__title"},o.a.createElement(r.a,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),o.a.createElement("p",null,o.a.createElement(r.a,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),o.a.createElement("p",null,o.a.createElement(r.a,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"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/4bc21eae.02ecfb61.js b/assets/js/4bc21eae.02ecfb61.js new file mode 100644 index 0000000..a19ac30 --- /dev/null +++ b/assets/js/4bc21eae.02ecfb61.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{140:function(e,a,t){"use strict";t.r(a),a.default=t.p+"assets/images/cover-neutralinojs-roadmap-2022-9fe59aaae31d64bb619a501790a5afef.png"},86:function(e,a,t){"use strict";t.r(a),t.d(a,"frontMatter",(function(){return o})),t.d(a,"metadata",(function(){return i})),t.d(a,"toc",(function(){return s})),t.d(a,"default",(function(){return m}));var n=t(3),r=(t(0),t(124));const o={title:"Neutralinojs 2022 Roadmap",authors:["shalithasuranga"],slug:"neutralinojs-2022-roadmap",tags:["neutralinojs","javascript","framework","roadmap"],image:"media/cover-neutralinojs-roadmap-2022.png"},i={permalink:"/blog/neutralinojs-2022-roadmap",source:"@site/blog/2021-12-27-neutralinojs-2022-roadmap.md",description:"Every year, we typically publish a high-level view of planned milestones.",date:"2021-12-27T00:00:00.000Z",formattedDate:"December 27, 2021",tags:[{label:"neutralinojs",permalink:"/blog/tags/neutralinojs"},{label:"javascript",permalink:"/blog/tags/javascript"},{label:"framework",permalink:"/blog/tags/framework"},{label:"roadmap",permalink:"/blog/tags/roadmap"}],title:"Neutralinojs 2022 Roadmap",readingTime:4.07,truncated:!0,prevItem:{title:"How We Save Our Time with\xa0DevOps",permalink:"/blog/how-we-save-our-time-with-devops"}},s=[],l={toc:s},p="wrapper";function m(e){let{components:a,...o}=e;return Object(r.b)(p,Object(n.a)({},l,o,{components:a,mdxType:"MDXLayout"}),Object(r.b)("p",null,Object(r.b)("img",{src:t(140).default})),Object(r.b)("p",null,"Every year, we typically publish a high-level view of planned milestones.\nWe wrote the ",Object(r.b)("a",{parentName:"p",href:"https://web.archive.org/web/20220618124802/https://factsoverflow.com/neutralinojs-2021-roadmap/"},'"Neutralinojs roadmap 2021"'),"\narticle covering milestones for the year 2021.\nThe year 2021 roadmap focused on building an error code system, synchronizing features among\nsupported platforms, completing pending feature requests, and refactoring the main codebase with a\nbetter structure. We are happy to announce that we achieved all the planned milestones and passed many\nextra milestones."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4bd5fd33.6f160bba.js b/assets/js/4bd5fd33.6f160bba.js new file mode 100644 index 0000000..4b930bf --- /dev/null +++ b/assets/js/4bd5fd33.6f160bba.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{87:function(a){a.exports=JSON.parse('{"allTagsPath":"/blog/tags","slug":"automation","name":"automation","count":1,"permalink":"/blog/tags/automation"}')}}]); \ No newline at end of file diff --git a/assets/js/4c37729a.10631980.js b/assets/js/4c37729a.10631980.js new file mode 100644 index 0000000..7a868d0 --- /dev/null +++ b/assets/js/4c37729a.10631980.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{88:function(o){o.exports=JSON.parse('{"allTagsPath":"/blog/tags","slug":"devops","name":"devops","count":1,"permalink":"/blog/tags/devops"}')}}]); \ No newline at end of file diff --git a/assets/js/57124ee9.e191f298.js b/assets/js/57124ee9.e191f298.js new file mode 100644 index 0000000..415dfb1 --- /dev/null +++ b/assets/js/57124ee9.e191f298.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{116:function(e,a,t){"use strict";t.r(a),t.d(a,"default",(function(){return N}));var n=t(0),r=t.n(n),o=t(120),s=t(125),l=t(122),i=t(16),m=t(57),c=t.n(m),d=t(126),u=t(89),p=t.n(u);const h=[{name:"MacStadium",image:"macstadium.png",description:r.a.createElement(r.a.Fragment,null,"MacStadium is the only provider of enterprise-class cloud solutions for Mac and iOS app development. They offered us a free remotely-accessed physical mac-mini for Neutralinojs-mac development."),link:"https://www.macstadium.com"},{name:"Harald Schneider Software",image:"marketmix.png",description:r.a.createElement(r.a.Fragment,null,"Harald Schneider Software & Mediadesign is a software product development company that offers desktop, mobile, and web app engineering services. They offered us a free Windows VM for Neutralinojs Windows development."),link:"https://marketmix.com"},{name:"Ct.js Game Engine",image:"comigo.png",description:r.a.createElement(r.a.Fragment,null,"Ct.js is an open-source game engine based on Neutralino.js framework. It allows its developers to make 2D games of any genre \u2014 with desktop builds using Neutralino, too! Ct.js' maintainer CoMiGo supports Neutralino.js development directly with code contributions/ideas and monetary donations."),link:"https://ctjs.rocks"}],g=["Just Epic","Brian McGonagill","Nchinda","Tom S","LiamGaudy","CrystalMoon","Pawe\u0142 Ko\u0142ataj","Vi Hongg"],E=["Jeremiah","Louis Couture","BenStigsen","Jarred","Varun Suryawanshi","Satya Sinha","Zizaco Zizuini","CoMiGo Games"],f=["Paolo Caminiti",["BayLanka","https://baylanka.net"],"Pasindu Kavinda"];function w(e){let{sponsor:a}=e;return r.a.createElement("div",{className:Object(o.a)("col col--4",p.a.sponsor,"padding-vert--md")},r.a.createElement("div",{className:"text--center"},r.a.createElement("img",{src:Object(d.a)("/img/sponsors/"+a.image),alt:a.name})),r.a.createElement("div",{className:"text--center padding-horiz--md padding-vert--sm"},r.a.createElement("h3",null,a.name),r.a.createElement("p",null,a.description),r.a.createElement(l.a,{className:"button button--secondary",href:a.link},"Go to website")))}function y(e){let{info:a}=e;return Array.isArray(a)?r.a.createElement("li",null,r.a.createElement(l.a,{href:a[1]},a[0])):r.a.createElement("li",null,a)}function b(){return r.a.createElement("section",{className:p.a.sponsors},r.a.createElement("div",{className:"container"},r.a.createElement("h1",null,"Sponsors"),r.a.createElement("div",{className:"row"},h.map(((e,a)=>r.a.createElement(w,{key:a,sponsor:e})))),r.a.createElement("h1",{className:"margin-top--lg"},"Monthly Donators"),r.a.createElement("p",null,"The following sponsors financially support the founder of the CodeZri organization via ",r.a.createElement(l.a,{href:"https://www.patreon.com/shalithasuranga"},"Patreon")," and ",r.a.createElement(l.a,{href:"https://github.com/sponsors/shalithasuranga"},"GitHub Sponsors")," platforms."),r.a.createElement("h2",null,"Current"),r.a.createElement("div",{className:"row"},r.a.createElement("ul",null,g.map(((e,a)=>r.a.createElement(y,{key:a,info:e}))))),r.a.createElement("h2",null,"Past"),r.a.createElement("div",{className:"row"},r.a.createElement("ul",null,E.map(((e,a)=>r.a.createElement(y,{key:a,info:e}))))),r.a.createElement("h1",{className:"margin-top--lg"},"One-Time Donators"),r.a.createElement("p",null,"The following sponsors financially supported the founder of the CodeZri organization via Patreon, Github Sponsors, or another donation/payment channel with a one-time monetary donation."),r.a.createElement("div",{className:"row"},r.a.createElement("ul",null,f.map(((e,a)=>r.a.createElement(y,{key:a,info:e})))))))}function v(){const{siteConfig:e}=Object(i.default)();return r.a.createElement("header",{className:Object(o.a)("hero hero--primary",c.a.heroBanner)},r.a.createElement("div",{className:"container"},r.a.createElement("h1",{className:"hero__title"},e.title," Sponsors"),r.a.createElement("p",{className:"hero__subtitle"},"Organizations and individuals who support our works")))}function N(){const{siteConfig:e}=Object(i.default)();return r.a.createElement(s.a,{title:`${e.title} Sponsors`,description:`Organizations and individuals around the world support ${e.title}. \n Get your name added here by sponsoring or making a recurring donation.`},r.a.createElement(v,null),r.a.createElement("main",null,r.a.createElement(b,null)),r.a.createElement("div",{className:Object(o.a)("hero hero--primary",c.a.heroBanner)},r.a.createElement("div",{className:"container"},r.a.createElement("h1",{className:"hero__title"},`Support ${e.title}`),r.a.createElement("p",{className:"hero__subtitle"},"Would you like to support our works and get listed above?"),r.a.createElement("div",{className:c.a.buttons},r.a.createElement(l.a,{className:Object(o.a)("button button--secondary button--lg",c.a.getStarted),href:"https://forms.gle/mTxB9gdKsdWPkwBQA"},"Sponsor"),r.a.createElement(l.a,{className:Object(o.a)("button button--secondary button--lg margin-left--sm",c.a.getStarted),href:"https://www.patreon.com/shalithasuranga"},"Donate")))))}}}]); \ No newline at end of file diff --git a/assets/js/6dfec84f.4ff3d282.js b/assets/js/6dfec84f.4ff3d282.js new file mode 100644 index 0000000..b83e715 --- /dev/null +++ b/assets/js/6dfec84f.4ff3d282.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{91:function(e,t,o){"use strict";o.r(t),o.d(t,"frontMatter",(function(){return i})),o.d(t,"metadata",(function(){return a})),o.d(t,"toc",(function(){return s})),o.d(t,"default",(function(){return u}));var n=o(3),r=(o(0),o(124));const i={title:"Introduction",slug:"/"},a={unversionedId:"getting-started/intro",id:"getting-started/intro",isDocsHomePage:!1,title:"Introduction",description:"Welcome to CodeZri documentation. You can browse tutorials, guides, and references about all CodeZri projects",source:"@site/docs/getting-started/intro.md",slug:"/",permalink:"/docs/",editUrl:"https://github.com/codezri/codezri.github.io/edit/master/docs/getting-started/intro.md",version:"current",sidebar:"docs",next:{title:"ReleaseZri Introduction",permalink:"/docs/releasezri/intro"}},s=[],c={toc:s},d="wrapper";function u(e){let{components:t,...o}=e;return Object(r.b)(d,Object(n.a)({},c,o,{components:t,mdxType:"MDXLayout"}),Object(r.b)("p",null,"Welcome to CodeZri documentation. You can browse tutorials, guides, and references about all CodeZri projects\nhere."),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",{parentName:"li",href:"/docs/releasezri/intro"},"ReleaseZri - A meaningful and minimalist release notes for developers")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",{parentName:"li",href:"/docs/buildzri/intro"},"BuildZri - A minimal C++ build automation tool"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7a447118.d1057533.js b/assets/js/7a447118.d1057533.js new file mode 100644 index 0000000..c0e330e --- /dev/null +++ b/assets/js/7a447118.d1057533.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{140:function(e,t,a){"use strict";a.r(t),t.default=a.p+"assets/images/cover-neutralinojs-roadmap-2022-9fe59aaae31d64bb619a501790a5afef.png"},92:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return r})),a.d(t,"metadata",(function(){return i})),a.d(t,"toc",(function(){return s})),a.d(t,"default",(function(){return u}));var n=a(3),o=(a(0),a(124));const r={title:"Neutralinojs 2022 Roadmap",authors:["shalithasuranga"],slug:"neutralinojs-2022-roadmap",tags:["neutralinojs","javascript","framework","roadmap"],image:"media/cover-neutralinojs-roadmap-2022.png"},i={permalink:"/blog/neutralinojs-2022-roadmap",source:"@site/blog/2021-12-27-neutralinojs-2022-roadmap.md",description:"Every year, we typically publish a high-level view of planned milestones.",date:"2021-12-27T00:00:00.000Z",formattedDate:"December 27, 2021",tags:[{label:"neutralinojs",permalink:"/blog/tags/neutralinojs"},{label:"javascript",permalink:"/blog/tags/javascript"},{label:"framework",permalink:"/blog/tags/framework"},{label:"roadmap",permalink:"/blog/tags/roadmap"}],title:"Neutralinojs 2022 Roadmap",readingTime:4.07,truncated:!0,prevItem:{title:"How We Save Our Time with\xa0DevOps",permalink:"/blog/how-we-save-our-time-with-devops"}},s=[{value:"Achievements in\xa02021",id:"achievements-in-2021",children:[]},{value:"Community",id:"community",children:[]},{value:"Sponsors",id:"sponsors",children:[]},{value:"Roadmap of\xa02022",id:"roadmap-of-2022",children:[]},{value:"Why we are building Neutralinojs",id:"why-we-are-building-neutralinojs",children:[]}],l={toc:s},p="wrapper";function u(e){let{components:t,...r}=e;return Object(o.b)(p,Object(n.a)({},l,r,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,Object(o.b)("img",{src:a(140).default})),Object(o.b)("p",null,"Every year, we typically publish a high-level view of planned milestones.\nWe wrote the ",Object(o.b)("a",{parentName:"p",href:"https://web.archive.org/web/20220618124802/https://factsoverflow.com/neutralinojs-2021-roadmap/"},'"Neutralinojs roadmap 2021"'),"\narticle covering milestones for the year 2021.\nThe year 2021 roadmap focused on building an error code system, synchronizing features among\nsupported platforms, completing pending feature requests, and refactoring the main codebase with a\nbetter structure. We are happy to announce that we achieved all the planned milestones and passed many\nextra milestones."),Object(o.b)("h2",{id:"achievements-in-2021"},"Achievements in\xa02021"),Object(o.b)("p",null,"Here are some highlighted updates from 2021."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"We changed the native API communication from the synchronous HTTP RESTful approach to\nasynchronous WebSocket-based communication."),Object(o.b)("li",{parentName:"ul"},"A lot of code refactoring happened. We re-structured the main codebase, JavaScript client API,\nand created a detailed technical ",Object(o.b)("a",{parentName:"li",href:"https://neutralino.js.org/docs/contributing/framework-developer-guide/"},"contribution guide"),"."),Object(o.b)("li",{parentName:"ul"},"We made all API functions asynchronous with Promises and implemented a complete\nerror-code system for handling errors."),Object(o.b)("li",{parentName:"ul"},"We added many features to the framework: auto-updater, extensions system, new configuration options,\nnew dialog boxes implementation, draggable regions, multi-window API, new global variables, API permission\nsystem, new child process implementation, etc."),Object(o.b)("li",{parentName:"ul"},"We integrated a built-in events system for native, browser, and extension events."),Object(o.b)("li",{parentName:"ul"},"Now Neutralinojs has an automated DevOps workflow for releases thanks to the\n",Object(o.b)("a",{parentName:"li",href:"https://github.com/codezri/releasezri"},"ReleaseZri")," project. Also, we added a C++ and JavaScript\nintegration ",Object(o.b)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=DdlzDklYHVs"},"test suite"),".")),Object(o.b)("p",null,"2021 was a great year for Neutralinojs - we were able to make the framework and tools better with great\nfeatures and improvements."),Object(o.b)("h2",{id:"community"},"Community"),Object(o.b)("p",null,"There is always a great community behind every successful open-source project. Neutralinojs\ncommunity supported us to make the project better by submitting ideas, discussing new features,\nand reporting bugs. Also, we met great code contributors around the world."),Object(o.b)("p",null,"See the following community statistics."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"4.7k+ stargazers on GitHub."),Object(o.b)("li",{parentName:"ul"},"120 members on Discord."),Object(o.b)("li",{parentName:"ul"},"248 members on Slack."),Object(o.b)("li",{parentName:"ul"},"18k+ neu CLI downloads.")),Object(o.b)("p",null,"Neutralinojs got featured on many blog posts, articles, HackerNews threads, Reddit threads,\nYouTube videos, newsletters, many websites, and worldwide Tweets. Also, we had an opportunity\nto get featured on the ",Object(o.b)("a",{parentName:"p",href:"http://jsweekly.com/"},"JavaScript Weekly")," newsletter several times. Some developers\nbuilt Neutralinojs app templates for various frontend frameworks."),Object(o.b)("p",null,"Thank you so much, everyone.\nWe couldn't reach a wider developer audience without your support."),Object(o.b)("h2",{id:"sponsors"},"Sponsors"),Object(o.b)("p",null,"We accept infrastructure and monetary donations.\nRight now, we have one infrastructure sponsor and three financial donators.\n",Object(o.b)("a",{parentName:"p",href:"https://www.macstadium.com/"},"MacStadium")," sponsored Neutralinojs by providing a free Mac Mini device.\nThree Patreon users helped the maintainer to allocate more time for the project."),Object(o.b)("p",null,"Thanks, MacStadium, and all patrons. If you would like to support us, consider becoming a ",Object(o.b)("a",{parentName:"p",href:"/sponsors"},"sponsor")," -\nor making a financial contribution via ",Object(o.b)("a",{parentName:"p",href:"https://www.patreon.com/shalithasuranga"},"Patreon"),"."),Object(o.b)("h2",{id:"roadmap-of-2022"},"Roadmap of\xa02022"),Object(o.b)("p",null,"We changed the native API several times. But, now the API function interface is almost\nstable and ready for production use-cases. Also, we recently added a way to write Neutralinojs\napp backends with any programming language via the new extensions API. Therefore, in 2022, we are happy to see\nsome community projects/templates that let developers write Neutralinojs apps with Python, Go,\nNode.js, Rust, and C#.\nWe recently added chrome mode to let Neutralinojs apps run as Chrome apps.\nSo, our first goal is to test it and make a new release."),Object(o.b)("p",null,"Here is an overview of the 2022 roadmap."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Improving the window mode by solving issues in the Neutralinojs's webview"),Object(o.b)("li",{parentName:"ul"},"Implementing screen details and global keyboard shortcut API"),Object(o.b)("li",{parentName:"ul"},"Updating the official documentation and creating more content for the developer community"),Object(o.b)("li",{parentName:"ul"},"Completing feature requests and ideas submitted by the community")),Object(o.b)("p",null,"Check 2022 roadmap repo and suggest ideas: ",Object(o.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/roadmap"},"https://github.com/neutralinojs/roadmap")),Object(o.b)("h2",{id:"why-we-are-building-neutralinojs"},"Why we are building Neutralinojs"),Object(o.b)("p",null,"You may think why we are building another JavaScript framework. Electron dominates the desktop\napplication development industry. Even big tech companies tend to use Electron to build their desktop\napps. The Electron framework is a great tool for building ",Object(o.b)("strong",{parentName:"p"},"large-scale")," desktop apps for ",Object(o.b)("strong",{parentName:"p"},"high-end"),"\ncomputers. However, there is a problem if a simple desktop app takes hundred megabytes of disk space and consumes\nabove-average resources. Moreover, there is a problem if your app performs poorly on low-end or mid-end\ncomputers."),Object(o.b)("p",null,"Yes, there are many lightweight ",Object(o.b)("a",{parentName:"p",href:"https://github.com/sudhakar3697/electron-alternatives#js"},"alternatives"),"\nfor Electron already. However, Neutralinojs is a lightweight\nalternative for Electron with unique features. You can run Neutralinojs-based desktop apps on Linux, macOS,\nWindows, Web, and Chrome. We always strive to offer simple solutions for complex problems. For example,\nwe offer a minimal functional API without complicating the API with many OOP classes. Also, we provide a\nminimal CLI to manage Neutralinojs apps. Neutralinojs indeed give you the freedom to extend the\nnative API with any programming language."),Object(o.b)("p",null,"Neutralinojs has numerous use-cases. For example, you can use Neutralinojs cloud mode as a message broker\nto integrate multiple processes. You can write Chrome apps or web apps with native features.\nNeutralinojs is a framework to build, learn, experiment, and enjoy software development. See a\ndetailed comparison with other frameworks ",Object(o.b)("a",{parentName:"p",href:"https://github.com/Elanis/web-to-desktop-framework-comparison"},"here"),"."),Object(o.b)("p",null,"Build an app with Neutralinojs - feel the difference - and join with our journey."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/831f74a5.f304bd3f.js b/assets/js/831f74a5.f304bd3f.js new file mode 100644 index 0000000..f6db2fd --- /dev/null +++ b/assets/js/831f74a5.f304bd3f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{115:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return f})),n.d(t,"metadata",(function(){return h})),n.d(t,"toc",(function(){return g})),n.d(t,"default",(function(){return v}));var i=n(3),a=n(0),o=n.n(a),r=n(124),l=n(135),c=n(120),s=n(93),u=n.n(s);const d=37,b=39;var p=function(e){const{lazy:t,block:n,defaultValue:i,values:r,groupId:s,className:p}=e,{tabGroupChoices:m,setTabGroupChoices:f}=Object(l.a)(),[h,g]=Object(a.useState)(i),j=a.Children.toArray(e.children),O=[];if(null!=s){const e=m[s];null!=e&&e!==h&&r.some((t=>t.value===e))&&g(e)}const v=e=>{const t=e.target,n=O.indexOf(t),i=j[n].props.value;g(i),null!=s&&(f(s,i),setTimeout((()=>{(function(e){const{top:t,left:n,bottom:i,right:a}=e.getBoundingClientRect(),{innerHeight:o,innerWidth:r}=window;return t>=0&&a<=r&&i<=o&&n>=0})(t)||(t.scrollIntoView({block:"center",behavior:"smooth"}),t.classList.add(u.a.tabItemActive),setTimeout((()=>t.classList.remove(u.a.tabItemActive)),2e3))}),150))},y=e=>{var t;let n;switch(e.keyCode){case b:{const t=O.indexOf(e.target)+1;n=O[t]||O[0];break}case d:{const t=O.indexOf(e.target)-1;n=O[t]||O[O.length-1];break}}null===(t=n)||void 0===t||t.focus()};return o.a.createElement("div",{className:"tabs-container"},o.a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:Object(c.a)("tabs",{"tabs--block":n},p)},r.map((e=>{let{value:t,label:n}=e;return o.a.createElement("li",{role:"tab",tabIndex:h===t?0:-1,"aria-selected":h===t,className:Object(c.a)("tabs__item",u.a.tabItem,{"tabs__item--active":h===t}),key:t,ref:e=>O.push(e),onKeyDown:y,onFocus:v,onClick:v},n)}))),t?Object(a.cloneElement)(j.filter((e=>e.props.value===h))[0],{className:"margin-vert--md"}):o.a.createElement("div",{className:"margin-vert--md"},j.map(((e,t)=>Object(a.cloneElement)(e,{key:t,hidden:e.props.value!==h})))))};var m=function(e){let{children:t,hidden:n,className:i}=e;return o.a.createElement("div",{role:"tabpanel",hidden:n,className:i},t)};const f={title:"How to Use"},h={unversionedId:"buildzri/integrate",id:"buildzri/integrate",isDocsHomePage:!1,title:"How to Use",description:"Add BuildZri to your C++ project with the following steps.",source:"@site/docs/buildzri/integrate.mdx",slug:"/buildzri/integrate",permalink:"/docs/buildzri/integrate",editUrl:"https://github.com/codezri/codezri.github.io/edit/master/docs/buildzri/integrate.mdx",version:"current",sidebar:"docs",previous:{title:"BuildZri Introduction",permalink:"/docs/buildzri/intro"},next:{title:"Reference",permalink:"/docs/buildzri/reference"}},g=[{value:"Add the BuildZri script",id:"add-the-buildzri-script",children:[]},{value:"Create the configuration file",id:"create-the-configuration-file",children:[]},{value:"Start building binaries",id:"start-building-binaries",children:[]}],j={toc:g},O="wrapper";function v(e){let{components:t,...n}=e;return Object(r.b)(O,Object(i.a)({},j,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("p",null,"Add BuildZri to your C++ project with the following steps."),Object(r.b)("h2",{id:"add-the-buildzri-script"},"Add the BuildZri script"),Object(r.b)("p",null,"BuildZri comes as a Python v3 script that you can execute on GNU/Linux, macOS, and Windows. Copy-paste\n",Object(r.b)("a",{parentName:"p",href:"https://github.com/codezri/buildzri/blob/main/scripts/bz.py"},Object(r.b)("inlineCode",{parentName:"a"},"scripts/bz.py"))," into your ",Object(r.b)("inlineCode",{parentName:"p"},"scripts")," directory.\nNext, add required execution permissions on Unix or Unix-like platforms."),Object(r.b)("h2",{id:"create-the-configuration-file"},"Create the configuration file"),Object(r.b)("p",null,"Create the ",Object(r.b)("inlineCode",{parentName:"p"},"buildzri.config.json")," file for your project according to the ",Object(r.b)("a",{parentName:"p",href:"/docs/buildzri/reference"},"reference"),". Look at\nthe following minimal C++ project."),Object(r.b)(p,{defaultValue:"buildzri.config.json",values:[{label:"buildzri.config.json",value:"buildzri.config.json"},{label:"main.cpp",value:"main.cpp"}],mdxType:"Tabs"},Object(r.b)(m,{value:"buildzri.config.json",mdxType:"TabItem"},Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-json"},'{\n "std": "c++17",\n "name": "BuildZri Sample",\n "version": "1.0.1",\n "output": "./bin/bzsample-${BZ_OS}_${BZ_ARCH}",\n "source": {\n "*": [\n "main.cpp"\n ],\n },\n "definitions": {\n "*": [\n "BZ_PROJ_VERSION=\\\\\\"${BZ_VERSION}\\\\\\""\n ]\n }\n}\n'))),Object(r.b)(m,{value:"main.cpp",mdxType:"TabItem"},Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-cpp"},'#include \n\nusing namespace std;\n\nint main() {\n cout << "Hello BuildZri" << endl;\n #if defined(BZ_PROJ_VERSION)\n cout << "v" << BZ_PROJ_VERSION << endl;\n #endif\n}\n')))),Object(r.b)("p",null,"The above project consists of one C++ source file, but you can add multiple source files easily with the\nwildcard syntax. As show above, you can configure BuildZri to automatically set version details via a macro\ndefinition."),Object(r.b)("p",null,"Inspect the build configuration file of the ",Object(r.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/neutralinojs/blob/main/buildzri.config.json"},"Neutralinojs"),"\nframework to learn how to integrate BuildZri for medium-scale projects."),Object(r.b)("h2",{id:"start-building-binaries"},"Start building binaries"),Object(r.b)("p",null,"After configuring your project, run the ",Object(r.b)("inlineCode",{parentName:"p"},"bz.py")," script file to start the compilation process. For example,\non Unix or Unix-like platforms, you can use the following command:"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-bash"},"./scripts/bz.py\n")),Object(r.b)("p",null,"The compilation warnings and error messages will appear on the terminal as usual. Also, you can use the ",Object(r.b)("inlineCode",{parentName:"p"},"--verbose"),"\nflag to identify pre-compilation issues. The BuildZri tool is built for both developers and CI/CD environments,\nso you can use the same build command on GitHub Actions, as shown below:"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-yaml"},"- name: Build\n run: ./scripts/bz.py\n")))}v.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/83383360.1f992708.js b/assets/js/83383360.1f992708.js new file mode 100644 index 0000000..6fff5b0 --- /dev/null +++ b/assets/js/83383360.1f992708.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{137:function(e,a,t){"use strict";t.r(a),a.default=t.p+"assets/images/cover-neutralinojs-roadmap-2023-532f704d55bf60f0034cdb83197b5312.png"},94:function(e,a,t){"use strict";t.r(a),t.d(a,"frontMatter",(function(){return o})),t.d(a,"metadata",(function(){return i})),t.d(a,"toc",(function(){return l})),t.d(a,"default",(function(){return u}));var n=t(3),r=(t(0),t(124));const o={title:"Neutralinojs 2023 Roadmap",authors:["shalithasuranga"],slug:"neutralinojs-2023-roadmap",tags:["neutralinojs","javascript","framework","roadmap"],image:"media/cover-neutralinojs-roadmap-2023.png"},i={permalink:"/blog/neutralinojs-2023-roadmap",source:"@site/blog/2022-12-27-neutralinojs-2023-roadmap.md",description:"We typically publish a set of goals for the upcoming year and let you know the current year's achievements at",date:"2022-12-27T00:00:00.000Z",formattedDate:"December 27, 2022",tags:[{label:"neutralinojs",permalink:"/blog/tags/neutralinojs"},{label:"javascript",permalink:"/blog/tags/javascript"},{label:"framework",permalink:"/blog/tags/framework"},{label:"roadmap",permalink:"/blog/tags/roadmap"}],title:"Neutralinojs 2023 Roadmap",readingTime:4.46,truncated:!0,prevItem:{title:"Neutralinojs 2024 Roadmap",permalink:"/blog/neutralinojs-2024-roadmap"},nextItem:{title:"How We Save Our Time with\xa0DevOps",permalink:"/blog/how-we-save-our-time-with-devops"}},l=[],s={toc:l},p="wrapper";function u(e){let{components:a,...o}=e;return Object(r.b)(p,Object(n.a)({},s,o,{components:a,mdxType:"MDXLayout"}),Object(r.b)("p",null,Object(r.b)("img",{src:t(137).default})),Object(r.b)("p",null,"We typically publish a set of goals for the upcoming year and let you know the current year's achievements at\nthe end of every year via a blog post. For example, we published\nthe ",Object(r.b)("a",{parentName:"p",href:"/blog/neutralinojs-2022-roadmap"},'"Neutralinojs 2022 Roadmap"')," article on December 2021.\nSimilarly, we are publishing this article for the year 2023. We are happy to announce that we completed\nmost of the planned goals in 2022. We made Neutralinojs stable and competitive by implementing\nDevOps principles and doing various performance, architectural, security, and source-code-level enhancements."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.7a533168.js b/assets/js/935f2afb.7a533168.js new file mode 100644 index 0000000..25744e3 --- /dev/null +++ b/assets/js/935f2afb.7a533168.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{95:function(e){e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","isLast":true,"docsSidebars":{"docs":[{"collapsed":true,"type":"category","label":"Getting Started","items":[{"type":"link","label":"Introduction","href":"/docs/"}]},{"collapsed":true,"type":"category","label":"ReleaseZri","items":[{"type":"link","label":"ReleaseZri Introduction","href":"/docs/releasezri/intro"},{"type":"link","label":"How to Use","href":"/docs/releasezri/integrate"}]},{"collapsed":true,"type":"category","label":"BuildZri","items":[{"type":"link","label":"BuildZri Introduction","href":"/docs/buildzri/intro"},{"type":"link","label":"How to Use","href":"/docs/buildzri/integrate"},{"type":"link","label":"Reference","href":"/docs/buildzri/reference"}]}]},"permalinkToSidebar":{"/docs/buildzri/integrate":"docs","/docs/buildzri/intro":"docs","/docs/buildzri/reference":"docs","/docs/":"docs","/docs/releasezri/integrate":"docs","/docs/releasezri/intro":"docs"}}')}}]); \ No newline at end of file diff --git a/assets/js/96124ce9.af1a8d21.js b/assets/js/96124ce9.af1a8d21.js new file mode 100644 index 0000000..3287d0c --- /dev/null +++ b/assets/js/96124ce9.af1a8d21.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{96:function(e,n,i){"use strict";i.r(n),i.d(n,"frontMatter",(function(){return a})),i.d(n,"metadata",(function(){return r})),i.d(n,"toc",(function(){return l})),i.d(n,"default",(function(){return u}));var t=i(3),o=(i(0),i(124));const a={title:"BuildZri Introduction"},r={unversionedId:"buildzri/intro",id:"buildzri/intro",isDocsHomePage:!1,title:"BuildZri Introduction",description:"`",source:"@site/docs/buildzri/intro.md",slug:"/buildzri/intro",permalink:"/docs/buildzri/intro",editUrl:"https://github.com/codezri/codezri.github.io/edit/master/docs/buildzri/intro.md",version:"current",sidebar:"docs",previous:{title:"How to Use",permalink:"/docs/releasezri/integrate"},next:{title:"How to Use",permalink:"/docs/buildzri/integrate"}},l=[{value:"Features",id:"features",children:[]},{value:"Sample configuration",id:"sample-configuration",children:[]}],s={toc:l},c="wrapper";function u(e){let{components:n,...i}=e;return Object(o.b)(c,Object(t.a)({},s,i,{components:n,mdxType:"MDXLayout"}),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre"}," ____ _ _ _ ______ _\n | _ \\ (_) | | |___ / (_)\n | |_) |_ _ _| | __| | / / _ __ _\n | _ <| | | | | |/ _` | / / | '__| |\n | |_) | |_| | | | (_| |/ /__| | | |\n |____/ \\__,_|_|_|\\__,_/_____|_| |_|\n\n BuildZri - A minimal build automation tool for C++\n")),Object(o.b)("p",null,"Most C++ build automation tools come with a bit complex syntax and make simple projects complex.\nAs a result, C++ programmers often try to write shell scripts for compilation, but then they have to maintain\nmultiple scripts for each platform."),Object(o.b)("p",null,"BuildZri is a minimal cross-platform C++ build automation tool written in Python. It comes with a simple\nJSON-based configuration file with the features you need. It provides a minimal and flexible abstraction over the\nstandard compiler command-line interface, so you can integrate BuildZri in seconds while having the freedom\nto configure the compiler."),Object(o.b)("p",null,Object(o.b)("a",{parentName:"p",href:"https://github.com/codezri/buildzri"},"Source code")),Object(o.b)("h2",{id:"features"},"Features"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Minimal JSON-based configuration with global variables"),Object(o.b)("li",{parentName:"ul"},"Supports, GNU C++, Clang, and MSVC compilers"),Object(o.b)("li",{parentName:"ul"},"Written in Python, works on any popular operating system"),Object(o.b)("li",{parentName:"ul"},"Built for both developers and CI/CD servers"),Object(o.b)("li",{parentName:"ul"},"No installation required, it comes as a simple script")),Object(o.b)("p",null,Object(o.b)("a",{parentName:"p",href:"https://neutralino.js.org"},"Neutralinojs")," uses BuildZri to build binaries on Linux, macOS, and Windows."),Object(o.b)("h2",{id:"sample-configuration"},"Sample configuration"),Object(o.b)("p",null,"See how simple to generate cross-platform binaries with BuildZri:"),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre",className:"language-json"},'{\n "std": "c++17",\n "name": "BuildZri Sample",\n "version": "1.0.1",\n "output": "./bin/bzsample-${BZ_OS}_${BZ_ARCH}",\n "include": {\n "*": [\n "."\n ]\n },\n "source": {\n "*": [\n "*.cpp",\n "add/*.cpp",\n "subtract/*.cpp"\n ],\n "linux": [\n "platform/linux.cpp"\n ]\n },\n "definitions": {\n "*": [\n "BZ_TESTV=1",\n "BZ_PROJ_VERSION=\\\\\\"${BZ_VERSION}\\\\\\""\n ]\n },\n "options": {\n "linux": [\n "-Os"\n ],\n "darwin": [\n "-Os"\n ],\n "windows": [\n "/EHsc",\n "/Os",\n "/link"\n ]\n }\n}\n')),Object(o.b)("p",null,"The above sample configuration generates the following binaries:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"./bin/bzsample-linux_x64")," on x64 GNU/Linux machines"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"./bin/bzsample-mac_x64")," on x64/arm64 macOS machines"),Object(o.b)("li",{parentName:"ul"},Object(o.b)("inlineCode",{parentName:"li"},"./bin/bzsample-win_x64.exe")," on x64 Windows machines")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9ea41d1a.f44fa105.js b/assets/js/9ea41d1a.f44fa105.js new file mode 100644 index 0000000..1c66327 --- /dev/null +++ b/assets/js/9ea41d1a.f44fa105.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{97:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return u}));var a=n(0),r=n.n(a),l=n(120),o=n(125),s=n(122),i=n(16),c=(n(126),n(57)),m=n.n(c);function u(){const e=Object(i.default)(),{siteConfig:t={}}=e;return r.a.createElement(o.a,{title:`${t.title} Foundation`,description:"Free educational sessions for the community"},r.a.createElement("header",{className:Object(l.a)("hero hero--primary",m.a.heroBanner)},r.a.createElement("div",{className:"container"},r.a.createElement("h1",{className:"hero__title"},"Foundation"),r.a.createElement("p",{className:"hero__subtitle"},"Free educational sessions for the community"))),r.a.createElement("div",{className:m.a.intro},r.a.createElement("div",{className:"container"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--12"},r.a.createElement("p",null,"Every software system's success depends on its foundation, so every programmer strives to put a stable foundation for software projects with various architectural patterns. Similarly, every developer's career success depends on their skill set's foundation, what they learn initially.",r.a.createElement("br",null),r.a.createElement("br",null),"Self-learning is undoubtedly the best way to learn anything, but initial guidance is indeed needed. Therefore, experienced programmers need to mentor and guide beginner-level programmers with their experience.",r.a.createElement("br",null),r.a.createElement("br",null),"CodeZri loves to guide and mentor beginner programmers via online technical sessions. Right now, we do free online technical sessions for Sri Lankan university students via the Google Meet platform.",r.a.createElement("br",null),r.a.createElement("br",null),"We do technical sessions on the following topics:",r.a.createElement("br",null),r.a.createElement("br",null),r.a.createElement("ul",null,r.a.createElement("li",null,"Git and GitHub: 2h (1h theory and 1h hands-on)"),r.a.createElement("li",null,"Introduction to open source: 1h"),r.a.createElement("li",null,"How does your program work (software, compilers, assemblers, and machine language): 1h"),r.a.createElement("li",null,"Python programming: 2h (hands-on)"),r.a.createElement("li",null,"C programming: 2h (hands-on)"),r.a.createElement("li",null,"C++ programming: 2h (hands-on)"),r.a.createElement("li",null,"Bash scripting: 2h (hands-on)"),r.a.createElement("li",null,"How to write better code: 1h"),r.a.createElement("li",null,"Programming best practices (KISS, YAGNI, DRY-like concepts): 1h"),r.a.createElement("li",null,"Get started with DevOps: 2h (1h theory and 1h hands-on)"),"\xa0"),"Fill out the ",r.a.createElement(s.a,{href:"https://forms.gle/mTxB9gdKsdWPkwBQA"},"contact form")," and request a time slot.",r.a.createElement("br",null),r.a.createElement("br",null),"Please note that these sessions are free for any Sri Lankan educational institute \u2014 we do not accept any payment or donation as a reply for technical sessions."))))))}}}]); \ No newline at end of file diff --git a/assets/js/a7023ddc.5e95be3a.js b/assets/js/a7023ddc.5e95be3a.js new file mode 100644 index 0000000..099391c --- /dev/null +++ b/assets/js/a7023ddc.5e95be3a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{98:function(a){a.exports=JSON.parse('{"neutralinojs":{"allTagsPath":"/blog/tags","slug":"neutralinojs","name":"neutralinojs","count":4,"permalink":"/blog/tags/neutralinojs"},"javascript":{"allTagsPath":"/blog/tags","slug":"javascript","name":"javascript","count":4,"permalink":"/blog/tags/javascript"},"framework":{"allTagsPath":"/blog/tags","slug":"framework","name":"framework","count":3,"permalink":"/blog/tags/framework"},"roadmap":{"allTagsPath":"/blog/tags","slug":"roadmap","name":"roadmap","count":3,"permalink":"/blog/tags/roadmap"},"devops":{"allTagsPath":"/blog/tags","slug":"devops","name":"devops","count":1,"permalink":"/blog/tags/devops"},"c":{"allTagsPath":"/blog/tags","slug":"c","name":"c++","count":1,"permalink":"/blog/tags/c"},"automation":{"allTagsPath":"/blog/tags","slug":"automation","name":"automation","count":1,"permalink":"/blog/tags/automation"}}')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.1836bee5.js b/assets/js/b2b675dd.1836bee5.js new file mode 100644 index 0000000..8641121 --- /dev/null +++ b/assets/js/b2b675dd.1836bee5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{99:function(o){o.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":4,"previousPage":null,"nextPage":null,"blogDescription":"The official blog of CodeZri.org","blogTitle":"CodeZri blog"}')}}]); \ No newline at end of file diff --git a/assets/js/b567ff82.1282143c.js b/assets/js/b567ff82.1282143c.js new file mode 100644 index 0000000..6b688b2 --- /dev/null +++ b/assets/js/b567ff82.1282143c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{100:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return r})),n.d(t,"metadata",(function(){return i})),n.d(t,"toc",(function(){return l})),n.d(t,"default",(function(){return u}));var a=n(3),o=(n(0),n(124));const r={title:"Neutralinojs 2024 Roadmap",authors:["shalithasuranga"],slug:"neutralinojs-2024-roadmap",tags:["neutralinojs","javascript","framework","roadmap"],image:"media/cover-neutralinojs-roadmap-2024.png"},i={permalink:"/blog/neutralinojs-2024-roadmap",source:"@site/blog/2024-01-01-neutralinojs-2024-roadmap.md",description:"At the end of every year, we typically publish a new blog post about the annual achievements and plans",date:"2024-01-01T00:00:00.000Z",formattedDate:"January 1, 2024",tags:[{label:"neutralinojs",permalink:"/blog/tags/neutralinojs"},{label:"javascript",permalink:"/blog/tags/javascript"},{label:"framework",permalink:"/blog/tags/framework"},{label:"roadmap",permalink:"/blog/tags/roadmap"}],title:"Neutralinojs 2024 Roadmap",readingTime:4.465,truncated:!0,nextItem:{title:"Neutralinojs 2023 Roadmap",permalink:"/blog/neutralinojs-2023-roadmap"}},l=[{value:"Achievements in\xa02023",id:"achievements-in-2023",children:[]},{value:"Project growth",id:"project-growth",children:[]},{value:"Community",id:"community",children:[]},{value:"Sponsors and\xa0finance",id:"sponsors-and-finance",children:[]},{value:"Roadmap 2024",id:"roadmap-2024",children:[]}],s={toc:l},p="wrapper";function u(e){let{components:t,...r}=e;return Object(o.b)(p,Object(a.a)({},s,r,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,Object(o.b)("img",{src:n(141).default})),Object(o.b)("p",null,"At the end of every year, we typically publish a new blog post about the annual achievements and plans\nof the Neutralinojs project. In the past few years, we published the roadmap article at the end of each\nyear, but from 2024 onward we'll bring this post to you at the beginning of every upcoming year to start\neach new year with fresh plans by looking back at the previous year. So, here is the review of 2023 and plans\nfor the brand-new 2024!"),Object(o.b)("p",null,"We could publish seven remarkable framework releases, nine neu CLI releases, and seven client library\nreleases with new features and stability enhancements by fulfilling the developer community's needs in 2023."),Object(o.b)("h2",{id:"achievements-in-2023"},"Achievements in\xa02023"),Object(o.b)("p",null,"Core maintainers and the friendly community accomplished the following achievements in the last year:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Published the Neutralinojs client library as an NPM package: ",Object(o.b)("a",{parentName:"li",href:"https://www.npmjs.com/package/@neutralinojs/neu"},Object(o.b)("inlineCode",{parentName:"a"},"@neutralinojs/lib"))),Object(o.b)("li",{parentName:"ul"},"Introduced a new inbuilt file watcher API for subscribing to file system events"),Object(o.b)("li",{parentName:"ul"},"Improved the filesystem API by adding binary file-handling support to the ",Object(o.b)("inlineCode",{parentName:"li"},"openFile")," function"),Object(o.b)("li",{parentName:"ul"},"Extended native window features by adding window startup positioning and persistent window state"),Object(o.b)("li",{parentName:"ul"},"Added a way to extend the default user agent string within the window mode"),Object(o.b)("li",{parentName:"ul"},"Implemented multiple development/production config files support with a new command-line option"),Object(o.b)("li",{parentName:"ul"},"Improved the neu CLI program with better, productive frontend library support by\ninvoking frontend library commands automatically,\ni.e., running the frontend library's development server automatically with ",Object(o.b)("inlineCode",{parentName:"li"},"neu run")),Object(o.b)("li",{parentName:"ul"},"Stabilized and improved the framework by improving the codebase, enhancing existing stable\nAPIs, and fixing bugs reported by the developer community")),Object(o.b)("h2",{id:"project-growth"},"Project growth"),Object(o.b)("p",null,"In 2021, our goal was to stabilize the framework to help the community build production-level apps.\nIn 2022, stable features, API enhancements, security improvements, and DevOps implementations made\nNeutralinojs a high-quality, production-grade solution for all cross-platform desktop app developers.\nNow, medium-sized companies, startups, freelancers, and individual developers choose Neutralinojs\nover other popular frameworks due to its simplicity, lightweightedness, productivity, and active community support.\xa0"),Object(o.b)("p",null,"We'll keep adding developer-focused productivity features, app development features, and\nsecurity/performance-related enhancements to compete with other cross-platform desktop app development\nframeworks."),Object(o.b)("h2",{id:"community"},"Community"),Object(o.b)("p",null,"Without the support from the community, it's undoubtedly impossible to bring Neutralinojs to the current level.\nThe Neutralinojs developer community supported Neutralinojs development by reporting bugs, suggesting\nproject enhancement ideas, submitting code contributions, and reporting security vulnerabilities.\nWe are certainly glad to see the new developers' engagement with the Neutralinojs journey."),Object(o.b)("p",null,"Here are some highlighted community statistics:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"7.2k GitHub stargazers in the framework repository (15% increment)"),Object(o.b)("li",{parentName:"ul"},"1.2k+ Discord members (~40% growth)"),Object(o.b)("li",{parentName:"ul"},"134k+ neu CLI downloads on NPM (~65% growth)"),Object(o.b)("li",{parentName:"ul"},"15k+ client library downloads on NPM within a year")),Object(o.b)("p",null,"Popular developer newsletters like ",Object(o.b)("a",{parentName:"p",href:"https://javascriptweekly.com"},"JavaScript Weekly")," and\n",Object(o.b)("a",{parentName:"p",href:"https://nodeweekly.com"},"Node Weekly")," helped us\nreach more JavaScript app developers by broadcasting Neutralinojs releases to tech experts.\nDevelopers helped us spread the news about Neutralinojs by posting blog posts and YouTube videos.\nSome app developers supported Neutralinojs by becoming sponsors!"),Object(o.b)("h2",{id:"sponsors-and-finance"},"Sponsors and\xa0finance"),Object(o.b)("p",null,"MacStadium and Microsoft supported Neutralinojs with cloud infrastructure within the last year:\nMacStadium offered us a free Mac mini instance, and Microsoft offered us free Azure sponsorship\ncredits to run a Windows 10 virtual machine. Unfortunately, our Azure sponsorship ended in 2023,\nbut we'll apply for the sponsorship program again."),Object(o.b)("p",null,"Seven paid members support the Neutralinojs author via ",Object(o.b)("a",{parentName:"p",href:"https://www.patreon.com/shalithasuranga"},"Patreon"),"\nto allocate more time for\nthe project maintenance-related tasks. We appreciate every donator's support and hope you'll be with us during this year."),Object(o.b)("p",null,"As mentioned in ",Object(o.b)("a",{parentName:"p",href:"https://neutralino.js.org/docs/contributing/about-neutralinojs#financial-perspective"},"this article"),"\n, the original author and the core developer team have no plans to monetize\nthe Neutralinojs project with paid services and revenue-oriented licensing models. We'll never strive to\nbuild a commercial project around Neutralinojs. Our only lifelong goal is to maintain the Neutralinojs\nproject as a fully-featured, purely FOSS, transparent, cross-platform desktop app development\nsolution that follows the donation-based financial model."),Object(o.b)("h2",{id:"roadmap-2024"},"Roadmap 2024"),Object(o.b)("p",null,"In the last few years, we improved the project as a stable, simple, productivity-first\ndesktop app development framework with basic features that every developer seeks. 2024's plan\nis to compete with other popular desktop app development frameworks with fully featured native APIs, tools, and\ndeveloper resources, as explained in the following milestones:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Compose a detailed guide for creating cross-platform app bundles (not installers)\xa0"),Object(o.b)("li",{parentName:"ul"},"Create a new page in the official documentation for listing community projects\xa0"),Object(o.b)("li",{parentName:"ul"},"Release the ",Object(o.b)("a",{parentName:"li",href:"https://github.com/neutralinojs-community/neutralinojs-builder"},"Neutralinojs builder")," community\nproject with GSoC 2024. This project will help app developers create platform-dependent installers (i.e., Debian\ninstallers for GNU/Linux systems) for Neutralinojs apps via the neu CLI"),Object(o.b)("li",{parentName:"ul"},"Using cross-platform C++ file system APIs instead of platform-specific functions within\nthe framework source code, introduce new file system APIs based on C++ file system functions"),Object(o.b)("li",{parentName:"ul"},"Delivering features requested by the developer community")),Object(o.b)("p",null,"Apart from the above milestones, we'll add more APIs, features, and developer tooling to compete with\nother cross-platform frameworks since our framework core is now stable."),Object(o.b)("p",null,"Join our ",Object(o.b)("a",{parentName:"p",href:"https://discord.gg/cybpp4guTJ"},"Discord server")," and become a member of our developer community.\nConsider making a monetary donation if you would like to support the project financially.\nConsider making a code contribution and becoming a project committer if you wish to donate your\ntime to Neutralinojs."),Object(o.b)("p",null,"Send us a pull request to ",Object(o.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/neutralinojs.github.io"},"this GitHub repository"),"\nif you would like to list your app on the ",Object(o.b)("a",{parentName:"p",href:"https://neutralino.js.org/apps"},"Neutralinojs apps page"),"."),Object(o.b)("p",null,"Thanks for reading."),Object(o.b)("p",null,"Build an app with Neutralinojs today","\u2014","feel its simplicity"))}u.isMDXComponent=!0},141:function(e,t,n){"use strict";n.r(t),t.default=n.p+"assets/images/cover-neutralinojs-roadmap-2024-ea3bf5e1e99f169f6bec4a16c4455d3b.png"}}]); \ No newline at end of file diff --git a/assets/js/bb31a7dc.5416813c.js b/assets/js/bb31a7dc.5416813c.js new file mode 100644 index 0000000..4f8109f --- /dev/null +++ b/assets/js/bb31a7dc.5416813c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{101:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return a})),n.d(t,"metadata",(function(){return i})),n.d(t,"toc",(function(){return s})),n.d(t,"default",(function(){return c}));var r=n(3),o=(n(0),n(124));const a={title:"ReleaseZri Introduction"},i={unversionedId:"releasezri/intro",id:"releasezri/intro",isDocsHomePage:!1,title:"ReleaseZri Introduction",description:"`",source:"@site/docs/releasezri/intro.md",slug:"/releasezri/intro",permalink:"/docs/releasezri/intro",editUrl:"https://github.com/codezri/codezri.github.io/edit/master/docs/releasezri/intro.md",version:"current",sidebar:"docs",previous:{title:"Introduction",permalink:"/docs/"},next:{title:"How to Use",permalink:"/docs/releasezri/integrate"}},s=[{value:"Highlighted features",id:"highlighted-features",children:[]}],_={toc:s},l="wrapper";function c(e){let{components:t,...n}=e;return Object(o.b)(l,Object(r.a)({},_,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("pre",null,Object(o.b)("code",{parentName:"pre"}," ____ __ _____ _\n / __ \\___ / /__ ____ ________/__ / _____(_)\n / /_/ / _ \\/ / _ \\/ __ `/ ___/ _ \\/ / / ___/ /\n / _, _/ __/ / __/ /_/ (__ ) __/ /__/ / / /\n/_/ |_|\\___/_/\\___/\\__,_/____/\\___/____/_/ /_/\n\nReleaseZri - Meaningful and minimalist release notes for developers\n")),Object(o.b)("p",null,"Managing manual release notes is hard. Therefore, everyone tends to generate release notes\nfrom commit messages. But, you won't get a meaningful release note at the end. ReleaseZri offers\nyou a simple strategy to maintain a human-friendly changelog and generate release notes automatically.\nIt also gives you GitHub Action workflow steps that you can simply copy-paste into your projects."),Object(o.b)("p",null,Object(o.b)("a",{parentName:"p",href:"https://github.com/codezri/releasezri"},"Source code")),Object(o.b)("h2",{id:"highlighted-features"},"Highlighted features"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Generate release notes and update changelog with one command."),Object(o.b)("li",{parentName:"ul"},"You don't need to follow a specific commit message format."),Object(o.b)("li",{parentName:"ul"},"Structure your changelog with a simple format, write content with your own rules."),Object(o.b)("li",{parentName:"ul"},"Get release notes as a markdown file, use whereever you need."),Object(o.b)("li",{parentName:"ul"},"Flexible release note template."),Object(o.b)("li",{parentName:"ul"},"Written in Python, works on any platform.")),Object(o.b)("p",null,Object(o.b)("a",{parentName:"p",href:"https://neutralino.js.org"},"Neutralinojs")," uses ReleaseZri to maintain their release notes."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/beea6c26.85b88d75.js b/assets/js/beea6c26.85b88d75.js new file mode 100644 index 0000000..1ba0b1a --- /dev/null +++ b/assets/js/beea6c26.85b88d75.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{102:function(a){a.exports=JSON.parse('{"allTagsPath":"/blog/tags","slug":"javascript","name":"javascript","count":4,"permalink":"/blog/tags/javascript"}')}}]); \ No newline at end of file diff --git a/assets/js/c4f5d8e4.a22187f5.js b/assets/js/c4f5d8e4.a22187f5.js new file mode 100644 index 0000000..2f7d3e5 --- /dev/null +++ b/assets/js/c4f5d8e4.a22187f5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{118:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return u}));var l=a(0),c=a.n(l),r=a(120),n=a(125),i=a(122),h=a(16),f=a(182),s=a(57),o=a.n(s),d=a(3),m=a(103),p=a.n(m);const E=[{title:"Open Source Software",Svg:a(178).default,description:c.a.createElement(c.a.Fragment,null,"CodeZri turns innovative ideas to open source products. Our goal is to make open source tools to make every developer's life easier. Neutralinojs and Jerverless are our popular innovations.")},{title:"Articles For Developers",Svg:a(179).default,description:c.a.createElement(c.a.Fragment,null,"CodeZri often publish articles about computer science, programming, and technology. Follow us on social media for latest technical articles and news.")},{title:"Tutorials For Developers",Svg:a(180).default,description:c.a.createElement(c.a.Fragment,null,"CodeZri loves to share knowledge with the developer community. Follow us on YouTube for latest videos about programming, open source projects, and tips & tricks.")}];function z(e){let{Svg:t,title:a,description:l}=e;return c.a.createElement("div",{className:Object(r.a)("col col--4")},c.a.createElement("div",{className:"text--center"},c.a.createElement(t,{className:p.a.featureSvg,alt:a})),c.a.createElement("div",{className:"text--center padding-horiz--md"},c.a.createElement("h3",null,a),c.a.createElement("p",null,l)))}function M(){return c.a.createElement("section",{className:p.a.features},c.a.createElement("div",{className:"container"},c.a.createElement("div",{className:"row"},E.map(((e,t)=>c.a.createElement(z,Object(d.a)({key:t},e)))))))}function v(){const{siteConfig:e}=Object(h.default)(),[t,a]=Object(l.useState)(!1),[n,f]=Object(l.useState)(!1);return Object(l.useEffect)((()=>{if(!t){a(!0);try{f("undefined"==typeof ethicalads),ethicalads.load_placements()}catch(e){f(!1)}}})),c.a.createElement("header",{className:Object(r.a)("hero hero--primary",o.a.heroBanner)},c.a.createElement("div",{className:"container"},c.a.createElement("h1",{className:"hero__title"},e.title),c.a.createElement("p",{className:"hero__subtitle"},e.tagline),c.a.createElement("div",null,c.a.createElement("div",{"data-ea-publisher":"neutralino","data-ea-type":"image",id:"codezri-front"})),c.a.createElement("div",{className:o.a.buttons},c.a.createElement(i.a,{className:"button button--secondary button--lg",to:"/projects"},"Projects"),c.a.createElement(i.a,{className:"button button--secondary button--lg margin-left--sm",href:"https://discord.gg/92UadNvnfh"},"Join Discord"))))}function y(){return c.a.createElement("div",{className:o.a.intro},c.a.createElement("div",{className:"container"},c.a.createElement("div",{className:"row"},c.a.createElement("div",{className:"col col--12 text--center"},c.a.createElement("h1",null,"High-Quality Tools and Content"),c.a.createElement("p",null,"For developers, from developers - for free!"),c.a.createElement("p",null,"CodeZri (a non-profit organization) builds open-source products and high-quality educational content for developers around the world. We built popular free and open-source products including Neutralinojs, BuildZri, ReleaseZri, and Jerverless. We often publish coding tutorials and technical articles.")),c.a.createElement("div",{className:"col col--12"},c.a.createElement(f.a,{client:"ca-pub-4805219819571962",slot:"1174653824",style:{display:"block"},layout:"in-article",format:"auto"})))))}function u(){const{siteConfig:e}=Object(h.default)();return c.a.createElement(n.a,{title:`${e.tagline}`,description:"CodeZri (a non-profit organization) builds open-source products and high-quality educational content for developers"},c.a.createElement(v,null),c.a.createElement(y,null),c.a.createElement("main",null,c.a.createElement(M,null)))}},178:function(e,t,a){"use strict";a.r(t);var l,c,r,n,i,h,f,s,o,d,m,p,E,z,M,v,y,u,g,x,b,w,O,j,N,q,H,_,S,C,k,F,P,Z,L,B,J,T,I,V,A,D,U,K,W,$,G,Q=a(0);function R(){return R=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const t={};d&&(t.google_ad_client=n,t.enable_page_level_ads=!0);try{"object"==typeof window&&(window.adsbygoogle=window.adsbygoogle||[]).push(t)}catch(e){}}),[]),r.a.createElement("ins",Object.assign({className:`adsbygoogle ${t}`,style:a,"data-ad-client":n,"data-ad-slot":i,"data-ad-layout":h,"data-ad-layout-key":f,"data-ad-format":s,"data-full-width-responsive":o,"data-adtest":m},E),p)}}}]); \ No newline at end of file diff --git a/assets/js/c8c5a69d.6d0439ef.js b/assets/js/c8c5a69d.6d0439ef.js new file mode 100644 index 0000000..f203455 --- /dev/null +++ b/assets/js/c8c5a69d.6d0439ef.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{104:function(e,t,a){"use strict";a.r(t),a.d(t,"frontMatter",(function(){return i})),a.d(t,"metadata",(function(){return n})),a.d(t,"toc",(function(){return r})),a.d(t,"default",(function(){return d}));var o=a(3),s=(a(0),a(124));const i={title:"How We Save Our Time with\xa0DevOps",authors:["shalithasuranga"],slug:"how-we-save-our-time-with-devops",tags:["devops","neutralinojs","javascript","c++","automation"],image:"media/cover-save-time-with-devops.png"},n={permalink:"/blog/how-we-save-our-time-with-devops",source:"@site/blog/2022-01-03-how-we-save-our-time-with-devops.md",description:"Earlier, the software development lifecycle was simple—we didn't have automated feature delivery,",date:"2022-01-03T00:00:00.000Z",formattedDate:"January 3, 2022",tags:[{label:"devops",permalink:"/blog/tags/devops"},{label:"neutralinojs",permalink:"/blog/tags/neutralinojs"},{label:"javascript",permalink:"/blog/tags/javascript"},{label:"c++",permalink:"/blog/tags/c"},{label:"automation",permalink:"/blog/tags/automation"}],title:"How We Save Our Time with\xa0DevOps",readingTime:6.79,truncated:!0,prevItem:{title:"Neutralinojs 2023 Roadmap",permalink:"/blog/neutralinojs-2023-roadmap"},nextItem:{title:"Neutralinojs 2022 Roadmap",permalink:"/blog/neutralinojs-2022-roadmap"}},r=[],l={toc:r},p="wrapper";function d(e){let{components:t,...i}=e;return Object(s.b)(p,Object(o.a)({},l,i,{components:t,mdxType:"MDXLayout"}),Object(s.b)("p",null,Object(s.b)("img",{src:a(139).default})),Object(s.b)("p",null,"Earlier, the software development lifecycle was simple","\u2014","we didn't have automated feature delivery,\ncomplex application health checks, cloud-based test suites, etc. Later, the DevOps movement drastically\nchanged the software development processes by motivating developers to automate everything.\nDevOps helped software development teams to productively build high-quality software, deliver features/patches\nso fast, and make software systems stable."))}d.isMDXComponent=!0},139:function(e,t,a){"use strict";a.r(t),t.default=a.p+"assets/images/cover-save-time-with-devops-62e8967903b51b6ee5a686c2aea71852.png"}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.103f950d.js b/assets/js/ccc49370.103f950d.js new file mode 100644 index 0000000..02b15eb --- /dev/null +++ b/assets/js/ccc49370.103f950d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{105:function(e,t,a){"use strict";a.r(t);var l=a(0),n=a.n(l),c=a(125),r=a(134),i=a(181),o=a(128),s=a(142),m=a(138),d=a(120),u=a(106),E=a.n(u);const b="table-of-contents__link",f="table-of-contents__link--active",p=100;function v(e){let{toc:t,isChild:a}=e;return t.length?n.a.createElement("ul",{className:a?"":"table-of-contents table-of-contents__left-border"},t.map((e=>n.a.createElement("li",{key:e.id},n.a.createElement("a",{href:`#${e.id}`,className:b,dangerouslySetInnerHTML:{__html:e.value}}),n.a.createElement(v,{isChild:!0,toc:e.children}))))):null}function h(e){let{toc:t}=e;Object(m.a)(b,f,p);const[a,c]=Object(l.useState)(!1),[r,i]=Object(l.useState)(!1);return Object(l.useEffect)((()=>{if(!a){c(!0);try{i("undefined"==typeof ethicalads),ethicalads.load_placements()}catch(e){i(!1)}}})),n.a.createElement("div",{className:Object(d.a)(E.a.tableOfContents,"thin-scrollbar")},n.a.createElement("div",null,n.a.createElement("div",{"data-ea-publisher":"neutralino","data-ea-type":"image",id:"codezri-blog"})),n.a.createElement(v,{toc:t}))}t.default=function(e){const{content:t,sidebar:a}=e,{frontMatter:l,metadata:m}=t,{title:d,description:u,nextItem:E,prevItem:b,editUrl:f}=m,{hide_table_of_contents:p}=l;return n.a.createElement(c.a,{title:d,description:u,wrapperClassName:"blog-wrapper"},t&&n.a.createElement("div",{className:"container margin-vert--lg"},n.a.createElement("div",{className:"row"},n.a.createElement("div",{className:"col col--3"},n.a.createElement(o.a,{sidebar:a})),n.a.createElement("main",{className:"col col--7"},n.a.createElement(r.a,{frontMatter:l,metadata:m,isBlogPostPage:!0},n.a.createElement(t,null)),n.a.createElement("div",null,f&&n.a.createElement(s.a,{editUrl:f})),(E||b)&&n.a.createElement("div",{className:"margin-vert--xl"},n.a.createElement(i.a,{nextItem:E,prevItem:b}))),!p&&t.toc&&n.a.createElement("div",{className:"col col--2"},n.a.createElement(h,{toc:t.toc})))))}}}]); \ No newline at end of file diff --git a/assets/js/common.35a62648.js b/assets/js/common.35a62648.js new file mode 100644 index 0000000..d4534ef --- /dev/null +++ b/assets/js/common.35a62648.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{120:function(e,t,n){"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t{}});var c=n(126),l=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);oe.startsWith("/"))(_)?h(_):_):void 0;var _;const w=Object(r.useRef)(!1),A=n?i.e:i.c,V=u.a.canUseIntersectionObserver;let E;Object(r.useEffect)((()=>(!V&&y&&window.docusaurus.prefetch(j),()=>{V&&E&&E.disconnect()})),[j,V,y]);const C=null!==(t=null==j?void 0:j.startsWith("#"))&&void 0!==t&&t,x=!j||!y||C;return j&&y&&!C&&!g&&P.collectLink(j),x?o.a.createElement("a",Object.assign({href:j},D&&!y&&{target:"_blank",rel:"noopener noreferrer"},b)):o.a.createElement(A,Object.assign({},b,{onMouseEnter:()=>{w.current||(window.docusaurus.preload(j),w.current=!0)},innerRef:e=>{var t,n;V&&e&&y&&(t=e,n=()=>{window.docusaurus.prefetch(j)},E=new window.IntersectionObserver((e=>{e.forEach((e=>{t===e.target&&(e.isIntersecting||e.intersectionRatio>0)&&(E.unobserve(t),E.disconnect(),n())}))})),E.observe(t))},to:j||""},n&&{isActive:p,activeClassName:v}))}},123:function(e,t,n){"use strict";n.d(t,"b",(function(){return f})),n.d(t,"a",(function(){return d}));var r=n(0),o=n.n(r);const i=/{\w+}/g,s="{}";function u(e,t){const n=[],r=e.replace(i,(e=>{const r=e.substr(1,e.length-2),i=null==t?void 0:t[r];if(void 0!==i){const e=o.a.isValidElement(i)?i:String(i);return n.push(e),s}return e}));return 0===n.length?e:n.every((e=>"string"==typeof e))?r.split(s).reduce(((e,t,r)=>{var o;return e.concat(t).concat(null!==(o=n[r])&&void 0!==o?o:"")}),""):r.split(s).reduce(((e,t,r)=>[...e,o.a.createElement(o.a.Fragment,{key:r},t,n[r])]),[])}function a(e){let{children:t,values:n}=e;return u(t,n)}var c=n(26);function l(e){let{id:t,message:n}=e;var r;return null!==(r=c[null!=t?t:n])&&void 0!==r?r:n}function f(e,t){let{message:n,id:r}=e;var o;return u(null!==(o=l({message:n,id:r}))&&void 0!==o?o:n,t)}function d(e){let{children:t,id:n,values:r}=e;var i;const s=null!==(i=l({message:t,id:n}))&&void 0!==i?i:t;return o.a.createElement(a,{values:r},s)}},124:function(e,t,n){"use strict";n.d(t,"a",(function(){return f})),n.d(t,"b",(function(){return g}));var r=n(0),o=n.n(r);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=o.a.createContext({}),l=function(e){var t=o.a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):u(u({},t),e)),n},f=function(e){var t=l(e.components);return o.a.createElement(c.Provider,{value:t},e.children)},d="mdxType",v={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},p=o.a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),f=l(n),d=r,p=f["".concat(s,".").concat(d)]||f[d]||v[d]||i;return n?o.a.createElement(p,u(u({ref:t},c),{},{components:n})):o.a.createElement(p,u({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=p;var u={};for(var a in t)hasOwnProperty.call(t,a)&&(u[a]=t[a]);u.originalType=e,u[d]="string"==typeof e?e:r,s[1]=u;for(var c=2;cfunction(e,t,n,r){let{forcePrependBaseUrl:i=!1,absolute:s=!1}=void 0===r?{}:r;if(!n)return n;if(n.startsWith("#"))return n;if(Object(o.b)(n))return n;if(i)return t+n;const u=n.startsWith(t)?n:t+n.replace(/^\//,"");return s?e+u:u}(t,e,n,r)}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},127:function(e,t,n){try{e.exports=n(158)}catch(r){const t={};e.exports={useAllDocsData:()=>t,useActivePluginAndVersion:()=>{}}}},133:function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(0),o=n.n(r),i=n(25),s=n(126),u=n(121);function a(e){let{title:t,description:n,keywords:r,image:a}=e;const c=Object(u.useTitleFormatter)(t),l=Object(s.a)(a,{absolute:!0});return o.a.createElement(i.a,null,t&&o.a.createElement("title",null,c),t&&o.a.createElement("meta",{property:"og:title",content:c}),n&&o.a.createElement("meta",{name:"description",content:n}),n&&o.a.createElement("meta",{property:"og:description",content:n}),r&&o.a.createElement("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),a&&o.a.createElement("meta",{property:"og:image",content:l}),a&&o.a.createElement("meta",{name:"twitter:image",content:l}),a&&o.a.createElement("meta",{name:"twitter:card",content:"summary_large_image"}))}},135:function(e,t,n){"use strict";var r=n(0),o=n(147);t.a=function(){const e=Object(r.useContext)(o.a);if(null==e)throw new Error("`useUserPreferencesContext` is used outside of `Layout` Component.");return e}},136:function(e,t,n){"use strict";function r(e){return!0===/^(\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,"b",(function(){return r})),n.d(t,"a",(function(){return o}))},144: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.useThemeConfig=void 0;const o=r(n(16));t.useThemeConfig=function(){return o.default().siteConfig.themeConfig}},145:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isDocsPluginEnabled=void 0;const r=n(127);t.isDocsPluginEnabled=!!r.useAllDocsData},146:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useDocsPreferredVersionContext=t.DocsPreferredVersionContextProvider=void 0;const u=i(n(0)),a=n(144),c=n(145),l=n(127),f=s(n(165));function d(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;const o={};return t.forEach((e=>{o[e]=function(e){const t=f.default.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.default.clear(e,n),{preferredVersionName:null})}(e)})),o}function v(){const e=l.useAllDocsData(),t=a.useThemeConfig().docs.versionPersistence,n=u.useMemo((()=>Object.keys(e)),[e]),[r,o]=u.useState((()=>function(e){const t={};return e.forEach((e=>{t[e]={preferredVersionName:null}})),t}(n)));u.useEffect((()=>{o(d({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[r,u.useMemo((()=>({savePreferredVersion:function(e,n){f.default.save(e,t,n),o((t=>Object.assign(Object.assign({},t),{[e]:{preferredVersionName:n}})))}})),[o])]}const p=u.createContext(null);function g(e){let{children:t}=e;const n=v();return u.default.createElement(p.Provider,{value:n},t)}t.DocsPreferredVersionContextProvider=function(e){let{children:t}=e;return c.isDocsPluginEnabled?u.default.createElement(g,null,t):u.default.createElement(u.default.Fragment,null,t)},t.useDocsPreferredVersionContext=function(){const e=u.useContext(p);if(!e)throw new Error("Can't find docs preferred context, maybe you forgot to use the DocsPreferredVersionContextProvider ?");return e}},147:function(e,t,n){"use strict";var r=n(0);const o=Object(r.createContext)(void 0);t.a=o},156: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.useAlternatePageUtils=void 0;const o=r(n(16)),i=n(24);t.useAlternatePageUtils=function(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:r}}=o.default(),{pathname:s}=i.useLocation(),u=r===n?e:e.replace(`/${r}/`,"/"),a=s.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:o}=e;return`${o?t:""}${function(e){return e===n?`${u}`:`${u}${e}/`}(r)}${a}`}}}},157:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.docVersionSearchTag=t.DEFAULT_SEARCH_TAG=void 0,t.DEFAULT_SEARCH_TAG="default",t.docVersionSearchTag=function(e,t){return`docs-${e}-${t}`}},158:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useDocVersionSuggestions=t.useActiveDocContext=t.useActiveVersion=t.useLatestVersion=t.useVersions=t.useActivePluginAndVersion=t.useActivePlugin=t.useDocsData=t.useAllDocsData=void 0;const r=n(24),o=n(159),i=n(160);t.useAllDocsData=()=>o.useAllPluginInstancesData("docusaurus-plugin-content-docs"),t.useDocsData=e=>o.usePluginData("docusaurus-plugin-content-docs",e),t.useActivePlugin=function(e){void 0===e&&(e={});const n=t.useAllDocsData(),{pathname:o}=r.useLocation();return i.getActivePlugin(n,o,e)},t.useActivePluginAndVersion=function(e){void 0===e&&(e={});const n=t.useActivePlugin(e),{pathname:o}=r.useLocation();if(n){return{activePlugin:n,activeVersion:i.getActiveVersion(n.pluginData,o)}}},t.useVersions=e=>t.useDocsData(e).versions,t.useLatestVersion=e=>{const n=t.useDocsData(e);return i.getLatestVersion(n)},t.useActiveVersion=e=>{const n=t.useDocsData(e),{pathname:o}=r.useLocation();return i.getActiveVersion(n,o)},t.useActiveDocContext=e=>{const n=t.useDocsData(e),{pathname:o}=r.useLocation();return i.getActiveDocContext(n,o)},t.useDocVersionSuggestions=e=>{const n=t.useDocsData(e),{pathname:o}=r.useLocation();return i.getDocVersionSuggestions(n,o)}},159:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return i})),n.d(t,"useAllPluginInstancesData",(function(){return s})),n.d(t,"usePluginData",(function(){return u}));var r=n(16);const o="default";function i(){const{globalData:e}=Object(r.default)();if(!e)throw new Error("Docusaurus global data not found");return e}function s(e){const t=i()[e];if(!t)throw new Error(`Docusaurus plugin global data not found for pluginName=${e}`);return t}function u(e,t){void 0===t&&(t=o);const n=s(e)[t];if(!n)throw new Error(`Docusaurus plugin global data not found for pluginName=${e} and pluginId=${t}`);return n}},160:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getDocVersionSuggestions=t.getActiveDocContext=t.getActiveVersion=t.getLatestVersion=t.getActivePlugin=void 0;const r=n(24);t.getActivePlugin=function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).find((e=>{let[n,o]=e;return!!r.matchPath(t,{path:o.path,exact:!1,strict:!1})})),i=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!i&&n.failfast)throw new Error(`Can't find active docs plugin for pathname=${t}, 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((e=>e.path)).join(", ")}`);return i},t.getLatestVersion=e=>e.versions.find((e=>e.isLast)),t.getActiveVersion=(e,n)=>{const o=t.getLatestVersion(e);return[...e.versions.filter((e=>e!==o)),o].find((e=>!!r.matchPath(n,{path:e.path,exact:!1,strict:!1})))},t.getActiveDocContext=(e,n)=>{const o=t.getActiveVersion(e,n),i=null==o?void 0:o.docs.find((e=>!!r.matchPath(n,{path:e.path,exact:!0,strict:!1})));return{activeVersion:o,activeDoc:i,alternateDocVersions:i?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(i.id):{}}},t.getDocVersionSuggestions=(e,n)=>{const r=t.getLatestVersion(e),o=t.getActiveDocContext(e,n),i=o.activeVersion!==r;return{latestDocSuggestion:i?null==o?void 0:o.alternateDocVersions[r.name]:void 0,latestVersionSuggestion:i?r:void 0}}},161:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isSamePath=void 0,t.isSamePath=(e,t)=>{const n=e=>!e||(null==e?void 0:e.endsWith("/"))?e:`${e}/`;return n(e)===n(t)}},162: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.useTitleFormatter=void 0;const o=r(n(16));t.useTitleFormatter=e=>{const{siteConfig:t={}}=o.default(),{title:n,titleDelimiter:r="|"}=t;return e&&e.trim().length?`${e.trim()} ${r} ${n}`:n}},163: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.usePluralForm=void 0;const o=n(0),i=r(n(16)),s=["zero","one","two","few","many","other"];function u(e){return s.filter((t=>e.includes(t)))}const a={locale:"en",pluralForms:u(["one","other"]),select:e=>1===e?"one":"other"};function c(){const{i18n:{currentLocale:e}}=i.default();return o.useMemo((()=>{if(!Intl.PluralRules)return console.error("Intl.PluralRules not available!\nDocusaurus will fallback to a default/fallback (English) Intl.PluralRules implementation.\n "),a;try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:u(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale=${e}.\nDocusaurus will fallback to a default/fallback (English) Intl.PluralRules implementation.\n`),a}}),[e])}t.usePluralForm=function(){const e=c();return{selectMessage:(t,n)=>function(e,t,n){const r=e.split("|");if(1===r.length)return r[0];{r.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms}), but the message contains ${r.length} plural forms: ${e} `);const o=n.select(t),i=n.pluralForms.indexOf(o);return r[Math.min(i,r.length-1)]}}(n,t,e)}}},164:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useDocsPreferredVersionByPluginId=t.useDocsPreferredVersion=void 0;const r=n(0),o=n(146),i=n(127),s=n(166);t.useDocsPreferredVersion=function(e){void 0===e&&(e=s.DEFAULT_PLUGIN_ID);const t=i.useDocsData(e),[n,u]=o.useDocsPreferredVersionContext(),{preferredVersionName:a}=n[e];return{preferredVersion:a?t.versions.find((e=>e.name===a)):null,savePreferredVersionName:r.useCallback((t=>{u.savePreferredVersion(e,t)}),[u])}},t.useDocsPreferredVersionByPluginId=function(){const e=i.useAllDocsData(),[t]=o.useDocsPreferredVersionContext(),n=Object.keys(e),r={};return n.forEach((n=>{r[n]=function(n){const r=e[n],{preferredVersionName:o}=t[n];return o?r.versions.find((e=>e.name===o)):null}(n)})),r}},165:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=e=>`docs-preferred-version-${e}`,o={save:(e,t,n)=>{"none"===t||window.localStorage.setItem(r(e),n)},read:(e,t)=>"none"===t?null:window.localStorage.getItem(r(e)),clear:(e,t)=>{"none"===t||window.localStorage.removeItem(r(e))}};t.default=o},166:function(e,t,n){"use strict";n.r(t),n.d(t,"DEFAULT_PLUGIN_ID",(function(){return r}));const r="default"}}]); \ No newline at end of file diff --git a/assets/js/e780e336.f543c382.js b/assets/js/e780e336.f543c382.js new file mode 100644 index 0000000..ae66419 --- /dev/null +++ b/assets/js/e780e336.f543c382.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{107:function(e,a,t){"use strict";t.r(a),t.d(a,"frontMatter",(function(){return o})),t.d(a,"metadata",(function(){return l})),t.d(a,"toc",(function(){return s})),t.d(a,"default",(function(){return u}));var n=t(3),r=(t(0),t(124));const o={title:"Neutralinojs 2024 Roadmap",authors:["shalithasuranga"],slug:"neutralinojs-2024-roadmap",tags:["neutralinojs","javascript","framework","roadmap"],image:"media/cover-neutralinojs-roadmap-2024.png"},l={permalink:"/blog/neutralinojs-2024-roadmap",source:"@site/blog/2024-01-01-neutralinojs-2024-roadmap.md",description:"At the end of every year, we typically publish a new blog post about the annual achievements and plans",date:"2024-01-01T00:00:00.000Z",formattedDate:"January 1, 2024",tags:[{label:"neutralinojs",permalink:"/blog/tags/neutralinojs"},{label:"javascript",permalink:"/blog/tags/javascript"},{label:"framework",permalink:"/blog/tags/framework"},{label:"roadmap",permalink:"/blog/tags/roadmap"}],title:"Neutralinojs 2024 Roadmap",readingTime:4.465,truncated:!0,nextItem:{title:"Neutralinojs 2023 Roadmap",permalink:"/blog/neutralinojs-2023-roadmap"}},s=[],i={toc:s},p="wrapper";function u(e){let{components:a,...o}=e;return Object(r.b)(p,Object(n.a)({},i,o,{components:a,mdxType:"MDXLayout"}),Object(r.b)("p",null,Object(r.b)("img",{src:t(141).default})),Object(r.b)("p",null,"At the end of every year, we typically publish a new blog post about the annual achievements and plans\nof the Neutralinojs project. In the past few years, we published the roadmap article at the end of each\nyear, but from 2024 onward we'll bring this post to you at the beginning of every upcoming year to start\neach new year with fresh plans by looking back at the previous year. So, here is the review of 2023 and plans\nfor the brand-new 2024!"),Object(r.b)("p",null,"We could publish seven remarkable framework releases, nine neu CLI releases, and seven client library\nreleases with new features and stability enhancements by fulfilling the developer community's needs in 2023."))}u.isMDXComponent=!0},141:function(e,a,t){"use strict";t.r(a),a.default=t.p+"assets/images/cover-neutralinojs-roadmap-2024-ea3bf5e1e99f169f6bec4a16c4455d3b.png"}}]); \ No newline at end of file diff --git a/assets/js/ee7ef1d2.bf0fc59e.js b/assets/js/ee7ef1d2.bf0fc59e.js new file mode 100644 index 0000000..6bcc936 --- /dev/null +++ b/assets/js/ee7ef1d2.bf0fc59e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{119:function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return v}));var n=a(0),i=a.n(n),r=a(120),l=a(125),o=a(122),s=a(16),c=a(182),m=a(57),p=a.n(m),d=a(126),u=a(108),g=a.n(u);const h=[{title:"Neutralinojs",image:"neutralinojs.png",description:i.a.createElement(i.a.Fragment,null,"Neutralino is a lightweight and portable desktop application development framework. It lets you develop cross-platform applications using JavaScript, HTML and CSS."),link:"https://neutralino.js.org"},{title:i.a.createElement("span",null,"Jerverless ",i.a.createElement("span",{className:"badge badge--secondary"},"Archived")),image:"jerverless.png",description:i.a.createElement(i.a.Fragment,null,"Jerverless is a serverless runner which will execute anything (binaries, commands or your scripts) as a serverless function. It simply pipes http POST data into STDIN of any executable vice versa."),link:"https://jerverless.github.io"},{title:"ReleaseZri",image:"script.png",description:i.a.createElement(i.a.Fragment,null,"Meaningful and minimalist release notes for developers. Automate your releases with meaningful release notes with a simple changelog format. Used by Neutralinojs and many."),link:"https://github.com/codezri/releasezri"},{title:"BuildZri",image:"script.png",description:i.a.createElement(i.a.Fragment,null,"BuildZri is a minimal cross-platform C++ build automation tool written in Python. It comes with a simple JSON-based configuration file with the features you need."),link:"https://github.com/codezri/buildzri"},{title:"GoogleZri",image:"script.png",description:i.a.createElement(i.a.Fragment,null,"A Python script which will open Google search with CTRL + F2 for a selected text from anywhere."),link:"https://github.com/codezri/googlezri"},{title:"MovieZri",image:"moviezri.png",description:i.a.createElement(i.a.Fragment,null,"Find a movie to watch today based of what you feel right now. Very simple but very interactive online movie recommendation system. No signup needed!"),link:"https://codezri.org/movieszri"},{title:"LAMGSTACK",image:"concept.png",description:i.a.createElement(i.a.Fragment,null,"World's cheapest but modern stack for lightweight web apps. LAMG (stands for Lambda Angular Mongodb Github) is a full-stack solution which helps you develop or prototype lightweight, maintainable and less-complex web applications."),link:"https://github.com/codezri/lamgstack"},{title:"react-native-ecommerce",image:"script.png",description:i.a.createElement(i.a.Fragment,null,"A minimal React Native e-commerce app template. It has a products list, details page, and shopping cart summary page. Easy-to-extend state management is done with React Context API."),link:"https://github.com/codezri/react-native-ecommerce"},{title:"PhotoZri",image:"photozri.png",description:i.a.createElement(i.a.Fragment,null,"PhotoZri is a minimal image editor app that offers basic image editing features."),link:"https://codezri.org/photozri"}];function f(e){let{project:t}=e;return i.a.createElement("div",{className:Object(r.a)("col col--4",g.a.project,"padding-vert--md")},i.a.createElement("div",{className:"text--center"},i.a.createElement("img",{src:Object(d.a)("/img/projects/"+t.image),alt:t.title})),i.a.createElement("div",{className:"text--center padding-horiz--md padding-vert--sm"},i.a.createElement("h3",null,t.title),i.a.createElement("p",null,t.description),i.a.createElement(o.a,{className:"button button--secondary",href:t.link},"Go to project")))}function y(){return i.a.createElement("section",{className:g.a.projects},i.a.createElement("div",{className:"container"},i.a.createElement("div",{className:"row"},h.map(((e,t)=>i.a.createElement(f,{key:t,project:e}))))))}function b(){const{siteConfig:e}=Object(s.default)();return i.a.createElement("header",{className:Object(r.a)("hero hero--primary",p.a.heroBanner)},i.a.createElement("div",{className:"container"},i.a.createElement("h1",{className:"hero__title"},e.title," Projects"),i.a.createElement("p",{className:"hero__subtitle"},"Free and open-source products for developers.")))}function v(){const{siteConfig:e}=Object(s.default)();return i.a.createElement(l.a,{title:`${e.title} Projects`,description:"CodeZri built popular free and open-source products including Neutralinojs and Jerverless. See all CodeZri projects."},i.a.createElement(b,null),i.a.createElement("main",null,i.a.createElement(y,null),i.a.createElement("div",{className:"container"},i.a.createElement("div",{className:"row"},i.a.createElement("div",{className:"col col--12"},i.a.createElement(c.a,{client:"ca-pub-4805219819571962",slot:"1174653824",style:{display:"block"},layout:"in-article",format:"auto"}))))))}},182:function(e,t,a){"use strict";a.d(t,"a",(function(){return l}));function n(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(a[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i{const t={};d&&(t.google_ad_client=l,t.enable_page_level_ads=!0);try{"object"==typeof window&&(window.adsbygoogle=window.adsbygoogle||[]).push(t)}catch(e){}}),[]),r.a.createElement("ins",Object.assign({className:`adsbygoogle ${t}`,style:a,"data-ad-client":l,"data-ad-slot":o,"data-ad-layout":s,"data-ad-layout-key":c,"data-ad-format":m,"data-full-width-responsive":p,"data-adtest":u},h),g)}}}]); \ No newline at end of file diff --git a/assets/js/f4bd6251.01bc5456.js b/assets/js/f4bd6251.01bc5456.js new file mode 100644 index 0000000..19f7112 --- /dev/null +++ b/assets/js/f4bd6251.01bc5456.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{109:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return i})),n.d(t,"metadata",(function(){return o})),n.d(t,"toc",(function(){return l})),n.d(t,"default",(function(){return p}));var a=n(3),r=(n(0),n(124));const i={title:"How to Use"},o={unversionedId:"releasezri/integrate",id:"releasezri/integrate",isDocsHomePage:!1,title:"How to Use",description:"Add ReleaseZri to your project with the following steps.",source:"@site/docs/releasezri/integrate.md",slug:"/releasezri/integrate",permalink:"/docs/releasezri/integrate",editUrl:"https://github.com/codezri/codezri.github.io/edit/master/docs/releasezri/integrate.md",version:"current",sidebar:"docs",previous:{title:"ReleaseZri Introduction",permalink:"/docs/releasezri/intro"},next:{title:"BuildZri Introduction",permalink:"/docs/buildzri/intro"}},l=[{value:"Create a changelog",id:"create-a-changelog",children:[]},{value:"Create a release note template",id:"create-a-release-note-template",children:[{value:"Supported template variables",id:"supported-template-variables",children:[]}]},{value:"Add the release note generation script",id:"add-the-release-note-generation-script",children:[]},{value:"Update your DevOps workflow",id:"update-your-devops-workflow",children:[]}],s={toc:l},c="wrapper";function p(e){let{components:t,...n}=e;return Object(r.b)(c,Object(a.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("p",null,"Add ReleaseZri to your project with the following steps."),Object(r.b)("h2",{id:"create-a-changelog"},"Create a changelog"),Object(r.b)("p",null,"ReleaseZri doesn't extract release notes from commit messages since that approach doesn't give meaningful\nrelease notes. It extracts release notes from ",Object(r.b)("inlineCode",{parentName:"p"},"CHANGELOG.md")," file in your repository. Create changelog with\nthe following format."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre"},"# Changelog\n\nAdd all code changes (features, deprecations, and enhancements)\nunder the `Unreleased` topic to track changes for the next release.\n\n## Unreleased\n\n### API: window\n- `window.getTitle` returns the current native window title.\n\n## v4.0.0\n\n### API: window\n- `window.setTitle` sets the current native window title.\n")),Object(r.b)("p",null,"There are no strict rules. You only need to use ",Object(r.b)("inlineCode",{parentName:"p"},"## Unreleased")," for unreleased changes and\nlevel 3 (",Object(r.b)("inlineCode",{parentName:"p"},"###"),") or below headings for changes. You can update this changelog manually whenever you need regardless of\nwhat you commit."),Object(r.b)("h2",{id:"create-a-release-note-template"},"Create a release note template"),Object(r.b)("p",null,"ReleaseZri generates release notes and embeds to a template. Now add your template to ",Object(r.b)("inlineCode",{parentName:"p"},".releasezri/template.md"),"\n, as shown below."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre"},"## What's new\n\n{RZ_CHANGELOG}\n\nGet started with {RZ_VERSION}: https://codezri.org/docs/releasezri\n")),Object(r.b)("h3",{id:"supported-template-variables"},"Supported template variables"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"RZ_VERSION"),": New version number, Eg: ",Object(r.b)("inlineCode",{parentName:"li"},"3.2.0"),". This doesn't contain ",Object(r.b)("inlineCode",{parentName:"li"},"v"),", so if you need ",Object(r.b)("inlineCode",{parentName:"li"},"v")," prefix, you\nhave to use ",Object(r.b)("inlineCode",{parentName:"li"},"v")," before this template variable."),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"RZ_CHANGELOG"),": Generated release notes markdown. Release notes is extracted from your ",Object(r.b)("inlineCode",{parentName:"li"},"CHANGELOG.md"),"."),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"RZ_RZVERSION"),": ReleaseZri script version."),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"RZ_DATE"),": System date in ",Object(r.b)("inlineCode",{parentName:"li"},"yyyy-mm-dd")," format."),Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"RZ_TIME"),": System time in ",Object(r.b)("inlineCode",{parentName:"li"},"hh:mm:ss")," format.")),Object(r.b)("h2",{id:"add-the-release-note-generation-script"},"Add the release note generation script"),Object(r.b)("p",null,"Copy-paste ",Object(r.b)("a",{parentName:"p",href:"https://github.com/codezri/releasezri/blob/main/scripts/rz.py"},Object(r.b)("inlineCode",{parentName:"a"},"scripts/rz.py"))," into your project."),Object(r.b)("h2",{id:"update-your-devops-workflow"},"Update your DevOps workflow"),Object(r.b)("p",null,"When you run ",Object(r.b)("inlineCode",{parentName:"p"},"rz.py create "),", it will generate release notes to ",Object(r.b)("inlineCode",{parentName:"p"},".tmprz/release_notes.md"),". Also,\nit will update ",Object(r.b)("inlineCode",{parentName:"p"},"CHANGELOG.md")," by adding the new version. You can run ",Object(r.b)("inlineCode",{parentName:"p"},"rz.py cleanup")," to remove\nthe ",Object(r.b)("inlineCode",{parentName:"p"},".tmprz")," directory after using the generated release note."),Object(r.b)("p",null,"You can use this release note generation script locally or with any DevOps pipleline. For example, see how to\nintegrate ReleaseZri with GitHub Actions."),Object(r.b)("p",null,"Add a workflow step to create release notes."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-yaml"},"- name: Create Release Notes\n run: |\n chmod +x ./scripts/rz.py\n ./scripts/rz.py create ${{github.event.inputs.version}}\n")),Object(r.b)("p",null,"Add another step to commit and push changelog's updates."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-yaml"},"- name: Commit and Push Changelog\n uses: EndBug/add-and-commit@v7.4.0\n with:\n default_author: github_actions\n message: 'Update changelog for v${{github.event.inputs.version}}'\n add: 'CHANGELOG.md'\n tag: v${{github.event.inputs.version}}\n")),Object(r.b)("p",null,"Finally, publish your release with notes and artifacts."),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-yaml"},"- name: Create a GitHub release\n uses: ncipollo/release-action@v1\n with:\n tag: v${{github.event.inputs.version}}\n name: Neutralinojs v${{github.event.inputs.version}} released!\n bodyFile: ./.tmprz/release_notes.md\n artifacts: './bin/neutralinojs-v${{github.event.inputs.version}}.zip'\n draft: true\n")),Object(r.b)("p",null,"See a complete workflow\n",Object(r.b)("a",{parentName:"p",href:"https://github.com/neutralinojs/neutralinojs/blob/main/.github/workflows/create_release.yml"},"here"),".\nThe ReleaseZri project itself maintains release notes with ReleaseZri.\nSee its workflow ",Object(r.b)("a",{parentName:"p",href:"https://github.com/codezri/releasezri/blob/main/.github/workflows/create-release.yml"},"here"),"."),Object(r.b)("p",null,"If you need to learn more about DevOps practices and why we built ReleaseZri you can read\n",Object(r.b)("a",{parentName:"p",href:"https://codezri.org/blog/how-we-save-our-time-with-devops"},"this")," article."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fb8726ed.d5704f60.js b/assets/js/fb8726ed.d5704f60.js new file mode 100644 index 0000000..e5ebca1 --- /dev/null +++ b/assets/js/fb8726ed.d5704f60.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{110:function(e){e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Neutralinojs 2024 Roadmap","permalink":"/blog/neutralinojs-2024-roadmap"},{"title":"Neutralinojs 2023 Roadmap","permalink":"/blog/neutralinojs-2023-roadmap"},{"title":"How We Save Our Time with\xa0DevOps","permalink":"/blog/how-we-save-our-time-with-devops"},{"title":"Neutralinojs 2022 Roadmap","permalink":"/blog/neutralinojs-2022-roadmap"}]}')}}]); \ No newline at end of file diff --git a/assets/js/feab90df.1ac85c56.js b/assets/js/feab90df.1ac85c56.js new file mode 100644 index 0000000..ef9e3b7 --- /dev/null +++ b/assets/js/feab90df.1ac85c56.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{111:function(e,a,t){"use strict";t.r(a),t.d(a,"default",(function(){return w}));var n=t(0),l=t.n(n),r=t(120),c=t(125),o=t(122),i=t(16),s=t(112),h=t.n(s);function m(){const{siteConfig:e}=Object(i.default)();return l.a.createElement("header",{className:Object(r.a)("hero hero--primary",h.a.heroBanner)},l.a.createElement("div",{className:"container"},l.a.createElement("h1",{className:"hero__title"},"Shalitha Suranga"),l.a.createElement("p",{className:"hero__subtitle"},"Programmer & Technical Writer"),l.a.createElement("div",{className:h.a.buttons},l.a.createElement(o.a,{className:"button button--secondary button--lg",href:"https://www.linkedin.com/in/shalithasuranga/"},"Connect on LinkedIn"),l.a.createElement(o.a,{className:"button button--secondary button--lg margin-left--sm",href:"https://www.patreon.com/shalithasuranga"},"Become a Patron"))))}function u(){return l.a.createElement("div",{className:h.a.intro},l.a.createElement("div",{className:"container"},l.a.createElement("div",{className:"row"},l.a.createElement("div",{className:"col col--3"},l.a.createElement("img",{src:"https://avatars3.githubusercontent.com/u/18402702?s=4000&v=4",alt:"Shalitha Suranga",className:h.a.picture})),l.a.createElement("div",{className:"col col--9"},l.a.createElement("p",null,'I wrote "hello world" when I was thirteen years old. I like to work with computer-science-based engineering projects. I started CodeZri to build open-source tools and write high-quality technical content for developers around the world.',l.a.createElement("br",null),l.a.createElement("br",null),"My online profiles:",l.a.createElement("br",null),l.a.createElement("br",null),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://github.com/shalithasuranga"},"GitHub")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://shalithasuranga.medium.com/"},"Medium")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://blog.logrocket.com/author/shalithasuranga"},"LogRocket")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"http://people.apache.org/phonebook.html?uid=shalithasuranga"},"Apache")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://www.linkedin.com/in/shalithasuranga"},"LinkedIn")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://www.x.com/ShalithaSuranga"},"X")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://www.hackerrank.com/shalithasuranga"},"HackerRank")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://stackoverflow.com/users/3565513/shalitha-suranga"},"StackOverflow")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://www.quora.com/profile/Shalitha-Suranga"},"Quora")),l.a.createElement("li",null,l.a.createElement(o.a,{href:"https://www.patreon.com/shalithasuranga"},"Patreon")),l.a.createElement("br",null),"If you would like to know more about me, click ",l.a.createElement(o.a,{href:"https://www.google.com/search?q=Shalitha+Suranga"},"here!"),". You can contact me by filling ",l.a.createElement(o.a,{href:"https://forms.gle/mTxB9gdKsdWPkwBQA"},"this Google form"),".")))))}function w(){const{siteConfig:e}=Object(i.default)();return l.a.createElement(c.a,{title:"Shalitha Suranga",description:"Shalitha Suranga is a programmer and technical writer. He founded CodeZri non-profit organization to develop tools and compose technical content for developers."},l.a.createElement(m,null),l.a.createElement("main",null,l.a.createElement(u,null)))}}}]); \ No newline at end of file diff --git a/assets/js/main.b780e9e6.js b/assets/js/main.b780e9e6.js new file mode 100644 index 0000000..09682be --- /dev/null +++ b/assets/js/main.b780e9e6.js @@ -0,0 +1,2 @@ +/*! For license information please see main.b780e9e6.js.LICENSE.txt */ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],[function(e,t,n){"use strict";e.exports=n(39)},function(e,t,n){e.exports=n(43)()},function(e,t,n){"use strict";n.d(t,"a",(function(){return w})),n.d(t,"b",(function(){return S})),n.d(t,"c",(function(){return O})),n.d(t,"d",(function(){return L})),n.d(t,"e",(function(){return y})),n.d(t,"f",(function(){return F})),n.d(t,"g",(function(){return z})),n.d(t,"h",(function(){return v})),n.d(t,"i",(function(){return C})),n.d(t,"j",(function(){return A})),n.d(t,"k",(function(){return $})),n.d(t,"l",(function(){return G})),n.d(t,"m",(function(){return q})),n.d(t,"n",(function(){return H})),n.d(t,"o",(function(){return B}));var r=n(5),a=n(0),o=n.n(a),i=(n(1),n(6)),l=n(21),u=n(4),s=n(3),c=n(22),d=n.n(c),f=(n(29),n(9)),p=n(34),m=n.n(p),h=function(e){var t=Object(l.a)();return t.displayName=e,t},g=h("Router-History"),b=function(e){var t=Object(l.a)();return t.displayName=e,t},v=b("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._isMounted?n.setState({location:e}):n._pendingLocation=e}))),n}Object(r.a)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){this._isMounted=!0,this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&this.unlisten()},n.render=function(){return o.a.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.a.createElement(g.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.a.Component);var w=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!s)for(;d--;d)i.unshift("..");!s||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var u=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),a=l(n);return r!==t||a!==n?e(r,a):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1},s=n(4);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(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 p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(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 h(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=Object(r.a)({},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 g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&u(e.state,t.state)}function b(){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=h(e,t,f(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t=0||(a[n]=e[n]);return a}n.d(t,"a",(function(){return r}))},function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return u}));var r=n(2),a=n(3),o=n(0),i=n.n(o);function l(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?Object(r.j)(t,e):n.length?n[n.length-1].match:r.e.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&l(e.routes,t,n)),a})),n}function u(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?i.a.createElement(r.g,n,e.map((function(e,n){return i.a.createElement(r.d,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render(Object(a.a)({},n,{},t,{route:e})):i.a.createElement(e.component,Object(a.a)({},n,t,{route:e}))}})}))):null}},function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"b",(function(){return f})),n.d(t,"c",(function(){return v})),n.d(t,"e",(function(){return k}));var r=n(2);n.d(t,"d",(function(){return r.a})),n.d(t,"f",(function(){return r.b})),n.d(t,"g",(function(){return r.c})),n.d(t,"h",(function(){return r.d})),n.d(t,"i",(function(){return r.e})),n.d(t,"j",(function(){return r.f})),n.d(t,"k",(function(){return r.g})),n.d(t,"l",(function(){return r.i})),n.d(t,"m",(function(){return r.j})),n.d(t,"n",(function(){return r.k})),n.d(t,"o",(function(){return r.l})),n.d(t,"p",(function(){return r.m})),n.d(t,"q",(function(){return r.n})),n.d(t,"r",(function(){return r.o}));var a=n(5),o=n(0),i=n.n(o),l=n(6),u=(n(1),n(3)),s=n(9),c=n(4),d=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a
'};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),s=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),u(s,i(e,c,d)),1===e?(u(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){u(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),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");c(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),s=document.querySelector(r.parent);return u(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),s!=document.body&&c(s,"nprogress-custom-parent"),s.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()}}(),u=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 s(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;s(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);s(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)},function(e,t,n){"use strict";n.r(t);var r=n(0),a=n(14);t.default=function(){const e=Object(r.useContext)(a.a);if(null===e)throw new Error("Docusaurus context not provided");return e}},,,function(e,t,n){var r={"./":49};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=19},function(e,t,n){"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;te.length)return;if(!(k instanceof u)){if(h&&y!=t.length-1){if(f.lastIndex=w,!(O=f.exec(e)))break;for(var S=O.index+(m?O[1].length:0),E=O.index+O[0].length,x=y,T=w,C=t.length;x=(T+=t[x].length)&&(++y,w=T);if(t[y]instanceof u)continue;_=x-y,k=e.slice(w,T),O.index-=w}else{f.lastIndex=0;var O=f.exec(k),_=1}if(O){m&&(g=O[1]?O[1].length:0),E=(S=O.index+g)+(O=O[0].slice(g)).length;var P=k.slice(0,S),R=k.slice(E),A=[y,_];P&&(++y,w+=P.length,A.push(P));var L=new u(s,p?a.tokenize(O,p):O,b,O,h);if(A.push(L),R&&A.push(R),Array.prototype.splice.apply(t,A),1!=_&&a.matchGrammar(e,t,n,y,w,!0,s),i)break}else if(i)break}}}}},hooks:{add:function(){},run:function(e,t){}},tokenize:function(e,t,n){var r=[e],o=t.rest;if(o){for(var i in o)t[i]=o[i];delete t.rest}return a.matchGrammar(e,r,t,0,0,!1),r}},(o=a.Token=function(e,t,n,r,a){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length,this.greedy=!!a}).stringify=function(e,t,n){if("string"==typeof e)return e;if("Array"===a.util.type(e))return e.map((function(n){return o.stringify(n,t,e)})).join("");var r={type:e.type,content:o.stringify(e.content,t,n),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:n};if(e.alias){var i="Array"===a.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(r.classes,i)}var l=Object.keys(r.attributes).map((function(e){return e+'="'+(r.attributes[e]||"").replace(/"/g,""")+'"'})).join(" ");return"<"+r.tag+' class="'+r.classes.join(" ")+'"'+(l?" "+l:"")+">"+r.content+""},a);i.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},i.languages.markup.tag.inside["attr-value"].inside.entity=i.languages.markup.entity,i.languages.markup.doctype.inside["internal-subset"].inside=i.languages.markup,i.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(i.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:i.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:i.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},i.languages.insertBefore("markup","cdata",a)}}),i.languages.html=i.languages.markup,i.languages.mathml=i.languages.markup,i.languages.svg=i.languages.markup,i.languages.xml=i.languages.extend("markup",{}),i.languages.ssml=i.languages.xml,i.languages.atom=i.languages.xml,i.languages.rss=i.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|(?!\2)[^\\`$])*\2/,lookbehind:!0,greedy:!0,inside:r}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},i.languages.c=i.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,function:/[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),i.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},i.languages.c.string],comment:i.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:i.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete i.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(i),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/(^|["'\s])style\s*=\s*(?:"[^"]*"|'[^']*')/i,lookbehind:!0,inside:{"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{style:{pattern:/(["'])[\s\S]+(?=["']$)/,lookbehind:!0,alias:"language-css",inside:e.languages.css},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},"attr-name":/^style/i}}},n.tag))}(i),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+\b)/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#(?:[\da-f]{1,2}){3,4}\b/i,alias:"color"},color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(i),i.languages.javascript=i.languages.extend("clike",{"class-name":[i.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),i.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,i.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:i.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:i.languages.javascript},{pattern:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,inside:i.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:i.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:i.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),i.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:i.languages.javascript}},string:/[\s\S]+/}}}),i.languages.markup&&i.languages.markup.tag.addInlined("script","javascript"),i.languages.js=i.languages.javascript,function(e){var t=e.util.clone(e.languages.javascript);e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=/<\/?(?:[\w.:-]+(?:\s+(?:[\w.:$-]+(?:=(?:"(?:\\[^]|[^\\"])*"|'(?:\\[^]|[^\\'])*'|[^\s{'">=]+|\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}))?|\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}))*\s*\/?)?>/i,e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[^]|[^\\"])*"|'(?:\\[^]|[^\\'])*'|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},e.languages.jsx.tag),e.languages.insertBefore("inside","attr-value",{script:{pattern:/=(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag);var n=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(n).join(""):""},r=function(t){for(var a=[],o=0;o0&&a[a.length-1].tagName===n(i.content[0].content[1])&&a.pop():"/>"===i.content[i.content.length-1].content||a.push({tagName:n(i.content[0].content[1]),openedBraces:0}):a.length>0&&"punctuation"===i.type&&"{"===i.content?a[a.length-1].openedBraces++:a.length>0&&a[a.length-1].openedBraces>0&&"punctuation"===i.type&&"}"===i.content?a[a.length-1].openedBraces--:l=!0),(l||"string"==typeof i)&&a.length>0&&0===a[a.length-1].openedBraces){var u=n(i);o0&&("string"==typeof t[o-1]||"plain-text"===t[o-1].type)&&(u=n(t[o-1])+u,t.splice(o-1,1),o--),t[o]=new e.Token("plain-text",u,null,u)}i.content&&"string"!=typeof i.content&&r(i.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||r(e.tokens)}))}(i),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|for|finally|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(i),i.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},i.languages.go=i.languages.extend("clike",{string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,number:/(?:\b0x[a-f\d]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[-+]?\d+)?)i?/i,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/}),delete i.languages.go["class-name"],i.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:i.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:true|false)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*)[a-zA-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,punctuation:/[!(){}\[\]:=,]/,constant:/\b(?!ID\b)[A-Z][A-Z_\d]*\b/},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 u=0;u=o.length);u++){var s=l[u];if("string"==typeof s||s.content&&"string"==typeof s.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof s?s:s.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];h&&v.push.apply(v,i([h])),v.push(g),b&&v.push.apply(v,i([b])),"string"==typeof s?l.splice.apply(l,[u,1].concat(v)):s.content=v}}else s.content&&i(s.content)}return l}(n.tokens)}}}})}(i),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/i,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:true|false)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/i,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")}))}(i),i.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},i.languages.webmanifest=i.languages.json,i.languages.less=i.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,operator:/[+\-*\/]/}),i.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),i.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?!\n|\r\n?))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"font-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\r\n]+`/,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+?\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete i.languages.objectivec["class-name"],i.languages.objc=i.languages.objectivec,i.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?[\d_]+)?)/i,directive:{pattern:/\B#\w+/,alias:"important"},label:{pattern:/\B~\w+/,alias:"function"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"variable"},module:{pattern:/\b[A-Z]\w+/,alias:"variable"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,operator:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/[(){}\[\]|.,:;]|\b_\b/},i.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},i.languages.python["string-interpolation"].inside.interpolation.inside.rest=i.languages.python,i.languages.py=i.languages.python,i.languages.reason=i.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),i.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete i.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/,lookbehind:!0}})}(i),i.languages.scss=i.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),i.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|forward|for|each|while|import|use|extend|debug|warn|mixin|include|function|return|content)\b/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),i.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),i.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|with|show|hide)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),i.languages.scss.atrule.inside.rest=i.languages.scss,i.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/url\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:if|else|for|return|unless)(?=\s+|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:true|false)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^{|}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^\s*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:if|else|for|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,](?=$)(?!(?:\r?\n|\r)(?:\{|\2[ \t]+)))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t]+)))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(i),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},keyword:/\b(?:abstract|as|asserts|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),delete e.languages.typescript.parameter;var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(i),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t);var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(i),i.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^_`|~]+/i,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/},function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|]|}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/true|false/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(i),t.a=i},function(e,t,n){"use strict";n.r(t);var r=n(11);n.d(t,"MemoryRouter",(function(){return r.d})),n.d(t,"Prompt",(function(){return r.f})),n.d(t,"Redirect",(function(){return r.g})),n.d(t,"Route",(function(){return r.h})),n.d(t,"Router",(function(){return r.i})),n.d(t,"StaticRouter",(function(){return r.j})),n.d(t,"Switch",(function(){return r.k})),n.d(t,"generatePath",(function(){return r.l})),n.d(t,"matchPath",(function(){return r.m})),n.d(t,"useHistory",(function(){return r.n})),n.d(t,"useLocation",(function(){return r.o})),n.d(t,"useParams",(function(){return r.p})),n.d(t,"useRouteMatch",(function(){return r.q})),n.d(t,"withRouter",(function(){return r.r})),n.d(t,"BrowserRouter",(function(){return r.a})),n.d(t,"HashRouter",(function(){return r.b})),n.d(t,"Link",(function(){return r.c})),n.d(t,"NavLink",(function(){return r.e}))},function(e,t,n){"use strict";var r=n(0),a=n.n(r),o=n(35);t.a=function(e){return a.a.createElement(o.a,Object.assign({},e))}},function(e){e.exports=JSON.parse("{}")},function(e,t,n){"use strict";var r=n(10);t.a=r.b},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";e.exports=n(46)},function(e,t,n){"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(40)},function(e){e.exports=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"getting-started/intro","docs":[{"id":"buildzri/integrate","path":"/docs/buildzri/integrate","sidebar":"docs"},{"id":"buildzri/intro","path":"/docs/buildzri/intro","sidebar":"docs"},{"id":"buildzri/reference","path":"/docs/buildzri/reference","sidebar":"docs"},{"id":"getting-started/intro","path":"/docs/","sidebar":"docs"},{"id":"releasezri/integrate","path":"/docs/releasezri/integrate","sidebar":"docs"},{"id":"releasezri/intro","path":"/docs/releasezri/intro","sidebar":"docs"}]}]}}}')},function(e){e.exports=JSON.parse('{"defaultLocale":"en","locales":["en"],"localeConfigs":{"en":{"label":"en","direction":"ltr"}},"currentLocale":"en"}')},function(e){e.exports=JSON.parse('{"docusaurusVersion":"2.0.0-alpha.72","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.0.0-alpha.72"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.0.0-alpha.72"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.0.0-alpha.72"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.0.0-alpha.72"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.0.0-alpha.72"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.0.0-alpha.72"},"load-external-assets":{"type":"project"}}}')},function(e,t,n){"use strict";var r=n(29),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 u(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 s=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=u(t),h=u(n),g=0;g=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},H=function(e){return!1===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},W=function(e){var t=X(e,w.TITLE),n=X(e,M);if(n&&t)return n.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var r=X(e,N);return t||r||void 0},V=function(e){return X(e,j)||function(){}},Y=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return G({},e,t)}),{})},K=function(e,t){return t.filter((function(e){return void 0!==e[w.BASE]})).map((function(e){return e[w.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},Z=(r=Date.now(),function(e){var t=Date.now();t-r>16?(r=t,e(t)):setTimeout((function(){Z(e)}),0)}),J=function(e){return clearTimeout(e)},ee="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||Z:e.requestAnimationFrame||Z,te="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||J:e.cancelAnimationFrame||J,ne=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},re=null,ae=function(e,t){var n=e.baseTag,r=e.bodyAttributes,a=e.htmlAttributes,o=e.linkTags,i=e.metaTags,l=e.noscriptTags,u=e.onChangeClientState,s=e.scriptTags,c=e.styleTags,d=e.title,f=e.titleAttributes;le(w.BODY,r),le(w.HTML,a),ie(d,f);var p={baseTag:ue(w.BASE,n),linkTags:ue(w.LINK,o),metaTags:ue(w.META,i),noscriptTags:ue(w.NOSCRIPT,l),scriptTags:ue(w.SCRIPT,s),styleTags:ue(w.STYLE,c)},m={},h={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(m[e]=n),r.length&&(h[e]=p[e].oldTags)})),t&&t(),u(e,m,h)},oe=function(e){return Array.isArray(e)?e.join(""):e},ie=function(e,t){void 0!==e&&document.title!==e&&(document.title=oe(e)),le(w.TITLE,t)},le=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute(B),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),l=0;l=0;d--)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute(B):n.getAttribute(B)!==i.join(",")&&n.setAttribute(B,i.join(","))}},ue=function(e,t){var n=document.head||document.querySelector(w.HEAD),r=n.querySelectorAll(e+"["+B+"]"),a=Array.prototype.slice.call(r),o=[],i=void 0;return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===T)n.innerHTML=t.innerHTML;else if(r===S)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var l=void 0===t[r]?"":t[r];n.setAttribute(r,l)}n.setAttribute(B,"true"),a.some((function(e,t){return i=t,n.isEqualNode(e)}))?a.splice(i,1):o.push(n)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),o.forEach((function(e){return n.appendChild(e)})),{oldTags:a,newTags:o}},se=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},ce=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[L[n]||n]=e[n],t}),t)},de=function(e,t,n){switch(e){case w.TITLE:return{toComponent:function(){return e=t.title,n=t.titleAttributes,(r={key:e})[B]=!0,a=ce(n,r),[m.a.createElement(w.TITLE,a,e)];var e,n,r,a},toString:function(){return function(e,t,n,r){var a=se(n),o=oe(t);return a?"<"+e+" "+B+'="true" '+a+">"+H(o,r)+"":"<"+e+" "+B+'="true">'+H(o,r)+""}(e,t.title,t.titleAttributes,n)}};case b:case v:return{toComponent:function(){return ce(t)},toString:function(){return se(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,n){var r,a=((r={key:n})[B]=!0,r);return Object.keys(t).forEach((function(e){var n=L[e]||e;if(n===T||n===S){var r=t.innerHTML||t.cssText;a.dangerouslySetInnerHTML={__html:r}}else a[n]=t[e]})),m.a.createElement(e,a)}))}(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!(e===T||e===S)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+H(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===z.indexOf(e);return t+"<"+e+" "+B+'="true" '+a+(i?"/>":">"+o+"")}),"")}(e,t,n)}}}},fe=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.linkTags,i=e.metaTags,l=e.noscriptTags,u=e.scriptTags,s=e.styleTags,c=e.title,d=void 0===c?"":c,f=e.titleAttributes;return{base:de(w.BASE,t,r),bodyAttributes:de(b,n,r),htmlAttributes:de(v,a,r),link:de(w.LINK,o,r),meta:de(w.META,i,r),noscript:de(w.NOSCRIPT,l,r),script:de(w.SCRIPT,u,r),style:de(w.STYLE,s,r),title:de(w.TITLE,{title:d,titleAttributes:f},r)}},pe=c()((function(e){return{baseTag:K([E,A],e),bodyAttributes:Y(b,e),defer:X(e,D),encode:X(e,I),htmlAttributes:Y(v,e),linkTags:Q(w.LINK,[P,E],e),metaTags:Q(w.META,[O,k,x,_,C],e),noscriptTags:Q(w.NOSCRIPT,[T],e),onChangeClientState:V(e),scriptTags:Q(w.SCRIPT,[R,T],e),styleTags:Q(w.STYLE,[S],e),title:W(e),titleAttributes:Y(y,e)}}),(function(e){re&&te(re),e.defer?re=ee((function(){ae(e,(function(){re=null}))})):(ae(e),re=null)}),fe)((function(){return null})),me=(a=pe,i=o=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!f()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case w.SCRIPT:case w.NOSCRIPT:return{innerHTML:t};case w.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,a=e.newChildProps,o=e.nestedChildren;return G({},r,((t={})[n.type]=[].concat(r[n.type]||[],[G({},a,this.mapNestedChildrenToProps(n,o))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case w.TITLE:return G({},a,((t={})[r.type]=i,t.titleAttributes=G({},o),t));case w.BODY:return G({},a,{bodyAttributes:G({},o)});case w.HTML:return G({},a,{htmlAttributes:G({},o)})}return G({},a,((n={})[r.type]=G({},o),n))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=G({},t);return Object.keys(e).forEach((function(t){var r;n=G({},n,((r={})[t]=e[t],r))})),n},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var n=this,r={};return m.a.Children.forEach(e,(function(e){if(e&&e.props){var a=e.props,o=a.children,i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[F[n]||n]=e[n],t}),t)}(q(a,["children"]));switch(n.warnOnInvalidChildren(e,o),e.type){case w.LINK:case w.META:case w.NOSCRIPT:case w.SCRIPT:case w.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:i,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:i,nestedChildren:o})}}})),t=this.mapArrayTypeChildrenToProps(r,t)},t.prototype.render=function(){var e=this.props,t=e.children,n=q(e,["children"]),r=G({},n);return t&&(r=this.mapChildrenToProps(t,r)),m.a.createElement(a,r)},$(t,null,[{key:"canUseDOM",set:function(e){a.canUseDOM=e}}]),t}(m.a.Component),o.propTypes={base:u.a.object,bodyAttributes:u.a.object,children:u.a.oneOfType([u.a.arrayOf(u.a.node),u.a.node]),defaultTitle:u.a.string,defer:u.a.bool,encodeSpecialCharacters:u.a.bool,htmlAttributes:u.a.object,link:u.a.arrayOf(u.a.object),meta:u.a.arrayOf(u.a.object),noscript:u.a.arrayOf(u.a.object),onChangeClientState:u.a.func,script:u.a.arrayOf(u.a.object),style:u.a.arrayOf(u.a.object),title:u.a.string,titleAttributes:u.a.object,titleTemplate:u.a.string},o.defaultProps={defer:!0,encodeSpecialCharacters:!0},o.peek=a.peek,o.rewind=function(){var e=a.rewind();return e||(e=fe({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},i);me.renderStatic=me.rewind}).call(this,n(28))},function(e,t,n){"use strict";var r,a=n(0),o=(r=a)&&"object"==typeof r&&"default"in r?r.default:r;function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var l=!("undefined"==typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,n){if("function"!=typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var u,s=[];function c(){u=e(s.map((function(e){return e.props}))),d.canUseDOM?t(u):n&&(u=n(u))}var d=function(e){var t,n;function a(){return e.apply(this,arguments)||this}n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,a.peek=function(){return u},a.rewind=function(){if(a.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=u;return u=void 0,s=[],e};var i=a.prototype;return i.UNSAFE_componentWillMount=function(){s.push(this),c()},i.componentDidUpdate=function(){c()},i.componentWillUnmount=function(){var e=s.indexOf(this);s.splice(e,1),c()},i.render=function(){return o.createElement(r,this.props)},a}(a.PureComponent);return i(d,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(r)+")"),i(d,"canUseDOM",l),d}}},function(e,t){var n="undefined"!=typeof Element,r="function"==typeof Map,a="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function i(e,t){if(e===t)return!0;if(e&&t&&"object"==typeof e&&"object"==typeof t){if(e.constructor!==t.constructor)return!1;var l,u,s,c;if(Array.isArray(e)){if((l=e.length)!=t.length)return!1;for(u=l;0!=u--;)if(!i(e[u],t[u]))return!1;return!0}if(r&&e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(c=e.entries();!(u=c.next()).done;)if(!t.has(u.value[0]))return!1;for(c=e.entries();!(u=c.next()).done;)if(!i(u.value[1],t.get(u.value[0])))return!1;return!0}if(a&&e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(c=e.entries();!(u=c.next()).done;)if(!t.has(u.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(t)){if((l=e.length)!=t.length)return!1;for(u=l;0!=u--;)if(e[u]!==t[u])return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if((l=(s=Object.keys(e)).length)!==Object.keys(t).length)return!1;for(u=l;0!=u--;)if(!Object.prototype.hasOwnProperty.call(t,s[u]))return!1;if(n&&e instanceof Element)return!1;for(u=l;0!=u--;)if(("_owner"!==s[u]&&"__v"!==s[u]&&"__o"!==s[u]||!e.$$typeof)&&!i(e[s[u]],t[s[u]]))return!1;return!0}return e!=e&&t!=t}e.exports=function(e,t){try{return i(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},function(e,t,n){e.exports=n(55)},function(e,t,n){"use strict";var r=n(12),a=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,u=60112;t.Suspense=60113;var s=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;a=d("react.element"),o=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),u=d("react.forward_ref"),t.Suspense=d("react.suspense"),s=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n