From 438ff275f770f656b5f7b92443d46d732dc1e3da Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 09:35:42 +0000 Subject: [PATCH] deploy: e5f730c6e02715b3330870baef4fc5b6318800f0 --- 404.html | 10 +++++----- assets/css/styles.39aa3998.css | 1 - assets/css/styles.c8633681.css | 1 + assets/js/01e36714.eaf51f7f.js | 1 - assets/js/01e36714.f3eba277.js | 1 + assets/js/035f6a2b.cc0e2f05.js | 1 - assets/js/035f6a2b.d8690038.js | 1 + assets/js/05a49df9.380b9bed.js | 1 - assets/js/05a49df9.bd462164.js | 1 + assets/js/0b0ce070.411b9d09.js | 1 - assets/js/0b0ce070.e791a3e0.js | 1 + assets/js/0b6d1cf3.322d9cf7.js | 1 + assets/js/0b6d1cf3.e62c6913.js | 1 - assets/js/24226b5e.862f6c0c.js | 1 + assets/js/24226b5e.e05e6593.js | 1 - assets/js/2648826c.bdcbc8d8.js | 1 + assets/js/2648826c.c6c092c1.js | 1 - assets/js/2d792a0e.0cab0ae6.js | 1 + assets/js/2d792a0e.5180e340.js | 1 - assets/js/3590feea.0f487ea9.js | 1 - assets/js/3590feea.d4bf5eae.js | 1 + assets/js/5281b7a2.28915db0.js | 1 - assets/js/5281b7a2.d7e3d73d.js | 1 + assets/js/52cb0b0e.552134ec.js | 1 + assets/js/52cb0b0e.6a4baa63.js | 1 - assets/js/57aa9b0b.8aa253a2.js | 1 - assets/js/57aa9b0b.b7868f78.js | 1 + assets/js/61a2fae4.0ff6f52e.js | 1 + assets/js/61a2fae4.517e5566.js | 1 - assets/js/7028c347.1d815bb1.js | 1 - assets/js/7028c347.4c28c5b0.js | 1 + assets/js/737b34ca.6979b4d8.js | 1 + assets/js/737b34ca.ab9c3a6a.js | 1 - assets/js/9457ee1a.b7c3be79.js | 1 - assets/js/9457ee1a.ef7494d6.js | 1 + assets/js/a4518945.02bfb722.js | 1 - assets/js/a4518945.ab78de32.js | 1 + assets/js/bbcccd5a.5b63cfcb.js | 1 + assets/js/bbcccd5a.84faa60d.js | 1 - assets/js/bc5d99e5.7f11a72b.js | 1 + assets/js/bc5d99e5.d5c83d3b.js | 1 - assets/js/c73fa0c0.019fd995.js | 1 - assets/js/c73fa0c0.4cb6d9bb.js | 1 + assets/js/efa26a48.03c9f327.js | 1 + assets/js/efa26a48.1db5846e.js | 1 - assets/js/f01c0b75.b6c1129d.js | 1 - assets/js/f01c0b75.bb4f6cd9.js | 1 + assets/js/f2d6f90c.ba83eda8.js | 1 - assets/js/f2d6f90c.c2fa7e3f.js | 1 + assets/js/f306b778.196b98cf.js | 1 + assets/js/f306b778.81b16fdf.js | 1 - assets/js/main.373139aa.js | 2 -- assets/js/main.7987d9f6.js | 2 ++ ...9aa.js.LICENSE.txt => main.7987d9f6.js.LICENSE.txt} | 0 assets/js/runtime~main.08cd14f7.js | 1 + assets/js/runtime~main.d3e219fd.js | 1 - docs/adr/2022-07-08.historisation-des-flux/index.html | 10 +++++----- .../2022-08-01.enregistrement-des-fichiers/index.html | 10 +++++----- docs/adr/2022-08-03.scheduled-tasks/index.html | 10 +++++----- docs/adr/2022-11-07.mise-en-production/index.html | 10 +++++----- docs/adr/2023-01-28.onion-architecture/index.html | 10 +++++----- docs/adr/2023-01-30.contexte-commit/index.html | 10 +++++----- .../adr/2023-02-08.exception-dans-le-linter/index.html | 10 +++++----- docs/adr/2023-02-15.migration-nestjs/index.html | 10 +++++----- docs/architecture/index.html | 10 +++++----- docs/category/-adrs/index.html | 10 +++++----- docs/category/-onboarding/index.html | 10 +++++----- docs/category/-tutoriels/index.html | 10 +++++----- "docs/category/\357\270\217-conventions/index.html" | 10 +++++----- docs/conventions/git/index.html | 10 +++++----- docs/conventions/langages/index.html | 10 +++++----- docs/onboarding/checklist/index.html | 10 +++++----- docs/onboarding/installation/index.html | 10 +++++----- docs/onboarding/prerequis/index.html | 10 +++++----- docs/tuto/consulter-contenu-minio/index.html | 10 +++++----- docs/tuto/copie-donnee-en-local/index.html | 10 +++++----- docs/tuto/creer-nouveau-bucket-minio/index.html | 10 +++++----- docs/tuto/le_flux_ne_met_plus_a_jour/index.html | 10 +++++----- docs/tuto/purge-des-donnees/index.html | 10 +++++----- docs/tuto/rollback-database/index.html | 10 +++++----- docs/tuto/scheduled-tasks/index.html | 10 +++++----- docs/tuto/sos/index.html | 10 +++++----- docs/tuto/tutoMeP/index.html | 10 +++++----- index.html | 10 +++++----- mentions-legales/index.html | 10 +++++----- 85 files changed, 178 insertions(+), 178 deletions(-) delete mode 100644 assets/css/styles.39aa3998.css create mode 100644 assets/css/styles.c8633681.css delete mode 100644 assets/js/01e36714.eaf51f7f.js create mode 100644 assets/js/01e36714.f3eba277.js delete mode 100644 assets/js/035f6a2b.cc0e2f05.js create mode 100644 assets/js/035f6a2b.d8690038.js delete mode 100644 assets/js/05a49df9.380b9bed.js create mode 100644 assets/js/05a49df9.bd462164.js delete mode 100644 assets/js/0b0ce070.411b9d09.js create mode 100644 assets/js/0b0ce070.e791a3e0.js create mode 100644 assets/js/0b6d1cf3.322d9cf7.js delete mode 100644 assets/js/0b6d1cf3.e62c6913.js create mode 100644 assets/js/24226b5e.862f6c0c.js delete mode 100644 assets/js/24226b5e.e05e6593.js create mode 100644 assets/js/2648826c.bdcbc8d8.js delete mode 100644 assets/js/2648826c.c6c092c1.js create mode 100644 assets/js/2d792a0e.0cab0ae6.js delete mode 100644 assets/js/2d792a0e.5180e340.js delete mode 100644 assets/js/3590feea.0f487ea9.js create mode 100644 assets/js/3590feea.d4bf5eae.js delete mode 100644 assets/js/5281b7a2.28915db0.js create mode 100644 assets/js/5281b7a2.d7e3d73d.js create mode 100644 assets/js/52cb0b0e.552134ec.js delete mode 100644 assets/js/52cb0b0e.6a4baa63.js delete mode 100644 assets/js/57aa9b0b.8aa253a2.js create mode 100644 assets/js/57aa9b0b.b7868f78.js create mode 100644 assets/js/61a2fae4.0ff6f52e.js delete mode 100644 assets/js/61a2fae4.517e5566.js delete mode 100644 assets/js/7028c347.1d815bb1.js create mode 100644 assets/js/7028c347.4c28c5b0.js create mode 100644 assets/js/737b34ca.6979b4d8.js delete mode 100644 assets/js/737b34ca.ab9c3a6a.js delete mode 100644 assets/js/9457ee1a.b7c3be79.js create mode 100644 assets/js/9457ee1a.ef7494d6.js delete mode 100644 assets/js/a4518945.02bfb722.js create mode 100644 assets/js/a4518945.ab78de32.js create mode 100644 assets/js/bbcccd5a.5b63cfcb.js delete mode 100644 assets/js/bbcccd5a.84faa60d.js create mode 100644 assets/js/bc5d99e5.7f11a72b.js delete mode 100644 assets/js/bc5d99e5.d5c83d3b.js delete mode 100644 assets/js/c73fa0c0.019fd995.js create mode 100644 assets/js/c73fa0c0.4cb6d9bb.js create mode 100644 assets/js/efa26a48.03c9f327.js delete mode 100644 assets/js/efa26a48.1db5846e.js delete mode 100644 assets/js/f01c0b75.b6c1129d.js create mode 100644 assets/js/f01c0b75.bb4f6cd9.js delete mode 100644 assets/js/f2d6f90c.ba83eda8.js create mode 100644 assets/js/f2d6f90c.c2fa7e3f.js create mode 100644 assets/js/f306b778.196b98cf.js delete mode 100644 assets/js/f306b778.81b16fdf.js delete mode 100644 assets/js/main.373139aa.js create mode 100644 assets/js/main.7987d9f6.js rename assets/js/{main.373139aa.js.LICENSE.txt => main.7987d9f6.js.LICENSE.txt} (100%) create mode 100644 assets/js/runtime~main.08cd14f7.js delete mode 100644 assets/js/runtime~main.d3e219fd.js diff --git a/404.html b/404.html index 01d05b8d..91c63070 100644 --- a/404.html +++ b/404.html @@ -2,12 +2,12 @@ - -Page introuvable | Documentation Technique 1jeune1solution - - + +Page introuvable | Documentation Technique 1jeune1solution + + -
Aller au contenu principal

Page introuvable

Nous n'avons pas trouvé ce que vous recherchez.

Veuillez contacter le propriétaire du site qui vous a lié à l'URL d'origine et leur faire savoir que leur lien est cassé.

+
Aller au contenu principal

Page introuvable

Nous n'avons pas trouvé ce que vous recherchez.

Veuillez contacter le propriétaire du site qui vous a lié à l'URL d'origine et leur faire savoir que leur lien est cassé.

\ No newline at end of file diff --git a/assets/css/styles.39aa3998.css b/assets/css/styles.39aa3998.css deleted file mode 100644 index 202ff531..00000000 --- a/assets/css/styles.39aa3998.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--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 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}:root,[data-theme=dark]{--ifm-code-font-size:95%}.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:#0000}*{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma,h1{color:var(--ifm-color-primary)}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;top:0;left:0;visibility:hidden}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:"";filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:1rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::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);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--blue-navy:#000091;--diva-blue:#566bb1;--smalt-blue:#53918c;--cornflower-blue:#735bf2;--deepslate-blue:#455a64;--auricula-purple:#6e445a;--tapestry:#a558a0;--dark-vinaceous:#a66465;--coral:#e4794a;--brazil-red:#b34000;--scarlet-red:#ce0500;--cerro-green:#61803e;--duck-green:#18753c;--white:#fff;--white-lilac:#f6f7fb;--white-titan:#ececff;--light-neutral-grey:#eee;--neutral-grey:#929292;--deep-neutral-grey:#666;--black:#161616;--color-primary:var(--diva-blue);--color-primary-on-hover:var(--cornflower-blue);--color-on-primary:var(--white);--color-secondary:var(--duck-green);--color-on-secondary:var(--white);--color-background-white-lilac:var(--white-lilac);--color-background-white-titan:var(--white-titan);--color-background:var(--white);--color-on-background:var(--black);--color-surface:var(--white);--color-on-surface:var(--black);--color-cej-background:#ea711b;--color-tertiary:var(--brazil-red);--color-error:var(--scarlet-red);--color-mention-grey:var(--deep-neutral-grey);--color-disabled:var(--light-neutral-grey);--color-on-disabled:var(--deep-neutral-grey);--color-blue-navy:var(--blue-navy);--color-lighten-blue-navy:lighten(var(--color-blue-navy),67%);--color-tapestry:var(--tapestry);--color-lighten-tapestry:lighten(var(--color-tapestry),45%);--color-smalt-blue:var(--smalt-blue);--color-lighten-smalt-blue:lighten(var(--color-smalt-blue),48%);--color-coral:var(--coral);--color-lighten-coral:lighten(var(--color-coral),31%);--color-separator:var(--light-neutral-grey);--color-form-field:var(--white-lilac);--color-mine-shaft:#3a3a3a;--color-skeleton:var(--light-neutral-grey);--color-cadre-formulaire:var(--white-lilac);--color-tag:var(--light-neutral-grey);--box-shadow:10px 10px 20px #1616160d;--ifm-font-family-base:"Marianne";--ifm-color-primary:var(--color-primary);--ifm-color-primary-dark:#4b5fa2;--ifm-color-primary-darker:#475a99;--ifm-color-primary-darkest:#3a4a7e;--ifm-color-primary-light:#687bb9;--ifm-color-primary-lighter:#7183bd;--ifm-color-primary-lightest:#8c9aca;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}@font-face{font-display:swap;font-family:Marianne;font-style:normal;font-weight:300;src:url(/1j1s-etl/assets/fonts/Marianne-Light-d3bbed24a63b24286c710818c9f3677c.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Light-42694e62246c3745e81a324b118d91af.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:italic;font-weight:300;src:url(/1j1s-etl/assets/fonts/Marianne-Light_Italic-e2ae199b67519ac5bca805fcb978249a.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Light_Italic-b369ac68002d4d4ba8aa0bd6b2684581.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:normal;font-weight:400;src:url(/1j1s-etl/assets/fonts/Marianne-Regular-96357e2569e591ec1ed054c10a2d7ccd.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Regular-fb85e4bef4dfaa0eb370f6a23aea423b.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:italic;font-weight:400;src:url(/1j1s-etl/assets/fonts/Marianne-Regular_Italic-76f45c42555680d84ed49f60a43a9e25.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Regular_Italic-95da520f2dd7647253cf36ede14bd930.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:normal;font-weight:500;src:url(/1j1s-etl/assets/fonts/Marianne-Medium-05b552bd5e02d12ee2c40f6615399cd7.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Medium-a3a0a481266ad64bbac59ca2b2ddc256.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:italic;font-weight:500;src:url(/1j1s-etl/assets/fonts/Marianne-Medium_Italic-be993b9daaac943a7686f4dfa8dd4b38.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Medium_Italic-13030beb60ab287d8482013d852c06a2.woff) format("woff")}[data-theme=dark]{--ifm-color-primary:#ececff;--ifm-color-primary-dark:#bbf;--ifm-color-primary-darker:#a2a2ff;--ifm-color-primary-darkest:#5959ff;--ifm-color-primary-light:#fff;--ifm-color-primary-lighter:#fff;--ifm-color-primary-lightest:#fff;--ifm-color-primary-lightest:#4fddbf;--docusaurus-highlighted-code-line-bg:#0000004d}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.navbarSearchContainer_Bca1:empty,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.features_t9lD{align-items:center;display:flex;padding:2rem 0;width:100%}.featureSvg_GfXr{height:200px;width:200px}.heroBanner_e1Bh{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_VwD3{align-items:center;display:flex;justify-content:center}.heroBanner_e1Bh h1{color:inherit}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.mdxPageWrapper_j9I6{justify-content:center}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:996px){.heroBanner_e1Bh{padding:2rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/css/styles.c8633681.css b/assets/css/styles.c8633681.css new file mode 100644 index 00000000..06a2383f --- /dev/null +++ b/assets/css/styles.c8633681.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--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 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}:root,[data-theme=dark]{--ifm-code-font-size:95%}.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:#0000}*{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.list_eTzJ article:last-child,.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma,h1{color:var(--ifm-color-primary)}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){-webkit-text-decoration:none;text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);-webkit-text-decoration:none;text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;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)}.dropdown__link--active,.dropdown__link:hover,.menu__link:hover,.navbar__brand:hover,.navbar__link--active,.navbar__link:hover,.pagination-nav__link:hover,.pagination__link:hover,.tag_zVej:hover{-webkit-text-decoration:none;text-decoration:none}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);-webkit-text-decoration:none;text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color)}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.cardContainer_fWXF :last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;top:0;left:0;visibility:hidden}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color)}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:"";filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color)}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color)}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:1rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::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);position:fixed;transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;position:fixed;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover)}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--blue-navy:#000091;--diva-blue:#566bb1;--smalt-blue:#53918c;--cornflower-blue:#735bf2;--deepslate-blue:#455a64;--auricula-purple:#6e445a;--tapestry:#a558a0;--dark-vinaceous:#a66465;--coral:#e4794a;--brazil-red:#b34000;--scarlet-red:#ce0500;--cerro-green:#61803e;--duck-green:#18753c;--white:#fff;--white-lilac:#f6f7fb;--white-titan:#ececff;--light-neutral-grey:#eee;--neutral-grey:#929292;--deep-neutral-grey:#666;--black:#161616;--color-primary:var(--diva-blue);--color-primary-on-hover:var(--cornflower-blue);--color-on-primary:var(--white);--color-secondary:var(--duck-green);--color-on-secondary:var(--white);--color-background-white-lilac:var(--white-lilac);--color-background-white-titan:var(--white-titan);--color-background:var(--white);--color-on-background:var(--black);--color-surface:var(--white);--color-on-surface:var(--black);--color-cej-background:#ea711b;--color-tertiary:var(--brazil-red);--color-error:var(--scarlet-red);--color-mention-grey:var(--deep-neutral-grey);--color-disabled:var(--light-neutral-grey);--color-on-disabled:var(--deep-neutral-grey);--color-blue-navy:var(--blue-navy);--color-lighten-blue-navy:lighten(var(--color-blue-navy),67%);--color-tapestry:var(--tapestry);--color-lighten-tapestry:lighten(var(--color-tapestry),45%);--color-smalt-blue:var(--smalt-blue);--color-lighten-smalt-blue:lighten(var(--color-smalt-blue),48%);--color-coral:var(--coral);--color-lighten-coral:lighten(var(--color-coral),31%);--color-separator:var(--light-neutral-grey);--color-form-field:var(--white-lilac);--color-mine-shaft:#3a3a3a;--color-skeleton:var(--light-neutral-grey);--color-cadre-formulaire:var(--white-lilac);--color-tag:var(--light-neutral-grey);--box-shadow:10px 10px 20px #1616160d;--ifm-font-family-base:"Marianne";--ifm-color-primary:var(--color-primary);--ifm-color-primary-dark:#4b5fa2;--ifm-color-primary-darker:#475a99;--ifm-color-primary-darkest:#3a4a7e;--ifm-color-primary-light:#687bb9;--ifm-color-primary-lighter:#7183bd;--ifm-color-primary-lightest:#8c9aca;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}@font-face{font-display:swap;font-family:Marianne;font-style:normal;font-weight:300;src:url(/1j1s-etl/assets/fonts/Marianne-Light-d3bbed24a63b24286c710818c9f3677c.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Light-42694e62246c3745e81a324b118d91af.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:italic;font-weight:300;src:url(/1j1s-etl/assets/fonts/Marianne-Light_Italic-e2ae199b67519ac5bca805fcb978249a.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Light_Italic-b369ac68002d4d4ba8aa0bd6b2684581.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:normal;font-weight:400;src:url(/1j1s-etl/assets/fonts/Marianne-Regular-96357e2569e591ec1ed054c10a2d7ccd.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Regular-fb85e4bef4dfaa0eb370f6a23aea423b.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:italic;font-weight:400;src:url(/1j1s-etl/assets/fonts/Marianne-Regular_Italic-76f45c42555680d84ed49f60a43a9e25.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Regular_Italic-95da520f2dd7647253cf36ede14bd930.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:normal;font-weight:500;src:url(/1j1s-etl/assets/fonts/Marianne-Medium-05b552bd5e02d12ee2c40f6615399cd7.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Medium-a3a0a481266ad64bbac59ca2b2ddc256.woff) format("woff")}@font-face{font-display:swap;font-family:Marianne;font-style:italic;font-weight:500;src:url(/1j1s-etl/assets/fonts/Marianne-Medium_Italic-be993b9daaac943a7686f4dfa8dd4b38.woff2) format("woff2"),url(/1j1s-etl/assets/fonts/Marianne-Medium_Italic-13030beb60ab287d8482013d852c06a2.woff) format("woff")}[data-theme=dark]{--ifm-color-primary:#ececff;--ifm-color-primary-dark:#bbf;--ifm-color-primary-darker:#a2a2ff;--ifm-color-primary-darkest:#5959ff;--ifm-color-primary-light:#fff;--ifm-color-primary-lighter:#fff;--ifm-color-primary-lightest:#fff;--ifm-color-primary-lightest:#4fddbf;--docusaurus-highlighted-code-line-bg:#0000004d}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color)}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;-webkit-text-decoration:underline;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.navbarSearchContainer_Bca1:empty,.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.iconExternalLink_nPIU{margin-left:.3rem}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.cardContainer_fWXF{--ifm-link-color:var(--ifm-color-emphasis-800);--ifm-link-hover-color:var(--ifm-color-emphasis-700);--ifm-link-hover-decoration:none;border:1px solid var(--ifm-color-emphasis-200);box-shadow:0 1.5px 3px 0 #00000026;transition:all var(--ifm-transition-fast) ease;transition-property:border,box-shadow}.cardContainer_fWXF:hover{border-color:var(--ifm-color-primary);box-shadow:0 3px 6px 0 #0003}.cardTitle_rnsV{font-size:1.2rem}.cardDescription_PWke{font-size:.8rem}.features_t9lD{align-items:center;display:flex;padding:2rem 0;width:100%}.featureSvg_GfXr{height:200px;width:200px}.heroBanner_e1Bh{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.buttons_VwD3{align-items:center;display:flex;justify-content:center}.heroBanner_e1Bh h1{color:inherit}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.title_kItE{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-leading)*1.25)}.mdxPageWrapper_j9I6{justify-content:center}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);-webkit-text-decoration:none!important;text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn,.generatedIndexPage_vN6x{max-width:75%!important}.list_eTzJ article:nth-last-child(-n+2){margin-bottom:0!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block;width:max-content}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:996px){.heroBanner_e1Bh{padding:2rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/js/01e36714.eaf51f7f.js b/assets/js/01e36714.eaf51f7f.js deleted file mode 100644 index 84309517..00000000 --- a/assets/js/01e36714.eaf51f7f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[932],{5990:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>t,toc:()=>i});var a=n(4848),d=n(8453);const r={sidebar_label:"Comment Rollback la base de donn\xe9es ?",sidebar_position:1},o="Rollback de base de donn\xe9es",t={id:"tuto/rollback-database",title:"Rollback de base de donn\xe9es",description:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/tuto/rollback-database.md",sourceDirName:"tuto",slug:"/tuto/rollback-database",permalink:"/1j1s-etl/docs/tuto/rollback-database",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/rollback-database.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_label:"Comment Rollback la base de donn\xe9es ?",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Que faire si tout se passe mal apr\xe8s une mise en production ?",permalink:"/1j1s-etl/docs/tuto/sos"},next:{title:"Comment purger les donn\xe9es ?",permalink:"/1j1s-etl/docs/tuto/purge-des-donnees"}},l={},i=[{value:"Acc\xe9der au dashboard de la base de donn\xe9es",id:"acc\xe9der-au-dashboard-de-la-base-de-donn\xe9es",level:2},{value:"Cr\xe9er une backup de la base de donn\xe9es",id:"cr\xe9er-une-backup-de-la-base-de-donn\xe9es",level:2},{value:"Restaurer la base de donn\xe9es \xe0 une date pr\xe9cise",id:"restaurer-la-base-de-donn\xe9es-\xe0-une-date-pr\xe9cise",level:2},{value:"Restaurer la base de donn\xe9es depuis le dump que vous avez g\xe9n\xe9r\xe9",id:"restaurer-la-base-de-donn\xe9es-depuis-le-dump-que-vous-avez-g\xe9n\xe9r\xe9",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",strong:"strong",...(0,d.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.header,{children:(0,a.jsx)(s.h1,{id:"rollback-de-base-de-donn\xe9es",children:"Rollback de base de donn\xe9es"})}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,a.jsx)(s.admonition,{title:"Contexte",type:"info",children:(0,a.jsx)(s.p,{children:"Il est parfois n\xe9cessaire, pour annuler des transactions incorrectes ou non d\xe9sir\xe9es, restaurer l'int\xe9grit\xe9 des donn\xe9es et garantir la coh\xe9rence du syst\xe8me apr\xe8s une erreur ou une d\xe9faillance de r\xe9aliser un rollback de la base de donn\xe9e."})}),"\n",(0,a.jsx)(s.h2,{id:"acc\xe9der-au-dashboard-de-la-base-de-donn\xe9es",children:"Acc\xe9der au dashboard de la base de donn\xe9es"}),"\n",(0,a.jsx)(s.p,{children:"Scalingo propose avec ses offres payantes d'automatiser la cr\xe9ation de backup d'une base de donn\xe9es p\xe9riodiquement (et\nc'est d\xe9j\xe0 fait pour les environnements de production)."}),"\n",(0,a.jsx)(s.p,{children:"Maintenant, vous allez peut-\xeatre vouloir cr\xe9er une back-up manuellement. Pour ce faire, il faut se rendre sur Scalingo,\nl\xe0 o\xf9 les ressources d'une application sont d\xe9taill\xe9es :"}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"1j1s-scalingo",src:n(2430).A+"",width:"1523",height:"621"})}),"\n",(0,a.jsxs)(s.p,{children:["Ensuite, cliquez sur le bouton ",(0,a.jsx)(s.code,{children:"Go to dashboard"})," \xe0 c\xf4t\xe9 de l'addon correspondant \xe0 votre base de donn\xe9es. Cela va ouvrir\nune fen\xeatre avec le dashboard correspondant \xe0 votre base de donn\xe9es."]}),"\n",(0,a.jsx)(s.h2,{id:"cr\xe9er-une-backup-de-la-base-de-donn\xe9es",children:"Cr\xe9er une backup de la base de donn\xe9es"}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.em,{children:"Parce qu'on ne sait jamais !"})}),"\n",(0,a.jsx)(s.p,{children:"Maintenant, vous avez le dashboard ci-dessous devant les yeux :"}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"1j1s-bdd",src:n(2249).A+"",width:"1867",height:"933"})}),"\n",(0,a.jsxs)(s.p,{children:["Rendez vous sur l'onglet ",(0,a.jsx)(s.code,{children:"Backups"}),", en haut \xe0 droite :"]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"1j1s-backup",src:n(9473).A+"",width:"1875",height:"948"})}),"\n",(0,a.jsxs)(s.p,{children:["Pour cr\xe9er votre backup, il vous suffit maintenant d'appuyer sur le bouton ",(0,a.jsx)(s.code,{children:"Make manual backup"}),". Vous le verrez\nappara\xeetre dans la liste des backups disponibles sur la droite de l'interface. T\xe9l\xe9chargez cette sauvegarde via le\nbouton ",(0,a.jsx)(s.code,{children:"Download"})," \xe0 l'\xe9cran."]}),"\n",(0,a.jsx)(s.h2,{id:"restaurer-la-base-de-donn\xe9es-\xe0-une-date-pr\xe9cise",children:"Restaurer la base de donn\xe9es \xe0 une date pr\xe9cise"}),"\n",(0,a.jsxs)(s.p,{children:["Il vous est maintenant possible de restaurer la base de donn\xe9es \xe0 un point donn\xe9 dans le temps. Choisissez l'heure \xe0\nlaquelle vous souhaitez restaurer la base de donn\xe9es puis appuyez sur ",(0,a.jsx)(s.code,{children:"Restore database"}),"."]}),"\n",(0,a.jsx)(s.h2,{id:"restaurer-la-base-de-donn\xe9es-depuis-le-dump-que-vous-avez-g\xe9n\xe9r\xe9",children:"Restaurer la base de donn\xe9es depuis le dump que vous avez g\xe9n\xe9r\xe9"}),"\n",(0,a.jsx)(s.p,{children:"Dans certains cas, vous pourriez \xeatre amen\xe9s \xe0 restaurer la base de donn\xe9es depuis le dump que vous avez g\xe9n\xe9r\xe9 plus t\xf4t."}),"\n",(0,a.jsxs)(s.p,{children:["Dans ce cas-l\xe0, r\xe9f\xe9rez-vous directement \xe0 la ",(0,a.jsx)(s.a,{href:"https://doc.scalingo.com/databases/postgresql/dump-restore",children:"documentation de Scalingo"}),"\nsur le sujet."]}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.strong,{children:"And voil\xe0 !"})})]})}function u(e={}){const{wrapper:s}={...(0,d.R)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},9473:(e,s,n)=>{n.d(s,{A:()=>a});const a=n.p+"assets/images/backups-6298a89dd3122d81672fc45f490765dc.png"},2249:(e,s,n)=>{n.d(s,{A:()=>a});const a=n.p+"assets/images/dashboard-bdd-568af82117ec0c6881203fbc0b03d70c.png"},2430:(e,s,n)=>{n.d(s,{A:()=>a});const a=n.p+"assets/images/onglet-scalingo-app-201ffa658f12eb12c44b0d0b88306359.png"},8453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>t});var a=n(6540);const d={},r=a.createContext(d);function o(e){const s=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:o(e.components),a.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/01e36714.f3eba277.js b/assets/js/01e36714.f3eba277.js new file mode 100644 index 00000000..6ad36316 --- /dev/null +++ b/assets/js/01e36714.f3eba277.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[932],{1776:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>i});const a=JSON.parse('{"id":"tuto/rollback-database","title":"Rollback de base de donn\xe9es","description":"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/tuto/rollback-database.md","sourceDirName":"tuto","slug":"/tuto/rollback-database","permalink":"/1j1s-etl/docs/tuto/rollback-database","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/rollback-database.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_label":"Comment Rollback la base de donn\xe9es ?","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Que faire si tout se passe mal apr\xe8s une mise en production ?","permalink":"/1j1s-etl/docs/tuto/sos"},"next":{"title":"Comment purger les donn\xe9es ?","permalink":"/1j1s-etl/docs/tuto/purge-des-donnees"}}');var d=n(4848),r=n(8453);const o={sidebar_label:"Comment Rollback la base de donn\xe9es ?",sidebar_position:1},t="Rollback de base de donn\xe9es",l={},i=[{value:"Acc\xe9der au dashboard de la base de donn\xe9es",id:"acc\xe9der-au-dashboard-de-la-base-de-donn\xe9es",level:2},{value:"Cr\xe9er une backup de la base de donn\xe9es",id:"cr\xe9er-une-backup-de-la-base-de-donn\xe9es",level:2},{value:"Restaurer la base de donn\xe9es \xe0 une date pr\xe9cise",id:"restaurer-la-base-de-donn\xe9es-\xe0-une-date-pr\xe9cise",level:2},{value:"Restaurer la base de donn\xe9es depuis le dump que vous avez g\xe9n\xe9r\xe9",id:"restaurer-la-base-de-donn\xe9es-depuis-le-dump-que-vous-avez-g\xe9n\xe9r\xe9",level:2}];function c(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",strong:"strong",...(0,r.R)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(s.header,{children:(0,d.jsx)(s.h1,{id:"rollback-de-base-de-donn\xe9es",children:"Rollback de base de donn\xe9es"})}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,d.jsx)(s.admonition,{title:"Contexte",type:"info",children:(0,d.jsx)(s.p,{children:"Il est parfois n\xe9cessaire, pour annuler des transactions incorrectes ou non d\xe9sir\xe9es, restaurer l'int\xe9grit\xe9 des donn\xe9es et garantir la coh\xe9rence du syst\xe8me apr\xe8s une erreur ou une d\xe9faillance de r\xe9aliser un rollback de la base de donn\xe9e."})}),"\n",(0,d.jsx)(s.h2,{id:"acc\xe9der-au-dashboard-de-la-base-de-donn\xe9es",children:"Acc\xe9der au dashboard de la base de donn\xe9es"}),"\n",(0,d.jsx)(s.p,{children:"Scalingo propose avec ses offres payantes d'automatiser la cr\xe9ation de backup d'une base de donn\xe9es p\xe9riodiquement (et\nc'est d\xe9j\xe0 fait pour les environnements de production)."}),"\n",(0,d.jsx)(s.p,{children:"Maintenant, vous allez peut-\xeatre vouloir cr\xe9er une back-up manuellement. Pour ce faire, il faut se rendre sur Scalingo,\nl\xe0 o\xf9 les ressources d'une application sont d\xe9taill\xe9es :"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"1j1s-scalingo",src:n(2430).A+"",width:"1523",height:"621"})}),"\n",(0,d.jsxs)(s.p,{children:["Ensuite, cliquez sur le bouton ",(0,d.jsx)(s.code,{children:"Go to dashboard"})," \xe0 c\xf4t\xe9 de l'addon correspondant \xe0 votre base de donn\xe9es. Cela va ouvrir\nune fen\xeatre avec le dashboard correspondant \xe0 votre base de donn\xe9es."]}),"\n",(0,d.jsx)(s.h2,{id:"cr\xe9er-une-backup-de-la-base-de-donn\xe9es",children:"Cr\xe9er une backup de la base de donn\xe9es"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.em,{children:"Parce qu'on ne sait jamais !"})}),"\n",(0,d.jsx)(s.p,{children:"Maintenant, vous avez le dashboard ci-dessous devant les yeux :"}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"1j1s-bdd",src:n(2249).A+"",width:"1867",height:"933"})}),"\n",(0,d.jsxs)(s.p,{children:["Rendez vous sur l'onglet ",(0,d.jsx)(s.code,{children:"Backups"}),", en haut \xe0 droite :"]}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.img,{alt:"1j1s-backup",src:n(9473).A+"",width:"1875",height:"948"})}),"\n",(0,d.jsxs)(s.p,{children:["Pour cr\xe9er votre backup, il vous suffit maintenant d'appuyer sur le bouton ",(0,d.jsx)(s.code,{children:"Make manual backup"}),". Vous le verrez\nappara\xeetre dans la liste des backups disponibles sur la droite de l'interface. T\xe9l\xe9chargez cette sauvegarde via le\nbouton ",(0,d.jsx)(s.code,{children:"Download"})," \xe0 l'\xe9cran."]}),"\n",(0,d.jsx)(s.h2,{id:"restaurer-la-base-de-donn\xe9es-\xe0-une-date-pr\xe9cise",children:"Restaurer la base de donn\xe9es \xe0 une date pr\xe9cise"}),"\n",(0,d.jsxs)(s.p,{children:["Il vous est maintenant possible de restaurer la base de donn\xe9es \xe0 un point donn\xe9 dans le temps. Choisissez l'heure \xe0\nlaquelle vous souhaitez restaurer la base de donn\xe9es puis appuyez sur ",(0,d.jsx)(s.code,{children:"Restore database"}),"."]}),"\n",(0,d.jsx)(s.h2,{id:"restaurer-la-base-de-donn\xe9es-depuis-le-dump-que-vous-avez-g\xe9n\xe9r\xe9",children:"Restaurer la base de donn\xe9es depuis le dump que vous avez g\xe9n\xe9r\xe9"}),"\n",(0,d.jsx)(s.p,{children:"Dans certains cas, vous pourriez \xeatre amen\xe9s \xe0 restaurer la base de donn\xe9es depuis le dump que vous avez g\xe9n\xe9r\xe9 plus t\xf4t."}),"\n",(0,d.jsxs)(s.p,{children:["Dans ce cas-l\xe0, r\xe9f\xe9rez-vous directement \xe0 la ",(0,d.jsx)(s.a,{href:"https://doc.scalingo.com/databases/postgresql/dump-restore",children:"documentation de Scalingo"}),"\nsur le sujet."]}),"\n",(0,d.jsx)(s.p,{children:(0,d.jsx)(s.strong,{children:"And voil\xe0 !"})})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,d.jsx)(s,{...e,children:(0,d.jsx)(c,{...e})}):c(e)}},9473:(e,s,n)=>{n.d(s,{A:()=>a});const a=n.p+"assets/images/backups-6298a89dd3122d81672fc45f490765dc.png"},2249:(e,s,n)=>{n.d(s,{A:()=>a});const a=n.p+"assets/images/dashboard-bdd-568af82117ec0c6881203fbc0b03d70c.png"},2430:(e,s,n)=>{n.d(s,{A:()=>a});const a=n.p+"assets/images/onglet-scalingo-app-201ffa658f12eb12c44b0d0b88306359.png"},8453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>t});var a=n(6540);const d={},r=a.createContext(d);function o(e){const s=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(d):e.components||d:o(e.components),a.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/035f6a2b.cc0e2f05.js b/assets/js/035f6a2b.cc0e2f05.js deleted file mode 100644 index 811350d6..00000000 --- a/assets/js/035f6a2b.cc0e2f05.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[910],{6751:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>u,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var t=o(4848),r=o(8453);const s={sidebar_label:"Comment cr\xe9er un nouveau bucket sur Minio",sidebar_position:4},i="Comment cr\xe9er un nouveau bucket sur Minio",c={id:"tuto/creer-nouveau-bucket-minio",title:"Comment cr\xe9er un nouveau bucket sur Minio",description:"01 Ao\xfbt 2023 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/tuto/creer-nouveau-bucket-minio.md",sourceDirName:"tuto",slug:"/tuto/creer-nouveau-bucket-minio",permalink:"/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/creer-nouveau-bucket-minio.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_label:"Comment cr\xe9er un nouveau bucket sur Minio",sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Minio, comment \xe7a marche ?",permalink:"/1j1s-etl/docs/tuto/consulter-contenu-minio"},next:{title:"Que faire Lorsque le flux ne se mets plus \xe0 jour ?",permalink:"/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour"}},u={},l=[{value:"Cas d'usage",id:"cas-dusage",level:2},{value:"La commande",id:"la-commande",level:2},{value:"Exemple",id:"exemple",level:3},{value:"En local",id:"en-local",level:3}];function a(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"comment-cr\xe9er-un-nouveau-bucket-sur-minio",children:"Comment cr\xe9er un nouveau bucket sur Minio"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"01 Ao\xfbt 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,t.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,t.jsx)(n.p,{children:"Lors de la cr\xe9ation d'une nouvelle \xe9tape d'Extract / Transform / Load, il faut cr\xe9er les buckets correspondants sur Minio qui accueilleront les fichiers correspondants."})}),"\n",(0,t.jsx)(n.h2,{id:"cas-dusage",children:"Cas d'usage"}),"\n",(0,t.jsx)(n.p,{children:"Exemple pour les diff\xe9rentes \xe9tapes d'ETL des annonces de logements, je dois cr\xe9er les buckets suivants :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"HOUSING_MINIO_RAW_BUCKET_NAME=housing-raw\nHOUSING_MINIO_TRANSFORMED_BUCKET_NAME =housing-json\nHOUSING_MINIO_RESULT_BUCKET_NAME=housing-result\nHOUSING_MINIO_TRANSFORMED_BUCKET_NAME=housing-transform-bucket\nHOUSING_MINIO_RESULT_BUCKET_NAME=housing-result-bucket\n"})}),"\n",(0,t.jsx)(n.h2,{id:"la-commande",children:"La commande"}),"\n",(0,t.jsx)(n.p,{children:"Pour cela, une fois l'application d\xe9ploy\xe9e, on lance la commande sous le mod\xe8le suivant via l'outil CLI scalingo :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:'scalingo --region osc-fr1 --app [NOM_APPLICATION_SCALINGO] run "npm run cli -- mkbucket -b [BUCKET_NAME]"\n'})}),"\n",(0,t.jsx)(n.h3,{id:"exemple",children:"Exemple"}),"\n",(0,t.jsxs)(n.p,{children:["Exemple en ",(0,t.jsx)(n.em,{children:"recette"})," pour la cr\xe9ation de ",(0,t.jsx)(n.code,{children:"HOUSING_MINIO_RAW_BUCKET_NAME"})," qui vaut ",(0,t.jsx)(n.code,{children:"housing-raw"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:'scalingo --region osc-fr1 --app 1j1s-stage-orchestrateur-transform-load run "npm run cli -- mkbucket -b housing-raw"\n'})}),"\n",(0,t.jsx)(n.h3,{id:"en-local",children:"En local"}),"\n",(0,t.jsx)(n.p,{children:"En local, on peut utiliser la commande suivante en s'assurant d'\xeatre branch\xe9 sur le bon environnement :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"npm run dev:cli -- mkbucket -b [BUCKET_NAME]\n"})})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>c});var t=o(6540);const r={},s=t.createContext(r);function i(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/035f6a2b.d8690038.js b/assets/js/035f6a2b.d8690038.js new file mode 100644 index 00000000..80607bd1 --- /dev/null +++ b/assets/js/035f6a2b.d8690038.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[910],{5341:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>u,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"tuto/creer-nouveau-bucket-minio","title":"Comment cr\xe9er un nouveau bucket sur Minio","description":"01 Ao\xfbt 2023 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/tuto/creer-nouveau-bucket-minio.md","sourceDirName":"tuto","slug":"/tuto/creer-nouveau-bucket-minio","permalink":"/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/creer-nouveau-bucket-minio.md","tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"sidebar_label":"Comment cr\xe9er un nouveau bucket sur Minio","sidebar_position":4},"sidebar":"tutorialSidebar","previous":{"title":"Minio, comment \xe7a marche ?","permalink":"/1j1s-etl/docs/tuto/consulter-contenu-minio"},"next":{"title":"Que faire Lorsque le flux ne se mets plus \xe0 jour ?","permalink":"/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour"}}');var t=o(4848),r=o(8453);const i={sidebar_label:"Comment cr\xe9er un nouveau bucket sur Minio",sidebar_position:4},c="Comment cr\xe9er un nouveau bucket sur Minio",u={},l=[{value:"Cas d'usage",id:"cas-dusage",level:2},{value:"La commande",id:"la-commande",level:2},{value:"Exemple",id:"exemple",level:3},{value:"En local",id:"en-local",level:3}];function a(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"comment-cr\xe9er-un-nouveau-bucket-sur-minio",children:"Comment cr\xe9er un nouveau bucket sur Minio"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"01 Ao\xfbt 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,t.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,t.jsx)(n.p,{children:"Lors de la cr\xe9ation d'une nouvelle \xe9tape d'Extract / Transform / Load, il faut cr\xe9er les buckets correspondants sur Minio qui accueilleront les fichiers correspondants."})}),"\n",(0,t.jsx)(n.h2,{id:"cas-dusage",children:"Cas d'usage"}),"\n",(0,t.jsx)(n.p,{children:"Exemple pour les diff\xe9rentes \xe9tapes d'ETL des annonces de logements, je dois cr\xe9er les buckets suivants :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"HOUSING_MINIO_RAW_BUCKET_NAME=housing-raw\nHOUSING_MINIO_TRANSFORMED_BUCKET_NAME =housing-json\nHOUSING_MINIO_RESULT_BUCKET_NAME=housing-result\nHOUSING_MINIO_TRANSFORMED_BUCKET_NAME=housing-transform-bucket\nHOUSING_MINIO_RESULT_BUCKET_NAME=housing-result-bucket\n"})}),"\n",(0,t.jsx)(n.h2,{id:"la-commande",children:"La commande"}),"\n",(0,t.jsx)(n.p,{children:"Pour cela, une fois l'application d\xe9ploy\xe9e, on lance la commande sous le mod\xe8le suivant via l'outil CLI scalingo :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:'scalingo --region osc-fr1 --app [NOM_APPLICATION_SCALINGO] run "npm run cli -- mkbucket -b [BUCKET_NAME]"\n'})}),"\n",(0,t.jsx)(n.h3,{id:"exemple",children:"Exemple"}),"\n",(0,t.jsxs)(n.p,{children:["Exemple en ",(0,t.jsx)(n.em,{children:"recette"})," pour la cr\xe9ation de ",(0,t.jsx)(n.code,{children:"HOUSING_MINIO_RAW_BUCKET_NAME"})," qui vaut ",(0,t.jsx)(n.code,{children:"housing-raw"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:'scalingo --region osc-fr1 --app 1j1s-stage-orchestrateur-transform-load run "npm run cli -- mkbucket -b housing-raw"\n'})}),"\n",(0,t.jsx)(n.h3,{id:"en-local",children:"En local"}),"\n",(0,t.jsx)(n.p,{children:"En local, on peut utiliser la commande suivante en s'assurant d'\xeatre branch\xe9 sur le bon environnement :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"npm run dev:cli -- mkbucket -b [BUCKET_NAME]\n"})})]})}function d(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>i,x:()=>c});var s=o(6540);const t={},r=s.createContext(t);function i(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/05a49df9.380b9bed.js b/assets/js/05a49df9.380b9bed.js deleted file mode 100644 index 8c59a493..00000000 --- a/assets/js/05a49df9.380b9bed.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[745],{1658:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var s=i(4848),t=i(8453);const r={sidebar_label:"Git",sidebar_position:1},o="Standards d'\xe9quipe li\xe9s \xe0 Git",d={id:"conventions/git",title:"Standards d'\xe9quipe li\xe9s \xe0 Git",description:"20 Avril 2023",source:"@site/docs/conventions/git.md",sourceDirName:"conventions",slug:"/conventions/git",permalink:"/1j1s-etl/docs/conventions/git",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/conventions/git.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_label:"Git",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"\u2696\ufe0f Conventions",permalink:"/1j1s-etl/docs/category/\ufe0f-conventions"},next:{title:"Langages",permalink:"/1j1s-etl/docs/conventions/langages"}},c={},l=[{value:"Commit",id:"commit",level:2},{value:"Convention",id:"convention",level:3},{value:"Langue",id:"langue",level:3},{value:"Contextes d'un commit",id:"contextes-dun-commit",level:3},{value:"Contenu du message",id:"contenu-du-message",level:3},{value:"Strat\xe9gie pour les branches",id:"strat\xe9gie-pour-les-branches",level:2},{value:"Branche principale",id:"branche-principale",level:3},{value:"Autres branches",id:"autres-branches",level:3},{value:"Commits de "Work In Progress"",id:"commits-de-work-in-progress",level:2},{value:"Strat\xe9gie de merge",id:"strat\xe9gie-de-merge",level:2},{value:"Code Review",id:"code-review",level:3},{value:"Pull request interm\xe9diaire sur de gros tickets",id:"pull-request-interm\xe9diaire-sur-de-gros-tickets",level:3}];function a(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"standards-d\xe9quipe-li\xe9s-\xe0-git",children:"Standards d'\xe9quipe li\xe9s \xe0 Git"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"20 Avril 2023"})}),"\n",(0,s.jsx)(n.h2,{id:"commit",children:"Commit"}),"\n",(0,s.jsx)(n.h3,{id:"convention",children:"Convention"}),"\n",(0,s.jsxs)(n.p,{children:['Nous allons nous baser sur la convention "',(0,s.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"Conventional Commits"}),'".\n',(0,s.jsx)(n.img,{alt:"1J1S git convention",src:i(2402).A+"",width:"1512",height:"376"})]}),"\n",(0,s.jsx)(n.h3,{id:"langue",children:"Langue"}),"\n",(0,s.jsx)(n.p,{children:"Il a \xe9t\xe9 convenu de r\xe9diger les commits en fran\xe7ais car le projet n'est pas \xe0 destination internationale.\nCelui-ci est destin\xe9 en premier lieu au gouvernement fran\xe7ais."}),"\n",(0,s.jsx)(n.h3,{id:"contextes-dun-commit",children:"Contextes d'un commit"}),"\n",(0,s.jsx)(n.p,{children:"La liste des contextes suivants ont \xe9t\xe9 identifi\xe9s pour ce d\xe9p\xf4t :"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"architecture"})," - pour toute modification de l'architecture du projet"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"cli"})," - pour toute modification de la CLI"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"configuration"})," - pour toute modification de configuration, incluant la configuration des modules"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"dependencies"})," - pour toute modification ayant trait aux d\xe9pendances du projet"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"evenements"})," - pour toute modification ayant trait aux \xe9v\xe9nements"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"logements"})," - pour toute modification ayant trait aux annonces de logements"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"multiple"})," - pour toute modification ayant trait \xe0 2 ou plusieurs contextes"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"stages"})," - pour toute modification ayant trait aux offres de stages"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"contenu-du-message",children:"Contenu du message"}),"\n",(0,s.jsx)(n.p,{children:"Un message de commit doit contenir a minima un titre court format\xe9 contenant un pr\xe9fixe cit\xe9 dans la convention\nci-dessus. Si une description suppl\xe9mentaire est n\xe9cessaire, celle-ci sera ajout\xe9e dans un sous-message de commit."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:'$ git commit -m "feat(transformation): mise en place du client minio" -m "Une description un peu plus d\xe9taill\xe9e..."\n'})}),"\n",(0,s.jsx)(n.h2,{id:"strat\xe9gie-pour-les-branches",children:"Strat\xe9gie pour les branches"}),"\n",(0,s.jsx)(n.h3,{id:"branche-principale",children:"Branche principale"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 que nous aurons une seule branche de d\xe9ploiement ",(0,s.jsx)(n.code,{children:"main"})," sur tous les d\xe9p\xf4ts li\xe9s aux stages. Puis nous\nouvrirons des branches pour chacune de nos fonctionnalit\xe9s que nous mergerons en finalit\xe9 sur la branche ",(0,s.jsx)(n.code,{children:"main"})," une fois\ntoutes les \xe9tapes du flux franchies."]}),"\n",(0,s.jsx)(n.h3,{id:"autres-branches",children:"Autres branches"}),"\n",(0,s.jsx)(n.p,{children:"Nous avons opt\xe9 pour la convention suivante concernant le nom des branches :"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:"/"})}),"\n",(0,s.jsx)(n.p,{children:"Les types de ticket possibles sont les suivants :"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Pr\xe9fixe"}),(0,s.jsx)(n.th,{children:"Type de ticket"}),(0,s.jsx)(n.th,{children:"D\xe9finition"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"feat"})}),(0,s.jsx)(n.td,{children:"Fonctionnalit\xe9"}),(0,s.jsx)(n.td,{children:"Une nouvelle fonctionnalit\xe9 m\xe9tier ajout\xe9e \xe0 l'application"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"evol"})}),(0,s.jsx)(n.td,{children:"Evolution"}),(0,s.jsx)(n.td,{children:"Une \xe9volution d'une fonctionnalit\xe9 existante m\xe9tier"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"fix"})}),(0,s.jsx)(n.td,{children:"Correction"}),(0,s.jsx)(n.td,{children:"Correction d'un bug identifi\xe9"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"tech"})}),(0,s.jsx)(n.td,{children:"Technique"}),(0,s.jsx)(n.td,{children:"Une nouvelle fonctionnalit\xe9 technique pour am\xe9liorer l'application"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"refacto"})}),(0,s.jsx)(n.td,{children:"Technique"}),(0,s.jsx)(n.td,{children:"Une refonte technique pour am\xe9liorer l'application"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"doc"})}),(0,s.jsx)(n.td,{children:"Documentation"}),(0,s.jsx)(n.td,{children:"Ajouter ou modifier de la documentation"})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"commits-de-work-in-progress",children:'Commits de "Work In Progress"'}),"\n",(0,s.jsxs)(n.p,{children:['Afin de pr\xe9server un arbre des commits propres, il sera n\xe9cessaire de supprimer les commits dits "wip" \xe0 l\'aide la\nfonction ',(0,s.jsx)(n.code,{children:"rebase"})," propos\xe9e par Git."]}),"\n",(0,s.jsx)(n.p,{children:"Exemple qui permet de r\xe9ecrire l'arbre des 4 derniers commits :"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"$ git rebase -i head~4\n"})}),"\n",(0,s.jsx)(n.p,{children:'Si votre dernier commit est un "wip" que vous avez remis au propre, vous pouvez simplement l\'amend comme ci-dessous :'}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",children:"$ git commit --amend\n"})}),"\n",(0,s.jsxs)(n.p,{children:["\u26a0\ufe0f Nous ne squasherons pas nos commits lors du merge d'une branche dans la branche ",(0,s.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"strat\xe9gie-de-merge",children:"Strat\xe9gie de merge"}),"\n",(0,s.jsx)(n.h3,{id:"code-review",children:"Code Review"}),"\n",(0,s.jsxs)(n.p,{children:['Nous allons nous baser sur la convention "',(0,s.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"Conventional Comments"}),'".']}),"\n",(0,s.jsx)(n.p,{children:"Chaque Pull Request (PR) devra \xeatre approuv\xe9e a minima par une personne n'ayant pas travaill\xe9 sur le ticket en rapport\navec la PR."}),"\n",(0,s.jsx)(n.h3,{id:"pull-request-interm\xe9diaire-sur-de-gros-tickets",children:"Pull request interm\xe9diaire sur de gros tickets"}),"\n",(0,s.jsx)(n.p,{children:"S'organiser par d\xe9p\xf4t/bin\xf4me."})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},2402:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/1j1s-git-convention-76cb9c0796433effb443216e972b6527.png"},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>d});var s=i(6540);const t={},r=s.createContext(t);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/05a49df9.bd462164.js b/assets/js/05a49df9.bd462164.js new file mode 100644 index 00000000..cbe7538e --- /dev/null +++ b/assets/js/05a49df9.bd462164.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[745],{9929:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"conventions/git","title":"Standards d\'\xe9quipe li\xe9s \xe0 Git","description":"20 Avril 2023","source":"@site/docs/conventions/git.md","sourceDirName":"conventions","slug":"/conventions/git","permalink":"/1j1s-etl/docs/conventions/git","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/conventions/git.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_label":"Git","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"\u2696\ufe0f Conventions","permalink":"/1j1s-etl/docs/category/\ufe0f-conventions"},"next":{"title":"Langages","permalink":"/1j1s-etl/docs/conventions/langages"}}');var t=i(4848),r=i(8453);const o={sidebar_label:"Git",sidebar_position:1},d="Standards d'\xe9quipe li\xe9s \xe0 Git",c={},l=[{value:"Commit",id:"commit",level:2},{value:"Convention",id:"convention",level:3},{value:"Langue",id:"langue",level:3},{value:"Contextes d'un commit",id:"contextes-dun-commit",level:3},{value:"Contenu du message",id:"contenu-du-message",level:3},{value:"Strat\xe9gie pour les branches",id:"strat\xe9gie-pour-les-branches",level:2},{value:"Branche principale",id:"branche-principale",level:3},{value:"Autres branches",id:"autres-branches",level:3},{value:"Commits de "Work In Progress"",id:"commits-de-work-in-progress",level:2},{value:"Strat\xe9gie de merge",id:"strat\xe9gie-de-merge",level:2},{value:"Code Review",id:"code-review",level:3},{value:"Pull request interm\xe9diaire sur de gros tickets",id:"pull-request-interm\xe9diaire-sur-de-gros-tickets",level:3}];function a(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"standards-d\xe9quipe-li\xe9s-\xe0-git",children:"Standards d'\xe9quipe li\xe9s \xe0 Git"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"20 Avril 2023"})}),"\n",(0,t.jsx)(n.h2,{id:"commit",children:"Commit"}),"\n",(0,t.jsx)(n.h3,{id:"convention",children:"Convention"}),"\n",(0,t.jsxs)(n.p,{children:['Nous allons nous baser sur la convention "',(0,t.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"Conventional Commits"}),'".\n',(0,t.jsx)(n.img,{alt:"1J1S git convention",src:i(2402).A+"",width:"1512",height:"376"})]}),"\n",(0,t.jsx)(n.h3,{id:"langue",children:"Langue"}),"\n",(0,t.jsx)(n.p,{children:"Il a \xe9t\xe9 convenu de r\xe9diger les commits en fran\xe7ais car le projet n'est pas \xe0 destination internationale.\nCelui-ci est destin\xe9 en premier lieu au gouvernement fran\xe7ais."}),"\n",(0,t.jsx)(n.h3,{id:"contextes-dun-commit",children:"Contextes d'un commit"}),"\n",(0,t.jsx)(n.p,{children:"La liste des contextes suivants ont \xe9t\xe9 identifi\xe9s pour ce d\xe9p\xf4t :"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"architecture"})," - pour toute modification de l'architecture du projet"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"cli"})," - pour toute modification de la CLI"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"configuration"})," - pour toute modification de configuration, incluant la configuration des modules"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"dependencies"})," - pour toute modification ayant trait aux d\xe9pendances du projet"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"evenements"})," - pour toute modification ayant trait aux \xe9v\xe9nements"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"logements"})," - pour toute modification ayant trait aux annonces de logements"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"multiple"})," - pour toute modification ayant trait \xe0 2 ou plusieurs contextes"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"stages"})," - pour toute modification ayant trait aux offres de stages"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"contenu-du-message",children:"Contenu du message"}),"\n",(0,t.jsx)(n.p,{children:"Un message de commit doit contenir a minima un titre court format\xe9 contenant un pr\xe9fixe cit\xe9 dans la convention\nci-dessus. Si une description suppl\xe9mentaire est n\xe9cessaire, celle-ci sera ajout\xe9e dans un sous-message de commit."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:'$ git commit -m "feat(transformation): mise en place du client minio" -m "Une description un peu plus d\xe9taill\xe9e..."\n'})}),"\n",(0,t.jsx)(n.h2,{id:"strat\xe9gie-pour-les-branches",children:"Strat\xe9gie pour les branches"}),"\n",(0,t.jsx)(n.h3,{id:"branche-principale",children:"Branche principale"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 que nous aurons une seule branche de d\xe9ploiement ",(0,t.jsx)(n.code,{children:"main"})," sur tous les d\xe9p\xf4ts li\xe9s aux stages. Puis nous\nouvrirons des branches pour chacune de nos fonctionnalit\xe9s que nous mergerons en finalit\xe9 sur la branche ",(0,t.jsx)(n.code,{children:"main"})," une fois\ntoutes les \xe9tapes du flux franchies."]}),"\n",(0,t.jsx)(n.h3,{id:"autres-branches",children:"Autres branches"}),"\n",(0,t.jsx)(n.p,{children:"Nous avons opt\xe9 pour la convention suivante concernant le nom des branches :"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"/"})}),"\n",(0,t.jsx)(n.p,{children:"Les types de ticket possibles sont les suivants :"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Pr\xe9fixe"}),(0,t.jsx)(n.th,{children:"Type de ticket"}),(0,t.jsx)(n.th,{children:"D\xe9finition"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"feat"})}),(0,t.jsx)(n.td,{children:"Fonctionnalit\xe9"}),(0,t.jsx)(n.td,{children:"Une nouvelle fonctionnalit\xe9 m\xe9tier ajout\xe9e \xe0 l'application"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"evol"})}),(0,t.jsx)(n.td,{children:"Evolution"}),(0,t.jsx)(n.td,{children:"Une \xe9volution d'une fonctionnalit\xe9 existante m\xe9tier"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"fix"})}),(0,t.jsx)(n.td,{children:"Correction"}),(0,t.jsx)(n.td,{children:"Correction d'un bug identifi\xe9"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"tech"})}),(0,t.jsx)(n.td,{children:"Technique"}),(0,t.jsx)(n.td,{children:"Une nouvelle fonctionnalit\xe9 technique pour am\xe9liorer l'application"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"refacto"})}),(0,t.jsx)(n.td,{children:"Technique"}),(0,t.jsx)(n.td,{children:"Une refonte technique pour am\xe9liorer l'application"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"doc"})}),(0,t.jsx)(n.td,{children:"Documentation"}),(0,t.jsx)(n.td,{children:"Ajouter ou modifier de la documentation"})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"commits-de-work-in-progress",children:'Commits de "Work In Progress"'}),"\n",(0,t.jsxs)(n.p,{children:['Afin de pr\xe9server un arbre des commits propres, il sera n\xe9cessaire de supprimer les commits dits "wip" \xe0 l\'aide la\nfonction ',(0,t.jsx)(n.code,{children:"rebase"})," propos\xe9e par Git."]}),"\n",(0,t.jsx)(n.p,{children:"Exemple qui permet de r\xe9ecrire l'arbre des 4 derniers commits :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ git rebase -i head~4\n"})}),"\n",(0,t.jsx)(n.p,{children:'Si votre dernier commit est un "wip" que vous avez remis au propre, vous pouvez simplement l\'amend comme ci-dessous :'}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ git commit --amend\n"})}),"\n",(0,t.jsxs)(n.p,{children:["\u26a0\ufe0f Nous ne squasherons pas nos commits lors du merge d'une branche dans la branche ",(0,t.jsx)(n.code,{children:"main"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"strat\xe9gie-de-merge",children:"Strat\xe9gie de merge"}),"\n",(0,t.jsx)(n.h3,{id:"code-review",children:"Code Review"}),"\n",(0,t.jsxs)(n.p,{children:['Nous allons nous baser sur la convention "',(0,t.jsx)(n.a,{href:"https://www.conventionalcommits.org/en/v1.0.0/",children:"Conventional Comments"}),'".']}),"\n",(0,t.jsx)(n.p,{children:"Chaque Pull Request (PR) devra \xeatre approuv\xe9e a minima par une personne n'ayant pas travaill\xe9 sur le ticket en rapport\navec la PR."}),"\n",(0,t.jsx)(n.h3,{id:"pull-request-interm\xe9diaire-sur-de-gros-tickets",children:"Pull request interm\xe9diaire sur de gros tickets"}),"\n",(0,t.jsx)(n.p,{children:"S'organiser par d\xe9p\xf4t/bin\xf4me."})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},2402:(e,n,i)=>{i.d(n,{A:()=>s});const s=i.p+"assets/images/1j1s-git-convention-76cb9c0796433effb443216e972b6527.png"},8453:(e,n,i)=>{i.d(n,{R:()=>o,x:()=>d});var s=i(6540);const t={},r=s.createContext(t);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b0ce070.411b9d09.js b/assets/js/0b0ce070.411b9d09.js deleted file mode 100644 index 64c2b1d3..00000000 --- a/assets/js/0b0ce070.411b9d09.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[256],{3144:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>o,default:()=>a,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=t(4848),s=t(8453);const r={sidebar_label:"Comment mettre en Production ?",sidebar_position:1e3},o="Comment mettre en production ?",l={id:"tuto/tutoMeP",title:"Comment mettre en production ?",description:"12 Juillet 2024 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/tuto/tutoMeP.md",sourceDirName:"tuto",slug:"/tuto/tutoMeP",permalink:"/1j1s-etl/docs/tuto/tutoMeP",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/tutoMeP.md",tags:[],version:"current",sidebarPosition:1e3,frontMatter:{sidebar_label:"Comment mettre en Production ?",sidebar_position:1e3},sidebar:"tutorialSidebar",previous:{title:"Que faire si l'indexation des donn\xe9es reste bloqu\xe9e \xe0 10000 donn\xe9es ?",permalink:"/1j1s-etl/docs/tuto/copie-donnee-en-local"}},u={},c=[{value:"Fonctionnement",id:"fonctionnement",level:2},{value:"Mise en oeuvre via Github",id:"mise-en-oeuvre-via-github",level:2}];function d(e){const n={admonition:"admonition",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"comment-mettre-en-production-",children:"Comment mettre en production ?"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"12 Juillet 2024 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,i.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,i.jsx)(n.p,{children:"Terraform est un outil d'Infrastructure as Code (IaC) d\xe9velopp\xe9 par HashiCorp qui permet de d\xe9finir, provisionner et g\xe9rer des infrastructures de mani\xe8re d\xe9clarative. Associ\xe9 aux github actions, il nous permet de pousser automatiquement du code en Production."})}),"\n",(0,i.jsx)(n.h2,{id:"fonctionnement",children:"Fonctionnement"}),"\n",(0,i.jsx)(n.p,{children:"En d\xe9finissant l'infrastructure comme du code, il permet une gestion plus efficace, tra\xe7able et reproductible des environnements de production, tout en s'int\xe9grant parfaitement dans les pipelines CI/CD pour un d\xe9ploiement continu et fiable."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Tuto Mise En Production",src:t(3516).A+"",width:"441",height:"803"})}),"\n",(0,i.jsx)(n.p,{children:"Les avantages sont multiples :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Tra\xe7abilit\xe9"}),"\xa0: Chaque modification de l'infrastructure est versionn\xe9e et tra\xe7able via des syst\xe8mes de gestion de code source comme Git."]}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Reproductibilit\xe9"}),"\xa0: Les m\xeames configurations peuvent \xeatre utilis\xe9es pour d\xe9ployer des environnements identiques, facilitant les tests et la production."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Multi-cloud"}),"\xa0: Terraform supporte plusieurs fournisseurs de cloud (AWS, Azure, GCP, etc.), permettant une gestion coh\xe9rente des infrastructures sur diff\xe9rentes plateformes."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"D\xe9claratif"}),"\xa0: La nature d\xe9clarative de Terraform simplifie la gestion des infrastructures complexes en se concentrant sur l'\xe9tat final souhait\xe9 plut\xf4t que sur les \xe9tapes n\xe9cessaires pour y parvenir."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"mise-en-oeuvre-via-github",children:"Mise en oeuvre via Github"}),"\n",(0,i.jsx)(n.p,{children:"Les actions ci-dessous sont \xe0 r\xe9aliser pour chaque projet pr\xe9sent sur Github :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"1j1s-front"}),"\n",(0,i.jsx)(n.li,{children:"1j1s-etl"}),"\n",(0,i.jsx)(n.li,{children:"1j1s-main-cms"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Les diff\xe9rentes actions \xe0 r\xe9aliser pour le ",(0,i.jsx)("code",{children:"1j1s-etl"})," :"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"S\xe9lectionner le projet \xe0 publier"}),"\n",(0,i.jsx)(n.li,{children:'S\xe9lectionner "Actions"'}),"\n",(0,i.jsx)(n.li,{children:'S\xe9lectionner "Mise en production"'}),"\n",(0,i.jsx)(n.li,{children:'S\xe9lectionner "Run workflow"'}),"\n",(0,i.jsx)(n.li,{children:'Valider le lancement de la mise en production via le CTA "Run workflow"'}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Tuto Mise En Production via GitHub",src:t(5998).A+"",width:"1647",height:"457"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:'Envoyer un message sur le MM "MEP" indiquant qu\'une mise en production est en cours'}),"\n",(0,i.jsx)(n.li,{children:"S'assurer qu'aucune erreur n'est remont\xe9e"}),"\n",(0,i.jsx)(n.li,{children:'Mettre \xe0 jour le message sur le MM "MEP" afin d\'indiquer que la mise en production est termin\xe9e'}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},5998:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/1j1s-MiseEnProduction-github-6f60e31e0aea873250fb95d5d2b8f7d4.png"},3516:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/1j1s-MiseEnProduction-2b3215c8142cece0a424566e38bb0ff7.png"},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>l});var i=t(6540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b0ce070.e791a3e0.js b/assets/js/0b0ce070.e791a3e0.js new file mode 100644 index 00000000..8d2eec51 --- /dev/null +++ b/assets/js/0b0ce070.e791a3e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[256],{2063:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>l,default:()=>a,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"tuto/tutoMeP","title":"Comment mettre en production ?","description":"12 Juillet 2024 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/tuto/tutoMeP.md","sourceDirName":"tuto","slug":"/tuto/tutoMeP","permalink":"/1j1s-etl/docs/tuto/tutoMeP","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/tutoMeP.md","tags":[],"version":"current","sidebarPosition":1000,"frontMatter":{"sidebar_label":"Comment mettre en Production ?","sidebar_position":1000},"sidebar":"tutorialSidebar","previous":{"title":"Que faire si l\'indexation des donn\xe9es reste bloqu\xe9e \xe0 10000 donn\xe9es ?","permalink":"/1j1s-etl/docs/tuto/copie-donnee-en-local"}}');var s=t(4848),r=t(8453);const o={sidebar_label:"Comment mettre en Production ?",sidebar_position:1e3},l="Comment mettre en production ?",u={},c=[{value:"Fonctionnement",id:"fonctionnement",level:2},{value:"Mise en oeuvre via Github",id:"mise-en-oeuvre-via-github",level:2}];function d(e){const n={admonition:"admonition",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"comment-mettre-en-production-",children:"Comment mettre en production ?"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"12 Juillet 2024 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,s.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,s.jsx)(n.p,{children:"Terraform est un outil d'Infrastructure as Code (IaC) d\xe9velopp\xe9 par HashiCorp qui permet de d\xe9finir, provisionner et g\xe9rer des infrastructures de mani\xe8re d\xe9clarative. Associ\xe9 aux github actions, il nous permet de pousser automatiquement du code en Production."})}),"\n",(0,s.jsx)(n.h2,{id:"fonctionnement",children:"Fonctionnement"}),"\n",(0,s.jsx)(n.p,{children:"En d\xe9finissant l'infrastructure comme du code, il permet une gestion plus efficace, tra\xe7able et reproductible des environnements de production, tout en s'int\xe9grant parfaitement dans les pipelines CI/CD pour un d\xe9ploiement continu et fiable."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Tuto Mise En Production",src:t(3516).A+"",width:"441",height:"803"})}),"\n",(0,s.jsx)(n.p,{children:"Les avantages sont multiples :"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Tra\xe7abilit\xe9"}),"\xa0: Chaque modification de l'infrastructure est versionn\xe9e et tra\xe7able via des syst\xe8mes de gestion de code source comme Git."]}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Reproductibilit\xe9"}),"\xa0: Les m\xeames configurations peuvent \xeatre utilis\xe9es pour d\xe9ployer des environnements identiques, facilitant les tests et la production."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Multi-cloud"}),"\xa0: Terraform supporte plusieurs fournisseurs de cloud (AWS, Azure, GCP, etc.), permettant une gestion coh\xe9rente des infrastructures sur diff\xe9rentes plateformes."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"D\xe9claratif"}),"\xa0: La nature d\xe9clarative de Terraform simplifie la gestion des infrastructures complexes en se concentrant sur l'\xe9tat final souhait\xe9 plut\xf4t que sur les \xe9tapes n\xe9cessaires pour y parvenir."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"mise-en-oeuvre-via-github",children:"Mise en oeuvre via Github"}),"\n",(0,s.jsx)(n.p,{children:"Les actions ci-dessous sont \xe0 r\xe9aliser pour chaque projet pr\xe9sent sur Github :"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"1j1s-front"}),"\n",(0,s.jsx)(n.li,{children:"1j1s-etl"}),"\n",(0,s.jsx)(n.li,{children:"1j1s-main-cms"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Les diff\xe9rentes actions \xe0 r\xe9aliser pour le ",(0,s.jsx)("code",{children:"1j1s-etl"})," :"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"S\xe9lectionner le projet \xe0 publier"}),"\n",(0,s.jsx)(n.li,{children:'S\xe9lectionner "Actions"'}),"\n",(0,s.jsx)(n.li,{children:'S\xe9lectionner "Mise en production"'}),"\n",(0,s.jsx)(n.li,{children:'S\xe9lectionner "Run workflow"'}),"\n",(0,s.jsx)(n.li,{children:'Valider le lancement de la mise en production via le CTA "Run workflow"'}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Tuto Mise En Production via GitHub",src:t(5998).A+"",width:"1647",height:"457"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:'Envoyer un message sur le MM "MEP" indiquant qu\'une mise en production est en cours'}),"\n",(0,s.jsx)(n.li,{children:"S'assurer qu'aucune erreur n'est remont\xe9e"}),"\n",(0,s.jsx)(n.li,{children:'Mettre \xe0 jour le message sur le MM "MEP" afin d\'indiquer que la mise en production est termin\xe9e'}),"\n"]})]})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},5998:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/1j1s-MiseEnProduction-github-6f60e31e0aea873250fb95d5d2b8f7d4.png"},3516:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/1j1s-MiseEnProduction-2b3215c8142cece0a424566e38bb0ff7.png"},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>l});var i=t(6540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b6d1cf3.322d9cf7.js b/assets/js/0b6d1cf3.322d9cf7.js new file mode 100644 index 00000000..ab02b320 --- /dev/null +++ b/assets/js/0b6d1cf3.322d9cf7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[538],{434:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>o,contentTitle:()=>u,default:()=>d,frontMatter:()=>t,metadata:()=>n,toc:()=>a});const n=JSON.parse('{"id":"tuto/le_flux_ne_met_plus_a_jour","title":"Lorsque le flux ne se mets plus \xe0 jour","description":"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/tuto/le_flux_ne_met_plus_a_jour.md","sourceDirName":"tuto","slug":"/tuto/le_flux_ne_met_plus_a_jour","permalink":"/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/le_flux_ne_met_plus_a_jour.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_label":"Que faire Lorsque le flux ne se mets plus \xe0 jour ?","sidebar_position":5},"sidebar":"tutorialSidebar","previous":{"title":"Comment cr\xe9er un nouveau bucket sur Minio","permalink":"/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio"},"next":{"title":"Les Scheduled tasks, comment \xe7a marche ?","permalink":"/1j1s-etl/docs/tuto/scheduled-tasks"}}');var l=s(4848),i=s(8453);const t={sidebar_label:"Que faire Lorsque le flux ne se mets plus \xe0 jour ?",sidebar_position:5},u="Lorsque le flux ne se mets plus \xe0 jour",o={},a=[{value:"Analyse de l\u2019erreur",id:"analyse-de-lerreur",level:2},{value:"Origine possible de l\u2019erreur",id:"origine-possible-de-lerreur",level:3},{value:"Que faire",id:"que-faire",level:2}];function c(e){const r={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(r.header,{children:(0,l.jsx)(r.h1,{id:"lorsque-le-flux-ne-se-mets-plus-\xe0-jour",children:"Lorsque le flux ne se mets plus \xe0 jour"})}),"\n",(0,l.jsx)(r.p,{children:(0,l.jsx)(r.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,l.jsx)(r.admonition,{title:"Contexte",type:"info",children:(0,l.jsx)(r.p,{children:"Le flux ne se met plus \xe0 jour sur Strapi ou plusieurs offres sont toujours disponibles pour le flux mais ces derni\xe8res sont peut \xeatre obsol\xe8tes."})}),"\n",(0,l.jsx)(r.h2,{id:"analyse-de-lerreur",children:"Analyse de l\u2019erreur"}),"\n",(0,l.jsx)(r.p,{children:"V\xe9rifier si les t\xe2ches crons fonctionnent :"}),"\n",(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:"Sur les buckets de Minio les fichiers latest ne sont plus \xe0 la date du jour"}),"\n",(0,l.jsx)(r.li,{children:"Sur les buckets de Minio, le r\xe9pertoire history ou les fichiers historiques pr\xe9sents dans ce r\xe9pertoire ne sont plus \xe0 la date du jour ou sont supprim\xe9s. (NB : un fichier vide fait 2b)"}),"\n"]}),"\n",(0,l.jsx)(r.h3,{id:"origine-possible-de-lerreur",children:"Origine possible de l\u2019erreur"}),"\n",(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:"La taille du flux est devenue trop grande pour le container"}),"\n",(0,l.jsx)(r.li,{children:"Une erreur appara\xeet dans un des cron"}),"\n"]}),"\n",(0,l.jsx)(r.h2,{id:"que-faire",children:"Que faire"}),"\n",(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:"Dans un premier temps, trouver quel cron ne parvient plus \xe0 assurer les mises \xe0 jour du flux."}),"\n",(0,l.jsxs)(r.li,{children:["Dans un second temps, rep\xe9rer l\u2019origine de l\u2019erreur.","\n",(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:"Si c\u2019est une erreur, analyser et corriger le bogue."}),"\n",(0,l.jsxs)(r.li,{children:["Si c\u2019est la taille du flux qui pose probl\xe8me, augmenter la taille du container dans le fichier cron.json. (voir les valeurs de m\xe9moire associ\xe9es au pricing sur ",(0,l.jsx)(r.a,{href:"https://scalingo.com/fr/pricing",children:"https://scalingo.com/fr/pricing"}),")","\n",(0,l.jsxs)(r.ul,{children:["\n",(0,l.jsx)(r.li,{children:"S = 250 mo"}),"\n",(0,l.jsx)(r.li,{children:"M = 512 mo"}),"\n",(0,l.jsx)(r.li,{children:"L = 1 Go"}),"\n",(0,l.jsx)(r.li,{children:"XL = 2 Go"}),"\n",(0,l.jsx)(r.li,{children:"2XL = 4 Go"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:r}={...(0,i.R)(),...e.components};return r?(0,l.jsx)(r,{...e,children:(0,l.jsx)(c,{...e})}):c(e)}},8453:(e,r,s)=>{s.d(r,{R:()=>t,x:()=>u});var n=s(6540);const l={},i=n.createContext(l);function t(e){const r=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function u(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),n.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0b6d1cf3.e62c6913.js b/assets/js/0b6d1cf3.e62c6913.js deleted file mode 100644 index 76e54043..00000000 --- a/assets/js/0b6d1cf3.e62c6913.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[538],{9468:(e,r,s)=>{s.r(r),s.d(r,{assets:()=>o,contentTitle:()=>t,default:()=>a,frontMatter:()=>i,metadata:()=>u,toc:()=>c});var n=s(4848),l=s(8453);const i={sidebar_label:"Que faire Lorsque le flux ne se mets plus \xe0 jour ?",sidebar_position:5},t="Lorsque le flux ne se mets plus \xe0 jour",u={id:"tuto/le_flux_ne_met_plus_a_jour",title:"Lorsque le flux ne se mets plus \xe0 jour",description:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/tuto/le_flux_ne_met_plus_a_jour.md",sourceDirName:"tuto",slug:"/tuto/le_flux_ne_met_plus_a_jour",permalink:"/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/le_flux_ne_met_plus_a_jour.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_label:"Que faire Lorsque le flux ne se mets plus \xe0 jour ?",sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Comment cr\xe9er un nouveau bucket sur Minio",permalink:"/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio"},next:{title:"Les Scheduled tasks, comment \xe7a marche ?",permalink:"/1j1s-etl/docs/tuto/scheduled-tasks"}},o={},c=[{value:"Analyse de l\u2019erreur",id:"analyse-de-lerreur",level:2},{value:"Origine possible de l\u2019erreur",id:"origine-possible-de-lerreur",level:3},{value:"Que faire",id:"que-faire",level:2}];function d(e){const r={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,l.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(r.header,{children:(0,n.jsx)(r.h1,{id:"lorsque-le-flux-ne-se-mets-plus-\xe0-jour",children:"Lorsque le flux ne se mets plus \xe0 jour"})}),"\n",(0,n.jsx)(r.p,{children:(0,n.jsx)(r.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,n.jsx)(r.admonition,{title:"Contexte",type:"info",children:(0,n.jsx)(r.p,{children:"Le flux ne se met plus \xe0 jour sur Strapi ou plusieurs offres sont toujours disponibles pour le flux mais ces derni\xe8res sont peut \xeatre obsol\xe8tes."})}),"\n",(0,n.jsx)(r.h2,{id:"analyse-de-lerreur",children:"Analyse de l\u2019erreur"}),"\n",(0,n.jsx)(r.p,{children:"V\xe9rifier si les t\xe2ches crons fonctionnent :"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Sur les buckets de Minio les fichiers latest ne sont plus \xe0 la date du jour"}),"\n",(0,n.jsx)(r.li,{children:"Sur les buckets de Minio, le r\xe9pertoire history ou les fichiers historiques pr\xe9sents dans ce r\xe9pertoire ne sont plus \xe0 la date du jour ou sont supprim\xe9s. (NB : un fichier vide fait 2b)"}),"\n"]}),"\n",(0,n.jsx)(r.h3,{id:"origine-possible-de-lerreur",children:"Origine possible de l\u2019erreur"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"La taille du flux est devenue trop grande pour le container"}),"\n",(0,n.jsx)(r.li,{children:"Une erreur appara\xeet dans un des cron"}),"\n"]}),"\n",(0,n.jsx)(r.h2,{id:"que-faire",children:"Que faire"}),"\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Dans un premier temps, trouver quel cron ne parvient plus \xe0 assurer les mises \xe0 jour du flux."}),"\n",(0,n.jsxs)(r.li,{children:["Dans un second temps, rep\xe9rer l\u2019origine de l\u2019erreur.","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"Si c\u2019est une erreur, analyser et corriger le bogue."}),"\n",(0,n.jsxs)(r.li,{children:["Si c\u2019est la taille du flux qui pose probl\xe8me, augmenter la taille du container dans le fichier cron.json. (voir les valeurs de m\xe9moire associ\xe9es au pricing sur ",(0,n.jsx)(r.a,{href:"https://scalingo.com/fr/pricing",children:"https://scalingo.com/fr/pricing"}),")","\n",(0,n.jsxs)(r.ul,{children:["\n",(0,n.jsx)(r.li,{children:"S = 250 mo"}),"\n",(0,n.jsx)(r.li,{children:"M = 512 mo"}),"\n",(0,n.jsx)(r.li,{children:"L = 1 Go"}),"\n",(0,n.jsx)(r.li,{children:"XL = 2 Go"}),"\n",(0,n.jsx)(r.li,{children:"2XL = 4 Go"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]})]})}function a(e={}){const{wrapper:r}={...(0,l.R)(),...e.components};return r?(0,n.jsx)(r,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},8453:(e,r,s)=>{s.d(r,{R:()=>t,x:()=>u});var n=s(6540);const l={},i=n.createContext(l);function t(e){const r=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function u(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),n.createElement(i.Provider,{value:r},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/24226b5e.862f6c0c.js b/assets/js/24226b5e.862f6c0c.js new file mode 100644 index 00000000..55f3e5b4 --- /dev/null +++ b/assets/js/24226b5e.862f6c0c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[675],{181:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"onboarding/prerequis","title":"Pr\xe9requis d\'installation","description":"20 Avril 2023","source":"@site/docs/onboarding/prerequis.md","sourceDirName":"onboarding","slug":"/onboarding/prerequis","permalink":"/1j1s-etl/docs/onboarding/prerequis","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/onboarding/prerequis.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_label":"Pr\xe9requis d\'installation","sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Checklist d\'onboarding","permalink":"/1j1s-etl/docs/onboarding/checklist"},"next":{"title":"Lancer l\'ETL","permalink":"/1j1s-etl/docs/onboarding/installation"}}');var i=t(4848),r=t(8453);const o={sidebar_label:"Pr\xe9requis d'installation",sidebar_position:1},l="Pr\xe9requis d'installation",a={},d=[{value:"Introduction",id:"introduction",level:2},{value:"Machine",id:"machine",level:2},{value:"Syst\xe8me",id:"syst\xe8me",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"pr\xe9requis-dinstallation",children:"Pr\xe9requis d'installation"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"20 Avril 2023"})}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(n.p,{children:"Ce document relate les diff\xe9rents pr\xe9requis permettant l'installation du projet."}),"\n",(0,i.jsx)(n.h2,{id:"machine",children:"Machine"}),"\n",(0,i.jsxs)(n.p,{children:["Le projet a \xe9t\xe9 d\xe9velopp\xe9 pour fonctionner avec ",(0,i.jsx)(n.code,{children:"Node.JS"})," avec l'utilitaire ",(0,i.jsx)(n.code,{children:"npm"})," pour lancer des commandes et g\xe9rer les d\xe9pendances."]}),"\n",(0,i.jsx)(n.p,{children:"Il faut donc que ces deux outils soient install\xe9s dans les versions suivantes :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"engines": {\n "node": "18.14.0",\n "npm": "9.3.1"\n}\n'})}),"\n",(0,i.jsx)(n.h2,{id:"syst\xe8me",children:"Syst\xe8me"}),"\n",(0,i.jsxs)(n.p,{children:["Notre projet a \xe9t\xe9 d\xe9velopp\xe9 et test\xe9 sur les produits cloud ",(0,i.jsx)(n.code,{children:"Scalingo"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Pour lancer les t\xe2ches automatiquement nous avons ajout\xe9 le fichier ",(0,i.jsx)(n.code,{children:"cron.json"})," \xe0 la racine du projet, conform\xe9ment \xe0 la ",(0,i.jsx)(n.a,{href:"https://doc.scalingo.com/platform/app/task-scheduling/scalingo-scheduler",children:"documentation de Scalingo"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>l});var s=t(6540);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/24226b5e.e05e6593.js b/assets/js/24226b5e.e05e6593.js deleted file mode 100644 index d49166d6..00000000 --- a/assets/js/24226b5e.e05e6593.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[675],{4833:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var s=t(4848),i=t(8453);const r={sidebar_label:"Pr\xe9requis d'installation",sidebar_position:1},o="Pr\xe9requis d'installation",l={id:"onboarding/prerequis",title:"Pr\xe9requis d'installation",description:"20 Avril 2023",source:"@site/docs/onboarding/prerequis.md",sourceDirName:"onboarding",slug:"/onboarding/prerequis",permalink:"/1j1s-etl/docs/onboarding/prerequis",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/onboarding/prerequis.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_label:"Pr\xe9requis d'installation",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Checklist d'onboarding",permalink:"/1j1s-etl/docs/onboarding/checklist"},next:{title:"Lancer l'ETL",permalink:"/1j1s-etl/docs/onboarding/installation"}},d={},a=[{value:"Introduction",id:"introduction",level:2},{value:"Machine",id:"machine",level:2},{value:"Syst\xe8me",id:"syst\xe8me",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"pr\xe9requis-dinstallation",children:"Pr\xe9requis d'installation"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"20 Avril 2023"})}),"\n",(0,s.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,s.jsx)(n.p,{children:"Ce document relate les diff\xe9rents pr\xe9requis permettant l'installation du projet."}),"\n",(0,s.jsx)(n.h2,{id:"machine",children:"Machine"}),"\n",(0,s.jsxs)(n.p,{children:["Le projet a \xe9t\xe9 d\xe9velopp\xe9 pour fonctionner avec ",(0,s.jsx)(n.code,{children:"Node.JS"})," avec l'utilitaire ",(0,s.jsx)(n.code,{children:"npm"})," pour lancer des commandes et g\xe9rer les d\xe9pendances."]}),"\n",(0,s.jsx)(n.p,{children:"Il faut donc que ces deux outils soient install\xe9s dans les versions suivantes :"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'"engines": {\n "node": "18.14.0",\n "npm": "9.3.1"\n}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"syst\xe8me",children:"Syst\xe8me"}),"\n",(0,s.jsxs)(n.p,{children:["Notre projet a \xe9t\xe9 d\xe9velopp\xe9 et test\xe9 sur les produits cloud ",(0,s.jsx)(n.code,{children:"Scalingo"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Pour lancer les t\xe2ches automatiquement nous avons ajout\xe9 le fichier ",(0,s.jsx)(n.code,{children:"cron.json"})," \xe0 la racine du projet, conform\xe9ment \xe0 la ",(0,s.jsx)(n.a,{href:"https://doc.scalingo.com/platform/app/task-scheduling/scalingo-scheduler",children:"documentation de Scalingo"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>l});var s=t(6540);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2648826c.bdcbc8d8.js b/assets/js/2648826c.bdcbc8d8.js new file mode 100644 index 00000000..463bf3ff --- /dev/null +++ b/assets/js/2648826c.bdcbc8d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[128],{9997:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>l,metadata:()=>t,toc:()=>o});const t=JSON.parse('{"id":"adr/2022-08-01.enregistrement-des-fichiers","title":"Enregistrement des fichiers","description":"1er ao\xfbt 2022","source":"@site/docs/adr/2022-08-01.enregistrement-des-fichiers.md","sourceDirName":"adr","slug":"/adr/2022-08-01.enregistrement-des-fichiers","permalink":"/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2022-08-01.enregistrement-des-fichiers.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Historisation des flux extraits","permalink":"/1j1s-etl/docs/adr/2022-07-08.historisation-des-flux"},"next":{"title":"Utilisation des Scheduled Tasks","permalink":"/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks"}}');var n=i(4848),r=i(8453);const l={},d="Enregistrement des fichiers",c={},o=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function a(e){const s={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"enregistrement-des-fichiers",children:"Enregistrement des fichiers"})}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.em,{children:"1er ao\xfbt 2022"})}),"\n",(0,n.jsx)(s.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,n.jsx)(s.p,{children:"Simon B., S\xe9bastien F."}),"\n",(0,n.jsx)(s.h2,{id:"statut",children:"Statut"}),"\n",(0,n.jsx)(s.p,{children:"Accept\xe9"}),"\n",(0,n.jsx)(s.h2,{id:"contexte",children:"Contexte"}),"\n",(0,n.jsx)(s.p,{children:"Lors de l'\xe9criture des fichiers (historisation + derni\xe8re version), nous avons le choix entre \xe9crire s\xe9quentiellement\nles deux fichiers OU parall\xe9liser les \xe9critures."}),"\n",(0,n.jsx)(s.p,{children:"Nous avons r\xe9alis\xe9 de brefs tests de performances sur des fichiers d'une taille avoisinant les 50 MiB avec les r\xe9sultats\nsuivants :"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Strat\xe9gie d'\xe9criture"}),(0,n.jsx)(s.th,{children:"Temps d'ex\xe9cution en secondes"}),(0,n.jsx)(s.th,{children:"Contexte"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"S\xe9quentielle"}),(0,n.jsx)(s.td,{children:"11,892s"}),(0,n.jsx)(s.td,{children:"Mac SEFR, MinIO qualification"})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:"Parall\xe9lisation"}),(0,n.jsx)(s.td,{children:"8,768s"}),(0,n.jsx)(s.td,{children:"Mac SEFR, MinIO qualification"})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,n.jsx)(s.p,{children:"\xc9criture s\xe9quentielle car la diff\xe9rence n'est pas assez significative."}),"\n",(0,n.jsx)(s.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,n.jsx)(s.p,{children:"Positif :"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Meilleure gestion d'erreur possible"}),"\n",(0,n.jsx)(s.li,{children:"Pas de tentative d'\xe9criture du dernier fichier si l'historisation a \xe9chou\xe9"}),"\n",(0,n.jsxs)(s.li,{children:["Meilleure lisibilit\xe9 du code (pas de ",(0,n.jsx)(s.code,{children:"Promise.all"}),")"]}),"\n"]}),"\n",(0,n.jsx)(s.p,{children:"N\xe9gatif :"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:"Temps d'ex\xe9cution plus important"}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"autres-pistes-explor\xe9es",children:"Autres pistes explor\xe9es"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-typescript",children:"return Promise.all([\n this.sauvegarderFichierAHistoriser(contenuASauvegarder, configurationFlux),\n this.sauvegarderCloneDuDernierFichier(contenuASauvegarder, configurationFlux),\n])\n"})})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},8453:(e,s,i)=>{i.d(s,{R:()=>l,x:()=>d});var t=i(6540);const n={},r=t.createContext(n);function l(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2648826c.c6c092c1.js b/assets/js/2648826c.c6c092c1.js deleted file mode 100644 index ffd4fd96..00000000 --- a/assets/js/2648826c.c6c092c1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[128],{9893:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>o});var t=i(4848),n=i(8453);const r={},d="Enregistrement des fichiers",l={id:"adr/2022-08-01.enregistrement-des-fichiers",title:"Enregistrement des fichiers",description:"1er ao\xfbt 2022",source:"@site/docs/adr/2022-08-01.enregistrement-des-fichiers.md",sourceDirName:"adr",slug:"/adr/2022-08-01.enregistrement-des-fichiers",permalink:"/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2022-08-01.enregistrement-des-fichiers.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Historisation des flux extraits",permalink:"/1j1s-etl/docs/adr/2022-07-08.historisation-des-flux"},next:{title:"Utilisation des Scheduled Tasks",permalink:"/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks"}},c={},o=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function a(e){const s={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"enregistrement-des-fichiers",children:"Enregistrement des fichiers"})}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.em,{children:"1er ao\xfbt 2022"})}),"\n",(0,t.jsx)(s.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,t.jsx)(s.p,{children:"Simon B., S\xe9bastien F."}),"\n",(0,t.jsx)(s.h2,{id:"statut",children:"Statut"}),"\n",(0,t.jsx)(s.p,{children:"Accept\xe9"}),"\n",(0,t.jsx)(s.h2,{id:"contexte",children:"Contexte"}),"\n",(0,t.jsx)(s.p,{children:"Lors de l'\xe9criture des fichiers (historisation + derni\xe8re version), nous avons le choix entre \xe9crire s\xe9quentiellement\nles deux fichiers OU parall\xe9liser les \xe9critures."}),"\n",(0,t.jsx)(s.p,{children:"Nous avons r\xe9alis\xe9 de brefs tests de performances sur des fichiers d'une taille avoisinant les 50 MiB avec les r\xe9sultats\nsuivants :"}),"\n",(0,t.jsxs)(s.table,{children:[(0,t.jsx)(s.thead,{children:(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.th,{children:"Strat\xe9gie d'\xe9criture"}),(0,t.jsx)(s.th,{children:"Temps d'ex\xe9cution en secondes"}),(0,t.jsx)(s.th,{children:"Contexte"})]})}),(0,t.jsxs)(s.tbody,{children:[(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"S\xe9quentielle"}),(0,t.jsx)(s.td,{children:"11,892s"}),(0,t.jsx)(s.td,{children:"Mac SEFR, MinIO qualification"})]}),(0,t.jsxs)(s.tr,{children:[(0,t.jsx)(s.td,{children:"Parall\xe9lisation"}),(0,t.jsx)(s.td,{children:"8,768s"}),(0,t.jsx)(s.td,{children:"Mac SEFR, MinIO qualification"})]})]})]}),"\n",(0,t.jsx)(s.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,t.jsx)(s.p,{children:"\xc9criture s\xe9quentielle car la diff\xe9rence n'est pas assez significative."}),"\n",(0,t.jsx)(s.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,t.jsx)(s.p,{children:"Positif :"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Meilleure gestion d'erreur possible"}),"\n",(0,t.jsx)(s.li,{children:"Pas de tentative d'\xe9criture du dernier fichier si l'historisation a \xe9chou\xe9"}),"\n",(0,t.jsxs)(s.li,{children:["Meilleure lisibilit\xe9 du code (pas de ",(0,t.jsx)(s.code,{children:"Promise.all"}),")"]}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"N\xe9gatif :"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Temps d'ex\xe9cution plus important"}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"autres-pistes-explor\xe9es",children:"Autres pistes explor\xe9es"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-typescript",children:"return Promise.all([\n this.sauvegarderFichierAHistoriser(contenuASauvegarder, configurationFlux),\n this.sauvegarderCloneDuDernierFichier(contenuASauvegarder, configurationFlux),\n])\n"})})]})}function u(e={}){const{wrapper:s}={...(0,n.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},8453:(e,s,i)=>{i.d(s,{R:()=>d,x:()=>l});var t=i(6540);const n={},r=t.createContext(n);function d(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2d792a0e.0cab0ae6.js b/assets/js/2d792a0e.0cab0ae6.js new file mode 100644 index 00000000..9a106eaa --- /dev/null +++ b/assets/js/2d792a0e.0cab0ae6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[571],{4127:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>u,frontMatter:()=>d,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"conventions/langages","title":"Standards d\'\xe9quipe li\xe9s au Code","description":"20 Avril 2023","source":"@site/docs/conventions/langages.md","sourceDirName":"conventions","slug":"/conventions/langages","permalink":"/1j1s-etl/docs/conventions/langages","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/conventions/langages.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_label":"Langages","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Git","permalink":"/1j1s-etl/docs/conventions/git"},"next":{"title":"\ud83c\udf31 Onboarding","permalink":"/1j1s-etl/docs/category/-onboarding"}}');var t=i(4848),o=i(8453);const d={sidebar_label:"Langages",sidebar_position:2},r="Standards d'\xe9quipe li\xe9s au Code",a={},l=[{value:"Choix du langage",id:"choix-du-langage",level:2},{value:"Principes g\xe9n\xe9raux",id:"principes-g\xe9n\xe9raux",level:2},{value:"Paradigme",id:"paradigme",level:3},{value:"Port\xe9e des m\xe9thodes et des attributs",id:"port\xe9e-des-m\xe9thodes-et-des-attributs",level:3},{value:"Fonctions pures",id:"fonctions-pures",level:3},{value:"Style de code",id:"style-de-code",level:2},{value:"Utilisation des ternaires",id:"utilisation-des-ternaires",level:3},{value:"if \xe0 une seule instruction",id:"if-\xe0-une-seule-instruction",level:3},{value:"async / await vs .then().catch()",id:"async--await-vs-thencatch",level:3},{value:"Interface vs Type",id:"interface-vs-type",level:3},{value:"D\xe9limitation d'une instruction",id:"d\xe9limitation-dune-instruction",level:3},{value:"D\xe9claration des variables",id:"d\xe9claration-des-variables",level:3},{value:"Guillemets",id:"guillemets",level:3},{value:"Espace vs Tabulation pour l'indentation",id:"espace-vs-tabulation-pour-lindentation",level:3},{value:"Convention de code",id:"convention-de-code",level:3},{value:"Nommage des fichiers",id:"nommage-des-fichiers",level:3},{value:"Typage dynamique",id:"typage-dynamique",level:3},{value:"Ts-ignore",id:"ts-ignore",level:3},{value:"Commentaires",id:"commentaires",level:3},{value:"Complexit\xe9s",id:"complexit\xe9s",level:2},{value:"Cyclomatique",id:"cyclomatique",level:3},{value:"Cognitive",id:"cognitive",level:3}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"standards-d\xe9quipe-li\xe9s-au-code",children:"Standards d'\xe9quipe li\xe9s au Code"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"20 Avril 2023"})}),"\n",(0,t.jsx)(n.h2,{id:"choix-du-langage",children:"Choix du langage"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons choisi de partir sur du ",(0,t.jsx)(n.code,{children:"TypeScript"})," sur une plateforme ",(0,t.jsx)(n.code,{children:"NodeJS"}),". Ce choix s'explique par\nla comp\xe9tence de l'\xe9quipe sur la technologie et le fait que nous n'avons pas d'enjeux de performances\nparticuliers \xe0 date."]}),"\n",(0,t.jsx)(n.h2,{id:"principes-g\xe9n\xe9raux",children:"Principes g\xe9n\xe9raux"}),"\n",(0,t.jsx)(n.h3,{id:"paradigme",children:"Paradigme"}),"\n",(0,t.jsx)(n.p,{children:"Nous avons choisi de d\xe9velopper l'application en programmation orient\xe9e objet afin d'augmenter la\nlisibilit\xe9 du code et d'en adopter ses principes."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"class MaClasse {\n public doSomething(): Promise {\n // do something ...\n }\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"port\xe9e-des-m\xe9thodes-et-des-attributs",children:"Port\xe9e des m\xe9thodes et des attributs"}),"\n",(0,t.jsx)(n.p,{children:"Nous avons d\xe9cid\xe9 que les port\xe9es des m\xe9thodes et des attributs seront [to be continued...]"}),"\n",(0,t.jsx)(n.h3,{id:"fonctions-pures",children:"Fonctions pures"}),"\n",(0,t.jsx)(n.p,{children:"Dans la m\xeame veine, nous avons d\xe9cid\xe9 que nos fonctions devaient \xeatre des fonctions pures. C'est-\xe0-dire qu'une fonction\nne doit pas modifier ses param\xe8tres d'entr\xe9es et doit \xeatre idempotente."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"class Calculette {\n public additionner(a: number, b: number): number {\n return a + b;\n }\n}\n"})}),"\n",(0,t.jsx)(n.h2,{id:"style-de-code",children:"Style de code"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons choisi d'utiliser ",(0,t.jsx)(n.a,{href:"https://eslint.org/",children:"ESLint"})," pour appliquer des r\xe8gles concernant notre style de code.\nVous trouverez ci-dessous une liste non-exhaustive de r\xe8gles \xe0 appliquer dans nos d\xe9p\xf4ts."]}),"\n",(0,t.jsx)(n.h3,{id:"utilisation-des-ternaires",children:"Utilisation des ternaires"}),"\n",(0,t.jsx)(n.p,{children:"Nous limitons l'utilisation des conditions ternaires lorsque la condition est tr\xe8s simple."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"isTrue(false)\n ? true\n : false;\n"})}),"\n",(0,t.jsx)(n.p,{children:"L'utilisation des niveaux suppl\xe9mentaires est proscrite."}),"\n",(0,t.jsxs)(n.h3,{id:"if-\xe0-une-seule-instruction",children:[(0,t.jsx)(n.code,{children:"if"})," \xe0 une seule instruction"]}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 qu'un ",(0,t.jsx)(n.code,{children:"if"})," suivi d'une seule instruction devait quand m\xeame \xeatre wrapp\xe9 dans des accolades."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"// Valide\nif (true) {\n return false;\n}\n\n// Invalide\nif (true) \n return false;\n"})}),"\n",(0,t.jsxs)(n.h3,{id:"async--await-vs-thencatch",children:[(0,t.jsx)(n.code,{children:"async / await"})," vs ",(0,t.jsx)(n.code,{children:".then().catch()"})]}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 d'utiliser la version d'ES2015 pour g\xe9rer nos ",(0,t.jsx)(n.code,{children:"Promise"})," afin d'am\xe9liorer la lisibilit\xe9 du code."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"function toto(): Promise {\n\treturn new Promise((resolve) => {\n\t\tresolve('toto');\n });\n}\n\n// Valide\nasync function modern(): Promise {\n\tconst tata = await toto();\n\treturn tata + \"tata\";\n}\n\n// Invalide\nasync function deprecated(): Promise {\n\tconst tata = toto()\n .then((value) => value)\n .catch((e) => {/* ... */})\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"interface-vs-type",children:"Interface vs Type"}),"\n",(0,t.jsx)(n.p,{children:"Nous avons choisi d'utiliser des interfaces pour d\xe9finir un contrat \xe0 impl\xe9menter et des types si nous devons d\xe9finir\ndes structures de donn\xe9es qui n'ont pas de comportement."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"// Valide\nexport type Personne = {\n\tnom: string;\n\tprenom: string;\n\tage: number;\n}\n\n// Invalide\nexport interface Personne {\n\tnom: string;\n\tprenom: string;\n\tage: number;\n}\n\n// Valide\nexport interface Contrat {\n doSomething(a: number, b: string): void;\n}\n\n// Invalide\nexport type Contrat = {\n\tdoSomething: (a: number, b: string) => void;\n}\n"})}),"\n",(0,t.jsx)(n.h3,{id:"d\xe9limitation-dune-instruction",children:"D\xe9limitation d'une instruction"}),"\n",(0,t.jsxs)(n.p,{children:["Chaque ligne d'instruction devra se terminer par un point-virgule ",(0,t.jsx)(n.code,{children:";"}),"."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"// Valide\nconst toto = 'toto';\n\n// Invalide\nconst toto = 'toto'\n"})}),"\n",(0,t.jsx)(n.h3,{id:"d\xe9claration-des-variables",children:"D\xe9claration des variables"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 de d\xe9clarer les variables avec des ",(0,t.jsx)(n.code,{children:"const"})," et ",(0,t.jsx)(n.code,{children:"let"}),".\nL'utilisation de ",(0,t.jsx)(n.code,{children:"var"})," est proscrite."]}),"\n",(0,t.jsx)(n.h3,{id:"guillemets",children:"Guillemets"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 d'utiliser des guillemets (",(0,t.jsx)(n.em,{children:"double quote"}),") et guillemets obliques (",(0,t.jsx)(n.em,{children:"backtick"}),") dans le code."]}),"\n",(0,t.jsx)(n.h3,{id:"espace-vs-tabulation-pour-lindentation",children:"Espace vs Tabulation pour l'indentation"}),"\n",(0,t.jsx)(n.p,{children:"Nous avons choisi d'utiliser le caract\xe8re tabulation plut\xf4t que les caract\xe8res d'espace pour notre indentation."}),"\n",(0,t.jsx)(n.h3,{id:"convention-de-code",children:"Convention de code"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 d'utiliser la convention Java dans le code car elle est tr\xe8s r\xe9pandue et que nous sommes align\xe9s avec\ncette convention (",(0,t.jsx)(n.a,{href:"https://www.oracle.com/technetwork/java/codeconventions-150003.pdf",children:"ici"}),"). De plus, elle est\ncompatible avec notre choix de linter."]}),"\n",(0,t.jsx)(n.h3,{id:"nommage-des-fichiers",children:"Nommage des fichiers"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 d'adopter la convention ",(0,t.jsx)(n.strong,{children:"kebab-case"})," pour nommer nos fichiers. De plus, nous avons d\xe9cid\xe9 d'ajouter\nun suffixe pour d\xe9finir la nature de ce qui se trouve \xe0 l'int\xe9rieur."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"Valide : minio-storage.client.ts\n\nInvalide : MinioStorageClient.ts\n"})}),"\n",(0,t.jsx)(n.h3,{id:"typage-dynamique",children:"Typage dynamique"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 de ne pas utiliser le type ",(0,t.jsx)(n.code,{children:"any"})," sauf en cas d'absolue n\xe9cessit\xe9."]}),"\n",(0,t.jsx)(n.h3,{id:"ts-ignore",children:"Ts-ignore"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 de ne pas utiliser l'annotation ",(0,t.jsx)(n.code,{children:"ts-ignore"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"commentaires",children:"Commentaires"}),"\n",(0,t.jsx)(n.p,{children:"Nous avons d\xe9cid\xe9 d'\xe9crire du code auto-portant et de n'utiliser les commentaires qu'en cas de n\xe9cessit\xe9 et se limitant \xe0 1 \xe0 2 lignes."}),"\n",(0,t.jsx)(n.h2,{id:"complexit\xe9s",children:"Complexit\xe9s"}),"\n",(0,t.jsx)(n.h3,{id:"cyclomatique",children:"Cyclomatique"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons fix\xe9 la limite maximale de complexit\xe9 cyclomatique \xe0 ",(0,t.jsx)(n.strong,{children:"10"})," afin de conserver des fonctions simples, am\xe9liorer la\nlisibilit\xe9 et la maintenance du code."]}),"\n",(0,t.jsx)(n.h3,{id:"cognitive",children:"Cognitive"}),"\n",(0,t.jsxs)(n.p,{children:["Nous avons fix\xe9 la limite maximale de complexit\xe9 cognitive \xe0 ",(0,t.jsx)(n.strong,{children:"2"})," afin de conserver des fonctions lisibles et de nous\nforcer \xe0 extraire la complexit\xe9 dans des sous-fonctions."]})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>r});var s=i(6540);const t={},o=s.createContext(t);function d(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2d792a0e.5180e340.js b/assets/js/2d792a0e.5180e340.js deleted file mode 100644 index 9ea1c9c9..00000000 --- a/assets/js/2d792a0e.5180e340.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[571],{9072:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var s=i(4848),t=i(8453);const o={sidebar_label:"Langages",sidebar_position:2},d="Standards d'\xe9quipe li\xe9s au Code",r={id:"conventions/langages",title:"Standards d'\xe9quipe li\xe9s au Code",description:"20 Avril 2023",source:"@site/docs/conventions/langages.md",sourceDirName:"conventions",slug:"/conventions/langages",permalink:"/1j1s-etl/docs/conventions/langages",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/conventions/langages.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_label:"Langages",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Git",permalink:"/1j1s-etl/docs/conventions/git"},next:{title:"\ud83c\udf31 Onboarding",permalink:"/1j1s-etl/docs/category/-onboarding"}},a={},l=[{value:"Choix du langage",id:"choix-du-langage",level:2},{value:"Principes g\xe9n\xe9raux",id:"principes-g\xe9n\xe9raux",level:2},{value:"Paradigme",id:"paradigme",level:3},{value:"Port\xe9e des m\xe9thodes et des attributs",id:"port\xe9e-des-m\xe9thodes-et-des-attributs",level:3},{value:"Fonctions pures",id:"fonctions-pures",level:3},{value:"Style de code",id:"style-de-code",level:2},{value:"Utilisation des ternaires",id:"utilisation-des-ternaires",level:3},{value:"if \xe0 une seule instruction",id:"if-\xe0-une-seule-instruction",level:3},{value:"async / await vs .then().catch()",id:"async--await-vs-thencatch",level:3},{value:"Interface vs Type",id:"interface-vs-type",level:3},{value:"D\xe9limitation d'une instruction",id:"d\xe9limitation-dune-instruction",level:3},{value:"D\xe9claration des variables",id:"d\xe9claration-des-variables",level:3},{value:"Guillemets",id:"guillemets",level:3},{value:"Espace vs Tabulation pour l'indentation",id:"espace-vs-tabulation-pour-lindentation",level:3},{value:"Convention de code",id:"convention-de-code",level:3},{value:"Nommage des fichiers",id:"nommage-des-fichiers",level:3},{value:"Typage dynamique",id:"typage-dynamique",level:3},{value:"Ts-ignore",id:"ts-ignore",level:3},{value:"Commentaires",id:"commentaires",level:3},{value:"Complexit\xe9s",id:"complexit\xe9s",level:2},{value:"Cyclomatique",id:"cyclomatique",level:3},{value:"Cognitive",id:"cognitive",level:3}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"standards-d\xe9quipe-li\xe9s-au-code",children:"Standards d'\xe9quipe li\xe9s au Code"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"20 Avril 2023"})}),"\n",(0,s.jsx)(n.h2,{id:"choix-du-langage",children:"Choix du langage"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons choisi de partir sur du ",(0,s.jsx)(n.code,{children:"TypeScript"})," sur une plateforme ",(0,s.jsx)(n.code,{children:"NodeJS"}),". Ce choix s'explique par\nla comp\xe9tence de l'\xe9quipe sur la technologie et le fait que nous n'avons pas d'enjeux de performances\nparticuliers \xe0 date."]}),"\n",(0,s.jsx)(n.h2,{id:"principes-g\xe9n\xe9raux",children:"Principes g\xe9n\xe9raux"}),"\n",(0,s.jsx)(n.h3,{id:"paradigme",children:"Paradigme"}),"\n",(0,s.jsx)(n.p,{children:"Nous avons choisi de d\xe9velopper l'application en programmation orient\xe9e objet afin d'augmenter la\nlisibilit\xe9 du code et d'en adopter ses principes."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typescript",children:"class MaClasse {\n public doSomething(): Promise {\n // do something ...\n }\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"port\xe9e-des-m\xe9thodes-et-des-attributs",children:"Port\xe9e des m\xe9thodes et des attributs"}),"\n",(0,s.jsx)(n.p,{children:"Nous avons d\xe9cid\xe9 que les port\xe9es des m\xe9thodes et des attributs seront [to be continued...]"}),"\n",(0,s.jsx)(n.h3,{id:"fonctions-pures",children:"Fonctions pures"}),"\n",(0,s.jsx)(n.p,{children:"Dans la m\xeame veine, nous avons d\xe9cid\xe9 que nos fonctions devaient \xeatre des fonctions pures. C'est-\xe0-dire qu'une fonction\nne doit pas modifier ses param\xe8tres d'entr\xe9es et doit \xeatre idempotente."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typescript",children:"class Calculette {\n public additionner(a: number, b: number): number {\n return a + b;\n }\n}\n"})}),"\n",(0,s.jsx)(n.h2,{id:"style-de-code",children:"Style de code"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons choisi d'utiliser ",(0,s.jsx)(n.a,{href:"https://eslint.org/",children:"ESLint"})," pour appliquer des r\xe8gles concernant notre style de code.\nVous trouverez ci-dessous une liste non-exhaustive de r\xe8gles \xe0 appliquer dans nos d\xe9p\xf4ts."]}),"\n",(0,s.jsx)(n.h3,{id:"utilisation-des-ternaires",children:"Utilisation des ternaires"}),"\n",(0,s.jsx)(n.p,{children:"Nous limitons l'utilisation des conditions ternaires lorsque la condition est tr\xe8s simple."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typescript",children:"isTrue(false)\n ? true\n : false;\n"})}),"\n",(0,s.jsx)(n.p,{children:"L'utilisation des niveaux suppl\xe9mentaires est proscrite."}),"\n",(0,s.jsxs)(n.h3,{id:"if-\xe0-une-seule-instruction",children:[(0,s.jsx)(n.code,{children:"if"})," \xe0 une seule instruction"]}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 qu'un ",(0,s.jsx)(n.code,{children:"if"})," suivi d'une seule instruction devait quand m\xeame \xeatre wrapp\xe9 dans des accolades."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typescript",children:"// Valide\nif (true) {\n return false;\n}\n\n// Invalide\nif (true) \n return false;\n"})}),"\n",(0,s.jsxs)(n.h3,{id:"async--await-vs-thencatch",children:[(0,s.jsx)(n.code,{children:"async / await"})," vs ",(0,s.jsx)(n.code,{children:".then().catch()"})]}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 d'utiliser la version d'ES2015 pour g\xe9rer nos ",(0,s.jsx)(n.code,{children:"Promise"})," afin d'am\xe9liorer la lisibilit\xe9 du code."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typescript",children:"function toto(): Promise {\n\treturn new Promise((resolve) => {\n\t\tresolve('toto');\n });\n}\n\n// Valide\nasync function modern(): Promise {\n\tconst tata = await toto();\n\treturn tata + \"tata\";\n}\n\n// Invalide\nasync function deprecated(): Promise {\n\tconst tata = toto()\n .then((value) => value)\n .catch((e) => {/* ... */})\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"interface-vs-type",children:"Interface vs Type"}),"\n",(0,s.jsx)(n.p,{children:"Nous avons choisi d'utiliser des interfaces pour d\xe9finir un contrat \xe0 impl\xe9menter et des types si nous devons d\xe9finir\ndes structures de donn\xe9es qui n'ont pas de comportement."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typescript",children:"// Valide\nexport type Personne = {\n\tnom: string;\n\tprenom: string;\n\tage: number;\n}\n\n// Invalide\nexport interface Personne {\n\tnom: string;\n\tprenom: string;\n\tage: number;\n}\n\n// Valide\nexport interface Contrat {\n doSomething(a: number, b: string): void;\n}\n\n// Invalide\nexport type Contrat = {\n\tdoSomething: (a: number, b: string) => void;\n}\n"})}),"\n",(0,s.jsx)(n.h3,{id:"d\xe9limitation-dune-instruction",children:"D\xe9limitation d'une instruction"}),"\n",(0,s.jsxs)(n.p,{children:["Chaque ligne d'instruction devra se terminer par un point-virgule ",(0,s.jsx)(n.code,{children:";"}),"."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-typescript",children:"// Valide\nconst toto = 'toto';\n\n// Invalide\nconst toto = 'toto'\n"})}),"\n",(0,s.jsx)(n.h3,{id:"d\xe9claration-des-variables",children:"D\xe9claration des variables"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 de d\xe9clarer les variables avec des ",(0,s.jsx)(n.code,{children:"const"})," et ",(0,s.jsx)(n.code,{children:"let"}),".\nL'utilisation de ",(0,s.jsx)(n.code,{children:"var"})," est proscrite."]}),"\n",(0,s.jsx)(n.h3,{id:"guillemets",children:"Guillemets"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 d'utiliser des guillemets (",(0,s.jsx)(n.em,{children:"double quote"}),") et guillemets obliques (",(0,s.jsx)(n.em,{children:"backtick"}),") dans le code."]}),"\n",(0,s.jsx)(n.h3,{id:"espace-vs-tabulation-pour-lindentation",children:"Espace vs Tabulation pour l'indentation"}),"\n",(0,s.jsx)(n.p,{children:"Nous avons choisi d'utiliser le caract\xe8re tabulation plut\xf4t que les caract\xe8res d'espace pour notre indentation."}),"\n",(0,s.jsx)(n.h3,{id:"convention-de-code",children:"Convention de code"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 d'utiliser la convention Java dans le code car elle est tr\xe8s r\xe9pandue et que nous sommes align\xe9s avec\ncette convention (",(0,s.jsx)(n.a,{href:"https://www.oracle.com/technetwork/java/codeconventions-150003.pdf",children:"ici"}),"). De plus, elle est\ncompatible avec notre choix de linter."]}),"\n",(0,s.jsx)(n.h3,{id:"nommage-des-fichiers",children:"Nommage des fichiers"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 d'adopter la convention ",(0,s.jsx)(n.strong,{children:"kebab-case"})," pour nommer nos fichiers. De plus, nous avons d\xe9cid\xe9 d'ajouter\nun suffixe pour d\xe9finir la nature de ce qui se trouve \xe0 l'int\xe9rieur."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Exemple"})," :"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"Valide : minio-storage.client.ts\n\nInvalide : MinioStorageClient.ts\n"})}),"\n",(0,s.jsx)(n.h3,{id:"typage-dynamique",children:"Typage dynamique"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 de ne pas utiliser le type ",(0,s.jsx)(n.code,{children:"any"})," sauf en cas d'absolue n\xe9cessit\xe9."]}),"\n",(0,s.jsx)(n.h3,{id:"ts-ignore",children:"Ts-ignore"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons d\xe9cid\xe9 de ne pas utiliser l'annotation ",(0,s.jsx)(n.code,{children:"ts-ignore"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"commentaires",children:"Commentaires"}),"\n",(0,s.jsx)(n.p,{children:"Nous avons d\xe9cid\xe9 d'\xe9crire du code auto-portant et de n'utiliser les commentaires qu'en cas de n\xe9cessit\xe9 et se limitant \xe0 1 \xe0 2 lignes."}),"\n",(0,s.jsx)(n.h2,{id:"complexit\xe9s",children:"Complexit\xe9s"}),"\n",(0,s.jsx)(n.h3,{id:"cyclomatique",children:"Cyclomatique"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons fix\xe9 la limite maximale de complexit\xe9 cyclomatique \xe0 ",(0,s.jsx)(n.strong,{children:"10"})," afin de conserver des fonctions simples, am\xe9liorer la\nlisibilit\xe9 et la maintenance du code."]}),"\n",(0,s.jsx)(n.h3,{id:"cognitive",children:"Cognitive"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons fix\xe9 la limite maximale de complexit\xe9 cognitive \xe0 ",(0,s.jsx)(n.strong,{children:"2"})," afin de conserver des fonctions lisibles et de nous\nforcer \xe0 extraire la complexit\xe9 dans des sous-fonctions."]})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>r});var s=i(6540);const t={},o=s.createContext(t);function d(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:d(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3590feea.0f487ea9.js b/assets/js/3590feea.0f487ea9.js deleted file mode 100644 index d6e893d3..00000000 --- a/assets/js/3590feea.0f487ea9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[557],{9420:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>t});var i=s(4848),r=s(8453);const l={sidebar_label:"Les Scheduled tasks, comment \xe7a marche ?",sidebar_position:5},o="Utiliser les Scheduled Tasks Scalingo",c={id:"tuto/scheduled-tasks",title:"Utiliser les Scheduled Tasks Scalingo",description:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/tuto/scheduled-tasks.md",sourceDirName:"tuto",slug:"/tuto/scheduled-tasks",permalink:"/1j1s-etl/docs/tuto/scheduled-tasks",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/scheduled-tasks.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_label:"Les Scheduled tasks, comment \xe7a marche ?",sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Que faire Lorsque le flux ne se mets plus \xe0 jour ?",permalink:"/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour"},next:{title:"Que faire si l'indexation des donn\xe9es reste bloqu\xe9e \xe0 10000 donn\xe9es ?",permalink:"/1j1s-etl/docs/tuto/copie-donnee-en-local"}},d={},t=[{value:"D\xe9marrage",id:"d\xe9marrage",level:2},{value:"D\xe9clarer une Scheduled Task",id:"d\xe9clarer-une-scheduled-task",level:2},{value:"Periode d'inactivit\xe9 des instances Scalingo",id:"periode-dinactivit\xe9-des-instances-scalingo",level:3},{value:"Pour finir",id:"pour-finir",level:2},{value:"Exemple de fichier cron.json",id:"exemple-de-fichier-cronjson",level:2}];function a(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"utiliser-les-scheduled-tasks-scalingo",children:"Utiliser les Scheduled Tasks Scalingo"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,i.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,i.jsx)(n.p,{children:"Une scheduled task (ou t\xe2che planifi\xe9e) est une op\xe9ration programm\xe9e pour s'ex\xe9cuter automatiquement \xe0 des moments pr\xe9d\xe9finis ou selon des intervalles sp\xe9cifiques. Par exemple transf\xe9rer les donn\xe9es du CEJ vers vers un serveur externe."})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"1j1s-cron",src:s(4894).A+"",width:"1115",height:"656"})}),"\n",(0,i.jsx)(n.h2,{id:"d\xe9marrage",children:"D\xe9marrage"}),"\n",(0,i.jsxs)(n.p,{children:["Pour que Scalingo puisse reconna\xeetre des Scheduled Tasks, il a besoin de trouver un fichier ",(0,i.jsx)(n.code,{children:"cron.json"})," \xe0 la racine du\nprojet \xe0 d\xe9ployer."]}),"\n",(0,i.jsx)(n.p,{children:"Exemple :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"my-app\n\u251c\u2500\u2500\u2500 build\n\u2502 \u251c\u2500\u2500 some-fichier.js\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500\u2500 node_modules\n\u2502 \u251c\u2500\u2500 some-library\n\u2502 \u2502 \u2514\u2500\u2500 some-other-domain-service.ts\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 some-fichier.js\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 some-fichier.test.js\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500\u2500 **cron.json**\n\u251c\u2500\u2500\u2500 package.json\n\u251c\u2500\u2500\u2500 package-lock.json\n\u2514\u2500\u2500\u2500 ...\n"})}),"\n",(0,i.jsx)(n.h2,{id:"d\xe9clarer-une-scheduled-task",children:"D\xe9clarer une Scheduled Task"}),"\n",(0,i.jsxs)(n.p,{children:["Dans le fichier ",(0,i.jsx)(n.code,{children:"cron.json"})," cr\xe9\xe9 pr\xe9c\xe9demment, ajouter le squelette suivant :"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "jobs": []\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"Un job est un objet JSON ayant la forme suivante :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "command": "* * * * * npm run ma:tache:programmee",\n "size": "M"\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"Penchons-nous sur les attributs et leur contenu :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"command"})," est l'attribut dans lequel vous allez renseigner deux informations :","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Le ",(0,i.jsx)(n.code,{children:"cron time"}),", \xe0 savoir la fr\xe9quence \xe0 laquelle vous souhaitez ex\xe9cuter le job"]}),"\n",(0,i.jsxs)(n.li,{children:["La commande \xe0 lancer, exemple ",(0,i.jsx)(n.code,{children:"node start.js"}),". Il ne tient qu'\xe0 vous de d\xe9finir vos propres commandes"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"size"})," est l'attribut permettant de sp\xe9cifier la taille du conteneur dans lequel votre job va tourner sur Scalingo.\nLes valeurs possibles sont les suivantes :","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"S"})," pour 256 MB ;"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"M"})," pour 512 MB ;"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"L"})," pour 1 GB ;"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"XL"})," pour 2 GB ;"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"2XL"})," pour 4 GB."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Utilisez par d\xe9faut la valeur ",(0,i.jsx)(n.code,{children:"M"})," et augmentez si besoin."]}),"\n",(0,i.jsx)(n.h3,{id:"periode-dinactivit\xe9-des-instances-scalingo",children:"Periode d'inactivit\xe9 des instances Scalingo"}),"\n",(0,i.jsx)(n.p,{children:"Dans le but d'\xe9conomiser des ressources, certaines instances de tests sont d\xe9sactiv\xe9es pendant la nuit (ex: main-cms)."}),"\n",(0,i.jsxs)(n.p,{children:["Comme le fichier ",(0,i.jsx)(n.code,{children:"cron.json"})," ne d\xe9pend pas de l'environnement, il faut s'assurer de d\xe9clencher les jobs \xe0 un moment o\xf9 les instances n\xe9cessaires sont disponibles."]}),"\n",(0,i.jsx)(n.h2,{id:"pour-finir",children:"Pour finir"}),"\n",(0,i.jsxs)(n.p,{children:["D\xe9ployez votre nouvelle version de votre code sur Scalingo. Si le fichier ",(0,i.jsx)(n.code,{children:"cron.json"})," est correctement renseign\xe9, vous\nverrez appara\xeetre vos Scheduled Tasks dans l'onglet ",(0,i.jsx)(n.code,{children:"Ressources"})," sur le panneau ",(0,i.jsx)(n.code,{children:"Scheduled Tasks"})," comme ci-dessous :"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"img.png",src:s(8386).A+"",width:"1357",height:"793"})}),"\n",(0,i.jsxs)(n.h2,{id:"exemple-de-fichier-cronjson",children:["Exemple de fichier ",(0,i.jsx)(n.code,{children:"cron.json"})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "jobs": [\n {\n "command": "30 7 * * * npm run cli:transformation -- -a transform -f jobteaser",\n "size": "M"\n }, \n {\n "command": "30 6 * * * npm run cli:transformation -- -a transform -f stagefr",\n "size": "S"\n } \n ]\n}\n'})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},4894:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/1j1s-cron-0ef96f2f5eb3518ca28eefd27d0cf961.png"},8386:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/scalingo-scheduled-task-647e07f4c474959ec028fd3eb8be02ee.png"},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>c});var i=s(6540);const r={},l=i.createContext(r);function o(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3590feea.d4bf5eae.js b/assets/js/3590feea.d4bf5eae.js new file mode 100644 index 00000000..7c791fde --- /dev/null +++ b/assets/js/3590feea.d4bf5eae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[557],{2020:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>t});const i=JSON.parse('{"id":"tuto/scheduled-tasks","title":"Utiliser les Scheduled Tasks Scalingo","description":"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/tuto/scheduled-tasks.md","sourceDirName":"tuto","slug":"/tuto/scheduled-tasks","permalink":"/1j1s-etl/docs/tuto/scheduled-tasks","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/scheduled-tasks.md","tags":[],"version":"current","sidebarPosition":5,"frontMatter":{"sidebar_label":"Les Scheduled tasks, comment \xe7a marche ?","sidebar_position":5},"sidebar":"tutorialSidebar","previous":{"title":"Que faire Lorsque le flux ne se mets plus \xe0 jour ?","permalink":"/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour"},"next":{"title":"Que faire si l\'indexation des donn\xe9es reste bloqu\xe9e \xe0 10000 donn\xe9es ?","permalink":"/1j1s-etl/docs/tuto/copie-donnee-en-local"}}');var r=s(4848),l=s(8453);const o={sidebar_label:"Les Scheduled tasks, comment \xe7a marche ?",sidebar_position:5},c="Utiliser les Scheduled Tasks Scalingo",d={},t=[{value:"D\xe9marrage",id:"d\xe9marrage",level:2},{value:"D\xe9clarer une Scheduled Task",id:"d\xe9clarer-une-scheduled-task",level:2},{value:"Periode d'inactivit\xe9 des instances Scalingo",id:"periode-dinactivit\xe9-des-instances-scalingo",level:3},{value:"Pour finir",id:"pour-finir",level:2},{value:"Exemple de fichier cron.json",id:"exemple-de-fichier-cronjson",level:2}];function a(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"utiliser-les-scheduled-tasks-scalingo",children:"Utiliser les Scheduled Tasks Scalingo"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,r.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,r.jsx)(n.p,{children:"Une scheduled task (ou t\xe2che planifi\xe9e) est une op\xe9ration programm\xe9e pour s'ex\xe9cuter automatiquement \xe0 des moments pr\xe9d\xe9finis ou selon des intervalles sp\xe9cifiques. Par exemple transf\xe9rer les donn\xe9es du CEJ vers vers un serveur externe."})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"1j1s-cron",src:s(4894).A+"",width:"1115",height:"656"})}),"\n",(0,r.jsx)(n.h2,{id:"d\xe9marrage",children:"D\xe9marrage"}),"\n",(0,r.jsxs)(n.p,{children:["Pour que Scalingo puisse reconna\xeetre des Scheduled Tasks, il a besoin de trouver un fichier ",(0,r.jsx)(n.code,{children:"cron.json"})," \xe0 la racine du\nprojet \xe0 d\xe9ployer."]}),"\n",(0,r.jsx)(n.p,{children:"Exemple :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"my-app\n\u251c\u2500\u2500\u2500 build\n\u2502 \u251c\u2500\u2500 some-fichier.js\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500\u2500 node_modules\n\u2502 \u251c\u2500\u2500 some-library\n\u2502 \u2502 \u2514\u2500\u2500 some-other-domain-service.ts\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 some-fichier.js\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 some-fichier.test.js\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500\u2500 **cron.json**\n\u251c\u2500\u2500\u2500 package.json\n\u251c\u2500\u2500\u2500 package-lock.json\n\u2514\u2500\u2500\u2500 ...\n"})}),"\n",(0,r.jsx)(n.h2,{id:"d\xe9clarer-une-scheduled-task",children:"D\xe9clarer une Scheduled Task"}),"\n",(0,r.jsxs)(n.p,{children:["Dans le fichier ",(0,r.jsx)(n.code,{children:"cron.json"})," cr\xe9\xe9 pr\xe9c\xe9demment, ajouter le squelette suivant :"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jobs": []\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Un job est un objet JSON ayant la forme suivante :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "command": "* * * * * npm run ma:tache:programmee",\n "size": "M"\n}\n'})}),"\n",(0,r.jsx)(n.p,{children:"Penchons-nous sur les attributs et leur contenu :"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"command"})," est l'attribut dans lequel vous allez renseigner deux informations :","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Le ",(0,r.jsx)(n.code,{children:"cron time"}),", \xe0 savoir la fr\xe9quence \xe0 laquelle vous souhaitez ex\xe9cuter le job"]}),"\n",(0,r.jsxs)(n.li,{children:["La commande \xe0 lancer, exemple ",(0,r.jsx)(n.code,{children:"node start.js"}),". Il ne tient qu'\xe0 vous de d\xe9finir vos propres commandes"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"size"})," est l'attribut permettant de sp\xe9cifier la taille du conteneur dans lequel votre job va tourner sur Scalingo.\nLes valeurs possibles sont les suivantes :","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"S"})," pour 256 MB ;"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"M"})," pour 512 MB ;"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"L"})," pour 1 GB ;"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"XL"})," pour 2 GB ;"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"2XL"})," pour 4 GB."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Utilisez par d\xe9faut la valeur ",(0,r.jsx)(n.code,{children:"M"})," et augmentez si besoin."]}),"\n",(0,r.jsx)(n.h3,{id:"periode-dinactivit\xe9-des-instances-scalingo",children:"Periode d'inactivit\xe9 des instances Scalingo"}),"\n",(0,r.jsx)(n.p,{children:"Dans le but d'\xe9conomiser des ressources, certaines instances de tests sont d\xe9sactiv\xe9es pendant la nuit (ex: main-cms)."}),"\n",(0,r.jsxs)(n.p,{children:["Comme le fichier ",(0,r.jsx)(n.code,{children:"cron.json"})," ne d\xe9pend pas de l'environnement, il faut s'assurer de d\xe9clencher les jobs \xe0 un moment o\xf9 les instances n\xe9cessaires sont disponibles."]}),"\n",(0,r.jsx)(n.h2,{id:"pour-finir",children:"Pour finir"}),"\n",(0,r.jsxs)(n.p,{children:["D\xe9ployez votre nouvelle version de votre code sur Scalingo. Si le fichier ",(0,r.jsx)(n.code,{children:"cron.json"})," est correctement renseign\xe9, vous\nverrez appara\xeetre vos Scheduled Tasks dans l'onglet ",(0,r.jsx)(n.code,{children:"Ressources"})," sur le panneau ",(0,r.jsx)(n.code,{children:"Scheduled Tasks"})," comme ci-dessous :"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"img.png",src:s(8386).A+"",width:"1357",height:"793"})}),"\n",(0,r.jsxs)(n.h2,{id:"exemple-de-fichier-cronjson",children:["Exemple de fichier ",(0,r.jsx)(n.code,{children:"cron.json"})]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-json",children:'{\n "jobs": [\n {\n "command": "30 7 * * * npm run cli:transformation -- -a transform -f jobteaser",\n "size": "M"\n }, \n {\n "command": "30 6 * * * npm run cli:transformation -- -a transform -f stagefr",\n "size": "S"\n } \n ]\n}\n'})})]})}function u(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},4894:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/1j1s-cron-0ef96f2f5eb3518ca28eefd27d0cf961.png"},8386:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/scalingo-scheduled-task-647e07f4c474959ec028fd3eb8be02ee.png"},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>c});var i=s(6540);const r={},l=i.createContext(r);function o(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5281b7a2.28915db0.js b/assets/js/5281b7a2.28915db0.js deleted file mode 100644 index d19a17fd..00000000 --- a/assets/js/5281b7a2.28915db0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[443],{8798:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=s(4848),t=s(8453);const r={sidebar_label:"\ud83d\uddfa\ufe0f Architecture",sidebar_position:1},l="Architecture de l'ETL",o={id:"architecture",title:"Architecture de l'ETL",description:"10 Mars 2023 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/architecture.md",sourceDirName:".",slug:"/architecture",permalink:"/1j1s-etl/docs/architecture",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/architecture.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_label:"\ud83d\uddfa\ufe0f Architecture",sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"\ud83d\udcd3 ADRs",permalink:"/1j1s-etl/docs/category/-adrs"}},c={},d=[{value:"Architecture globale",id:"architecture-globale",level:2},{value:"Introduction",id:"introduction",level:2},{value:"Point d'entr\xe9e",id:"point-dentr\xe9e",level:2},{value:"Modules",id:"modules",level:2},{value:"Sous-modules",id:"sous-modules",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"architecture-de-letl",children:"Architecture de l'ETL"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"10 Mars 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,i.jsx)(n.h2,{id:"architecture-globale",children:"Architecture globale"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"1j1s-etl-global",src:s(9945).A+"",width:"684",height:"492"})}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,i.jsxs)(n.p,{children:["Ce projet a \xe9t\xe9 r\xe9alis\xe9 en suivant au mieux les principes du ",(0,i.jsx)(n.a,{href:"https://alexsoyes.com/ddd-domain-driven-design/",children:"Domain-Driven Design"}),"."]})}),"\n",(0,i.jsx)(n.p,{children:"C'est pourquoi nous avons identifi\xe9 des contextes m\xe9tier ind\xe9pendants les uns des autres comme repr\xe9sent\xe9s ci-dessous :"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Au 10/03/2023 :"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"architecture-etl",src:s(7937).A+"",width:"1166",height:"791"})}),"\n",(0,i.jsx)(n.h2,{id:"point-dentr\xe9e",children:"Point d'entr\xe9e"}),"\n",(0,i.jsxs)(n.p,{children:["Le point d'entr\xe9e de l'application est ici la Command Line Interface (CLI). En effet, l'ETL est aujourd'hui un produit\n\"serverless\" ou \"Function as a Service\" (",(0,i.jsx)(n.a,{href:"https://www.redhat.com/en/topics/cloud-native-apps/what-is-faas",children:"FaaS"}),"). De ce\nfait, nous ex\xe9cutons de simples fonctions \xe0 intervalles r\xe9guliers au travers de la CLI du projet."]}),"\n",(0,i.jsx)(n.p,{children:"Lancer une op\xe9ration depuis la CLI demande quelques options n\xe9cessaires pour savoir quoi lancer :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ npm run cli -- [extract|transform|load] [flowName]\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Pour aller plus loin sur la commande ",(0,i.jsx)(n.code,{children:"shell"})," ci-dessus :"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"npm run cli"})," nous donne acc\xe8s \xe0 la CLI ;"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"--"})," nous permet d'ajouter des options suppl\xe9mentaires \xe0 l'action pr\xe9c\xe9dente ;"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"[extract|transform|load]"})," nous permet de choisir quelle action est \xe0 r\xe9aliser ;"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"[flowName]"})," nous permet de choisir sur quel flux nous souhaitons r\xe9aliser notre action."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"modules",children:"Modules"}),"\n",(0,i.jsx)(n.p,{children:"Comme nous le disions plus haut, nous avons d\xe9coup\xe9 notre application par contexte m\xe9tier. De ce fait, nous avons\nidentifi\xe9s les 3 modules suivants :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"evenements"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"logements"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"maintenance"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"stages"})}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Cela se traduit dans le code par 3 modules distincts totalement isol\xe9s les uns des autres."}),"\n",(0,i.jsx)(n.h2,{id:"sous-modules",children:"Sous-modules"}),"\n",(0,i.jsx)(n.p,{children:"De la m\xeame fa\xe7on que pour les modules, nous avons identifi\xe9 des sous-modules pour chaque module :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"chargement"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"extraction"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"transformation"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Chaque sous-module suit les principes de l'",(0,i.jsx)(n.a,{href:"https://medium.com/expedia-group-tech/onion-architecture-deed8a554423",children:"Onion Architecture"}),"\net ressemble \xe0 l'arborescence suivante :"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-markdown",children:"sous-module\n\u251c\u2500\u2500\u2500 application-service\n\u251c\u2500\u2500\u2500 domain\n\u2502 \u251c\u2500\u2500 model\n\u2502 \u2514\u2500\u2500 service\n\u251c\u2500\u2500\u2500 infrastructure\n\u2514\u2500\u2500\u2500 index.ts\n"})})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},9945:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/1j1s-etl-schema-4bb9da0ed2a331b4c85d356f90fe3b01.png"},7937:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/big-picture-etl-f0cfb012bd6e145d2db2b6eb9b1fd0eb.png"},8453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>o});var i=s(6540);const t={},r=i.createContext(t);function l(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5281b7a2.d7e3d73d.js b/assets/js/5281b7a2.d7e3d73d.js new file mode 100644 index 00000000..342230cb --- /dev/null +++ b/assets/js/5281b7a2.d7e3d73d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[443],{936:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"architecture","title":"Architecture de l\'ETL","description":"10 Mars 2023 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/architecture.md","sourceDirName":".","slug":"/architecture","permalink":"/1j1s-etl/docs/architecture","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/architecture.md","tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_label":"\ud83d\uddfa\ufe0f Architecture","sidebar_position":1},"sidebar":"tutorialSidebar","next":{"title":"\ud83d\udcd3 ADRs","permalink":"/1j1s-etl/docs/category/-adrs"}}');var t=s(4848),r=s(8453);const l={sidebar_label:"\ud83d\uddfa\ufe0f Architecture",sidebar_position:1},o="Architecture de l'ETL",c={},d=[{value:"Architecture globale",id:"architecture-globale",level:2},{value:"Introduction",id:"introduction",level:2},{value:"Point d'entr\xe9e",id:"point-dentr\xe9e",level:2},{value:"Modules",id:"modules",level:2},{value:"Sous-modules",id:"sous-modules",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"architecture-de-letl",children:"Architecture de l'ETL"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"10 Mars 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,t.jsx)(n.h2,{id:"architecture-globale",children:"Architecture globale"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"1j1s-etl-global",src:s(9945).A+"",width:"684",height:"492"})}),"\n",(0,t.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,t.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,t.jsxs)(n.p,{children:["Ce projet a \xe9t\xe9 r\xe9alis\xe9 en suivant au mieux les principes du ",(0,t.jsx)(n.a,{href:"https://alexsoyes.com/ddd-domain-driven-design/",children:"Domain-Driven Design"}),"."]})}),"\n",(0,t.jsx)(n.p,{children:"C'est pourquoi nous avons identifi\xe9 des contextes m\xe9tier ind\xe9pendants les uns des autres comme repr\xe9sent\xe9s ci-dessous :"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Au 10/03/2023 :"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"architecture-etl",src:s(7937).A+"",width:"1166",height:"791"})}),"\n",(0,t.jsx)(n.h2,{id:"point-dentr\xe9e",children:"Point d'entr\xe9e"}),"\n",(0,t.jsxs)(n.p,{children:["Le point d'entr\xe9e de l'application est ici la Command Line Interface (CLI). En effet, l'ETL est aujourd'hui un produit\n\"serverless\" ou \"Function as a Service\" (",(0,t.jsx)(n.a,{href:"https://www.redhat.com/en/topics/cloud-native-apps/what-is-faas",children:"FaaS"}),"). De ce\nfait, nous ex\xe9cutons de simples fonctions \xe0 intervalles r\xe9guliers au travers de la CLI du projet."]}),"\n",(0,t.jsx)(n.p,{children:"Lancer une op\xe9ration depuis la CLI demande quelques options n\xe9cessaires pour savoir quoi lancer :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-shell",children:"$ npm run cli -- [extract|transform|load] [flowName]\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Pour aller plus loin sur la commande ",(0,t.jsx)(n.code,{children:"shell"})," ci-dessus :"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"npm run cli"})," nous donne acc\xe8s \xe0 la CLI ;"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"--"})," nous permet d'ajouter des options suppl\xe9mentaires \xe0 l'action pr\xe9c\xe9dente ;"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"[extract|transform|load]"})," nous permet de choisir quelle action est \xe0 r\xe9aliser ;"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"[flowName]"})," nous permet de choisir sur quel flux nous souhaitons r\xe9aliser notre action."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"modules",children:"Modules"}),"\n",(0,t.jsx)(n.p,{children:"Comme nous le disions plus haut, nous avons d\xe9coup\xe9 notre application par contexte m\xe9tier. De ce fait, nous avons\nidentifi\xe9s les 3 modules suivants :"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"evenements"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"logements"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"maintenance"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"stages"})}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Cela se traduit dans le code par 3 modules distincts totalement isol\xe9s les uns des autres."}),"\n",(0,t.jsx)(n.h2,{id:"sous-modules",children:"Sous-modules"}),"\n",(0,t.jsx)(n.p,{children:"De la m\xeame fa\xe7on que pour les modules, nous avons identifi\xe9 des sous-modules pour chaque module :"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"chargement"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"extraction"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.code,{children:"transformation"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Chaque sous-module suit les principes de l'",(0,t.jsx)(n.a,{href:"https://medium.com/expedia-group-tech/onion-architecture-deed8a554423",children:"Onion Architecture"}),"\net ressemble \xe0 l'arborescence suivante :"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-markdown",children:"sous-module\n\u251c\u2500\u2500\u2500 application-service\n\u251c\u2500\u2500\u2500 domain\n\u2502 \u251c\u2500\u2500 model\n\u2502 \u2514\u2500\u2500 service\n\u251c\u2500\u2500\u2500 infrastructure\n\u2514\u2500\u2500\u2500 index.ts\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},9945:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/1j1s-etl-schema-4bb9da0ed2a331b4c85d356f90fe3b01.png"},7937:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/big-picture-etl-f0cfb012bd6e145d2db2b6eb9b1fd0eb.png"},8453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>o});var i=s(6540);const t={},r=i.createContext(t);function l(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:l(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/52cb0b0e.552134ec.js b/assets/js/52cb0b0e.552134ec.js new file mode 100644 index 00000000..85294af0 --- /dev/null +++ b/assets/js/52cb0b0e.552134ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[186],{8379:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"onboarding/installation","title":"Lancer l\'ETL","description":"20 Avril 2023","source":"@site/docs/onboarding/installation.md","sourceDirName":"onboarding","slug":"/onboarding/installation","permalink":"/1j1s-etl/docs/onboarding/installation","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/onboarding/installation.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_label":"Lancer l\'ETL","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Pr\xe9requis d\'installation","permalink":"/1j1s-etl/docs/onboarding/prerequis"},"next":{"title":"\ud83e\uddd1\u200d\ud83c\udf93 Tutoriels","permalink":"/1j1s-etl/docs/category/-tutoriels"}}');var r=a(4848),t=a(8453);const s={sidebar_label:"Lancer l'ETL",sidebar_position:2},l="Lancer l'ETL",o={},c=[{value:"Configuration",id:"configuration",level:2},{value:"Manuellement",id:"manuellement",level:2},{value:"En automatique sur Scalingo",id:"en-automatique-sur-scalingo",level:2}];function d(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"lancer-letl",children:"Lancer l'ETL"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"20 Avril 2023"})}),"\n",(0,r.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,r.jsx)(n.p,{children:"Il est n\xe9c\xe9ssaire de d\xe9clarer les variable d'environnement suivante :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-Environnemnent",children:"#Variable d'application \nAPPLICATION_LOGGER_NAME=main\nAPPLICATION_LOGGER_LOG_LEVEL=debug\n\n#Dossier d'historisation des flux\nHISTORY_DIRECTORY_NAME=history\n\n#Variable li\xe9 \xe0 minio\nMINIO_ACCESS_KEY=\nMINIO_PORT=443\nMINIO_RESULT_BUCKET_NAME=stages-result\nMINIO_SECRET_KEY=\nMINIO_URL=\nMINIO_USE_SSL=true\n\n#Variable li\xe9 au api strapi\nSTRAPI_AUTHENTICATION_URL=\nSTRAPI_BASE_URL=\nSTRAPI_OFFRE_DE_STAGE_URL=\nSTRAPI_PASSWORD=\nSTRAPI_USERNAME=john.cena@example.com\n\n#Dossier local temporaire\nTEMPORARY_DIRECTORY_PATH=/tmp\n"})}),"\n",(0,r.jsx)(n.h2,{id:"manuellement",children:"Manuellement"}),"\n",(0,r.jsx)(n.p,{children:"Une fois chaque variable d\xe9clar\xe9e, lancer la commande suivante :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm ci\n"})}),"\n",(0,r.jsx)(n.p,{children:"Cette derni\xe8re installera l'ensemble des d\xe9pendances n\xe9cessaire au bon lancement du projet."}),"\n",(0,r.jsx)(n.p,{children:"Vous pouvez alors compiler l'application gr\xe2ce \xe0 la commande suivante :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})}),"\n",(0,r.jsx)(n.h2,{id:"en-automatique-sur-scalingo",children:"En automatique sur Scalingo"}),"\n",(0,r.jsx)(n.p,{children:"Les d\xe9ploiements se font gr\xe2ce \xe0 la proc\xe9dure suivante :"})]})}function u(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,a)=>{a.d(n,{R:()=>s,x:()=>l});var i=a(6540);const r={},t=i.createContext(r);function s(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/52cb0b0e.6a4baa63.js b/assets/js/52cb0b0e.6a4baa63.js deleted file mode 100644 index acc3727a..00000000 --- a/assets/js/52cb0b0e.6a4baa63.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[186],{7187:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>s,default:()=>u,frontMatter:()=>t,metadata:()=>l,toc:()=>c});var a=i(4848),r=i(8453);const t={sidebar_label:"Lancer l'ETL",sidebar_position:2},s="Lancer l'ETL",l={id:"onboarding/installation",title:"Lancer l'ETL",description:"20 Avril 2023",source:"@site/docs/onboarding/installation.md",sourceDirName:"onboarding",slug:"/onboarding/installation",permalink:"/1j1s-etl/docs/onboarding/installation",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/onboarding/installation.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_label:"Lancer l'ETL",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Pr\xe9requis d'installation",permalink:"/1j1s-etl/docs/onboarding/prerequis"},next:{title:"\ud83e\uddd1\u200d\ud83c\udf93 Tutoriels",permalink:"/1j1s-etl/docs/category/-tutoriels"}},o={},c=[{value:"Configuration",id:"configuration",level:2},{value:"Manuellement",id:"manuellement",level:2},{value:"En automatique sur Scalingo",id:"en-automatique-sur-scalingo",level:2}];function d(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"lancer-letl",children:"Lancer l'ETL"})}),"\n",(0,a.jsx)(n.p,{children:(0,a.jsx)(n.em,{children:"20 Avril 2023"})}),"\n",(0,a.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,a.jsx)(n.p,{children:"Il est n\xe9c\xe9ssaire de d\xe9clarer les variable d'environnement suivante :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-Environnemnent",children:"#Variable d'application \nAPPLICATION_LOGGER_NAME=main\nAPPLICATION_LOGGER_LOG_LEVEL=debug\n\n#Dossier d'historisation des flux\nHISTORY_DIRECTORY_NAME=history\n\n#Variable li\xe9 \xe0 minio\nMINIO_ACCESS_KEY=\nMINIO_PORT=443\nMINIO_RESULT_BUCKET_NAME=stages-result\nMINIO_SECRET_KEY=\nMINIO_URL=\nMINIO_USE_SSL=true\n\n#Variable li\xe9 au api strapi\nSTRAPI_AUTHENTICATION_URL=\nSTRAPI_BASE_URL=\nSTRAPI_OFFRE_DE_STAGE_URL=\nSTRAPI_PASSWORD=\nSTRAPI_USERNAME=john.cena@example.com\n\n#Dossier local temporaire\nTEMPORARY_DIRECTORY_PATH=/tmp\n"})}),"\n",(0,a.jsx)(n.h2,{id:"manuellement",children:"Manuellement"}),"\n",(0,a.jsx)(n.p,{children:"Une fois chaque variable d\xe9clar\xe9e, lancer la commande suivante :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"npm ci\n"})}),"\n",(0,a.jsx)(n.p,{children:"Cette derni\xe8re installera l'ensemble des d\xe9pendances n\xe9cessaire au bon lancement du projet."}),"\n",(0,a.jsx)(n.p,{children:"Vous pouvez alors compiler l'application gr\xe2ce \xe0 la commande suivante :"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"npm run build\n"})}),"\n",(0,a.jsx)(n.h2,{id:"en-automatique-sur-scalingo",children:"En automatique sur Scalingo"}),"\n",(0,a.jsx)(n.p,{children:"Les d\xe9ploiements se font gr\xe2ce \xe0 la proc\xe9dure suivante :"})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>s,x:()=>l});var a=i(6540);const r={},t=a.createContext(r);function s(e){const n=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:s(e.components),a.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/57aa9b0b.8aa253a2.js b/assets/js/57aa9b0b.8aa253a2.js deleted file mode 100644 index 59b1a2b3..00000000 --- a/assets/js/57aa9b0b.8aa253a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[602],{9755:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var r=s(4848),i=s(8453);const o={sidebar_label:"Que faire si tout se passe mal apr\xe8s une mise en production ?",sidebar_position:0},t="Que faire si tout se passe mal apr\xe8s une mise en production ?",l={id:"tuto/sos",title:"Que faire si tout se passe mal apr\xe8s une mise en production ?",description:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/tuto/sos.md",sourceDirName:"tuto",slug:"/tuto/sos",permalink:"/1j1s-etl/docs/tuto/sos",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/sos.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_label:"Que faire si tout se passe mal apr\xe8s une mise en production ?",sidebar_position:0},sidebar:"tutorialSidebar",previous:{title:"\ud83e\uddd1\u200d\ud83c\udf93 Tutoriels",permalink:"/1j1s-etl/docs/category/-tutoriels"},next:{title:"Comment Rollback la base de donn\xe9es ?",permalink:"/1j1s-etl/docs/tuto/rollback-database"}},a={},d=[{value:"Pense-b\xeate",id:"pense-b\xeate",level:2},{value:"Comment red\xe9ployer une ancienne version ?",id:"comment-red\xe9ployer-une-ancienne-version-",level:2},{value:"Identifier la pr\xe9c\xe9dente version d\xe9ploy\xe9e",id:"identifier-la-pr\xe9c\xe9dente-version-d\xe9ploy\xe9e",level:3},{value:"Cr\xe9er une branche de release pour Scalingo",id:"cr\xe9er-une-branche-de-release-pour-scalingo",level:3},{value:"Red\xe9ployer cette branche sur Scalingo",id:"red\xe9ployer-cette-branche-sur-scalingo",level:3},{value:"Rollback la base de donn\xe9es",id:"rollback-la-base-de-donn\xe9es",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",pre:"pre",strong:"strong",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"que-faire-si-tout-se-passe-mal-apr\xe8s-une-mise-en-production-",children:"Que faire si tout se passe mal apr\xe8s une mise en production ?"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,r.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,r.jsx)(n.p,{children:"Si demain, vous \xeates amen\xe9s \xe0 faire une mise en production et que d'avance \xe7a devait mal se passer, pas de panique !\nCe ne sera qu'une nouvelle mise en production de rat\xe9e dans la longue et triste histoire des mises en production rat\xe9es."})}),"\n",(0,r.jsx)(n.h2,{id:"pense-b\xeate",children:"Pense-b\xeate"}),"\n",(0,r.jsx)(n.p,{children:"Voici un arbre de d\xe9cision qui peut vous aider en cas de p\xe9pin en production :"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Decisionnal Tree",src:s(1055).A+"",width:"5648",height:"5423"})}),"\n",(0,r.jsx)(n.h2,{id:"comment-red\xe9ployer-une-ancienne-version-",children:"Comment red\xe9ployer une ancienne version ?"}),"\n",(0,r.jsx)(n.h3,{id:"identifier-la-pr\xe9c\xe9dente-version-d\xe9ploy\xe9e",children:"Identifier la pr\xe9c\xe9dente version d\xe9ploy\xe9e"}),"\n",(0,r.jsx)(n.p,{children:"Pour identifier la version actuelle d'une application en production, connectez-vous \xe0 l'application Scalingo que vous\nsouhaitez red\xe9ployer. Regardez ensuite dans l'historique des d\xe9ploiements. Vous pouvez acc\xe9der aux logs de ces derniers\net parmi ces logs, vous devriez voir le nom du projet d\xe9ploy\xe9 ainsi que sa version. Par exemple :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"> 1j1s-etl@4.1.1 prepare\n"})}),"\n",(0,r.jsxs)(n.p,{children:["On reconna\xeet bien ici le pattern ",(0,r.jsx)(n.code,{children:"projectName@version"}),". Une fois le num\xe9ro de release identifi\xe9, il vous suffit de cr\xe9er\nune branche depuis laquelle red\xe9ployer sur Scalingo."]}),"\n",(0,r.jsx)(n.h3,{id:"cr\xe9er-une-branche-de-release-pour-scalingo",children:"Cr\xe9er une branche de release pour Scalingo"}),"\n",(0,r.jsxs)(n.p,{children:["L\xe0 encore, pas de panique ! C'est \xe0 \xe7a que nous sert ",(0,r.jsx)(n.code,{children:"release-please"})," dans la CI. Tout d'abord, sur votre poste, ouvrez\nun terminal et positionnez-vous dans le d\xe9p\xf4t que vous souhaitez rollback."]}),"\n",(0,r.jsx)(n.p,{children:"Dans un premier temps, r\xe9cup\xe9rer toutes les branches et tous les tags pr\xe9sents sur le d\xe9p\xf4t distant :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ git fetch --all --prune\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Le ",(0,r.jsx)(n.code,{children:"--prune"})," est du bonus pour nettoyer un petit peu votre d\xe9p\xf4t Git en local, vous n'\xeates pas oblig\xe9 de le faire."]}),"\n",(0,r.jsx)(n.p,{children:"Une fois fait, il vous suffit de lister les tags du d\xe9p\xf4t pour retrouver le num\xe9ro de version que vous souhaitez. Pour\nce faire :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ git tag | grep \n"})}),"\n",(0,r.jsx)(n.p,{children:"Si le num\xe9ro de version se trouve bien dans la liste, vous devriez le voir en retour console. Par exemple :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"# Tag existant pour la version, grep vous renvoie la cha\xeene que vous avez recherch\xe9\n$ git tag | grep v4.0.0\nv4.0.0\n$\n\n# Tag inexistant pour la version, grep ne vous renvoie rien du tout\n$ git tag | grep v5.0.0\n$\n"})}),"\n",(0,r.jsx)(n.p,{children:"Si le tag existe, il va maintenant nous falloir cr\xe9er la branche depuis ce tag. Positionnez-vous tout d'abord sur le\ncommit du tag :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ git checkout \n"})}),"\n",(0,r.jsx)(n.p,{children:"Exemple :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ git checkout v4.0.0\n"})}),"\n",(0,r.jsx)(n.p,{children:"Puis, il vous suffit de cr\xe9er la branche :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-shell",children:"$ git checkout -b release/\n"})}),"\n",(0,r.jsx)(n.h3,{id:"red\xe9ployer-cette-branche-sur-scalingo",children:"Red\xe9ployer cette branche sur Scalingo"}),"\n",(0,r.jsx)(n.p,{children:"Retournez maintenant sur Scalingo. Puis, dans l'onglet d\xe9ploiement, s\xe9lectionnez le d\xe9ploiement manuel qui vous permet\nde choisir la branche \xe0 d\xe9ployer. S\xe9lectionnez celle que vous venez de cr\xe9er puis d\xe9ployez-la."}),"\n",(0,r.jsx)(n.h3,{id:"rollback-la-base-de-donn\xe9es",children:"Rollback la base de donn\xe9es"}),"\n",(0,r.jsxs)(n.p,{children:["Vous trouverez les \xe9tapes \xe0 suivre dans cette ",(0,r.jsx)(n.a,{href:"/1j1s-etl/docs/tuto/rollback-database",children:"documentation"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"And voil\xe0 !"})})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1055:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/decisional-tree-mep-2a07a48c5006f1f64c06d5194b4e9a5e.png"},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>l});var r=s(6540);const i={},o=r.createContext(i);function t(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/57aa9b0b.b7868f78.js b/assets/js/57aa9b0b.b7868f78.js new file mode 100644 index 00000000..376e7447 --- /dev/null +++ b/assets/js/57aa9b0b.b7868f78.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[602],{6963:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>t,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"tuto/sos","title":"Que faire si tout se passe mal apr\xe8s une mise en production ?","description":"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/tuto/sos.md","sourceDirName":"tuto","slug":"/tuto/sos","permalink":"/1j1s-etl/docs/tuto/sos","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/sos.md","tags":[],"version":"current","sidebarPosition":0,"frontMatter":{"sidebar_label":"Que faire si tout se passe mal apr\xe8s une mise en production ?","sidebar_position":0},"sidebar":"tutorialSidebar","previous":{"title":"\ud83e\uddd1\u200d\ud83c\udf93 Tutoriels","permalink":"/1j1s-etl/docs/category/-tutoriels"},"next":{"title":"Comment Rollback la base de donn\xe9es ?","permalink":"/1j1s-etl/docs/tuto/rollback-database"}}');var i=s(4848),o=s(8453);const t={sidebar_label:"Que faire si tout se passe mal apr\xe8s une mise en production ?",sidebar_position:0},l="Que faire si tout se passe mal apr\xe8s une mise en production ?",a={},d=[{value:"Pense-b\xeate",id:"pense-b\xeate",level:2},{value:"Comment red\xe9ployer une ancienne version ?",id:"comment-red\xe9ployer-une-ancienne-version-",level:2},{value:"Identifier la pr\xe9c\xe9dente version d\xe9ploy\xe9e",id:"identifier-la-pr\xe9c\xe9dente-version-d\xe9ploy\xe9e",level:3},{value:"Cr\xe9er une branche de release pour Scalingo",id:"cr\xe9er-une-branche-de-release-pour-scalingo",level:3},{value:"Red\xe9ployer cette branche sur Scalingo",id:"red\xe9ployer-cette-branche-sur-scalingo",level:3},{value:"Rollback la base de donn\xe9es",id:"rollback-la-base-de-donn\xe9es",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",p:"p",pre:"pre",strong:"strong",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"que-faire-si-tout-se-passe-mal-apr\xe8s-une-mise-en-production-",children:"Que faire si tout se passe mal apr\xe8s une mise en production ?"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,i.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,i.jsx)(n.p,{children:"Si demain, vous \xeates amen\xe9s \xe0 faire une mise en production et que d'avance \xe7a devait mal se passer, pas de panique !\nCe ne sera qu'une nouvelle mise en production de rat\xe9e dans la longue et triste histoire des mises en production rat\xe9es."})}),"\n",(0,i.jsx)(n.h2,{id:"pense-b\xeate",children:"Pense-b\xeate"}),"\n",(0,i.jsx)(n.p,{children:"Voici un arbre de d\xe9cision qui peut vous aider en cas de p\xe9pin en production :"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Decisionnal Tree",src:s(1055).A+"",width:"5648",height:"5423"})}),"\n",(0,i.jsx)(n.h2,{id:"comment-red\xe9ployer-une-ancienne-version-",children:"Comment red\xe9ployer une ancienne version ?"}),"\n",(0,i.jsx)(n.h3,{id:"identifier-la-pr\xe9c\xe9dente-version-d\xe9ploy\xe9e",children:"Identifier la pr\xe9c\xe9dente version d\xe9ploy\xe9e"}),"\n",(0,i.jsx)(n.p,{children:"Pour identifier la version actuelle d'une application en production, connectez-vous \xe0 l'application Scalingo que vous\nsouhaitez red\xe9ployer. Regardez ensuite dans l'historique des d\xe9ploiements. Vous pouvez acc\xe9der aux logs de ces derniers\net parmi ces logs, vous devriez voir le nom du projet d\xe9ploy\xe9 ainsi que sa version. Par exemple :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"> 1j1s-etl@4.1.1 prepare\n"})}),"\n",(0,i.jsxs)(n.p,{children:["On reconna\xeet bien ici le pattern ",(0,i.jsx)(n.code,{children:"projectName@version"}),". Une fois le num\xe9ro de release identifi\xe9, il vous suffit de cr\xe9er\nune branche depuis laquelle red\xe9ployer sur Scalingo."]}),"\n",(0,i.jsx)(n.h3,{id:"cr\xe9er-une-branche-de-release-pour-scalingo",children:"Cr\xe9er une branche de release pour Scalingo"}),"\n",(0,i.jsxs)(n.p,{children:["L\xe0 encore, pas de panique ! C'est \xe0 \xe7a que nous sert ",(0,i.jsx)(n.code,{children:"release-please"})," dans la CI. Tout d'abord, sur votre poste, ouvrez\nun terminal et positionnez-vous dans le d\xe9p\xf4t que vous souhaitez rollback."]}),"\n",(0,i.jsx)(n.p,{children:"Dans un premier temps, r\xe9cup\xe9rer toutes les branches et tous les tags pr\xe9sents sur le d\xe9p\xf4t distant :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ git fetch --all --prune\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Le ",(0,i.jsx)(n.code,{children:"--prune"})," est du bonus pour nettoyer un petit peu votre d\xe9p\xf4t Git en local, vous n'\xeates pas oblig\xe9 de le faire."]}),"\n",(0,i.jsx)(n.p,{children:"Une fois fait, il vous suffit de lister les tags du d\xe9p\xf4t pour retrouver le num\xe9ro de version que vous souhaitez. Pour\nce faire :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ git tag | grep \n"})}),"\n",(0,i.jsx)(n.p,{children:"Si le num\xe9ro de version se trouve bien dans la liste, vous devriez le voir en retour console. Par exemple :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"# Tag existant pour la version, grep vous renvoie la cha\xeene que vous avez recherch\xe9\n$ git tag | grep v4.0.0\nv4.0.0\n$\n\n# Tag inexistant pour la version, grep ne vous renvoie rien du tout\n$ git tag | grep v5.0.0\n$\n"})}),"\n",(0,i.jsx)(n.p,{children:"Si le tag existe, il va maintenant nous falloir cr\xe9er la branche depuis ce tag. Positionnez-vous tout d'abord sur le\ncommit du tag :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ git checkout \n"})}),"\n",(0,i.jsx)(n.p,{children:"Exemple :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ git checkout v4.0.0\n"})}),"\n",(0,i.jsx)(n.p,{children:"Puis, il vous suffit de cr\xe9er la branche :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ git checkout -b release/\n"})}),"\n",(0,i.jsx)(n.h3,{id:"red\xe9ployer-cette-branche-sur-scalingo",children:"Red\xe9ployer cette branche sur Scalingo"}),"\n",(0,i.jsx)(n.p,{children:"Retournez maintenant sur Scalingo. Puis, dans l'onglet d\xe9ploiement, s\xe9lectionnez le d\xe9ploiement manuel qui vous permet\nde choisir la branche \xe0 d\xe9ployer. S\xe9lectionnez celle que vous venez de cr\xe9er puis d\xe9ployez-la."}),"\n",(0,i.jsx)(n.h3,{id:"rollback-la-base-de-donn\xe9es",children:"Rollback la base de donn\xe9es"}),"\n",(0,i.jsxs)(n.p,{children:["Vous trouverez les \xe9tapes \xe0 suivre dans cette ",(0,i.jsx)(n.a,{href:"/1j1s-etl/docs/tuto/rollback-database",children:"documentation"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"And voil\xe0 !"})})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1055:(e,n,s)=>{s.d(n,{A:()=>r});const r=s.p+"assets/images/decisional-tree-mep-2a07a48c5006f1f64c06d5194b4e9a5e.png"},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>l});var r=s(6540);const i={},o=r.createContext(i);function t(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/61a2fae4.0ff6f52e.js b/assets/js/61a2fae4.0ff6f52e.js new file mode 100644 index 00000000..4ece1f35 --- /dev/null +++ b/assets/js/61a2fae4.0ff6f52e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[505],{6005:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>c,metadata:()=>o,toc:()=>l});const o=JSON.parse('{"id":"adr/2023-01-30.contexte-commit","title":"Les contextes d\'un commit","description":"30 janvier 2023","source":"@site/docs/adr/2023-01-30.contexte-commit.md","sourceDirName":"adr","slug":"/adr/2023-01-30.contexte-commit","permalink":"/1j1s-etl/docs/adr/2023-01-30.contexte-commit","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2023-01-30.contexte-commit.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Onion Architecture","permalink":"/1j1s-etl/docs/adr/2023-01-28.onion-architecture"},"next":{"title":"Exception dans le linter","permalink":"/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter"}}');var i=n(4848),s=n(8453);const c={},r="Les contextes d'un commit",d={},l=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2}];function a(e){const t={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"les-contextes-dun-commit",children:"Les contextes d'un commit"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.em,{children:"30 janvier 2023"})}),"\n",(0,i.jsx)(t.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,i.jsx)(t.p,{children:"S\xe9bastien F."}),"\n",(0,i.jsx)(t.h2,{id:"statut",children:"Statut"}),"\n",(0,i.jsx)(t.p,{children:"Accept\xe9"}),"\n",(0,i.jsx)(t.h2,{id:"contexte",children:"Contexte"}),"\n",(0,i.jsx)(t.p,{children:"Lorsque nous \xe9crivons un message de commit, nous ne savons pas toujours quel contexte mettre pour suivre la norme\nconventionnal commit. De ce fait, nos changelogs sont assez h\xe9t\xe9rog\xe8nes."}),"\n",(0,i.jsx)(t.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,i.jsx)(t.p,{children:"C'est pourquoi nous proposons les contextes de commit suivants :"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"architecture"})," - pour toute modification de l'architecture du projet"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"cli"})," - pour toute modification de la CLI"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"configuration"})," - pour toute modification de configuration, incluant la configuration des modules"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"dependencies"})," - pour toute modification ayant trait aux d\xe9pendances du projet"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"evenements"})," - pour toute modification ayant trait aux \xe9v\xe9nements"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"logements"})," - pour toute modification ayant trait aux annonces de logements"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"multiple"})," - pour toute modification ayant trait \xe0 2 ou plusieurs contextes"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"partag\xe9"})," - pour toute modification ayant trait au shared kernel"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"stages"})," - pour toute modification ayant trait aux offres de stages"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,i.jsx)(t.p,{children:"Les commits futurs utiliseront ces diff\xe9rents contextes."})]})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>r});var o=n(6540);const i={},s=o.createContext(i);function c(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/61a2fae4.517e5566.js b/assets/js/61a2fae4.517e5566.js deleted file mode 100644 index 8d51fdfa..00000000 --- a/assets/js/61a2fae4.517e5566.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[505],{6888:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var o=n(4848),i=n(8453);const s={},c="Les contextes d'un commit",r={id:"adr/2023-01-30.contexte-commit",title:"Les contextes d'un commit",description:"30 janvier 2023",source:"@site/docs/adr/2023-01-30.contexte-commit.md",sourceDirName:"adr",slug:"/adr/2023-01-30.contexte-commit",permalink:"/1j1s-etl/docs/adr/2023-01-30.contexte-commit",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2023-01-30.contexte-commit.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Onion Architecture",permalink:"/1j1s-etl/docs/adr/2023-01-28.onion-architecture"},next:{title:"Exception dans le linter",permalink:"/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter"}},d={},l=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2}];function a(e){const t={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"les-contextes-dun-commit",children:"Les contextes d'un commit"})}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.em,{children:"30 janvier 2023"})}),"\n",(0,o.jsx)(t.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,o.jsx)(t.p,{children:"S\xe9bastien F."}),"\n",(0,o.jsx)(t.h2,{id:"statut",children:"Statut"}),"\n",(0,o.jsx)(t.p,{children:"Accept\xe9"}),"\n",(0,o.jsx)(t.h2,{id:"contexte",children:"Contexte"}),"\n",(0,o.jsx)(t.p,{children:"Lorsque nous \xe9crivons un message de commit, nous ne savons pas toujours quel contexte mettre pour suivre la norme\nconventionnal commit. De ce fait, nos changelogs sont assez h\xe9t\xe9rog\xe8nes."}),"\n",(0,o.jsx)(t.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,o.jsx)(t.p,{children:"C'est pourquoi nous proposons les contextes de commit suivants :"}),"\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"architecture"})," - pour toute modification de l'architecture du projet"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"cli"})," - pour toute modification de la CLI"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"configuration"})," - pour toute modification de configuration, incluant la configuration des modules"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"dependencies"})," - pour toute modification ayant trait aux d\xe9pendances du projet"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"evenements"})," - pour toute modification ayant trait aux \xe9v\xe9nements"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"logements"})," - pour toute modification ayant trait aux annonces de logements"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"multiple"})," - pour toute modification ayant trait \xe0 2 ou plusieurs contextes"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"partag\xe9"})," - pour toute modification ayant trait au shared kernel"]}),"\n",(0,o.jsxs)(t.li,{children:[(0,o.jsx)(t.code,{children:"stages"})," - pour toute modification ayant trait aux offres de stages"]}),"\n"]}),"\n",(0,o.jsx)(t.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,o.jsx)(t.p,{children:"Les commits futurs utiliseront ces diff\xe9rents contextes."})]})}function u(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>c,x:()=>r});var o=n(6540);const i={},s=o.createContext(i);function c(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7028c347.1d815bb1.js b/assets/js/7028c347.1d815bb1.js deleted file mode 100644 index 149f4a27..00000000 --- a/assets/js/7028c347.1d815bb1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[545],{9886:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>l});var t=s(4848),i=s(8453);const r={},a="Migration vers NestJS",o={id:"adr/2023-02-15.migration-nestjs",title:"Migration vers NestJS",description:"15 f\xe9vrier 2023",source:"@site/docs/adr/2023-02-15.migration-nestjs.md",sourceDirName:"adr",slug:"/adr/2023-02-15.migration-nestjs",permalink:"/1j1s-etl/docs/adr/2023-02-15.migration-nestjs",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2023-02-15.migration-nestjs.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Exception dans le linter",permalink:"/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter"},next:{title:"\u2696\ufe0f Conventions",permalink:"/1j1s-etl/docs/category/\ufe0f-conventions"}},c={},l=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"migration-vers-nestjs",children:"Migration vers NestJS"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.em,{children:"15 f\xe9vrier 2023"})}),"\n",(0,t.jsx)(n.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,t.jsx)(n.p,{children:"S. Fran\xe7ois, H. Dumont"}),"\n",(0,t.jsx)(n.h2,{id:"statut",children:"Statut"}),"\n",(0,t.jsx)(n.p,{children:"Accept\xe9"}),"\n",(0,t.jsx)(n.h2,{id:"contexte",children:"Contexte"}),"\n",(0,t.jsx)(n.p,{children:"Dans un contexte o\xf9 nous avons eu pas mal d'\xe9cueil avec le plugin Meilisearch pour Strapi, nous avons souhait\xe9 faire\n\xe9voluer l'architecture du produit pour orchestrer nous-m\xeame l'indexation des documents pour le site 1jeune1solution.\nNous souhaiterions id\xe9alement exposer une API pour des t\xe2ches d'indexation ou de maintenance via l'ETL."}),"\n",(0,t.jsx)(n.p,{children:"De plus, nous souhaiterions utiliser un framework standard et largement r\xe9pandu pour permettre une appropriation plus\nais\xe9e de la codebase \xe0 de nouveaux venus sur le projet."}),"\n",(0,t.jsx)(n.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,t.jsx)(n.p,{children:"Cette migration vers NestJS nous permettra d'exposer facilement une API \xe0 l'avenir et maintiendra la coh\xe9rence de la\ncodebase de par la standardisation apport\xe9e par NestJS."}),"\n",(0,t.jsx)(n.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"L'arborescence des fichiers a largement revue \xe9t\xe9 revue."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Anciennement :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-markdown",children:".\n\u251c\u2500\u2500\u2500 docs\n\u251c\u2500\u2500\u2500 hooks\n\u251c\u2500\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 cli\n\u2502 \u251c\u2500\u2500 configuration\n\u2502 \u251c\u2500\u2500 evenements\n\u2502 \u251c\u2500\u2500 logements\n\u2502 \u2514\u2500\u2500 stages\n\u2514\u2500\u2500\u2500 test\n"})}),"\n",(0,t.jsx)(n.p,{children:"Et aujourd'hui :"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-markdown",children:".\n\u251c\u2500\u2500\u2500 apps\n\u2502 \u251c\u2500\u2500 cli\n\u2502 \u2502 \u251c\u2500\u2500 src\n\u2502 \u2502 \u2514\u2500\u2500 test \n\u2502 \u251c\u2500\u2500 configuration\n\u2502 \u2502 \u251c\u2500\u2500 src\n\u2502 \u2502 \u2514\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 evenements\n\u2502 \u2502 \u251c\u2500\u2500 src\n\u2502 \u2502 \u2514\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 logements\n\u2502 \u2502 \u251c\u2500\u2500 src\n\u2502 \u2502 \u2514\u2500\u2500 test\n\u2502 \u2514\u2500\u2500 stages\n\u2502 \u251c\u2500\u2500 src\n\u2502 \u2514\u2500\u2500 test\n\u251c\u2500\u2500\u2500 docs\n\u2514\u2500\u2500\u2500 hooks\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"La mani\xe8re de builder les applications a \xe9t\xe9 modifi\xe9e :"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-diff",children:'{\n "scripts": {\n- "build": "tsc tsconfig.prod.json && tsc-alias",\n+ "build": "nest build api && nest build cli"\n }\n}\n'})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["La mani\xe8re d'ajouter une commande \xe0 la CLI a \xe9t\xe9 modifi\xe9e\n(voir ",(0,t.jsx)(n.a,{href:"https://docs.nestjs.com/recipes/nest-commander",children:"la documentation de NestJS"}),") ;"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"La mani\xe8re de lancer une commande via la CLI a \xe9t\xe9 modifi\xe9e :"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-diff",children:"-$ npm run cli -- -d [domain] -a [action] -f [flowName]\n+$ npm run cli -- [action] [flowName] \n"})}),"\n",(0,t.jsx)(n.h2,{id:"autres-pistes-explor\xe9es",children:(0,t.jsx)(n.em,{children:"Autres pistes explor\xe9es"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Mise en place d'une API via ExpressJS mais qui ne r\xe9solvait pas notre second probl\xe8me de standardisation et qui \xe9tait\ndavantage co\xfbteuse \xe0 long terme ;"}),"\n",(0,t.jsx)(n.li,{children:"Mise en place d'une API via HapiJS avec les m\xeames inconv\xe9nients que ci-dessus."}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>o});var t=s(6540);const i={},r=t.createContext(i);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7028c347.4c28c5b0.js b/assets/js/7028c347.4c28c5b0.js new file mode 100644 index 00000000..a31400a9 --- /dev/null +++ b/assets/js/7028c347.4c28c5b0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[545],{7348:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"adr/2023-02-15.migration-nestjs","title":"Migration vers NestJS","description":"15 f\xe9vrier 2023","source":"@site/docs/adr/2023-02-15.migration-nestjs.md","sourceDirName":"adr","slug":"/adr/2023-02-15.migration-nestjs","permalink":"/1j1s-etl/docs/adr/2023-02-15.migration-nestjs","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2023-02-15.migration-nestjs.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Exception dans le linter","permalink":"/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter"},"next":{"title":"\u2696\ufe0f Conventions","permalink":"/1j1s-etl/docs/category/\ufe0f-conventions"}}');var i=s(4848),r=s(8453);const a={},o="Migration vers NestJS",c={},l=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"migration-vers-nestjs",children:"Migration vers NestJS"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"15 f\xe9vrier 2023"})}),"\n",(0,i.jsx)(n.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,i.jsx)(n.p,{children:"S. Fran\xe7ois, H. Dumont"}),"\n",(0,i.jsx)(n.h2,{id:"statut",children:"Statut"}),"\n",(0,i.jsx)(n.p,{children:"Accept\xe9"}),"\n",(0,i.jsx)(n.h2,{id:"contexte",children:"Contexte"}),"\n",(0,i.jsx)(n.p,{children:"Dans un contexte o\xf9 nous avons eu pas mal d'\xe9cueil avec le plugin Meilisearch pour Strapi, nous avons souhait\xe9 faire\n\xe9voluer l'architecture du produit pour orchestrer nous-m\xeame l'indexation des documents pour le site 1jeune1solution.\nNous souhaiterions id\xe9alement exposer une API pour des t\xe2ches d'indexation ou de maintenance via l'ETL."}),"\n",(0,i.jsx)(n.p,{children:"De plus, nous souhaiterions utiliser un framework standard et largement r\xe9pandu pour permettre une appropriation plus\nais\xe9e de la codebase \xe0 de nouveaux venus sur le projet."}),"\n",(0,i.jsx)(n.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,i.jsx)(n.p,{children:"Cette migration vers NestJS nous permettra d'exposer facilement une API \xe0 l'avenir et maintiendra la coh\xe9rence de la\ncodebase de par la standardisation apport\xe9e par NestJS."}),"\n",(0,i.jsx)(n.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"L'arborescence des fichiers a largement revue \xe9t\xe9 revue."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Anciennement :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-markdown",children:".\n\u251c\u2500\u2500\u2500 docs\n\u251c\u2500\u2500\u2500 hooks\n\u251c\u2500\u2500\u2500 src\n\u2502 \u251c\u2500\u2500 cli\n\u2502 \u251c\u2500\u2500 configuration\n\u2502 \u251c\u2500\u2500 evenements\n\u2502 \u251c\u2500\u2500 logements\n\u2502 \u2514\u2500\u2500 stages\n\u2514\u2500\u2500\u2500 test\n"})}),"\n",(0,i.jsx)(n.p,{children:"Et aujourd'hui :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-markdown",children:".\n\u251c\u2500\u2500\u2500 apps\n\u2502 \u251c\u2500\u2500 cli\n\u2502 \u2502 \u251c\u2500\u2500 src\n\u2502 \u2502 \u2514\u2500\u2500 test \n\u2502 \u251c\u2500\u2500 configuration\n\u2502 \u2502 \u251c\u2500\u2500 src\n\u2502 \u2502 \u2514\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 evenements\n\u2502 \u2502 \u251c\u2500\u2500 src\n\u2502 \u2502 \u2514\u2500\u2500 test\n\u2502 \u251c\u2500\u2500 logements\n\u2502 \u2502 \u251c\u2500\u2500 src\n\u2502 \u2502 \u2514\u2500\u2500 test\n\u2502 \u2514\u2500\u2500 stages\n\u2502 \u251c\u2500\u2500 src\n\u2502 \u2514\u2500\u2500 test\n\u251c\u2500\u2500\u2500 docs\n\u2514\u2500\u2500\u2500 hooks\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"La mani\xe8re de builder les applications a \xe9t\xe9 modifi\xe9e :"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:'{\n "scripts": {\n- "build": "tsc tsconfig.prod.json && tsc-alias",\n+ "build": "nest build api && nest build cli"\n }\n}\n'})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["La mani\xe8re d'ajouter une commande \xe0 la CLI a \xe9t\xe9 modifi\xe9e\n(voir ",(0,i.jsx)(n.a,{href:"https://docs.nestjs.com/recipes/nest-commander",children:"la documentation de NestJS"}),") ;"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"La mani\xe8re de lancer une commande via la CLI a \xe9t\xe9 modifi\xe9e :"}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-diff",children:"-$ npm run cli -- -d [domain] -a [action] -f [flowName]\n+$ npm run cli -- [action] [flowName] \n"})}),"\n",(0,i.jsx)(n.h2,{id:"autres-pistes-explor\xe9es",children:(0,i.jsx)(n.em,{children:"Autres pistes explor\xe9es"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Mise en place d'une API via ExpressJS mais qui ne r\xe9solvait pas notre second probl\xe8me de standardisation et qui \xe9tait\ndavantage co\xfbteuse \xe0 long terme ;"}),"\n",(0,i.jsx)(n.li,{children:"Mise en place d'une API via HapiJS avec les m\xeames inconv\xe9nients que ci-dessus."}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>a,x:()=>o});var t=s(6540);const i={},r=t.createContext(i);function a(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/737b34ca.6979b4d8.js b/assets/js/737b34ca.6979b4d8.js new file mode 100644 index 00000000..ecbfa14a --- /dev/null +++ b/assets/js/737b34ca.6979b4d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[7],{6835:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"onboarding/checklist","title":"Checklist d\'onboarding","description":"20 Avril 2023","source":"@site/docs/onboarding/checklist.md","sourceDirName":"onboarding","slug":"/onboarding/checklist","permalink":"/1j1s-etl/docs/onboarding/checklist","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/onboarding/checklist.md","tags":[],"version":"current","sidebarPosition":0,"frontMatter":{"sidebar_label":"Checklist d\'onboarding","sidebar_position":0},"sidebar":"tutorialSidebar","previous":{"title":"\ud83c\udf31 Onboarding","permalink":"/1j1s-etl/docs/category/-onboarding"},"next":{"title":"Pr\xe9requis d\'installation","permalink":"/1j1s-etl/docs/onboarding/prerequis"}}');var n=r(4848),d=r(8453);const i={sidebar_label:"Checklist d'onboarding",sidebar_position:0},o="Checklist d'onboarding",l={},c=[];function a(e){const t={code:"code",em:"em",h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,d.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"checklist-donboarding",children:"Checklist d'onboarding"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"20 Avril 2023"})}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Action"}),(0,n.jsx)(t.th,{children:"Statut"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Faire la demande d'ajout dans l'organisation GitHub de la DNUM"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Faire la demande d'ajout dans Scalingo aupr\xe8s de R\xe9mi"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Faire la demande d'ajout dans Jira aupr\xe8s de R\xe9mi"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["Ajouter l'agenda ",(0,n.jsx)(t.code,{children:"1j1s"})," dans le calendrier des arrivants"]}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["Ajouter \xe0 la mailing list ",(0,n.jsx)(t.code,{children:"1j1s"})," dans le calendrier des arrivants"]}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Pr\xe9parer un tour de table pour pr\xe9senter les personnes de l'\xe9quipe"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Pr\xe9senter l'architecture du projet"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Pr\xe9senter bri\xe8vement l'application actuelle"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Pr\xe9senter bri\xe8vement les fonctionnement des releases"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["Configurer les ",(0,n.jsx)(t.code,{children:"git-secret"})," pour le d\xe9p\xf4t ",(0,n.jsx)(t.code,{children:"1j1s-infrastructure"})]}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"D\xe9ployer les applications en local"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Faire un rapport d'\xe9tonnement / feedback"}),(0,n.jsx)(t.td,{})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,d.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>o});var s=r(6540);const n={},d=s.createContext(n);function i(e){const t=s.useContext(d);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(d.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/737b34ca.ab9c3a6a.js b/assets/js/737b34ca.ab9c3a6a.js deleted file mode 100644 index c52f4466..00000000 --- a/assets/js/737b34ca.ab9c3a6a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[7],{4807:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>h,frontMatter:()=>d,metadata:()=>o,toc:()=>l});var n=r(4848),s=r(8453);const d={sidebar_label:"Checklist d'onboarding",sidebar_position:0},i="Checklist d'onboarding",o={id:"onboarding/checklist",title:"Checklist d'onboarding",description:"20 Avril 2023",source:"@site/docs/onboarding/checklist.md",sourceDirName:"onboarding",slug:"/onboarding/checklist",permalink:"/1j1s-etl/docs/onboarding/checklist",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/onboarding/checklist.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_label:"Checklist d'onboarding",sidebar_position:0},sidebar:"tutorialSidebar",previous:{title:"\ud83c\udf31 Onboarding",permalink:"/1j1s-etl/docs/category/-onboarding"},next:{title:"Pr\xe9requis d'installation",permalink:"/1j1s-etl/docs/onboarding/prerequis"}},c={},l=[];function a(e){const t={code:"code",em:"em",h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"checklist-donboarding",children:"Checklist d'onboarding"})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.em,{children:"20 Avril 2023"})}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Action"}),(0,n.jsx)(t.th,{children:"Statut"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Faire la demande d'ajout dans l'organisation GitHub de la DNUM"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Faire la demande d'ajout dans Scalingo aupr\xe8s de R\xe9mi"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Faire la demande d'ajout dans Jira aupr\xe8s de R\xe9mi"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["Ajouter l'agenda ",(0,n.jsx)(t.code,{children:"1j1s"})," dans le calendrier des arrivants"]}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["Ajouter \xe0 la mailing list ",(0,n.jsx)(t.code,{children:"1j1s"})," dans le calendrier des arrivants"]}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Pr\xe9parer un tour de table pour pr\xe9senter les personnes de l'\xe9quipe"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Pr\xe9senter l'architecture du projet"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Pr\xe9senter bri\xe8vement l'application actuelle"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Pr\xe9senter bri\xe8vement les fonctionnement des releases"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsxs)(t.td,{children:["Configurer les ",(0,n.jsx)(t.code,{children:"git-secret"})," pour le d\xe9p\xf4t ",(0,n.jsx)(t.code,{children:"1j1s-infrastructure"})]}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"D\xe9ployer les applications en local"}),(0,n.jsx)(t.td,{})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Faire un rapport d'\xe9tonnement / feedback"}),(0,n.jsx)(t.td,{})]})]})]})]})}function h(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(a,{...e})}):a(e)}},8453:(e,t,r)=>{r.d(t,{R:()=>i,x:()=>o});var n=r(6540);const s={},d=n.createContext(s);function i(e){const t=n.useContext(d);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(d.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9457ee1a.b7c3be79.js b/assets/js/9457ee1a.b7c3be79.js deleted file mode 100644 index 15e57179..00000000 --- a/assets/js/9457ee1a.b7c3be79.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[324],{8904:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>r,toc:()=>c});var i=t(4848),s=t(8453);const l={title:"Mentions l\xe9gales",description:"Mentions l\xe9gales de la documentation technique du site 1jeune1solution"},o="Mentions l\xe9gales",r={type:"mdx",permalink:"/1j1s-etl/mentions-legales",source:"@site/pages/mentions-legales.md",title:"Mentions l\xe9gales",description:"Mentions l\xe9gales de la documentation technique du site 1jeune1solution",frontMatter:{title:"Mentions l\xe9gales",description:"Mentions l\xe9gales de la documentation technique du site 1jeune1solution"},unlisted:!1},a={},c=[{value:"Editeur du site",id:"editeur-du-site",level:2},{value:"Directeur de la publication",id:"directeur-de-la-publication",level:2},{value:"Conception et r\xe9alisation",id:"conception-et-r\xe9alisation",level:2},{value:"H\xe9bergement",id:"h\xe9bergement",level:2}];function u(e){const n={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"mentions-l\xe9gales",children:"Mentions l\xe9gales"})}),"\n",(0,i.jsx)(n.p,{children:"Version octobre 2022"}),"\n",(0,i.jsx)(n.h2,{id:"editeur-du-site",children:"Editeur du site"}),"\n",(0,i.jsxs)(n.p,{children:["Le pr\xe9sent Site internet, accessible \xe0 l\u2019adresse \xab ",(0,i.jsx)(n.a,{href:"http://www.1jeune1solution.gouv.fr",children:"www.1jeune1solution.gouv.fr"})," \xbb, est \xe9dit\xe9 par le minist\xe8re du Travail (D\xe9l\xe9gation g\xe9n\xe9rale \xe0 l\u2019emploi et \xe0 la formation professionnelle) dont le si\xe8ge est situ\xe9 au 10-18 place des Cinq Martyrs du Lyc\xe9e Buffon, 75015 Paris (t\xe9l. : 01 44 38 38 38)."]}),"\n",(0,i.jsx)(n.h2,{id:"directeur-de-la-publication",children:"Directeur de la publication"}),"\n",(0,i.jsx)(n.p,{children:"Bruno Lucas, D\xe9l\xe9gu\xe9 g\xe9n\xe9ral \xe0 l'emploi et \xe0 la formation professionnelle"}),"\n",(0,i.jsx)(n.h2,{id:"conception-et-r\xe9alisation",children:"Conception et r\xe9alisation"}),"\n",(0,i.jsx)(n.p,{children:"OCTO Technology 34 avenue de l'Op\xe9ra 75002 PARIS France"}),"\n",(0,i.jsx)(n.h2,{id:"h\xe9bergement",children:"H\xe9bergement"}),"\n",(0,i.jsx)(n.p,{children:"Assur\xe9 par GitHub, Inc. 88 Colin P. Kelly Jr. Street San Francisco, CA 94107 United States"})]})}function d(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var i=t(6540);const s={},l=i.createContext(s);function o(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/9457ee1a.ef7494d6.js b/assets/js/9457ee1a.ef7494d6.js new file mode 100644 index 00000000..36467e8e --- /dev/null +++ b/assets/js/9457ee1a.ef7494d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[324],{6504:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"type":"mdx","permalink":"/1j1s-etl/mentions-legales","source":"@site/pages/mentions-legales.md","title":"Mentions l\xe9gales","description":"Mentions l\xe9gales de la documentation technique du site 1jeune1solution","frontMatter":{"title":"Mentions l\xe9gales","description":"Mentions l\xe9gales de la documentation technique du site 1jeune1solution"},"unlisted":false}');var s=t(4848),l=t(8453);const o={title:"Mentions l\xe9gales",description:"Mentions l\xe9gales de la documentation technique du site 1jeune1solution"},r="Mentions l\xe9gales",a={},c=[{value:"Editeur du site",id:"editeur-du-site",level:2},{value:"Directeur de la publication",id:"directeur-de-la-publication",level:2},{value:"Conception et r\xe9alisation",id:"conception-et-r\xe9alisation",level:2},{value:"H\xe9bergement",id:"h\xe9bergement",level:2}];function u(e){const n={a:"a",h1:"h1",h2:"h2",header:"header",p:"p",...(0,l.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"mentions-l\xe9gales",children:"Mentions l\xe9gales"})}),"\n",(0,s.jsx)(n.p,{children:"Version octobre 2022"}),"\n",(0,s.jsx)(n.h2,{id:"editeur-du-site",children:"Editeur du site"}),"\n",(0,s.jsxs)(n.p,{children:["Le pr\xe9sent Site internet, accessible \xe0 l\u2019adresse \xab ",(0,s.jsx)(n.a,{href:"http://www.1jeune1solution.gouv.fr",children:"www.1jeune1solution.gouv.fr"})," \xbb, est \xe9dit\xe9 par le minist\xe8re du Travail (D\xe9l\xe9gation g\xe9n\xe9rale \xe0 l\u2019emploi et \xe0 la formation professionnelle) dont le si\xe8ge est situ\xe9 au 10-18 place des Cinq Martyrs du Lyc\xe9e Buffon, 75015 Paris (t\xe9l. : 01 44 38 38 38)."]}),"\n",(0,s.jsx)(n.h2,{id:"directeur-de-la-publication",children:"Directeur de la publication"}),"\n",(0,s.jsx)(n.p,{children:"Bruno Lucas, D\xe9l\xe9gu\xe9 g\xe9n\xe9ral \xe0 l'emploi et \xe0 la formation professionnelle"}),"\n",(0,s.jsx)(n.h2,{id:"conception-et-r\xe9alisation",children:"Conception et r\xe9alisation"}),"\n",(0,s.jsx)(n.p,{children:"OCTO Technology 34 avenue de l'Op\xe9ra 75002 PARIS France"}),"\n",(0,s.jsx)(n.h2,{id:"h\xe9bergement",children:"H\xe9bergement"}),"\n",(0,s.jsx)(n.p,{children:"Assur\xe9 par GitHub, Inc. 88 Colin P. Kelly Jr. Street San Francisco, CA 94107 United States"})]})}function d(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>r});var i=t(6540);const s={},l=i.createContext(s);function o(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a4518945.02bfb722.js b/assets/js/a4518945.02bfb722.js deleted file mode 100644 index 628a1c33..00000000 --- a/assets/js/a4518945.02bfb722.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[78],{2098:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>a});var i=o(4848),s=o(8453);const l={sidebar_label:"Que faire si l'indexation des donn\xe9es reste bloqu\xe9e \xe0 10000 donn\xe9es ?",sidebar_position:7},t="Lorsque l'indexation depuis Strapi \xe9choue : copier les donn\xe9es en local",r={id:"tuto/copie-donnee-en-local",title:"Lorsque l'indexation depuis Strapi \xe9choue : copier les donn\xe9es en local",description:"23 Juillet 2024",source:"@site/docs/tuto/copie-donnee-en-local.md",sourceDirName:"tuto",slug:"/tuto/copie-donnee-en-local",permalink:"/1j1s-etl/docs/tuto/copie-donnee-en-local",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/copie-donnee-en-local.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_label:"Que faire si l'indexation des donn\xe9es reste bloqu\xe9e \xe0 10000 donn\xe9es ?",sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Les Scheduled tasks, comment \xe7a marche ?",permalink:"/1j1s-etl/docs/tuto/scheduled-tasks"},next:{title:"Comment mettre en Production ?",permalink:"/1j1s-etl/docs/tuto/tutoMeP"}},c={},a=[{value:"Explication de la proc\xe9dure",id:"explication-de-la-proc\xe9dure",level:3},{value:"Copie des donn\xe9es de recette en local",id:"copie-des-donn\xe9es-de-recette-en-local",level:2},{value:"Pr\xe9requis",id:"pr\xe9requis",level:3},{value:"Variables d'environnement utiles",id:"variables-denvironnement-utiles",level:3},{value:"Connexion",id:"connexion",level:3},{value:"T\xe9l\xe9chargement de la Backup",id:"t\xe9l\xe9chargement-de-la-backup",level:3},{value:"Monter la backup dans le conteneur local",id:"monter-la-backup-dans-le-conteneur-local",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",p:"p",pre:"pre",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"lorsque-lindexation-depuis-strapi-\xe9choue--copier-les-donn\xe9es-en-local",children:"Lorsque l'indexation depuis Strapi \xe9choue : copier les donn\xe9es en local"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"23 Juillet 2024"})}),"\n",(0,i.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,i.jsx)(n.p,{children:"Si vous avez suivi la proc\xe9dure de resynchronisation et qu'\xe0 l'appui sur \"update\" la valeur du nombre de donn\xe9es index\xe9e reste bloqu\xe9e \xe0 10000 : L'anomalie provient du plugin Meilisearch utilis\xe9 qui limite \xe0 10000 indexations.\nLorsque l\u2019ETL effectue son travail d\u2019upsert des contenus \xe0 charger sur Strapi, celui-ci impacte le nombre d'\xe9l\xe9ments d\u2019une collection (offre de stage, annonces de logements\u2026) et modifie nombre d\u2019entre eux. Puis, le plugin Meilisearch, au travers d\u2019une r\xe9action \xe0 un \xe9v\xe8nement propag\xe9 par Strapi, envoie un document \xe0 indexer dans Meilisearch."})}),"\n",(0,i.jsx)(n.h3,{id:"explication-de-la-proc\xe9dure",children:"Explication de la proc\xe9dure"}),"\n",(0,i.jsx)(n.p,{children:"Une d\xe9synchronisation entre le contenu index\xe9 par Meilisearch et le contenu pr\xe9sent en base de donn\xe9es est donc quotidiennement pr\xe9sente.\nPour r\xe9soudre le probl\xe8me nous avons mis en place une solution de contournement en lan\xe7ant l'indexation depuis un strapi local, connect\xe9 \xe0 la base de recette."}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h2,{id:"copie-des-donn\xe9es-de-recette-en-local",children:"Copie des donn\xe9es de recette en local"}),"\n",(0,i.jsxs)(n.p,{children:["Le script ",(0,i.jsx)(n.code,{children:"populate-with-recette-data.sh"})," \xe0 la racine a \xe9t\xe9 mis en place pour la copie des donn\xe9es du CMS de recette vers le CMS conteneuris\xe9.\nCi-dessous l'explication du fonctionnement de ce script."]}),"\n",(0,i.jsx)(n.h3,{id:"pr\xe9requis",children:"Pr\xe9requis"}),"\n",(0,i.jsx)(n.p,{children:"Afin de pouvoir ex\xe9cuter le script, il faut avoir copi\xe9 le contenu de `.env.docker' dans '.env'."}),"\n",(0,i.jsx)(n.p,{children:"Ensuite, vous devez avoir en votre possession une clef vous permettant de vous connecter sur l'environnement depuis lequel l'on veut copier.\nPour la g\xe9n\xe9rer : il suffit de se connecter sur son compte Scalingo et g\xe9n\xe9rer un API Token."}),"\n",(0,i.jsxs)(n.p,{children:["Cette clef (API Token) est \xe0 remplir dans la variable d'environnement ",(0,i.jsx)(n.code,{children:"SCALINGO_API_TOKEN"})," dans ",(0,i.jsx)(n.code,{children:".env"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Pour manipuler les conteneurs et applications sur Scalingo, il vous faudra ",(0,i.jsx)(n.a,{href:"https://doc.scalingo.com/platform/cli/start#install-scalingo-cli",children:"installer leur CLI"})]}),"\n",(0,i.jsxs)(n.p,{children:["Vous pouvez ex\xe9cuter la commande suivante pour installer ou mettre \xe0 jour ",(0,i.jsx)(n.code,{children:"Scalingo CLI"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"$ curl -O https://cli-dl.scalingo.com/install && bash install\n"})}),"\n",(0,i.jsx)(n.h3,{id:"variables-denvironnement-utiles",children:"Variables d'environnement utiles"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"# populate-with-recette-data.sh\n\nexport SCALINGO_APP='1j1s-main-cms'\nexport SCALINGO_REGION='osc-fr1'\nexport ADDON_NAME='postgresql'\nexport SCALINGO_DB_USER=''\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"# .env\n\nSCALINGO_API_TOKEN=''\n"})}),"\n",(0,i.jsx)(n.h3,{id:"connexion",children:"Connexion"}),"\n",(0,i.jsxs)(n.p,{children:["Dans un premier temps, il faut se connecter avec la clef r\xe9cup\xe9r\xe9e ci-dessus.\nUne v\xe9rification est faite en amont pour arr\xeater le script s'il n'y a pas de ",(0,i.jsx)(n.code,{children:".env"})," local."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"if [ -f .env ]\nthen\n export $(cat .env | xargs)\nelse\n exit 1\nfi\n\nscalingo login --api-token ${API_TOKEN}\n"})}),"\n",(0,i.jsx)(n.h3,{id:"t\xe9l\xe9chargement-de-la-backup",children:"T\xe9l\xe9chargement de la Backup"}),"\n",(0,i.jsx)(n.p,{children:"Pour t\xe9l\xe9charger la derni\xe8re backup de la BDD en recette, on lance les commandes suivantes :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"addon_id=$(scalingo addons | grep $ADDON_NAME | cut -d'|' -f3 | tr -d ' ')\nmkdir -p tmp && cd tmp\nscalingo --addon ${addon_id} backups-download --output ./backup\ntar -xvf ./backup\nfor filename in *.pgsql; do eval mv \\\"$filename\\\" \\\"backup.pgsql\\\"; done\ncd ..\n"})}),"\n",(0,i.jsxs)(n.p,{children:["A ce stade, nous avons un fichier ",(0,i.jsx)(n.code,{children:"backup.psql"})," dans le dossier ",(0,i.jsx)(n.code,{children:"tmp"})," qui contient la BDD de recette."]}),"\n",(0,i.jsx)(n.h3,{id:"monter-la-backup-dans-le-conteneur-local",children:"Monter la backup dans le conteneur local"}),"\n",(0,i.jsx)(n.p,{children:"Une fois le t\xe9l\xe9chargement termin\xe9, il suffit de lancer le docker de BDD en lui chargeant le fichier."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:'docker compose down -v\ndocker compose --env-file .env.docker up -d db\nsleep 5\ndocker compose exec db psql "${DATABASE_URL}" -c "CREATE USER ${SCALINGO_DB_USER} SUPERUSER;"\ndocker compose cp ./tmp/backup.pgsql db:/tmp/backup.pgsql\ndocker compose exec db pg_restore -d ${DATABASE_URL} /tmp/backup.pgsql\n'})})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>t,x:()=>r});var i=o(6540);const s={},l=i.createContext(s);function t(e){const n=i.useContext(l);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a4518945.ab78de32.js b/assets/js/a4518945.ab78de32.js new file mode 100644 index 00000000..4ca515d7 --- /dev/null +++ b/assets/js/a4518945.ab78de32.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[78],{479:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>a});const s=JSON.parse('{"id":"tuto/copie-donnee-en-local","title":"Lorsque l\'indexation depuis Strapi \xe9choue : copier les donn\xe9es en local","description":"23 Juillet 2024","source":"@site/docs/tuto/copie-donnee-en-local.md","sourceDirName":"tuto","slug":"/tuto/copie-donnee-en-local","permalink":"/1j1s-etl/docs/tuto/copie-donnee-en-local","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/copie-donnee-en-local.md","tags":[],"version":"current","sidebarPosition":7,"frontMatter":{"sidebar_label":"Que faire si l\'indexation des donn\xe9es reste bloqu\xe9e \xe0 10000 donn\xe9es ?","sidebar_position":7},"sidebar":"tutorialSidebar","previous":{"title":"Les Scheduled tasks, comment \xe7a marche ?","permalink":"/1j1s-etl/docs/tuto/scheduled-tasks"},"next":{"title":"Comment mettre en Production ?","permalink":"/1j1s-etl/docs/tuto/tutoMeP"}}');var i=o(4848),l=o(8453);const t={sidebar_label:"Que faire si l'indexation des donn\xe9es reste bloqu\xe9e \xe0 10000 donn\xe9es ?",sidebar_position:7},r="Lorsque l'indexation depuis Strapi \xe9choue : copier les donn\xe9es en local",c={},a=[{value:"Explication de la proc\xe9dure",id:"explication-de-la-proc\xe9dure",level:3},{value:"Copie des donn\xe9es de recette en local",id:"copie-des-donn\xe9es-de-recette-en-local",level:2},{value:"Pr\xe9requis",id:"pr\xe9requis",level:3},{value:"Variables d'environnement utiles",id:"variables-denvironnement-utiles",level:3},{value:"Connexion",id:"connexion",level:3},{value:"T\xe9l\xe9chargement de la Backup",id:"t\xe9l\xe9chargement-de-la-backup",level:3},{value:"Monter la backup dans le conteneur local",id:"monter-la-backup-dans-le-conteneur-local",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",p:"p",pre:"pre",...(0,l.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"lorsque-lindexation-depuis-strapi-\xe9choue--copier-les-donn\xe9es-en-local",children:"Lorsque l'indexation depuis Strapi \xe9choue : copier les donn\xe9es en local"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"23 Juillet 2024"})}),"\n",(0,i.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,i.jsx)(n.p,{children:"Si vous avez suivi la proc\xe9dure de resynchronisation et qu'\xe0 l'appui sur \"update\" la valeur du nombre de donn\xe9es index\xe9e reste bloqu\xe9e \xe0 10000 : L'anomalie provient du plugin Meilisearch utilis\xe9 qui limite \xe0 10000 indexations.\nLorsque l\u2019ETL effectue son travail d\u2019upsert des contenus \xe0 charger sur Strapi, celui-ci impacte le nombre d'\xe9l\xe9ments d\u2019une collection (offre de stage, annonces de logements\u2026) et modifie nombre d\u2019entre eux. Puis, le plugin Meilisearch, au travers d\u2019une r\xe9action \xe0 un \xe9v\xe8nement propag\xe9 par Strapi, envoie un document \xe0 indexer dans Meilisearch."})}),"\n",(0,i.jsx)(n.h3,{id:"explication-de-la-proc\xe9dure",children:"Explication de la proc\xe9dure"}),"\n",(0,i.jsx)(n.p,{children:"Une d\xe9synchronisation entre le contenu index\xe9 par Meilisearch et le contenu pr\xe9sent en base de donn\xe9es est donc quotidiennement pr\xe9sente.\nPour r\xe9soudre le probl\xe8me nous avons mis en place une solution de contournement en lan\xe7ant l'indexation depuis un strapi local, connect\xe9 \xe0 la base de recette."}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h2,{id:"copie-des-donn\xe9es-de-recette-en-local",children:"Copie des donn\xe9es de recette en local"}),"\n",(0,i.jsxs)(n.p,{children:["Le script ",(0,i.jsx)(n.code,{children:"populate-with-recette-data.sh"})," \xe0 la racine a \xe9t\xe9 mis en place pour la copie des donn\xe9es du CMS de recette vers le CMS conteneuris\xe9.\nCi-dessous l'explication du fonctionnement de ce script."]}),"\n",(0,i.jsx)(n.h3,{id:"pr\xe9requis",children:"Pr\xe9requis"}),"\n",(0,i.jsx)(n.p,{children:"Afin de pouvoir ex\xe9cuter le script, il faut avoir copi\xe9 le contenu de `.env.docker' dans '.env'."}),"\n",(0,i.jsx)(n.p,{children:"Ensuite, vous devez avoir en votre possession une clef vous permettant de vous connecter sur l'environnement depuis lequel l'on veut copier.\nPour la g\xe9n\xe9rer : il suffit de se connecter sur son compte Scalingo et g\xe9n\xe9rer un API Token."}),"\n",(0,i.jsxs)(n.p,{children:["Cette clef (API Token) est \xe0 remplir dans la variable d'environnement ",(0,i.jsx)(n.code,{children:"SCALINGO_API_TOKEN"})," dans ",(0,i.jsx)(n.code,{children:".env"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Pour manipuler les conteneurs et applications sur Scalingo, il vous faudra ",(0,i.jsx)(n.a,{href:"https://doc.scalingo.com/platform/cli/start#install-scalingo-cli",children:"installer leur CLI"})]}),"\n",(0,i.jsxs)(n.p,{children:["Vous pouvez ex\xe9cuter la commande suivante pour installer ou mettre \xe0 jour ",(0,i.jsx)(n.code,{children:"Scalingo CLI"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"$ curl -O https://cli-dl.scalingo.com/install && bash install\n"})}),"\n",(0,i.jsx)(n.h3,{id:"variables-denvironnement-utiles",children:"Variables d'environnement utiles"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"# populate-with-recette-data.sh\n\nexport SCALINGO_APP='1j1s-main-cms'\nexport SCALINGO_REGION='osc-fr1'\nexport ADDON_NAME='postgresql'\nexport SCALINGO_DB_USER=''\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"# .env\n\nSCALINGO_API_TOKEN=''\n"})}),"\n",(0,i.jsx)(n.h3,{id:"connexion",children:"Connexion"}),"\n",(0,i.jsxs)(n.p,{children:["Dans un premier temps, il faut se connecter avec la clef r\xe9cup\xe9r\xe9e ci-dessus.\nUne v\xe9rification est faite en amont pour arr\xeater le script s'il n'y a pas de ",(0,i.jsx)(n.code,{children:".env"})," local."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"if [ -f .env ]\nthen\n export $(cat .env | xargs)\nelse\n exit 1\nfi\n\nscalingo login --api-token ${API_TOKEN}\n"})}),"\n",(0,i.jsx)(n.h3,{id:"t\xe9l\xe9chargement-de-la-backup",children:"T\xe9l\xe9chargement de la Backup"}),"\n",(0,i.jsx)(n.p,{children:"Pour t\xe9l\xe9charger la derni\xe8re backup de la BDD en recette, on lance les commandes suivantes :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:"addon_id=$(scalingo addons | grep $ADDON_NAME | cut -d'|' -f3 | tr -d ' ')\nmkdir -p tmp && cd tmp\nscalingo --addon ${addon_id} backups-download --output ./backup\ntar -xvf ./backup\nfor filename in *.pgsql; do eval mv \\\"$filename\\\" \\\"backup.pgsql\\\"; done\ncd ..\n"})}),"\n",(0,i.jsxs)(n.p,{children:["A ce stade, nous avons un fichier ",(0,i.jsx)(n.code,{children:"backup.psql"})," dans le dossier ",(0,i.jsx)(n.code,{children:"tmp"})," qui contient la BDD de recette."]}),"\n",(0,i.jsx)(n.h3,{id:"monter-la-backup-dans-le-conteneur-local",children:"Monter la backup dans le conteneur local"}),"\n",(0,i.jsx)(n.p,{children:"Une fois le t\xe9l\xe9chargement termin\xe9, il suffit de lancer le docker de BDD en lui chargeant le fichier."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-/bin/bash",children:'docker compose down -v\ndocker compose --env-file .env.docker up -d db\nsleep 5\ndocker compose exec db psql "${DATABASE_URL}" -c "CREATE USER ${SCALINGO_DB_USER} SUPERUSER;"\ndocker compose cp ./tmp/backup.pgsql db:/tmp/backup.pgsql\ndocker compose exec db pg_restore -d ${DATABASE_URL} /tmp/backup.pgsql\n'})})]})}function u(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>t,x:()=>r});var s=o(6540);const i={},l=s.createContext(i);function t(e){const n=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:t(e.components),s.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bbcccd5a.5b63cfcb.js b/assets/js/bbcccd5a.5b63cfcb.js new file mode 100644 index 00000000..2e91dad0 --- /dev/null +++ b/assets/js/bbcccd5a.5b63cfcb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[810],{9862:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>a});const i=JSON.parse('{"id":"tuto/consulter-contenu-minio","title":"Comment consulter le contenu du d\xe9p\xf4t MinIO","description":"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/tuto/consulter-contenu-minio.md","sourceDirName":"tuto","slug":"/tuto/consulter-contenu-minio","permalink":"/1j1s-etl/docs/tuto/consulter-contenu-minio","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/consulter-contenu-minio.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"sidebar_label":"Minio, comment \xe7a marche ?","sidebar_position":3},"sidebar":"tutorialSidebar","previous":{"title":"Comment purger les donn\xe9es ?","permalink":"/1j1s-etl/docs/tuto/purge-des-donnees"},"next":{"title":"Comment cr\xe9er un nouveau bucket sur Minio","permalink":"/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio"}}');var l=s(4848),r=s(8453);const o={sidebar_label:"Minio, comment \xe7a marche ?",sidebar_position:3},t="Comment consulter le contenu du d\xe9p\xf4t MinIO",c={},a=[{value:"Installation",id:"installation",level:2},{value:"macOS",id:"macos",level:3},{value:"Linux",id:"linux",level:3},{value:"V\xe9rifier l'installation",id:"v\xe9rifier-linstallation",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Consulter les fichiers sur le d\xe9p\xf4t",id:"consulter-les-fichiers-sur-le-d\xe9p\xf4t",level:2},{value:"Supprimer un Bucket",id:"supprimer-un-bucket",level:3}];function d(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,r.R)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"comment-consulter-le-contenu-du-d\xe9p\xf4t-minio",children:"Comment consulter le contenu du d\xe9p\xf4t MinIO"})}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,l.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,l.jsxs)(n.p,{children:["Nous utilisons l'interface ",(0,l.jsx)(n.code,{children:"Amazon Web Services Command Line Interface (CLI)"})," afin de pouvoir consulter\nle contenu du d\xe9p\xf4t de fichier MinIO que nous utilisons sur le projet."]})}),"\n",(0,l.jsx)(n.p,{children:(0,l.jsx)(n.img,{alt:"MinIO",src:s(8744).A+"",width:"676",height:"504"})}),"\n",(0,l.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,l.jsxs)(n.p,{children:["En fonction de votre environnement, vous devrez utiliser des mani\xe8res diff\xe9rentes pour installer\nl'",(0,l.jsx)(n.code,{children:"AWS CLI"}),"."]}),"\n",(0,l.jsx)(n.h3,{id:"macos",children:"macOS"}),"\n",(0,l.jsxs)(i,{children:[(0,l.jsx)("summary",{children:"Voir la proc\xe9dure"}),(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsx)(n.li,{children:"Lancez la commande ci-dessous :"}),"\n"]}),(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"$ brew install awscli\n"})})]}),"\n",(0,l.jsx)(n.h3,{id:"linux",children:"Linux"}),"\n",(0,l.jsxs)(i,{children:[(0,l.jsx)("summary",{children:"Voir la proc\xe9dure"}),(0,l.jsxs)(n.ol,{children:["\n",(0,l.jsx)(n.li,{children:"Lancez la commande ci-dessous :"}),"\n"]}),(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:'$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"\nunzip awscliv2.zip\nsudo ./aws/install\n'})})]}),"\n",(0,l.jsx)(n.h3,{id:"v\xe9rifier-linstallation",children:"V\xe9rifier l'installation"}),"\n",(0,l.jsxs)(n.ol,{start:"2",children:["\n",(0,l.jsx)(n.li,{children:"V\xe9rifiez si la CLI s'est correctement install\xe9e avec la commande suivante :"}),"\n"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"$ aws --version\n"})}),"\n",(0,l.jsx)(n.p,{children:"R\xe9sultat attendu :"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"aws-cli/ Python/ Darwin/ source/ prompt/\n"})}),"\n",(0,l.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,l.jsxs)(n.p,{children:["Pour pouvoir vous connecter au d\xe9p\xf4t MinIO, vous allez devoir configurer votre CLI et en particulier\nles ",(0,l.jsx)(n.code,{children:"credentials"}),", nous y reviendrons dans un moment. Pour d\xe9marrer la configuration, il vous suffit\nde lancer la commande :"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"$ aws configure\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"AWS Access Key ID [None]: \nAWS Secret Access Key [None]: \nDefault region name [None]: None\nDefault output format [None]: json\n"})}),"\n",(0,l.jsx)(n.p,{children:"And voil\xe0 !"}),"\n",(0,l.jsx)(n.h2,{id:"consulter-les-fichiers-sur-le-d\xe9p\xf4t",children:"Consulter les fichiers sur le d\xe9p\xf4t"}),"\n",(0,l.jsx)(n.p,{children:"Afin de pouvoir consulter de mani\xe8re digeste les diff\xe9rents fichiers qui sont sur le d\xe9p\xf4t distant,\nutilisez la commande suivante :"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"$ aws --endpoint-url s3 ls s3:///path/to/folder --recursive --human-readable --summarize\n"})}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"2022-07-23 07:00:00 51.4 MiB path/to/folder/history/2022-07-23T05:00:03.424Z.xml\n2022-07-24 07:00:00 48.8 MiB path/to/folder/history/2022-07-24T05:00:01.775Z.xml\n2022-07-25 07:00:00 48.5 MiB path/to/folder/history/2022-07-25T05:00:01.460Z.xml\n2022-07-25 07:00:00 48.5 MiB path/to/folder/latest.xml\n\nTotal Objects: 4\n Total Size: 197.2 MiB\n"})}),"\n",(0,l.jsx)(n.p,{children:"Que faisons-nous ci-dessus ?"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--endpoint-url"})," nous permet de sp\xe9cifier l'URL du cloud AWS auquel nous cherchons \xe0 nous connecter."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"s3"})," signifie que nous nous connectons \xe0 un Object Cloud Storage S3 et utilise le ",(0,l.jsx)(n.code,{children:"bin"})," s3 pr\xe9sent\ndans la CLI AWS."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"ls"})," permet de lister les fichiers pr\xe9sents dans un dossier (commande Unix)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--recursive"})," permet d'afficher le contenu des sous-dossiers s'il y en a."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--human-readable"})," permet d'afficher la sortie pour que ce soit compr\xe9hensible par l'humain."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--summarize"})," affiche des informations \xe9l\xe9mentaires (nombre d'objets, taille totale...)."]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"supprimer-un-bucket",children:"Supprimer un Bucket"}),"\n",(0,l.jsx)(n.p,{children:"Afin de supprimer un bucket, utilisez la commande suivante:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-shell",children:"$ aws --endpoint-url s3 rb s3://nom-du-bucket\n"})})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(d,{...e})}):d(e)}},8744:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/1j1s-minio-d39fccdf89a4421cc27b384a620cbf18.png"},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>t});var i=s(6540);const l={},r=i.createContext(l);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bbcccd5a.84faa60d.js b/assets/js/bbcccd5a.84faa60d.js deleted file mode 100644 index a8430de9..00000000 --- a/assets/js/bbcccd5a.84faa60d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[810],{5365:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>t,toc:()=>a});var i=s(4848),l=s(8453);const r={sidebar_label:"Minio, comment \xe7a marche ?",sidebar_position:3},o="Comment consulter le contenu du d\xe9p\xf4t MinIO",t={id:"tuto/consulter-contenu-minio",title:"Comment consulter le contenu du d\xe9p\xf4t MinIO",description:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/tuto/consulter-contenu-minio.md",sourceDirName:"tuto",slug:"/tuto/consulter-contenu-minio",permalink:"/1j1s-etl/docs/tuto/consulter-contenu-minio",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/consulter-contenu-minio.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_label:"Minio, comment \xe7a marche ?",sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Comment purger les donn\xe9es ?",permalink:"/1j1s-etl/docs/tuto/purge-des-donnees"},next:{title:"Comment cr\xe9er un nouveau bucket sur Minio",permalink:"/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio"}},c={},a=[{value:"Installation",id:"installation",level:2},{value:"macOS",id:"macos",level:3},{value:"Linux",id:"linux",level:3},{value:"V\xe9rifier l'installation",id:"v\xe9rifier-linstallation",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Consulter les fichiers sur le d\xe9p\xf4t",id:"consulter-les-fichiers-sur-le-d\xe9p\xf4t",level:2},{value:"Supprimer un Bucket",id:"supprimer-un-bucket",level:3}];function d(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,l.R)(),...e.components},{Details:r}=n;return r||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"comment-consulter-le-contenu-du-d\xe9p\xf4t-minio",children:"Comment consulter le contenu du d\xe9p\xf4t MinIO"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,i.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,i.jsxs)(n.p,{children:["Nous utilisons l'interface ",(0,i.jsx)(n.code,{children:"Amazon Web Services Command Line Interface (CLI)"})," afin de pouvoir consulter\nle contenu du d\xe9p\xf4t de fichier MinIO que nous utilisons sur le projet."]})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"MinIO",src:s(8744).A+"",width:"676",height:"504"})}),"\n",(0,i.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,i.jsxs)(n.p,{children:["En fonction de votre environnement, vous devrez utiliser des mani\xe8res diff\xe9rentes pour installer\nl'",(0,i.jsx)(n.code,{children:"AWS CLI"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"macos",children:"macOS"}),"\n",(0,i.jsxs)(r,{children:[(0,i.jsx)("summary",{children:"Voir la proc\xe9dure"}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Lancez la commande ci-dessous :"}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ brew install awscli\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"linux",children:"Linux"}),"\n",(0,i.jsxs)(r,{children:[(0,i.jsx)("summary",{children:"Voir la proc\xe9dure"}),(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Lancez la commande ci-dessous :"}),"\n"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:'$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"\nunzip awscliv2.zip\nsudo ./aws/install\n'})})]}),"\n",(0,i.jsx)(n.h3,{id:"v\xe9rifier-linstallation",children:"V\xe9rifier l'installation"}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsx)(n.li,{children:"V\xe9rifiez si la CLI s'est correctement install\xe9e avec la commande suivante :"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ aws --version\n"})}),"\n",(0,i.jsx)(n.p,{children:"R\xe9sultat attendu :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"aws-cli/ Python/ Darwin/ source/ prompt/\n"})}),"\n",(0,i.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(n.p,{children:["Pour pouvoir vous connecter au d\xe9p\xf4t MinIO, vous allez devoir configurer votre CLI et en particulier\nles ",(0,i.jsx)(n.code,{children:"credentials"}),", nous y reviendrons dans un moment. Pour d\xe9marrer la configuration, il vous suffit\nde lancer la commande :"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ aws configure\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"AWS Access Key ID [None]: \nAWS Secret Access Key [None]: \nDefault region name [None]: None\nDefault output format [None]: json\n"})}),"\n",(0,i.jsx)(n.p,{children:"And voil\xe0 !"}),"\n",(0,i.jsx)(n.h2,{id:"consulter-les-fichiers-sur-le-d\xe9p\xf4t",children:"Consulter les fichiers sur le d\xe9p\xf4t"}),"\n",(0,i.jsx)(n.p,{children:"Afin de pouvoir consulter de mani\xe8re digeste les diff\xe9rents fichiers qui sont sur le d\xe9p\xf4t distant,\nutilisez la commande suivante :"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ aws --endpoint-url s3 ls s3:///path/to/folder --recursive --human-readable --summarize\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"2022-07-23 07:00:00 51.4 MiB path/to/folder/history/2022-07-23T05:00:03.424Z.xml\n2022-07-24 07:00:00 48.8 MiB path/to/folder/history/2022-07-24T05:00:01.775Z.xml\n2022-07-25 07:00:00 48.5 MiB path/to/folder/history/2022-07-25T05:00:01.460Z.xml\n2022-07-25 07:00:00 48.5 MiB path/to/folder/latest.xml\n\nTotal Objects: 4\n Total Size: 197.2 MiB\n"})}),"\n",(0,i.jsx)(n.p,{children:"Que faisons-nous ci-dessus ?"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"--endpoint-url"})," nous permet de sp\xe9cifier l'URL du cloud AWS auquel nous cherchons \xe0 nous connecter."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"s3"})," signifie que nous nous connectons \xe0 un Object Cloud Storage S3 et utilise le ",(0,i.jsx)(n.code,{children:"bin"})," s3 pr\xe9sent\ndans la CLI AWS."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"ls"})," permet de lister les fichiers pr\xe9sents dans un dossier (commande Unix)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"--recursive"})," permet d'afficher le contenu des sous-dossiers s'il y en a."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"--human-readable"})," permet d'afficher la sortie pour que ce soit compr\xe9hensible par l'humain."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"--summarize"})," affiche des informations \xe9l\xe9mentaires (nombre d'objets, taille totale...)."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"supprimer-un-bucket",children:"Supprimer un Bucket"}),"\n",(0,i.jsx)(n.p,{children:"Afin de supprimer un bucket, utilisez la commande suivante:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-shell",children:"$ aws --endpoint-url s3 rb s3://nom-du-bucket\n"})})]})}function u(e={}){const{wrapper:n}={...(0,l.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8744:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/1j1s-minio-d39fccdf89a4421cc27b384a620cbf18.png"},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>t});var i=s(6540);const l={},r=i.createContext(l);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bc5d99e5.7f11a72b.js b/assets/js/bc5d99e5.7f11a72b.js new file mode 100644 index 00000000..70d9698b --- /dev/null +++ b/assets/js/bc5d99e5.7f11a72b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[669],{2768:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>t,contentTitle:()=>l,default:()=>u,frontMatter:()=>c,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"adr/2022-11-07.mise-en-production","title":"Mise en Production","description":"7 novembre 2022","source":"@site/docs/adr/2022-11-07.mise-en-production.md","sourceDirName":"adr","slug":"/adr/2022-11-07.mise-en-production","permalink":"/1j1s-etl/docs/adr/2022-11-07.mise-en-production","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2022-11-07.mise-en-production.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Utilisation des Scheduled Tasks","permalink":"/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks"},"next":{"title":"Onion Architecture","permalink":"/1j1s-etl/docs/adr/2023-01-28.onion-architecture"}}');var i=r(4848),o=r(8453);const c={},l="Mise en Production",t={},d=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"1. Cr\xe9ation d'une version",id:"1-cr\xe9ation-dune-version",level:3},{value:"2. Cr\xe9er la branche li\xe9e \xe0 la version",id:"2-cr\xe9er-la-branche-li\xe9e-\xe0-la-version",level:3},{value:"3. D\xe9ployer la branche versionn\xe9e",id:"3-d\xe9ployer-la-branche-versionn\xe9e",level:3},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2}];function a(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"mise-en-production",children:"Mise en Production"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"7 novembre 2022"})}),"\n",(0,i.jsx)(n.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,i.jsx)(n.p,{children:"S\xe9bastien F."}),"\n",(0,i.jsx)(n.h2,{id:"statut",children:"Statut"}),"\n",(0,i.jsx)(n.p,{children:"Accept\xe9"}),"\n",(0,i.jsx)(n.h2,{id:"contexte",children:"Contexte"}),"\n",(0,i.jsx)(n.p,{children:"Lorsque nous devons faire un rollback d'une mise en production (MEP), nous souhaitons que cela se\nfasse \xe0 partir de la derni\xe8re version qui a \xe9t\xe9 mise en production."}),"\n",(0,i.jsx)(n.p,{children:"Il a \xe9t\xe9 d\xe9cid\xe9 que les MEP soient effectu\xe9s une \xe0 deux fois par it\xe9ration."}),"\n",(0,i.jsx)(n.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,i.jsx)(n.p,{children:"Pour pouvoir facilement revenir \xe0 la version pr\xe9c\xe9dente, il faudrait que nous ayons un historique pr\xe9cis des diff\xe9rentes\nversions qui sont parties en production."}),"\n",(0,i.jsx)(n.h3,{id:"1-cr\xe9ation-dune-version",children:"1. Cr\xe9ation d'une version"}),"\n",(0,i.jsxs)(n.p,{children:["Nous utilisons actuellement ",(0,i.jsx)(n.code,{children:"release-please"})," afin de g\xe9n\xe9rer des versions et des notes de version."]}),"\n",(0,i.jsxs)(n.p,{children:["Une version sera cr\xe9\xe9e \xe0 chaque fois qu'un commit poss\xe9dant les mots cl\xe9s ",(0,i.jsx)(n.code,{children:"feat"})," ou ",(0,i.jsx)(n.code,{children:"fix"})," sera merg\xe9 sur ",(0,i.jsx)(n.code,{children:"main"}),". Une\nversion sera \xe9galement cr\xe9\xe9e \xe0 chaque introduction d'un ",(0,i.jsx)(n.code,{children:"breaking change"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Par exemples :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Breaking change : ",(0,i.jsx)(n.code,{children:"chore!: modification drastique dans l'utilisation de l'application"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Fonctionnalit\xe9 : ",(0,i.jsx)(n.code,{children:"feat(stages): ajout d'une nouvelle fonctionnalit\xe9"})]}),"\n",(0,i.jsxs)(n.li,{children:["Correction de bug : ",(0,i.jsx)(n.code,{children:"fix(stages): correction d'un bug"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["En suivant le principe de ",(0,i.jsx)(n.code,{children:"semantic versionning"}),", le premier exemple provoquera une mont\xe9e de version majeure : ",(0,i.jsx)(n.code,{children:"1.0.0"}),"\n-> ",(0,i.jsx)(n.code,{children:"2.0.0"}),", le second exemple provoquera une mont\xe9e de version mineure : ",(0,i.jsx)(n.code,{children:"1.0.0"})," -> ",(0,i.jsx)(n.code,{children:"1.1.0"})," et le dernier exemple\nprovoquera une mont\xe9e de version corrective : ",(0,i.jsx)(n.code,{children:"1.0.0"})," -> ",(0,i.jsx)(n.code,{children:"1.0.1"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Il est \xe9galement possible de forcer la cr\xe9ation d'une version en le pr\xe9cisant dans un commit vide."}),"\n",(0,i.jsxs)(n.p,{children:["Par exemple : ",(0,i.jsx)(n.code,{children:'git commit --allow-empty -m "chore(some context): release 2.0.1" -m "Release-As: 2.0.1"'}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["\u26a0\ufe0f ",(0,i.jsx)(n.code,{children:"release-please"})," va cr\xe9er une ",(0,i.jsx)(n.code,{children:"Pull Request"})," qu'il est imp\xe9ratif de merger pour cr\xe9er un ",(0,i.jsx)(n.code,{children:"tag"})," (au sens Git) et pour\ncr\xe9er les notes de version associ\xe9es."]}),"\n",(0,i.jsx)(n.h3,{id:"2-cr\xe9er-la-branche-li\xe9e-\xe0-la-version",children:"2. Cr\xe9er la branche li\xe9e \xe0 la version"}),"\n",(0,i.jsxs)(n.p,{children:["Scalingo ne nous permet pas actuellement d\xe9ployer un ",(0,i.jsx)(n.code,{children:"tag"}),". De ce fait, il vous faudra n\xe9cessairement cr\xe9er une branche\nde ",(0,i.jsx)(n.code,{children:"release"}),". La nomenclature \xe0 suivre serait id\xe9alement la suivante : ",(0,i.jsx)(n.code,{children:"release/"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Par exemple :"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"release/2.8.3"})}),"\n",(0,i.jsx)(n.h3,{id:"3-d\xe9ployer-la-branche-versionn\xe9e",children:"3. D\xe9ployer la branche versionn\xe9e"}),"\n",(0,i.jsx)(n.p,{children:"Deux options sont possibles :"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Par le client Web Scalingo et s\xe9lectionner la branche en question \xe0 d\xe9ployer ;"}),"\n",(0,i.jsxs)(n.li,{children:["Par le d\xe9p\xf4t ",(0,i.jsx)(n.code,{children:"1j1s-infrastructure"})," apr\xe8s modifi\xe9 la variable d'environnement de la branche \xe0 d\xe9ployer."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,i.jsxs)(n.p,{children:["Une mise \xe0 jour du code du d\xe9p\xf4t ",(0,i.jsx)(n.code,{children:"1j1s-infrastructure"})," est n\xe9cessaire."]}),"\n",(0,i.jsx)(n.p,{children:"Enfin, nous pourrons effectuer un rollback de l'application en toute s\xe9curit\xe9."})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>l});var s=r(6540);const i={},o=s.createContext(i);function c(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:c(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/bc5d99e5.d5c83d3b.js b/assets/js/bc5d99e5.d5c83d3b.js deleted file mode 100644 index a509298c..00000000 --- a/assets/js/bc5d99e5.d5c83d3b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[669],{894:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>t,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var i=r(4848),s=r(8453);const o={},c="Mise en Production",l={id:"adr/2022-11-07.mise-en-production",title:"Mise en Production",description:"7 novembre 2022",source:"@site/docs/adr/2022-11-07.mise-en-production.md",sourceDirName:"adr",slug:"/adr/2022-11-07.mise-en-production",permalink:"/1j1s-etl/docs/adr/2022-11-07.mise-en-production",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2022-11-07.mise-en-production.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Utilisation des Scheduled Tasks",permalink:"/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks"},next:{title:"Onion Architecture",permalink:"/1j1s-etl/docs/adr/2023-01-28.onion-architecture"}},t={},d=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"1. Cr\xe9ation d'une version",id:"1-cr\xe9ation-dune-version",level:3},{value:"2. Cr\xe9er la branche li\xe9e \xe0 la version",id:"2-cr\xe9er-la-branche-li\xe9e-\xe0-la-version",level:3},{value:"3. D\xe9ployer la branche versionn\xe9e",id:"3-d\xe9ployer-la-branche-versionn\xe9e",level:3},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2}];function a(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"mise-en-production",children:"Mise en Production"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"7 novembre 2022"})}),"\n",(0,i.jsx)(n.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,i.jsx)(n.p,{children:"S\xe9bastien F."}),"\n",(0,i.jsx)(n.h2,{id:"statut",children:"Statut"}),"\n",(0,i.jsx)(n.p,{children:"Accept\xe9"}),"\n",(0,i.jsx)(n.h2,{id:"contexte",children:"Contexte"}),"\n",(0,i.jsx)(n.p,{children:"Lorsque nous devons faire un rollback d'une mise en production (MEP), nous souhaitons que cela se\nfasse \xe0 partir de la derni\xe8re version qui a \xe9t\xe9 mise en production."}),"\n",(0,i.jsx)(n.p,{children:"Il a \xe9t\xe9 d\xe9cid\xe9 que les MEP soient effectu\xe9s une \xe0 deux fois par it\xe9ration."}),"\n",(0,i.jsx)(n.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,i.jsx)(n.p,{children:"Pour pouvoir facilement revenir \xe0 la version pr\xe9c\xe9dente, il faudrait que nous ayons un historique pr\xe9cis des diff\xe9rentes\nversions qui sont parties en production."}),"\n",(0,i.jsx)(n.h3,{id:"1-cr\xe9ation-dune-version",children:"1. Cr\xe9ation d'une version"}),"\n",(0,i.jsxs)(n.p,{children:["Nous utilisons actuellement ",(0,i.jsx)(n.code,{children:"release-please"})," afin de g\xe9n\xe9rer des versions et des notes de version."]}),"\n",(0,i.jsxs)(n.p,{children:["Une version sera cr\xe9\xe9e \xe0 chaque fois qu'un commit poss\xe9dant les mots cl\xe9s ",(0,i.jsx)(n.code,{children:"feat"})," ou ",(0,i.jsx)(n.code,{children:"fix"})," sera merg\xe9 sur ",(0,i.jsx)(n.code,{children:"main"}),". Une\nversion sera \xe9galement cr\xe9\xe9e \xe0 chaque introduction d'un ",(0,i.jsx)(n.code,{children:"breaking change"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Par exemples :"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Breaking change : ",(0,i.jsx)(n.code,{children:"chore!: modification drastique dans l'utilisation de l'application"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Fonctionnalit\xe9 : ",(0,i.jsx)(n.code,{children:"feat(stages): ajout d'une nouvelle fonctionnalit\xe9"})]}),"\n",(0,i.jsxs)(n.li,{children:["Correction de bug : ",(0,i.jsx)(n.code,{children:"fix(stages): correction d'un bug"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["En suivant le principe de ",(0,i.jsx)(n.code,{children:"semantic versionning"}),", le premier exemple provoquera une mont\xe9e de version majeure : ",(0,i.jsx)(n.code,{children:"1.0.0"}),"\n-> ",(0,i.jsx)(n.code,{children:"2.0.0"}),", le second exemple provoquera une mont\xe9e de version mineure : ",(0,i.jsx)(n.code,{children:"1.0.0"})," -> ",(0,i.jsx)(n.code,{children:"1.1.0"})," et le dernier exemple\nprovoquera une mont\xe9e de version corrective : ",(0,i.jsx)(n.code,{children:"1.0.0"})," -> ",(0,i.jsx)(n.code,{children:"1.0.1"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Il est \xe9galement possible de forcer la cr\xe9ation d'une version en le pr\xe9cisant dans un commit vide."}),"\n",(0,i.jsxs)(n.p,{children:["Par exemple : ",(0,i.jsx)(n.code,{children:'git commit --allow-empty -m "chore(some context): release 2.0.1" -m "Release-As: 2.0.1"'}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["\u26a0\ufe0f ",(0,i.jsx)(n.code,{children:"release-please"})," va cr\xe9er une ",(0,i.jsx)(n.code,{children:"Pull Request"})," qu'il est imp\xe9ratif de merger pour cr\xe9er un ",(0,i.jsx)(n.code,{children:"tag"})," (au sens Git) et pour\ncr\xe9er les notes de version associ\xe9es."]}),"\n",(0,i.jsx)(n.h3,{id:"2-cr\xe9er-la-branche-li\xe9e-\xe0-la-version",children:"2. Cr\xe9er la branche li\xe9e \xe0 la version"}),"\n",(0,i.jsxs)(n.p,{children:["Scalingo ne nous permet pas actuellement d\xe9ployer un ",(0,i.jsx)(n.code,{children:"tag"}),". De ce fait, il vous faudra n\xe9cessairement cr\xe9er une branche\nde ",(0,i.jsx)(n.code,{children:"release"}),". La nomenclature \xe0 suivre serait id\xe9alement la suivante : ",(0,i.jsx)(n.code,{children:"release/"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Par exemple :"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.code,{children:"release/2.8.3"})}),"\n",(0,i.jsx)(n.h3,{id:"3-d\xe9ployer-la-branche-versionn\xe9e",children:"3. D\xe9ployer la branche versionn\xe9e"}),"\n",(0,i.jsx)(n.p,{children:"Deux options sont possibles :"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Par le client Web Scalingo et s\xe9lectionner la branche en question \xe0 d\xe9ployer ;"}),"\n",(0,i.jsxs)(n.li,{children:["Par le d\xe9p\xf4t ",(0,i.jsx)(n.code,{children:"1j1s-infrastructure"})," apr\xe8s modifi\xe9 la variable d'environnement de la branche \xe0 d\xe9ployer."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,i.jsxs)(n.p,{children:["Une mise \xe0 jour du code du d\xe9p\xf4t ",(0,i.jsx)(n.code,{children:"1j1s-infrastructure"})," est n\xe9cessaire."]}),"\n",(0,i.jsx)(n.p,{children:"Enfin, nous pourrons effectuer un rollback de l'application en toute s\xe9curit\xe9."})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,n,r)=>{r.d(n,{R:()=>c,x:()=>l});var i=r(6540);const s={},o=i.createContext(s);function c(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c73fa0c0.019fd995.js b/assets/js/c73fa0c0.019fd995.js deleted file mode 100644 index b3945667..00000000 --- a/assets/js/c73fa0c0.019fd995.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[852],{9491:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>d,toc:()=>c});var s=t(4848),r=t(8453);const i={sidebar_label:"Comment purger les donn\xe9es ?",sidebar_position:2},l="Purge des donn\xe9es",d={id:"tuto/purge-des-donnees",title:"Purge des donn\xe9es",description:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)",source:"@site/docs/tuto/purge-des-donnees.md",sourceDirName:"tuto",slug:"/tuto/purge-des-donnees",permalink:"/1j1s-etl/docs/tuto/purge-des-donnees",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/purge-des-donnees.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_label:"Comment purger les donn\xe9es ?",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Comment Rollback la base de donn\xe9es ?",permalink:"/1j1s-etl/docs/tuto/rollback-database"},next:{title:"Minio, comment \xe7a marche ?",permalink:"/1j1s-etl/docs/tuto/consulter-contenu-minio"}},o={},c=[{value:"Proc\xe9dure de purge",id:"proc\xe9dure-de-purge",level:2},{value:"V\xe9rifier les variables d'environnements",id:"v\xe9rifier-les-variables-denvironnements",level:3},{value:"Commandes \xe0 ex\xe9cuter",id:"commandes-\xe0-ex\xe9cuter",level:3}];function a(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"purge-des-donn\xe9es",children:"Purge des donn\xe9es"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,s.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,s.jsx)(n.p,{children:"Des donn\xe9es sont corrompues et que l'origine est introuvable, il convient peut \xeatre d'effectuer une purge des donn\xe9es."})}),"\n",(0,s.jsx)(n.admonition,{title:"Pr\xe9-requis",type:"danger",children:(0,s.jsx)(n.p,{children:"Avoir un token permettant l'acc\xe8es \xe0 l'application sur scalingo"})}),"\n",(0,s.jsx)(n.h2,{id:"proc\xe9dure-de-purge",children:"Proc\xe9dure de purge"}),"\n",(0,s.jsx)(n.h3,{id:"v\xe9rifier-les-variables-denvironnements",children:"V\xe9rifier les variables d'environnements"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-env",children:"\nSCALINGO_APP=${APP_NAME}\n\n"})}),"\n",(0,s.jsx)(n.h3,{id:"commandes-\xe0-ex\xe9cuter",children:"Commandes \xe0 ex\xe9cuter"}),"\n",(0,s.jsx)(n.p,{children:"Vous avez la possibilit\xe9 de supprimer l'ensemble des donn\xe9es des contextes suivants :"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{style:{textAlign:"left"},children:"Contexte"}),(0,s.jsx)(n.th,{style:{textAlign:"left"},children:"Subcommand"}),(0,s.jsx)(n.th,{style:{textAlign:"center"},children:"Actif"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"left"},children:"Ev\xe8nements"}),(0,s.jsx)(n.td,{style:{textAlign:"left"},children:"purge-events"}),(0,s.jsx)(n.td,{style:{textAlign:"center"}})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"left"},children:"Logements"}),(0,s.jsx)(n.td,{style:{textAlign:"left"},children:"purge-housing-ads"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"X"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{style:{textAlign:"left"},children:"Stage"}),(0,s.jsx)(n.td,{style:{textAlign:"left"},children:"purge-internships"}),(0,s.jsx)(n.td,{style:{textAlign:"center"},children:"X"})]})]})]}),"\n",(0,s.jsx)(n.p,{children:"Pour ce faire vous devez lancer la commande suivante :"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'$ scalingo -a ${SCALINGO_APP} run "npm run cli -- maintain ${SUBCOMMAND}"\n'})}),"\n",(0,s.jsx)(n.p,{children:"Apr\xe8s avoir purg\xe9 les donn\xe9es, relancer les crons du contexte en utilisant les commandes de chargement associ\xe9es \xe0 ce dernier."})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>d});var s=t(6540);const r={},i=s.createContext(r);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c73fa0c0.4cb6d9bb.js b/assets/js/c73fa0c0.4cb6d9bb.js new file mode 100644 index 00000000..4eef2e4e --- /dev/null +++ b/assets/js/c73fa0c0.4cb6d9bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[852],{3648:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>u,frontMatter:()=>l,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"tuto/purge-des-donnees","title":"Purge des donn\xe9es","description":"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)","source":"@site/docs/tuto/purge-des-donnees.md","sourceDirName":"tuto","slug":"/tuto/purge-des-donnees","permalink":"/1j1s-etl/docs/tuto/purge-des-donnees","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/tuto/purge-des-donnees.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"sidebar_label":"Comment purger les donn\xe9es ?","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Comment Rollback la base de donn\xe9es ?","permalink":"/1j1s-etl/docs/tuto/rollback-database"},"next":{"title":"Minio, comment \xe7a marche ?","permalink":"/1j1s-etl/docs/tuto/consulter-contenu-minio"}}');var r=t(4848),i=t(8453);const l={sidebar_label:"Comment purger les donn\xe9es ?",sidebar_position:2},d="Purge des donn\xe9es",o={},c=[{value:"Proc\xe9dure de purge",id:"proc\xe9dure-de-purge",level:2},{value:"V\xe9rifier les variables d'environnements",id:"v\xe9rifier-les-variables-denvironnements",level:3},{value:"Commandes \xe0 ex\xe9cuter",id:"commandes-\xe0-ex\xe9cuter",level:3}];function a(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"purge-des-donn\xe9es",children:"Purge des donn\xe9es"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"20 Avril 2023 (mis \xe0 jour le 24 Juillet 2024)"})}),"\n",(0,r.jsx)(n.admonition,{title:"Contexte",type:"info",children:(0,r.jsx)(n.p,{children:"Des donn\xe9es sont corrompues et que l'origine est introuvable, il convient peut \xeatre d'effectuer une purge des donn\xe9es."})}),"\n",(0,r.jsx)(n.admonition,{title:"Pr\xe9-requis",type:"danger",children:(0,r.jsx)(n.p,{children:"Avoir un token permettant l'acc\xe8es \xe0 l'application sur scalingo"})}),"\n",(0,r.jsx)(n.h2,{id:"proc\xe9dure-de-purge",children:"Proc\xe9dure de purge"}),"\n",(0,r.jsx)(n.h3,{id:"v\xe9rifier-les-variables-denvironnements",children:"V\xe9rifier les variables d'environnements"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-env",children:"\nSCALINGO_APP=${APP_NAME}\n\n"})}),"\n",(0,r.jsx)(n.h3,{id:"commandes-\xe0-ex\xe9cuter",children:"Commandes \xe0 ex\xe9cuter"}),"\n",(0,r.jsx)(n.p,{children:"Vous avez la possibilit\xe9 de supprimer l'ensemble des donn\xe9es des contextes suivants :"}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{style:{textAlign:"left"},children:"Contexte"}),(0,r.jsx)(n.th,{style:{textAlign:"left"},children:"Subcommand"}),(0,r.jsx)(n.th,{style:{textAlign:"center"},children:"Actif"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"left"},children:"Ev\xe8nements"}),(0,r.jsx)(n.td,{style:{textAlign:"left"},children:"purge-events"}),(0,r.jsx)(n.td,{style:{textAlign:"center"}})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"left"},children:"Logements"}),(0,r.jsx)(n.td,{style:{textAlign:"left"},children:"purge-housing-ads"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"X"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{style:{textAlign:"left"},children:"Stage"}),(0,r.jsx)(n.td,{style:{textAlign:"left"},children:"purge-internships"}),(0,r.jsx)(n.td,{style:{textAlign:"center"},children:"X"})]})]})]}),"\n",(0,r.jsx)(n.p,{children:"Pour ce faire vous devez lancer la commande suivante :"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'$ scalingo -a ${SCALINGO_APP} run "npm run cli -- maintain ${SUBCOMMAND}"\n'})}),"\n",(0,r.jsx)(n.p,{children:"Apr\xe8s avoir purg\xe9 les donn\xe9es, relancer les crons du contexte en utilisant les commandes de chargement associ\xe9es \xe0 ce dernier."})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>l,x:()=>d});var s=t(6540);const r={},i=s.createContext(r);function l(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/efa26a48.03c9f327.js b/assets/js/efa26a48.03c9f327.js new file mode 100644 index 00000000..b41f5ed9 --- /dev/null +++ b/assets/js/efa26a48.03c9f327.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[744],{3220:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"adr/2023-02-08.exception-dans-le-linter","title":"Exception dans le linter","description":"8 f\xe9vrier 2023","source":"@site/docs/adr/2023-02-08.exception-dans-le-linter.md","sourceDirName":"adr","slug":"/adr/2023-02-08.exception-dans-le-linter","permalink":"/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2023-02-08.exception-dans-le-linter.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Les contextes d\'un commit","permalink":"/1j1s-etl/docs/adr/2023-01-30.contexte-commit"},"next":{"title":"Migration vers NestJS","permalink":"/1j1s-etl/docs/adr/2023-02-15.migration-nestjs"}}');var r=t(4848),i=t(8453);const o={},c="Exception dans le linter",d={},l=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2}];function a(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"exception-dans-le-linter",children:"Exception dans le linter"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"8 f\xe9vrier 2023"})}),"\n",(0,r.jsx)(n.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,r.jsx)(n.p,{children:"S. Fran\xe7ois, H. Dumont"}),"\n",(0,r.jsx)(n.h2,{id:"statut",children:"Statut"}),"\n",(0,r.jsx)(n.p,{children:"Accept\xe9"}),"\n",(0,r.jsx)(n.h2,{id:"contexte",children:"Contexte"}),"\n",(0,r.jsxs)(n.p,{children:["Lorsque nous lan\xe7ons le linter sur notre code, ESLint nous remonte des warnings li\xe9s \xe0 une variable non-utilis\xe9e ou\n\xe0 des ",(0,r.jsx)(n.code,{children:"non-null assertions"})," tandis que le code au-dessus nous prot\xe8ge de ces erreurs."]}),"\n",(0,r.jsx)(n.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,r.jsxs)(n.p,{children:["Nous avons donc d\xe9cid\xe9 d'ignorer ces deux erreurs ",(0,r.jsx)(n.code,{children:"@typescript-eslint/no-unused-vars"})," et\n",(0,r.jsx)(n.code,{children:"@typescript-eslint/no-non-null-assertion"})," dans les fichiers concern\xe9s."]}),"\n",(0,r.jsx)(n.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,r.jsx)(n.p,{children:"D'autres erreurs pourraient \xeatre occult\xe9es dans ces m\xeames fichiers s'ils \xe9voluent au fil du temps."})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var s=t(6540);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/efa26a48.1db5846e.js b/assets/js/efa26a48.1db5846e.js deleted file mode 100644 index 302913b7..00000000 --- a/assets/js/efa26a48.1db5846e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[744],{6295:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>a,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var s=t(4848),r=t(8453);const i={},o="Exception dans le linter",c={id:"adr/2023-02-08.exception-dans-le-linter",title:"Exception dans le linter",description:"8 f\xe9vrier 2023",source:"@site/docs/adr/2023-02-08.exception-dans-le-linter.md",sourceDirName:"adr",slug:"/adr/2023-02-08.exception-dans-le-linter",permalink:"/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2023-02-08.exception-dans-le-linter.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Les contextes d'un commit",permalink:"/1j1s-etl/docs/adr/2023-01-30.contexte-commit"},next:{title:"Migration vers NestJS",permalink:"/1j1s-etl/docs/adr/2023-02-15.migration-nestjs"}},d={},l=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2}];function u(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"exception-dans-le-linter",children:"Exception dans le linter"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"8 f\xe9vrier 2023"})}),"\n",(0,s.jsx)(n.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,s.jsx)(n.p,{children:"S. Fran\xe7ois, H. Dumont"}),"\n",(0,s.jsx)(n.h2,{id:"statut",children:"Statut"}),"\n",(0,s.jsx)(n.p,{children:"Accept\xe9"}),"\n",(0,s.jsx)(n.h2,{id:"contexte",children:"Contexte"}),"\n",(0,s.jsxs)(n.p,{children:["Lorsque nous lan\xe7ons le linter sur notre code, ESLint nous remonte des warnings li\xe9s \xe0 une variable non-utilis\xe9e ou\n\xe0 des ",(0,s.jsx)(n.code,{children:"non-null assertions"})," tandis que le code au-dessus nous prot\xe8ge de ces erreurs."]}),"\n",(0,s.jsx)(n.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,s.jsxs)(n.p,{children:["Nous avons donc d\xe9cid\xe9 d'ignorer ces deux erreurs ",(0,s.jsx)(n.code,{children:"@typescript-eslint/no-unused-vars"})," et\n",(0,s.jsx)(n.code,{children:"@typescript-eslint/no-non-null-assertion"})," dans les fichiers concern\xe9s."]}),"\n",(0,s.jsx)(n.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,s.jsx)(n.p,{children:"D'autres erreurs pourraient \xeatre occult\xe9es dans ces m\xeames fichiers s'ils \xe9voluent au fil du temps."})]})}function a(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>o,x:()=>c});var s=t(6540);const r={},i=s.createContext(r);function o(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f01c0b75.b6c1129d.js b/assets/js/f01c0b75.b6c1129d.js deleted file mode 100644 index 9f4253c8..00000000 --- a/assets/js/f01c0b75.b6c1129d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[707],{3865:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var t=n(4848),r=n(8453);const i={},o="Historisation des flux extraits",d={id:"adr/2022-07-08.historisation-des-flux",title:"Historisation des flux extraits",description:"8 juillet 2022",source:"@site/docs/adr/2022-07-08.historisation-des-flux.md",sourceDirName:"adr",slug:"/adr/2022-07-08.historisation-des-flux",permalink:"/1j1s-etl/docs/adr/2022-07-08.historisation-des-flux",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2022-07-08.historisation-des-flux.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"\ud83d\udcd3 ADRs",permalink:"/1j1s-etl/docs/category/-adrs"},next:{title:"Enregistrement des fichiers",permalink:"/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers"}},c={},a=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function l(e){const s={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"historisation-des-flux-extraits",children:"Historisation des flux extraits"})}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.em,{children:"8 juillet 2022"})}),"\n",(0,t.jsx)(s.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,t.jsx)(s.p,{children:"Caroline C., Hugues D., S\xe9bastien F., Simon B."}),"\n",(0,t.jsx)(s.h2,{id:"statut",children:"Statut"}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.em,{children:"Accept\xe9"})}),"\n",(0,t.jsx)(s.h2,{id:"contexte",children:"Contexte"}),"\n",(0,t.jsx)(s.p,{children:"Afin de pouvoir g\xe9rer les erreurs lors des diff\xe9rentes \xe9tapes d'extraction, de transformation et de chargement des\ndonn\xe9es issues des diff\xe9rents flux partenaires, nous avons besoin d'historiser les flux extraits, transform\xe9s, charg\xe9s."}),"\n",(0,t.jsx)(s.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,t.jsx)(s.p,{children:"Pour ce faire, nous avons d\xe9cid\xe9 d'historiser ces donn\xe9es dans un bucket MinIO. De plus, nous avons d\xe9cid\xe9 d'adopter la\nstructure d'historisation suivante :"}),"\n",(0,t.jsx)(s.pre,{children:(0,t.jsx)(s.code,{className:"language-markdown",children:"..\n\u251c\u2500\u2500\u2500 \ud83d\udcc1 raw\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 latest.\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 latest.\n\u251c\u2500\u2500\u2500 \ud83d\udcc1 json\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 latest.json\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 latest.json\n\u251c\u2500\u2500\u2500 \ud83d\udcc1 result\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_created.json\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_deleted.json\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_error.json\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_updated.json\n\u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_created.json\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_deleted.json\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_error.json\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_updated.json\n"})}),"\n",(0,t.jsx)(s.p,{children:"N.B : La dur\xe9e de conservation de l'historique sera \xe0 d\xe9terminer pour chaque source et la d\xe9cision n'est pas encore arr\xeat\xe9e."}),"\n",(0,t.jsx)(s.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,t.jsx)(s.p,{children:"Nous datons nos fichiers correctement en suivant la norme ISO 8601."}),"\n",(0,t.jsxs)(s.p,{children:["Nous \xe9crasons le ou les fichier(s) ",(0,t.jsx)(s.code,{children:"latest"})," de chaque cat\xe9gorie."]}),"\n",(0,t.jsx)(s.h2,{id:"autres-pistes-explor\xe9es",children:"Autres pistes explor\xe9es"}),"\n",(0,t.jsxs)(s.p,{children:["Se contenter de l'historique (dossier ",(0,t.jsx)(s.code,{children:"history"}),") sans le fichier ",(0,t.jsx)(s.code,{children:"latest"})," \xe0 \xe9craser \xe0 chaque nouvelle \xe9criture. Cette\nsolution n'a pas \xe9t\xe9 retenue car besoin de lister pour r\xe9cup\xe9rer le dernier fichier plut\xf4t que d'y acc\xe9der directement."]})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>d});var t=n(6540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f01c0b75.bb4f6cd9.js b/assets/js/f01c0b75.bb4f6cd9.js new file mode 100644 index 00000000..7d1a0a0b --- /dev/null +++ b/assets/js/f01c0b75.bb4f6cd9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[707],{6032:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>o,metadata:()=>t,toc:()=>a});const t=JSON.parse('{"id":"adr/2022-07-08.historisation-des-flux","title":"Historisation des flux extraits","description":"8 juillet 2022","source":"@site/docs/adr/2022-07-08.historisation-des-flux.md","sourceDirName":"adr","slug":"/adr/2022-07-08.historisation-des-flux","permalink":"/1j1s-etl/docs/adr/2022-07-08.historisation-des-flux","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2022-07-08.historisation-des-flux.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"\ud83d\udcd3 ADRs","permalink":"/1j1s-etl/docs/category/-adrs"},"next":{"title":"Enregistrement des fichiers","permalink":"/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers"}}');var r=n(4848),i=n(8453);const o={},d="Historisation des flux extraits",c={},a=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function l(e){const s={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",p:"p",pre:"pre",...(0,i.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"historisation-des-flux-extraits",children:"Historisation des flux extraits"})}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.em,{children:"8 juillet 2022"})}),"\n",(0,r.jsx)(s.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,r.jsx)(s.p,{children:"Caroline C., Hugues D., S\xe9bastien F., Simon B."}),"\n",(0,r.jsx)(s.h2,{id:"statut",children:"Statut"}),"\n",(0,r.jsx)(s.p,{children:(0,r.jsx)(s.em,{children:"Accept\xe9"})}),"\n",(0,r.jsx)(s.h2,{id:"contexte",children:"Contexte"}),"\n",(0,r.jsx)(s.p,{children:"Afin de pouvoir g\xe9rer les erreurs lors des diff\xe9rentes \xe9tapes d'extraction, de transformation et de chargement des\ndonn\xe9es issues des diff\xe9rents flux partenaires, nous avons besoin d'historiser les flux extraits, transform\xe9s, charg\xe9s."}),"\n",(0,r.jsx)(s.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,r.jsx)(s.p,{children:"Pour ce faire, nous avons d\xe9cid\xe9 d'historiser ces donn\xe9es dans un bucket MinIO. De plus, nous avons d\xe9cid\xe9 d'adopter la\nstructure d'historisation suivante :"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-markdown",children:"..\n\u251c\u2500\u2500\u2500 \ud83d\udcc1 raw\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 latest.\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 latest.\n\u251c\u2500\u2500\u2500 \ud83d\udcc1 json\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 latest.json\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z.json\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 latest.json\n\u251c\u2500\u2500\u2500 \ud83d\udcc1 result\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_created.json\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_deleted.json\n\u2502 \u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_error.json\n\u2502 \u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_updated.json\n\u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 \n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc1 history\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_created.json\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_deleted.json\n\u2502 \u251c\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_error.json\n\u2502 \u2514\u2500\u2500\u2500 \ud83d\udcc4 2022-07-01T00:00:00Z_updated.json\n"})}),"\n",(0,r.jsx)(s.p,{children:"N.B : La dur\xe9e de conservation de l'historique sera \xe0 d\xe9terminer pour chaque source et la d\xe9cision n'est pas encore arr\xeat\xe9e."}),"\n",(0,r.jsx)(s.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,r.jsx)(s.p,{children:"Nous datons nos fichiers correctement en suivant la norme ISO 8601."}),"\n",(0,r.jsxs)(s.p,{children:["Nous \xe9crasons le ou les fichier(s) ",(0,r.jsx)(s.code,{children:"latest"})," de chaque cat\xe9gorie."]}),"\n",(0,r.jsx)(s.h2,{id:"autres-pistes-explor\xe9es",children:"Autres pistes explor\xe9es"}),"\n",(0,r.jsxs)(s.p,{children:["Se contenter de l'historique (dossier ",(0,r.jsx)(s.code,{children:"history"}),") sans le fichier ",(0,r.jsx)(s.code,{children:"latest"})," \xe0 \xe9craser \xe0 chaque nouvelle \xe9criture. Cette\nsolution n'a pas \xe9t\xe9 retenue car besoin de lister pour r\xe9cup\xe9rer le dernier fichier plut\xf4t que d'y acc\xe9der directement."]})]})}function u(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>o,x:()=>d});var t=n(6540);const r={},i=t.createContext(r);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f2d6f90c.ba83eda8.js b/assets/js/f2d6f90c.ba83eda8.js deleted file mode 100644 index 0f541e69..00000000 --- a/assets/js/f2d6f90c.ba83eda8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[757],{6072:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>o,contentTitle:()=>l,default:()=>a,frontMatter:()=>r,metadata:()=>d,toc:()=>c});var t=n(4848),i=n(8453);const r={},l="Utilisation des Scheduled Tasks",d={id:"adr/2022-08-03.scheduled-tasks",title:"Utilisation des Scheduled Tasks",description:"3 ao\xfbt 2022",source:"@site/docs/adr/2022-08-03.scheduled-tasks.md",sourceDirName:"adr",slug:"/adr/2022-08-03.scheduled-tasks",permalink:"/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2022-08-03.scheduled-tasks.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Enregistrement des fichiers",permalink:"/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers"},next:{title:"Mise en Production",permalink:"/1j1s-etl/docs/adr/2022-11-07.mise-en-production"}},o={},c=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function u(e){const s={em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,i.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.header,{children:(0,t.jsx)(s.h1,{id:"utilisation-des-scheduled-tasks",children:"Utilisation des Scheduled Tasks"})}),"\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.em,{children:"3 ao\xfbt 2022"})}),"\n",(0,t.jsx)(s.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,t.jsx)(s.p,{children:"Simon B., S\xe9bastien F."}),"\n",(0,t.jsx)(s.h2,{id:"statut",children:"Statut"}),"\n",(0,t.jsx)(s.p,{children:"Accept\xe9"}),"\n",(0,t.jsx)(s.h2,{id:"contexte",children:"Contexte"}),"\n",(0,t.jsx)(s.p,{children:"Afin de transformer et de charger ponctuellement des stages, nous avons initialement choisi d'utiliser les Custom Clock\nProcesses de Scalingo plut\xf4t que les Scheduled Tasks (en beta)."}),"\n",(0,t.jsx)(s.p,{children:"Le probl\xe8me rencontr\xe9 est que, contrairement aux Scheduled Tasks, les Custom Clock Processes sont des containers\nScalingo qui tournent 24h/24. De ce fait, la facturation de ces Custom Clock Processes \xe9tait drastiquement plus ch\xe8re\nque pour les Scheduled Tasks."}),"\n",(0,t.jsx)(s.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,t.jsx)(s.p,{children:"Nous avons d\xe9cid\xe9 de migrer vers les Scheduled Tasks de Scalingo pour r\xe9soudre cette probl\xe9matique d'h\xe9bergement."}),"\n",(0,t.jsx)(s.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,t.jsx)(s.p,{children:"Point(s) positif(s) :"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Le co\xfbt d'h\xe9bergement est beaucoup plus bas ;"}),"\n",(0,t.jsx)(s.li,{children:"Nous pouvons modifier des variables d'environnement \xe0 la vol\xe9e qui seront prises en compte au prochain lancement de la\nt\xe2che"}),"\n",(0,t.jsx)(s.li,{children:"Il est plus simple de monitorer les Scheduled Tasks."}),"\n"]}),"\n",(0,t.jsx)(s.p,{children:"Point(s) n\xe9gatif(s) :"}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Le temps d'ex\xe9cution des crons ne peuvent pas d\xe9passer 15 mins ;"}),"\n",(0,t.jsx)(s.li,{children:"Il y a une intervalle entre deux ex\xe9cutions d'un m\xeame cron \xe0 respecter ;"}),"\n",(0,t.jsx)(s.li,{children:"On ne peut plus modifier l'intervalle d'ex\xe9cution des crons via des variables d'environnement ;"}),"\n",(0,t.jsx)(s.li,{children:"On ne peut plus ex\xe9cuter le cron \xe0 l'initialisation."}),"\n"]}),"\n",(0,t.jsx)(s.h2,{id:"autres-pistes-explor\xe9es",children:"Autres pistes explor\xe9es"}),"\n",(0,t.jsx)(s.p,{children:"Les Custom Clock Processes ont \xe9t\xe9 pr\xe9alablement utilis\xe9s mais leur co\xfbt d'h\xe9bergement \xe9tait trop important."})]})}function a(e={}){const{wrapper:s}={...(0,i.R)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>l,x:()=>d});var t=n(6540);const i={},r=t.createContext(i);function l(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f2d6f90c.c2fa7e3f.js b/assets/js/f2d6f90c.c2fa7e3f.js new file mode 100644 index 00000000..c807142c --- /dev/null +++ b/assets/js/f2d6f90c.c2fa7e3f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[757],{3993:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>t,toc:()=>c});const t=JSON.parse('{"id":"adr/2022-08-03.scheduled-tasks","title":"Utilisation des Scheduled Tasks","description":"3 ao\xfbt 2022","source":"@site/docs/adr/2022-08-03.scheduled-tasks.md","sourceDirName":"adr","slug":"/adr/2022-08-03.scheduled-tasks","permalink":"/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2022-08-03.scheduled-tasks.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Enregistrement des fichiers","permalink":"/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers"},"next":{"title":"Mise en Production","permalink":"/1j1s-etl/docs/adr/2022-11-07.mise-en-production"}}');var i=n(4848),r=n(8453);const l={},o="Utilisation des Scheduled Tasks",d={},c=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function a(e){const s={em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(s.header,{children:(0,i.jsx)(s.h1,{id:"utilisation-des-scheduled-tasks",children:"Utilisation des Scheduled Tasks"})}),"\n",(0,i.jsx)(s.p,{children:(0,i.jsx)(s.em,{children:"3 ao\xfbt 2022"})}),"\n",(0,i.jsx)(s.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,i.jsx)(s.p,{children:"Simon B., S\xe9bastien F."}),"\n",(0,i.jsx)(s.h2,{id:"statut",children:"Statut"}),"\n",(0,i.jsx)(s.p,{children:"Accept\xe9"}),"\n",(0,i.jsx)(s.h2,{id:"contexte",children:"Contexte"}),"\n",(0,i.jsx)(s.p,{children:"Afin de transformer et de charger ponctuellement des stages, nous avons initialement choisi d'utiliser les Custom Clock\nProcesses de Scalingo plut\xf4t que les Scheduled Tasks (en beta)."}),"\n",(0,i.jsx)(s.p,{children:"Le probl\xe8me rencontr\xe9 est que, contrairement aux Scheduled Tasks, les Custom Clock Processes sont des containers\nScalingo qui tournent 24h/24. De ce fait, la facturation de ces Custom Clock Processes \xe9tait drastiquement plus ch\xe8re\nque pour les Scheduled Tasks."}),"\n",(0,i.jsx)(s.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,i.jsx)(s.p,{children:"Nous avons d\xe9cid\xe9 de migrer vers les Scheduled Tasks de Scalingo pour r\xe9soudre cette probl\xe9matique d'h\xe9bergement."}),"\n",(0,i.jsx)(s.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,i.jsx)(s.p,{children:"Point(s) positif(s) :"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Le co\xfbt d'h\xe9bergement est beaucoup plus bas ;"}),"\n",(0,i.jsx)(s.li,{children:"Nous pouvons modifier des variables d'environnement \xe0 la vol\xe9e qui seront prises en compte au prochain lancement de la\nt\xe2che"}),"\n",(0,i.jsx)(s.li,{children:"Il est plus simple de monitorer les Scheduled Tasks."}),"\n"]}),"\n",(0,i.jsx)(s.p,{children:"Point(s) n\xe9gatif(s) :"}),"\n",(0,i.jsxs)(s.ul,{children:["\n",(0,i.jsx)(s.li,{children:"Le temps d'ex\xe9cution des crons ne peuvent pas d\xe9passer 15 mins ;"}),"\n",(0,i.jsx)(s.li,{children:"Il y a une intervalle entre deux ex\xe9cutions d'un m\xeame cron \xe0 respecter ;"}),"\n",(0,i.jsx)(s.li,{children:"On ne peut plus modifier l'intervalle d'ex\xe9cution des crons via des variables d'environnement ;"}),"\n",(0,i.jsx)(s.li,{children:"On ne peut plus ex\xe9cuter le cron \xe0 l'initialisation."}),"\n"]}),"\n",(0,i.jsx)(s.h2,{id:"autres-pistes-explor\xe9es",children:"Autres pistes explor\xe9es"}),"\n",(0,i.jsx)(s.p,{children:"Les Custom Clock Processes ont \xe9t\xe9 pr\xe9alablement utilis\xe9s mais leur co\xfbt d'h\xe9bergement \xe9tait trop important."})]})}function u(e={}){const{wrapper:s}={...(0,r.R)(),...e.components};return s?(0,i.jsx)(s,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},8453:(e,s,n)=>{n.d(s,{R:()=>l,x:()=>o});var t=n(6540);const i={},r=t.createContext(i);function l(e){const s=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f306b778.196b98cf.js b/assets/js/f306b778.196b98cf.js new file mode 100644 index 00000000..be1aa0ad --- /dev/null +++ b/assets/js/f306b778.196b98cf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[392],{2283:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>c,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"adr/2023-01-28.onion-architecture","title":"Onion Architecture","description":"28 janvier 2023","source":"@site/docs/adr/2023-01-28.onion-architecture.md","sourceDirName":"adr","slug":"/adr/2023-01-28.onion-architecture","permalink":"/1j1s-etl/docs/adr/2023-01-28.onion-architecture","draft":false,"unlisted":false,"editUrl":"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2023-01-28.onion-architecture.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Mise en Production","permalink":"/1j1s-etl/docs/adr/2022-11-07.mise-en-production"},"next":{"title":"Les contextes d\'un commit","permalink":"/1j1s-etl/docs/adr/2023-01-30.contexte-commit"}}');var r=t(4848),s=t(8453);const c={},o="Onion Architecture",d={},l=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function a(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"onion-architecture",children:"Onion Architecture"})}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.em,{children:"28 janvier 2023"})}),"\n",(0,r.jsx)(n.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,r.jsx)(n.p,{children:"S\xe9bastien F."}),"\n",(0,r.jsx)(n.h2,{id:"statut",children:"Statut"}),"\n",(0,r.jsx)(n.p,{children:"Accept\xe9"}),"\n",(0,r.jsx)(n.h2,{id:"contexte",children:"Contexte"}),"\n",(0,r.jsx)(n.p,{children:"En parcourant les diff\xe9rents designs architecturaux centr\xe9s sur l'isolation de la valeur, je me suis rendu compte que\nnous m\xe9langions la terminologie de plusieurs d'entre eux. De ce fait, il pouvait \xeatre difficile pour certains de monter\nsur le projet \xe0 cause de confusions sur la terminologie."}),"\n",(0,r.jsx)(n.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,r.jsxs)(n.p,{children:["De ce fait, je vous propose de renommer les dossiers ",(0,r.jsx)(n.code,{children:"usecase"})," par ",(0,r.jsx)(n.code,{children:"application-service"}),", de dissocier ",(0,r.jsx)(n.code,{children:"model"})," et\n",(0,r.jsx)(n.code,{children:"service"})," dans le dossier ",(0,r.jsx)(n.code,{children:"domain"})," pour bien s\xe9parer ",(0,r.jsx)(n.code,{children:"domain model"})," et ",(0,r.jsx)(n.code,{children:"domain service"})," tels qu'expliqu\xe9s dans l'",(0,r.jsx)(n.code,{children:"Onion Architecture"}),"."]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"Onion Architecture",src:t(6223).A+"",width:"845",height:"814"})}),"\n",(0,r.jsx)(n.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,r.jsxs)(n.p,{children:["Le design applicatif pr\xe9sent dans ce projet est une impl\xe9mentation by the book de l'",(0,r.jsx)(n.code,{children:"Onion architecture"})," et devrait\npermettre un on-boarding plus simple."]}),"\n",(0,r.jsx)(n.h2,{id:"autres-pistes-explor\xe9es",children:"Autres pistes explor\xe9es"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.code,{children:"Clean architecture"})," et ",(0,r.jsx)(n.code,{children:"architecture hexagonale"})," auraient toutes deux pu convenir mais il se trouve que notre\nimpl\xe9mentation actuelle se rapprochait beaucoup plus de l'",(0,r.jsx)(n.code,{children:"Onion architecture"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},6223:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/onion-architecture-999b3de99e1e5ae5b09968d02588f14c.png"},8453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var i=t(6540);const r={},s=i.createContext(r);function c(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f306b778.81b16fdf.js b/assets/js/f306b778.81b16fdf.js deleted file mode 100644 index 6b5c3df0..00000000 --- a/assets/js/f306b778.81b16fdf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[392],{7390:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var i=t(4848),r=t(8453);const s={},c="Onion Architecture",o={id:"adr/2023-01-28.onion-architecture",title:"Onion Architecture",description:"28 janvier 2023",source:"@site/docs/adr/2023-01-28.onion-architecture.md",sourceDirName:"adr",slug:"/adr/2023-01-28.onion-architecture",permalink:"/1j1s-etl/docs/adr/2023-01-28.onion-architecture",draft:!1,unlisted:!1,editUrl:"https://github.com/DNUM-SocialGouv/1j1s-etl/tree/main/docs/docs/docs/adr/2023-01-28.onion-architecture.md",tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Mise en Production",permalink:"/1j1s-etl/docs/adr/2022-11-07.mise-en-production"},next:{title:"Les contextes d'un commit",permalink:"/1j1s-etl/docs/adr/2023-01-30.contexte-commit"}},d={},l=[{value:"Contributeurs",id:"contributeurs",level:2},{value:"Statut",id:"statut",level:2},{value:"Contexte",id:"contexte",level:2},{value:"D\xe9cision",id:"d\xe9cision",level:2},{value:"Cons\xe9quences",id:"cons\xe9quences",level:2},{value:"Autres pistes explor\xe9es",id:"autres-pistes-explor\xe9es",level:2}];function a(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",header:"header",img:"img",p:"p",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"onion-architecture",children:"Onion Architecture"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.em,{children:"28 janvier 2023"})}),"\n",(0,i.jsx)(n.h2,{id:"contributeurs",children:"Contributeurs"}),"\n",(0,i.jsx)(n.p,{children:"S\xe9bastien F."}),"\n",(0,i.jsx)(n.h2,{id:"statut",children:"Statut"}),"\n",(0,i.jsx)(n.p,{children:"Accept\xe9"}),"\n",(0,i.jsx)(n.h2,{id:"contexte",children:"Contexte"}),"\n",(0,i.jsx)(n.p,{children:"En parcourant les diff\xe9rents designs architecturaux centr\xe9s sur l'isolation de la valeur, je me suis rendu compte que\nnous m\xe9langions la terminologie de plusieurs d'entre eux. De ce fait, il pouvait \xeatre difficile pour certains de monter\nsur le projet \xe0 cause de confusions sur la terminologie."}),"\n",(0,i.jsx)(n.h2,{id:"d\xe9cision",children:"D\xe9cision"}),"\n",(0,i.jsxs)(n.p,{children:["De ce fait, je vous propose de renommer les dossiers ",(0,i.jsx)(n.code,{children:"usecase"})," par ",(0,i.jsx)(n.code,{children:"application-service"}),", de dissocier ",(0,i.jsx)(n.code,{children:"model"})," et\n",(0,i.jsx)(n.code,{children:"service"})," dans le dossier ",(0,i.jsx)(n.code,{children:"domain"})," pour bien s\xe9parer ",(0,i.jsx)(n.code,{children:"domain model"})," et ",(0,i.jsx)(n.code,{children:"domain service"})," tels qu'expliqu\xe9s dans l'",(0,i.jsx)(n.code,{children:"Onion Architecture"}),"."]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Onion Architecture",src:t(6223).A+"",width:"845",height:"814"})}),"\n",(0,i.jsx)(n.h2,{id:"cons\xe9quences",children:"Cons\xe9quences"}),"\n",(0,i.jsxs)(n.p,{children:["Le design applicatif pr\xe9sent dans ce projet est une impl\xe9mentation by the book de l'",(0,i.jsx)(n.code,{children:"Onion architecture"})," et devrait\npermettre un on-boarding plus simple."]}),"\n",(0,i.jsx)(n.h2,{id:"autres-pistes-explor\xe9es",children:"Autres pistes explor\xe9es"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"Clean architecture"})," et ",(0,i.jsx)(n.code,{children:"architecture hexagonale"})," auraient toutes deux pu convenir mais il se trouve que notre\nimpl\xe9mentation actuelle se rapprochait beaucoup plus de l'",(0,i.jsx)(n.code,{children:"Onion architecture"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},6223:(e,n,t)=>{t.d(n,{A:()=>i});const i=t.p+"assets/images/onion-architecture-999b3de99e1e5ae5b09968d02588f14c.png"},8453:(e,n,t)=>{t.d(n,{R:()=>c,x:()=>o});var i=t(6540);const r={},s=i.createContext(r);function c(e){const n=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:c(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.373139aa.js b/assets/js/main.373139aa.js deleted file mode 100644 index c76359f0..00000000 --- a/assets/js/main.373139aa.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.373139aa.js.LICENSE.txt */ -(self.webpackChunk_1j1s_etl_docs=self.webpackChunk_1j1s_etl_docs||[]).push([[792],{8328:(e,t,n)=>{"use strict";n.d(t,{A:()=>p});n(6540);var r=n(3259),o=n.n(r),a=n(4054);const i={"01e36714":[()=>n.e(932).then(n.bind(n,5990)),"@site/docs/tuto/rollback-database.md",5990],"035f6a2b":[()=>n.e(910).then(n.bind(n,6751)),"@site/docs/tuto/creer-nouveau-bucket-minio.md",6751],"05a49df9":[()=>n.e(745).then(n.bind(n,1658)),"@site/docs/conventions/git.md",1658],"0b0ce070":[()=>n.e(256).then(n.bind(n,3144)),"@site/docs/tuto/tutoMeP.md",3144],"0b6d1cf3":[()=>n.e(538).then(n.bind(n,9468)),"@site/docs/tuto/le_flux_ne_met_plus_a_jour.md",9468],"14eb3368":[()=>Promise.all([n.e(869),n.e(969)]).then(n.bind(n,7247)),"@theme/DocCategoryGeneratedIndexPage",7247],17896441:[()=>Promise.all([n.e(869),n.e(408),n.e(401)]).then(n.bind(n,8632)),"@theme/DocItem",8632],"1f391b9e":[()=>Promise.all([n.e(869),n.e(408),n.e(61)]).then(n.bind(n,7973)),"@theme/MDXPage",7973],"24226b5e":[()=>n.e(675).then(n.bind(n,4833)),"@site/docs/onboarding/prerequis.md",4833],"2648826c":[()=>n.e(128).then(n.bind(n,9893)),"@site/docs/adr/2022-08-01.enregistrement-des-fichiers.md",9893],"2d792a0e":[()=>n.e(571).then(n.bind(n,9072)),"@site/docs/conventions/langages.md",9072],"3590feea":[()=>n.e(557).then(n.bind(n,9420)),"@site/docs/tuto/scheduled-tasks.md",9420],"3dea5f66":[()=>n.e(717).then(n.t.bind(n,918,19)),"@generated/docusaurus-plugin-content-docs/default/p/1-j-1-s-etl-docs-category-tutoriels-9c7.json",918],"4fd05c72":[()=>Promise.all([n.e(869),n.e(422)]).then(n.bind(n,825)),"@site/pages/index.tsx",825],"5281b7a2":[()=>n.e(443).then(n.bind(n,8798)),"@site/docs/architecture.md",8798],"52cb0b0e":[()=>n.e(186).then(n.bind(n,7187)),"@site/docs/onboarding/installation.md",7187],"57aa9b0b":[()=>n.e(602).then(n.bind(n,9755)),"@site/docs/tuto/sos.md",9755],"5dd36aa3":[()=>n.e(452).then(n.t.bind(n,9166,19)),"@generated/docusaurus-plugin-content-docs/default/p/1-j-1-s-etl-docs-category-adrs-943.json",9166],"5e95c892":[()=>n.e(647).then(n.bind(n,7121)),"@theme/DocsRoot",7121],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,4784)),"@generated/docusaurus.config",4784],"61a2fae4":[()=>n.e(505).then(n.bind(n,6888)),"@site/docs/adr/2023-01-30.contexte-commit.md",6888],"7028c347":[()=>n.e(545).then(n.bind(n,9886)),"@site/docs/adr/2023-02-15.migration-nestjs.md",9886],"737b34ca":[()=>n.e(7).then(n.bind(n,4807)),"@site/docs/onboarding/checklist.md",4807],"9457ee1a":[()=>n.e(324).then(n.bind(n,8904)),"@site/pages/mentions-legales.md",8904],a4518945:[()=>n.e(78).then(n.bind(n,2098)),"@site/docs/tuto/copie-donnee-en-local.md",2098],a7456010:[()=>n.e(235).then(n.t.bind(n,8552,19)),"@generated/docusaurus-plugin-content-pages/default/__plugin.json",8552],a7bd4aaa:[()=>n.e(98).then(n.bind(n,1723)),"@theme/DocVersionRoot",1723],a94703ab:[()=>Promise.all([n.e(869),n.e(48)]).then(n.bind(n,1377)),"@theme/DocRoot",1377],aba21aa0:[()=>n.e(742).then(n.t.bind(n,7093,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",7093],bbcccd5a:[()=>n.e(810).then(n.bind(n,5365)),"@site/docs/tuto/consulter-contenu-minio.md",5365],bc5d99e5:[()=>n.e(669).then(n.bind(n,894)),"@site/docs/adr/2022-11-07.mise-en-production.md",894],c73fa0c0:[()=>n.e(852).then(n.bind(n,9491)),"@site/docs/tuto/purge-des-donnees.md",9491],e5ebd7ba:[()=>n.e(300).then(n.t.bind(n,9509,19)),"@generated/docusaurus-plugin-content-docs/default/p/1-j-1-s-etl-docs-category-onboarding-789.json",9509],ee4df79f:[()=>n.e(350).then(n.t.bind(n,6651,19)),"@generated/docusaurus-plugin-content-docs/default/p/1-j-1-s-etl-docs-category-\ufe0f-conventions-e7a.json",6651],efa26a48:[()=>n.e(744).then(n.bind(n,6295)),"@site/docs/adr/2023-02-08.exception-dans-le-linter.md",6295],f01c0b75:[()=>n.e(707).then(n.bind(n,3865)),"@site/docs/adr/2022-07-08.historisation-des-flux.md",3865],f11a1ea1:[()=>n.e(746).then(n.t.bind(n,7170,19)),"@generated/docusaurus-plugin-content-docs/default/p/1-j-1-s-etl-docs-d19.json",7170],f2d6f90c:[()=>n.e(757).then(n.bind(n,6072)),"@site/docs/adr/2022-08-03.scheduled-tasks.md",6072],f306b778:[()=>n.e(392).then(n.bind(n,7390)),"@site/docs/adr/2023-01-28.onion-architecture.md",7390]};var l=n(4848);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(6921),c=n(3102);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(237).then(n.bind(n,2237)),modules:["@theme/NotFound"],webpack:()=>[2237],render(e,t){const n=e.default;return(0,l.jsx)(c.W,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,u.A)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const s=o.__props;return delete o.__props,(0,l.jsx)(c.W,{value:i,children:(0,l.jsx)(a,{...o,...s,...n})})}})}const p=[{path:"/1j1s-etl/mentions-legales",component:d("/1j1s-etl/mentions-legales","c96"),exact:!0},{path:"/1j1s-etl/docs",component:d("/1j1s-etl/docs","aff"),routes:[{path:"/1j1s-etl/docs",component:d("/1j1s-etl/docs","428"),routes:[{path:"/1j1s-etl/docs",component:d("/1j1s-etl/docs","3f1"),routes:[{path:"/1j1s-etl/docs/adr/2022-07-08.historisation-des-flux",component:d("/1j1s-etl/docs/adr/2022-07-08.historisation-des-flux","d02"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers",component:d("/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers","659"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks",component:d("/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks","97f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/adr/2022-11-07.mise-en-production",component:d("/1j1s-etl/docs/adr/2022-11-07.mise-en-production","887"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/adr/2023-01-28.onion-architecture",component:d("/1j1s-etl/docs/adr/2023-01-28.onion-architecture","c7f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/adr/2023-01-30.contexte-commit",component:d("/1j1s-etl/docs/adr/2023-01-30.contexte-commit","e7e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter",component:d("/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter","11e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/adr/2023-02-15.migration-nestjs",component:d("/1j1s-etl/docs/adr/2023-02-15.migration-nestjs","9ed"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/architecture",component:d("/1j1s-etl/docs/architecture","f46"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/category/-adrs",component:d("/1j1s-etl/docs/category/-adrs","2dc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/category/\ufe0f-conventions",component:d("/1j1s-etl/docs/category/\ufe0f-conventions","5c5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/category/-onboarding",component:d("/1j1s-etl/docs/category/-onboarding","416"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/category/-tutoriels",component:d("/1j1s-etl/docs/category/-tutoriels","889"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/conventions/git",component:d("/1j1s-etl/docs/conventions/git","a6c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/conventions/langages",component:d("/1j1s-etl/docs/conventions/langages","bc4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/onboarding/checklist",component:d("/1j1s-etl/docs/onboarding/checklist","eb0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/onboarding/installation",component:d("/1j1s-etl/docs/onboarding/installation","1c4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/onboarding/prerequis",component:d("/1j1s-etl/docs/onboarding/prerequis","78d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/consulter-contenu-minio",component:d("/1j1s-etl/docs/tuto/consulter-contenu-minio","5c1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/copie-donnee-en-local",component:d("/1j1s-etl/docs/tuto/copie-donnee-en-local","334"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio",component:d("/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio","6bb"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour",component:d("/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour","cf2"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/purge-des-donnees",component:d("/1j1s-etl/docs/tuto/purge-des-donnees","ca8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/rollback-database",component:d("/1j1s-etl/docs/tuto/rollback-database","38c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/scheduled-tasks",component:d("/1j1s-etl/docs/tuto/scheduled-tasks","b38"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/sos",component:d("/1j1s-etl/docs/tuto/sos","c74"),exact:!0,sidebar:"tutorialSidebar"},{path:"/1j1s-etl/docs/tuto/tutoMeP",component:d("/1j1s-etl/docs/tuto/tutoMeP","f72"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"/1j1s-etl/",component:d("/1j1s-etl/","b9c"),exact:!0},{path:"*",component:d("*")}]},6125:(e,t,n)=>{"use strict";n.d(t,{o:()=>a,x:()=>i});var r=n(6540),o=n(4848);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},7815:(e,t,n)=>{"use strict";var r=n(6540),o=n(5338),a=n(545),i=n(4625),l=n(4784),s=n(8193);const u=[n(119),n(6134),n(6294),n(1043)];var c=n(8328),d=n(6347),p=n(2831),f=n(4848);function m(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var h=n(5260),g=n(4586),y=n(6025),b=n(6342),v=n(1003),w=n(2131),k=n(4090);var x=n(440),S=n(1463);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.A)(),r=(0,w.o)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(h.A,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.A)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.A)(),{pathname:r}=(0,d.zy)();return e+(0,x.Ks)((0,y.Ay)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(h.A,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,g.A)(),{metadata:t,image:n}=(0,b.p)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(h.A,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:k.w})]}),n&&(0,f.jsx)(v.be,{image:n}),(0,f.jsx)(E,{}),(0,f.jsx)(_,{}),(0,f.jsx)(S.A,{tag:"default",locale:e}),(0,f.jsx)(h.A,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const j=new Map;var A=n(6125),T=n(6988),L=n(205);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.A)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.u)(c.A,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.A.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(N,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.qh,{location:t,render:()=>e})})}}const D=O,I="__docusaurus-base-url-issue-banner-suggestion-container";function M(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '__docusaurus-base-url-issue-banner-container';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{let{route:t}=e;return!0===t.exact})))return j.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return j.set(e.pathname,t),{...e,pathname:t}}((0,d.zy)());return(0,f.jsx)(D,{location:e,children:H})}function V(){return(0,f.jsx)(U.A,{children:(0,f.jsx)(T.l,{children:(0,f.jsxs)(A.x,{children:[(0,f.jsxs)(m,{children:[(0,f.jsx)(B,{}),(0,f.jsx)(C,{}),(0,f.jsx)(z,{}),(0,f.jsx)(G,{})]}),(0,f.jsx)(q,{})]})})})}var W=n(4054);const K=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Q=n(6921);const Y=new Set,Z=new Set,X=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,J={prefetch:e=>{if(!(e=>!X()&&!Z.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,p.u)(c.A,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Q.A)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!X()&&!Z.has(e))(e)&&(Z.add(e),R(e))},ee=Object.freeze(J);function te(e){let{children:t}=e;return"hash"===l.default.future.experimental_router?(0,f.jsx)(i.I9,{children:t}):(0,f.jsx)(i.Kd,{children:t})}const ne=Boolean(!0);if(s.A.canUseDOM){window.docusaurus=ee;const e=document.getElementById("__docusaurus"),t=(0,f.jsx)(a.vd,{children:(0,f.jsx)(te,{children:(0,f.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(ne)window.docusaurusRoot=o.hydrateRoot(e,t,{onRecoverableError:n});else{const r=o.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};R(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},6988:(e,t,n)=>{"use strict";n.d(t,{o:()=>d,l:()=>p});var r=n(6540),o=n(4784);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/1j1s-etl/docs","versions":[{"name":"current","label":"Future version \ud83d\udea7","isLast":true,"path":"/1j1s-etl/docs","mainDocId":"architecture","docs":[{"id":"adr/2022-07-08.historisation-des-flux","path":"/1j1s-etl/docs/adr/2022-07-08.historisation-des-flux","sidebar":"tutorialSidebar"},{"id":"adr/2022-08-01.enregistrement-des-fichiers","path":"/1j1s-etl/docs/adr/2022-08-01.enregistrement-des-fichiers","sidebar":"tutorialSidebar"},{"id":"adr/2022-08-03.scheduled-tasks","path":"/1j1s-etl/docs/adr/2022-08-03.scheduled-tasks","sidebar":"tutorialSidebar"},{"id":"adr/2022-11-07.mise-en-production","path":"/1j1s-etl/docs/adr/2022-11-07.mise-en-production","sidebar":"tutorialSidebar"},{"id":"adr/2023-01-28.onion-architecture","path":"/1j1s-etl/docs/adr/2023-01-28.onion-architecture","sidebar":"tutorialSidebar"},{"id":"adr/2023-01-30.contexte-commit","path":"/1j1s-etl/docs/adr/2023-01-30.contexte-commit","sidebar":"tutorialSidebar"},{"id":"adr/2023-02-08.exception-dans-le-linter","path":"/1j1s-etl/docs/adr/2023-02-08.exception-dans-le-linter","sidebar":"tutorialSidebar"},{"id":"adr/2023-02-15.migration-nestjs","path":"/1j1s-etl/docs/adr/2023-02-15.migration-nestjs","sidebar":"tutorialSidebar"},{"id":"architecture","path":"/1j1s-etl/docs/architecture","sidebar":"tutorialSidebar"},{"id":"conventions/git","path":"/1j1s-etl/docs/conventions/git","sidebar":"tutorialSidebar"},{"id":"conventions/langages","path":"/1j1s-etl/docs/conventions/langages","sidebar":"tutorialSidebar"},{"id":"onboarding/checklist","path":"/1j1s-etl/docs/onboarding/checklist","sidebar":"tutorialSidebar"},{"id":"onboarding/installation","path":"/1j1s-etl/docs/onboarding/installation","sidebar":"tutorialSidebar"},{"id":"onboarding/prerequis","path":"/1j1s-etl/docs/onboarding/prerequis","sidebar":"tutorialSidebar"},{"id":"tuto/consulter-contenu-minio","path":"/1j1s-etl/docs/tuto/consulter-contenu-minio","sidebar":"tutorialSidebar"},{"id":"tuto/copie-donnee-en-local","path":"/1j1s-etl/docs/tuto/copie-donnee-en-local","sidebar":"tutorialSidebar"},{"id":"tuto/creer-nouveau-bucket-minio","path":"/1j1s-etl/docs/tuto/creer-nouveau-bucket-minio","sidebar":"tutorialSidebar"},{"id":"tuto/le_flux_ne_met_plus_a_jour","path":"/1j1s-etl/docs/tuto/le_flux_ne_met_plus_a_jour","sidebar":"tutorialSidebar"},{"id":"tuto/purge-des-donnees","path":"/1j1s-etl/docs/tuto/purge-des-donnees","sidebar":"tutorialSidebar"},{"id":"tuto/rollback-database","path":"/1j1s-etl/docs/tuto/rollback-database","sidebar":"tutorialSidebar"},{"id":"tuto/scheduled-tasks","path":"/1j1s-etl/docs/tuto/scheduled-tasks","sidebar":"tutorialSidebar"},{"id":"tuto/sos","path":"/1j1s-etl/docs/tuto/sos","sidebar":"tutorialSidebar"},{"id":"tuto/tutoMeP","path":"/1j1s-etl/docs/tuto/tutoMeP","sidebar":"tutorialSidebar"},{"id":"/category/-adrs","path":"/1j1s-etl/docs/category/-adrs","sidebar":"tutorialSidebar"},{"id":"/category/\ufe0f-conventions","path":"/1j1s-etl/docs/category/\ufe0f-conventions","sidebar":"tutorialSidebar"},{"id":"/category/-onboarding","path":"/1j1s-etl/docs/category/-onboarding","sidebar":"tutorialSidebar"},{"id":"/category/-tutoriels","path":"/1j1s-etl/docs/category/-tutoriels","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/1j1s-etl/docs/architecture","label":"\ud83d\uddfa\ufe0f Architecture"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"fr","locales":["fr"],"path":"i18n","currentLocale":"fr","localeConfigs":{"fr":{"label":"Fran\xe7ais","direction":"ltr","htmlLang":"fr","calendar":"gregory","path":"fr"}}}');var l=n(2654);const s=JSON.parse('{"docusaurusVersion":"3.5.2","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.5.2"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.5.2"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.5.2"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.5.2"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.5.2"}}}');var u=n(4848);const c={siteConfig:o.default,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},d=r.createContext(c);function p(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},7489:(e,t,n)=>{"use strict";n.d(t,{A:()=>h});var r=n(6540),o=n(8193),a=n(5260),i=n(440),l=n(781),s=n(3102),u=n(4848);function c(e){let{error:t,tryAgain:n}=e;return(0,u.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function p(e){let{children:t}=e;return(0,u.jsx)(s.W,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function f(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)(p,{children:(0,u.jsxs)(h,{fallback:()=>(0,u.jsx)(c,{error:t,tryAgain:n}),children:[(0,u.jsx)(a.A,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(l.A,{children:(0,u.jsx)(c,{error:t,tryAgain:n})})]})})}const m=e=>(0,u.jsx)(f,{...e});class h extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.A.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??m)(e)}return e??null}}},8193:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5260:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(545),o=n(4848);function a(e){return(0,o.jsx)(r.mg,{...e})}},8774:(e,t,n)=>{"use strict";n.d(t,{A:()=>f});var r=n(6540),o=n(4625),a=n(440),i=n(4586),l=n(6654),s=n(8193),u=n(3427),c=n(6025),d=n(4848);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:y=!0,...b}=e;const{siteConfig:v}=(0,i.A)(),{trailingSlash:w,baseUrl:k}=v,x=v.future.experimental_router,{withBaseUrl:S}=(0,c.hH)(),_=(0,u.A)(),E=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>E.current));const C=p||f;const j=(0,l.A)(C),A=C?.replace("pathname://","");let T=void 0!==A?(L=A,y&&(e=>e.startsWith("/"))(L)?S(L):L):void 0;var L;"hash"===x&&T?.startsWith("./")&&(T=T?.slice(1)),T&&j&&(T=(0,a.Ks)(T,{trailingSlash:w,baseUrl:k}));const P=(0,r.useRef)(!1),N=n?o.k2:o.N_,R=s.A.canUseIntersectionObserver,O=(0,r.useRef)(),D=()=>{P.current||null==T||(window.docusaurus.preload(T),P.current=!0)};(0,r.useEffect)((()=>(!R&&j&&s.A.canUseDOM&&null!=T&&window.docusaurus.prefetch(T),()=>{R&&O.current&&O.current.disconnect()})),[O,T,R,j]);const I=T?.startsWith("#")??!1,M=!b.target||"_self"===b.target,F=!T||!j||!M||I&&"hash"!==x;g||!I&&F||_.collectLink(T),b.id&&_.collectAnchor(b.id);const z={};return F?(0,d.jsx)("a",{ref:E,href:T,...C&&!j&&{target:"_blank",rel:"noopener noreferrer"},...b,...z}):(0,d.jsx)(N,{...b,onMouseEnter:D,onTouchStart:D,innerRef:e=>{E.current=e,R&&e&&j&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),O.current.observe(e))},to:T,...n&&{isActive:h,activeClassName:m},...z})}const f=r.forwardRef(p)},418:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});const r=()=>null},1312:(e,t,n)=>{"use strict";n.d(t,{A:()=>u,T:()=>s});var r=n(6540),o=n(4848);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(2654);function l(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return a(l({message:n,id:r}),t)}function u(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const i=l({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},7065:(e,t,n)=>{"use strict";n.d(t,{W:()=>r});const r="default"},6654:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{A:()=>o,z:()=>r})},6025:(e,t,n)=>{"use strict";n.d(t,{Ay:()=>l,hH:()=>i});var r=n(6540),o=n(4586),a=n(6654);function i(){const{siteConfig:e}=(0,o.A)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,l=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:o=!1,absolute:i=!1}={},router:l}=e;if(!r||r.startsWith("#")||(0,a.z)(r))return r;if("hash"===l)return r.startsWith("/")?`.${r}`:`./${r}`;if(o)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const s=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+s:s}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:l}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},3427:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});var r=n(6540);n(4848);const o=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),a=()=>(0,r.useContext)(o);function i(){return a()}},4586:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6988);function a(){return(0,r.useContext)(o.o)}},2303:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(6540),o=n(6125);function a(){return(0,r.useContext)(o.o)}},205:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(6540);const o=n(8193).A.canUseDOM?r.useLayoutEffect:r.useEffect},6921:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const l=o?`${o}.${a}`:a;r(i)?e(i,l):t[l]=i}))}(e),t}},3102:(e,t,n)=>{"use strict";n.d(t,{W:()=>i,o:()=>a});var r=n(6540),o=n(4848);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),l=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:l,children:t})}},3886:(e,t,n)=>{"use strict";n.d(t,{VQ:()=>g,g1:()=>b});var r=n(6540),o=n(4070),a=n(7065),i=n(6342),l=n(679),s=n(9532),u=n(4848);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,l.Wf)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,l.Wf)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,l.Wf)(c(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,o.Gy)(),t=(0,i.p)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return(0,u.jsx)(f.Provider,{value:n,children:t})}function g(e){let{children:t}=e;return(0,u.jsx)(h,{children:t})}function y(){const e=(0,r.useContext)(f);if(!e)throw new s.dV("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.W);const t=(0,o.ht)(e),[n,i]=y(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},609:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,t:()=>u});var r=n(6540),o=n(9532),a=n(4848);const i=Symbol("EmptyContext"),l=r.createContext(i);function s(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(l.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(l);if(e===i)throw new o.dV("DocsSidebarProvider");return e}},4718:(e,t,n)=>{"use strict";n.d(t,{d1:()=>C,Nr:()=>f,w8:()=>y,$S:()=>m,cC:()=>p,B5:()=>E,Vd:()=>x,QB:()=>_,fW:()=>S,OF:()=>k,Y:()=>v});var r=n(6540),o=n(6347),a=n(2831),i=n(4070),l=n(9169);function s(e){return Array.from(new Set(e))}var u=n(3886),c=n(3025),d=n(609);function p(e){const t=(0,c.r)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}function m(){const{pathname:e}=(0,o.zy)(),t=(0,d.t)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=w({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,l.ys)(e,t),g=(e,t)=>e.some((e=>y(e,t)));function y(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||g(e.items,t))}function b(e,t){switch(e.type){case"category":return y(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||y(e,t);default:return!0}}function v(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function w(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,l.ys)(a.href,n)||e(a.items))||"link"===a.type&&(0,l.ys)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function k(){const e=(0,d.t)(),{pathname:t}=(0,o.zy)(),n=(0,i.vT)()?.pluginData.breadcrumbs;return!1!==n&&e?w({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.zK)(e),{preferredVersion:n}=(0,u.g1)(e),o=(0,i.r7)(e);return(0,r.useMemo)((()=>s([t,n,o].filter(Boolean))),[t,n,o])}function S(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function _(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${s(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,o.zy)(),r=(0,c.r)(),i=t.routes,l=i.find((e=>(0,o.B6)(n.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?r.docsSidebars[s]:void 0;return{docElement:(0,a.v)(i),sidebarName:s,sidebarItems:u}}function C(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!f(e)))}},3025:(e,t,n)=>{"use strict";n.d(t,{n:()=>l,r:()=>s});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(null===e)throw new o.dV("DocsVersionProvider");return e}},4070:(e,t,n)=>{"use strict";n.d(t,{zK:()=>h,vT:()=>p,Gy:()=>c,HW:()=>g,ht:()=>d,r7:()=>m,jh:()=>f});var r=n(6347),o=n(4586),a=n(7065);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.A)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){return[...e.versions].sort(((e,t)=>e.path===t.path?0:e.path.includes(t.path)?-1:t.path.includes(e.path)?1:0)).find((e=>!!(0,r.B6)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.B6)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>{try{return function(e,t,n){void 0===t&&(t=a.W),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function p(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.zy)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.B6)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function h(e){const t=d(e),{pathname:n}=(0,r.zy)();return s(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.zy)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6294:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(5947),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},6134:(e,t,n)=>{"use strict";var r=n(1765),o=n(4784);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(9700),n(8692)(`./prism-${e}`)})),delete globalThis.Prism}(r.My)},1107:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(4164),o=n(1312),a=n(6342),i=n(8774),l=n(3427);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(4848);function c(e){let{as:t,id:n,...c}=e;const d=(0,l.A)(),{navbar:{hideOnScroll:p}}=(0,a.p)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const f=(0,o.T)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,u.jsxs)(t,{...c,className:(0,r.A)("anchor",p?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.A,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},3186:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(4848);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},781:(e,t,n)=>{"use strict";n.d(t,{A:()=>ft});var r=n(6540),o=n(4164),a=n(7489),i=n(1003),l=n(6347),s=n(1312),u=n(5062),c=n(4848);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.W6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.$)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,s.T)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:r}=f();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":m,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(7559),y=n(4090);const b={skipToContent:"skipToContent_fXgn"};function v(){return(0,c.jsx)(h,{className:b.skipToContent})}var w=n(6342),k=n(5041);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:o,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function _(e){return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.A)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.p)(),{content:n}=t;return(0,c.jsx)("div",{...e,className:(0,o.A)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const j={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.p)(),{isActive:t,close:n}=(0,k.M)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,c.jsxs)("div",{className:j.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,c.jsx)("div",{className:j.announcementBarPlaceholder}),(0,c.jsx)(C,{className:j.announcementBarContent}),a&&(0,c.jsx)(_,{onClick:n,className:j.announcementBarClose})]})}var T=n(9876),L=n(3104);var P=n(9532),N=n(5600);const R=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,T.M)(),t=(0,N.YL)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,P.ZC)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,c.jsx)(R.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(R);if(!e)throw new P.dV("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,N.YL)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=I();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,o.A)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var F=n(5293),z=n(2303);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function U(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.A)(),l=(0,s.T)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,s.T)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,s.T)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,c.jsx)("div",{className:(0,o.A)($.toggle,t),children:(0,c.jsxs)("button",{className:(0,o.A)("clean-btn",$.toggleButton,!i&&$.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,o.A)($.toggleIcon,$.lightToggleIcon)}),(0,c.jsx)(U,{className:(0,o.A)($.toggleIcon,$.darkToggleIcon)})]})})}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.p)().navbar.style,r=(0,w.p)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,F.G)();return r?null:(0,c.jsx)(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var W=n(3465);function K(){return(0,c.jsx)(W.A,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,T.M)();return(0,c.jsx)("button",{type:"button","aria-label":(0,s.T)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,c.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(K,{}),(0,c.jsx)(V,{className:"margin-right--md"}),(0,c.jsx)(Q,{})]})}var Z=n(8774),X=n(6025),J=n(6654);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(3186);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:l,prependBaseUrlToHref:s,...u}=e;const d=(0,X.Ay)(r),p=(0,X.Ay)(t),f=(0,X.Ay)(o,{forcePrependBaseUrl:!0}),m=a&&o&&!(0,J.A)(o),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[a,m&&(0,c.jsx)(te.A,{...l&&{width:12,height:12}})]})};return o?(0,c.jsx)(Z.A,{href:s?f:o,...u,...h}):(0,c.jsx)(Z.A,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...u,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,c.jsx)(ne,{className:(0,o.A)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,o.A)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,c.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(1422),le=n(9169),se=n(4586);const ue="dropdownNavbarItemMobile_S0Fm";function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.ys)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:a,onClick:i,...l}=e;const s=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{s.current&&!s.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[s]),(0,c.jsxs)("div",{ref:s,className:(0,o.A)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:l.to?void 0:"#",className:(0,o.A)("navbar__link",a),...l,onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:l.children??l.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ee,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:a,onClick:i,...s}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.A)(),{pathname:t}=(0,l.zy)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),(0,c.jsxs)("li",{className:(0,o.A)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,c.jsx)(ne,{role:"button",className:(0,o.A)(ue,"menu__link menu__link--sublist menu__link--sublist-caret",n),...s,onClick:e=>{e.preventDefault(),f()},children:s.children??s.label}),(0,c.jsx)(ie.N,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ee,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,c.jsx)(r,{...n})}var me=n(2131);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const ge="iconLanguage_nlXk";var ye=n(418);const be={navbarSearchContainer:"navbarSearchContainer_Bca1"};function ve(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,o.A)(n,be.navbarSearchContainer),children:t})}var we=n(4070),ke=n(4718);var xe=n(3886);function Se(e,t){return t.alternateDocVersions[e.name]??function(e){return e.docs.find((t=>t.id===e.mainDocId))}(e)}const _e={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.A)(),p=(0,me.o)(),{search:f,hash:m}=(0,l.zy)(),h=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,s.T)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,c.jsx)(fe,{...a,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(he,{className:ge}),g]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(ve,{className:n,children:(0,c.jsx)(ye.A,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,c.jsx)(i,{className:(0,o.A)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.zK)(r),i=(0,ke.QB)(t,r),l=a?.path===i?.path;return null===i||i.unlisted&&!l?null:(0,c.jsx)(ae,{exact:!0,...o,isActive:()=>l||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,we.zK)(r),i=(0,ke.fW)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,c.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,ke.Vd)(r)[0],i=t??a.label,l=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,c.jsx)(ae,{...o,label:i,to:l})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:u,hash:d}=(0,l.zy)(),p=(0,we.zK)(n),f=(0,we.jh)(n),{savePreferredVersionName:m}=(0,xe.g1)(n),h=[...o,...f.map((function(e){const t=Se(e,p);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>m(e.name)}})),...a],g=(0,ke.Vd)(n)[0],y=t&&h.length>1?(0,s.T)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,b=t&&h.length>1?void 0:Se(g,p).path;return h.length<=1?(0,c.jsx)(ae,{...i,mobile:t,label:y,to:b,isActive:r?()=>!1:void 0}):(0,c.jsx)(fe,{...i,mobile:t,label:y,to:b,items:h,isActive:r?()=>!1:void 0})}};function Ee(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=_e[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(o,{...n})}function Ce(){const e=(0,T.M)(),t=(0,w.p)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ee,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function je(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.jsx)(s.A,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ae(){const e=0===(0,w.p)().navbar.items.length,t=I();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(je,{onClick:()=>t.hide()}),t.content]})}function Te(){const e=(0,T.M)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,c.jsx)(M,{header:(0,c.jsx)(Y,{}),primaryMenu:(0,c.jsx)(Ce,{}),secondaryMenu:(0,c.jsx)(Ae,{})}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Pe(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,o.A)("navbar-sidebar__backdrop",e.className)})}function Ne(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.p)(),i=(0,T.M)(),{navbarRef:l,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,L.Mq)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.jsxs)("nav",{ref:l,"aria-label":(0,s.T)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.A)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!d&&Le.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Pe,{onClick:i.toggle}),(0,c.jsx)(Te,{})]})}var Re=n(440);const Oe={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function De(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function Ie(e){let{error:t}=e;const n=(0,Re.rA)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:Oe.errorBoundaryError,children:n})}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Fe="right";function ze(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function Be(){const{toggle:e,shown:t}=(0,T.M)();return(0,c.jsx)("button",{onClick:e,"aria-label":(0,s.T)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,c.jsx)(ze,{})})}const Ue={colorModeToggle:"colorModeToggle_DEke"};function $e(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.jsx)(Me,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,c.jsx)(Ee,{...e})},t)))})}function qe(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function He(){const e=(0,T.M)(),t=(0,w.p)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Fe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,c.jsx)(qe,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(Be,{}),(0,c.jsx)(K,{}),(0,c.jsx)($e,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)($e,{items:r}),(0,c.jsx)(V,{className:Ue.colorModeToggle}),!o&&(0,c.jsx)(ve,{children:(0,c.jsx)(ye.A,{})})]})})}function Ge(){return(0,c.jsx)(Ne,{children:(0,c.jsx)(He,{})})}function Ve(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,l=(0,X.Ay)(n),s=(0,X.Ay)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(Z.A,{className:"footer__link-item",...r?{href:a?s:r}:{to:l},...i,children:[o,r&&!(0,J.A)(r)&&(0,c.jsx)(te.A,{})]})}function We(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(Ve,{item:t})},t.href??t.to)}function Ke(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(We,{item:e},t)))})]})}function Qe(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(Ke,{column:e},t)))})}function Ye(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function Ze(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(Ve,{item:t})}function Xe(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(Ze,{item:e}),t.length!==n+1&&(0,c.jsx)(Ye,{})]},n)))})})}function Je(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(Qe,{columns:t}):(0,c.jsx)(Xe,{links:t})}var et=n(1122);const tt="footerLogoLink_BH7S";function nt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.hH)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(et.A,{className:(0,o.A)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function rt(e){let{logo:t}=e;return t.href?(0,c.jsx)(Z.A,{href:t.href,className:tt,target:t.target,children:(0,c.jsx)(nt,{logo:t})}):(0,c.jsx)(nt,{logo:t})}function ot(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,c.jsx)("footer",{className:(0,o.A)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function it(){const{footer:e}=(0,w.p)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,c.jsx)(at,{style:o,links:n&&n.length>0&&(0,c.jsx)(Je,{links:n}),logo:r&&(0,c.jsx)(rt,{logo:r}),copyright:t&&(0,c.jsx)(ot,{copyright:t})})}const lt=r.memo(it),st=(0,P.fM)([F.a,k.o,L.Tv,xe.VQ,i.Jx,function(e){let{children:t}=e;return(0,c.jsx)(N.y_,{children:(0,c.jsx)(T.e,{children:(0,c.jsx)(O,{children:t})})})}]);function ut(e){let{children:t}=e;return(0,c.jsx)(st,{children:t})}var ct=n(1107);function dt(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(ct.A,{as:"h1",className:"hero__title",children:(0,c.jsx)(s.A,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(De,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(Ie,{error:t})})]})})})}const pt={mainWrapper:"mainWrapper_z2l0"};function ft(e){const{children:t,noFooter:n,wrapperClassName:r,title:l,description:s}=e;return(0,y.J)(),(0,c.jsxs)(ut,{children:[(0,c.jsx)(i.be,{title:l,description:s}),(0,c.jsx)(v,{}),(0,c.jsx)(A,{}),(0,c.jsx)(Ge,{}),(0,c.jsx)("div",{id:d,className:(0,o.A)(g.G.wrapper.main,pt.mainWrapper,r),children:(0,c.jsx)(a.A,{fallback:e=>(0,c.jsx)(dt,{...e}),children:t})}),!n&&(0,c.jsx)(lt,{})]})}},3465:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});n(6540);var r=n(8774),o=n(6025),a=n(4586),i=n(6342),l=n(1122),s=n(4848);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Ay)(t.src),dark:(0,o.Ay)(t.srcDark||t.src)},i=(0,s.jsx)(l.A,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,s.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,a.A)(),{navbar:{title:n,logo:l}}=(0,i.p)(),{imageClassName:c,titleClassName:d,...p}=e,f=(0,o.Ay)(l?.href||"/"),m=n?"":t,h=l?.alt??m;return(0,s.jsxs)(r.A,{to:f,...p,...l?.target&&{target:l.target},children:[l&&(0,s.jsx)(u,{logo:l,alt:h,imageClassName:c}),null!=n&&(0,s.jsx)("b",{className:d,children:n})]})}},1463:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});n(6540);var r=n(5260),o=n(4848);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.A,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},1122:(e,t,n)=>{"use strict";n.d(t,{A:()=>c});var r=n(6540),o=n(4164),a=n(2303),i=n(5293);const l={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var s=n(4848);function u(e){let{className:t,children:n}=e;const u=(0,a.A)(),{colorMode:c}=(0,i.G)();return(0,s.jsx)(s.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.A)(t,l.themedComponent,l[`themedComponent--${e}`])});return(0,s.jsx)(r.Fragment,{children:a},e)}))})}function c(e){const{sources:t,className:n,alt:r,...o}=e;return(0,s.jsx)(u,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,s.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},1422:(e,t,n)=>{"use strict";n.d(t,{N:()=>y,u:()=>u});var r=n(6540),o=n(8193),a=n(205),i=n(3109),l=n(4848);const s="ease-in-out";function u(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.O)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??s}`,height:`${t}px`}}function l(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function m(e){if(!o.A.canUseDOM)return e?c:d}function h(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:a}),(0,l.jsx)(t,{ref:c,style:u?void 0:m(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(c.current,n),i?.(n))},className:s,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[s,u]=(0,r.useState)(t);return(0,a.A)((()=>{t||i(!0)}),[t]),(0,a.A)((()=>{o&&u(t)}),[o,t]),o?(0,l.jsx)(h,{...n,collapsed:s}):null}function y(e){let{lazy:t,...n}=e;const r=t?g:h;return(0,l.jsx)(r,{...n})}},5041:(e,t,n)=>{"use strict";n.d(t,{M:()=>h,o:()=>m});var r=n(6540),o=n(2303),a=n(679),i=n(9532),l=n(6342),s=n(4848);const u=(0,a.Wf)("docusaurus.announcement.dismiss"),c=(0,a.Wf)("docusaurus.announcement.id"),d=()=>"true"===u.get(),p=e=>u.set(String(e)),f=r.createContext(null);function m(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.p)(),t=(0,o.A)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,s.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.dV("AnnouncementBarProvider");return e}},5293:(e,t,n)=>{"use strict";n.d(t,{G:()=>y,a:()=>g});var r=n(6540),o=n(8193),a=n(9532),i=n(679),l=n(6342),s=n(4848);const u=r.createContext(void 0),c="theme",d=(0,i.Wf)(c),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,m=e=>o.A.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.p)(),[o,a]=(0,r.useState)(m(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&h(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,s.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new a.dV("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},9876:(e,t,n)=>{"use strict";n.d(t,{e:()=>f,M:()=>m});var r=n(6540),o=n(5600),a=n(4581),i=n(6347),l=n(9532);function s(e){!function(e){const t=(0,i.W6)(),n=(0,l._q)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6342),c=n(4848);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.YL)(),{items:t}=(0,u.p)().navbar;return 0===t.length&&!e.component}(),t=(0,a.l)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=p();return(0,c.jsx)(d.Provider,{value:n,children:t})}function m(){const e=r.useContext(d);if(void 0===e)throw new l.dV("NavbarMobileSidebarProvider");return e}},5600:(e,t,n)=>{"use strict";n.d(t,{GX:()=>u,YL:()=>s,y_:()=>l});var r=n(6540),o=n(9532),a=n(4848);const i=r.createContext(null);function l(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function s(){const e=(0,r.useContext)(i);if(!e)throw new o.dV("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.dV("NavbarSecondaryMenuContentProvider");const[,l]=a,s=(0,o.Be)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},4090:(e,t,n)=>{"use strict";n.d(t,{w:()=>o,J:()=>a});var r=n(6540);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},4581:(e,t,n)=>{"use strict";n.d(t,{l:()=>l});var r=n(6540),o=n(8193);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,l]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){l(function(e){if(!o.A.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?a.desktop:a.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},7559:(e,t,n)=>{"use strict";n.d(t,{G:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",blogAuthorsListPage:"blog-authors-list-page",blogAuthorsPostsPage:"blog-authors-posts-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",draftBanner:"theme-draft-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},3109:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{O:()=>r})},1003:(e,t,n)=>{"use strict";n.d(t,{e3:()=>f,be:()=>d,Jx:()=>m});var r=n(6540),o=n(4164),a=n(5260),i=n(3102);function l(){const e=r.useContext(i.o);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(6025),u=n(4586);var c=n(4848);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const l=function(e){const{siteConfig:t}=(0,u.A)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.hH)(),p=o?d(o,{absolute:!0}):void 0;return(0,c.jsxs)(a.A,{children:[t&&(0,c.jsx)("title",{children:l}),t&&(0,c.jsx)("meta",{property:"og:title",content:l}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,c.jsx)("meta",{property:"og:image",content:p}),p&&(0,c.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),l=(0,o.A)(i,t);return(0,c.jsxs)(p.Provider,{value:l,children:[(0,c.jsx)(a.A,{children:(0,c.jsx)("html",{className:l})}),n]})}function m(e){let{children:t}=e;const n=l(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(f,{className:(0,o.A)(r,a),children:t})}},9532:(e,t,n)=>{"use strict";n.d(t,{Be:()=>u,ZC:()=>l,_q:()=>i,dV:()=>s,fM:()=>c});var r=n(6540),o=n(205),a=n(4848);function i(e){const t=(0,r.useRef)(e);return(0,o.A)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function l(e){const t=(0,r.useRef)();return(0,o.A)((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},9169:(e,t,n)=>{"use strict";n.d(t,{Dt:()=>l,ys:()=>i});var r=n(6540),o=n(8328),a=n(4586);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.A)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.A,baseUrl:e})),[e])}},3104:(e,t,n)=>{"use strict";n.d(t,{Mq:()=>p,Tv:()=>u,gk:()=>f});var r=n(6540),o=n(8193),a=n(2303),i=(n(205),n(9532)),l=n(4848);const s=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(s.Provider,{value:n,children:t})}function c(){const e=(0,r.useContext)(s);if(null==e)throw new i.dV("ScrollControllerProvider");return e}const d=()=>o.A.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),o=(0,r.useRef)(d()),a=(0,i._q)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.A)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},679:(e,t,n)=>{"use strict";n.d(t,{Wf:()=>u});n(6540);const r=JSON.parse('{"N":"localStorage","M":""}'),o=r.N;function a(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function i(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const n=`${e}${r.M}`;if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(n);const o=i(t?.persistence);return null===o?s:{get:()=>{try{return o.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=o.getItem(n);o.setItem(n,e),a({key:n,oldValue:t,newValue:e,storage:o})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=o.getItem(n);o.removeItem(n),a({key:n,oldValue:e,newValue:null,storage:o})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===o&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},2131:(e,t,n)=>{"use strict";n.d(t,{o:()=>i});var r=n(4586),o=n(6347),a=n(440);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.A)(),{pathname:s}=(0,o.zy)(),u=(0,a.Ks)(s,{trailingSlash:n,baseUrl:e}),c=l===i?e:e.replace(`/${l}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5062:(e,t,n)=>{"use strict";n.d(t,{$:()=>i});var r=n(6540),o=n(6347),a=n(9532);function i(e){const t=(0,o.zy)(),n=(0,a.ZC)(t),i=(0,a._q)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6342:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(4586);function o(){return(0,r.A)().siteConfig.themeConfig}},2983:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addTrailingSlash=o,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),l="/"===i||i===r?i:(s=i,u=n,u?o(s):a(s));var s,u;return e.replace(i,l)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=a;const r=n(2566);function o(e){return e.endsWith("/")?e:`${e}/`}function a(e){return(0,r.removeSuffix)(e,"/")}},253:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=function e(t){if(t.cause)return[t,...e(t.cause)];return[t]}},440:(e,t,n)=>{"use strict";t.rA=t.Ks=void 0;const r=n(1635);var o=n(2983);Object.defineProperty(t,"Ks",{enumerable:!0,get:function(){return r.__importDefault(o).default}});var a=n(2566);var i=n(253);Object.defineProperty(t,"rA",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},2566:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){if(""===t)return e;return e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},1513:(e,t,n)=>{"use strict";n.d(t,{zR:()=>w,TM:()=>C,yJ:()=>f,sC:()=>A,AO:()=>p});var r=n(8168);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(1561);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.A)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!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,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(4363),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},4634:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},119:(e,t,n)=>{"use strict";n.r(t)},1043:(e,t,n)=>{"use strict";n.r(t)},5947:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}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=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{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)*o(Math.random()*t,.1,.95)),t=o(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 o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.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&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},5302:(e,t,n)=>{var r=n(4634);e.exports=m,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,l=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(l,f),l=f+d.length,p)s+=p[1];else{var m=e[l],h=n[2],g=n[3],y=n[4],b=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=h&&null!=m&&m!==h,x="+"===v||"*"===v,S="?"===v||"*"===v,_=h||u,E=y||b,C=h||("string"==typeof r[r.length-1]?r[r.length-1]:"");r.push({name:g||a++,prefix:h||"",delimiter:_,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:E?c(E):w?".*":i(_,C)})}}return l-1?"[^"+u(e)+"]+?":u(t)+"|(?:(?!"+u(t)+")[^"+u(e)+"])+?"}function l(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},8722:(e,t,n)=>{const r=n(6969),o=n(8380),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(3157).resolve(t)],delete Prism.languages[e],n(3157)(t),a.add(e)}))}i.silent=!1,e.exports=i},9700:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=p.substring(m+f.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),y&&b.push.apply(b,i([y])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(Prism)},8692:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=8692},3157:(e,t,n)=>{var r={"./":8722};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=3157},8380:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(s),m=c;o(m);){for(var h in p={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var y in d)if(!(y in c))for(var b in f(y))if(b in c){p[y]=!0;break}for(var v in m=p)c[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete s[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return l[e]=o}for(var c in n)u(c);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2694:(e,t,n)=>{"use strict";var r=n(6925);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5556:(e,t,n)=>{e.exports=n(2694)()},6925:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},2551:(e,t,n)=>{"use strict";var r=n(6540),o=n(9982);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n