From eb82301b273bcd80daa0d6055abceac499253b5e Mon Sep 17 00:00:00 2001 From: Akanksha Date: Mon, 9 Sep 2024 15:22:11 +0530 Subject: [PATCH 01/56] initial git --- package-lock.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..53367dc --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "mern-bootcamp", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From 9417b4cc0209378401ff70af509e096ba5e5719d Mon Sep 17 00:00:00 2001 From: Akanksha Date: Mon, 9 Sep 2024 22:20:18 +0530 Subject: [PATCH 02/56] layout and infex page --- ui/package-lock.json | 24 +- ui/package.json | 3 +- ui/src/App.js | 4 +- ui/src/components/Header.jsx | 87 +- ui/src/components/Layout.js | 12 + ui/src/img/image_1.jpg | Bin 0 -> 74132 bytes ui/src/img/image_2.jpg | Bin 0 -> 73056 bytes ui/src/img/image_3.jpg | Bin 0 -> 76398 bytes ui/src/img/image_4.jpg | Bin 0 -> 71706 bytes ui/src/pages/HomePage.jsx | 104 +- ui/src/styles/bootstrap.css | 9708 ++++++++++++++++++++++++++++++++++ ui/src/styles/common.css | 25 + ui/src/styles/global.css | 3 + 13 files changed, 9912 insertions(+), 58 deletions(-) create mode 100644 ui/src/components/Layout.js create mode 100644 ui/src/img/image_1.jpg create mode 100644 ui/src/img/image_2.jpg create mode 100644 ui/src/img/image_3.jpg create mode 100644 ui/src/img/image_4.jpg create mode 100644 ui/src/styles/bootstrap.css create mode 100644 ui/src/styles/common.css create mode 100644 ui/src/styles/global.css diff --git a/ui/package-lock.json b/ui/package-lock.json index f25e289..c29e9f3 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -14,7 +14,8 @@ "react-dom": "^18.3.1", "react-icons": "^5.3.0", "react-router-dom": "^6.26.1", - "react-scripts": "5.0.1" + "react-scripts": "5.0.1", + "sass": "^1.78.0" } }, "node_modules/@alloc/quick-lru": { @@ -9681,6 +9682,11 @@ "url": "https://opencollective.com/immer" } }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==" + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -16389,6 +16395,22 @@ "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", "license": "CC0-1.0" }, + "node_modules/sass": { + "version": "1.78.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz", + "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/sass-loader": { "version": "12.6.0", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", diff --git a/ui/package.json b/ui/package.json index 73b7f36..5935ff8 100644 --- a/ui/package.json +++ b/ui/package.json @@ -9,7 +9,8 @@ "react-dom": "^18.3.1", "react-icons": "^5.3.0", "react-router-dom": "^6.26.1", - "react-scripts": "5.0.1" + "react-scripts": "5.0.1", + "sass": "^1.78.0" }, "scripts": { "start": "react-scripts start", diff --git a/ui/src/App.js b/ui/src/App.js index 0ea823e..c77d31f 100644 --- a/ui/src/App.js +++ b/ui/src/App.js @@ -1,6 +1,6 @@ import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; import Header from './components/Header'; - +import Layout from './components/Layout'; import HomePage from './pages/HomePage'; import LoginPage from './pages/LoginPage'; import RegisterPage from './pages/RegisterPage'; @@ -10,7 +10,7 @@ import BrowseBootcampsPage from './pages/BrowseBootcampsPage'; function App() { return ( -
+
} /> diff --git a/ui/src/components/Header.jsx b/ui/src/components/Header.jsx index 90cd3d7..2481256 100644 --- a/ui/src/components/Header.jsx +++ b/ui/src/components/Header.jsx @@ -3,32 +3,73 @@ import Container from 'react-bootstrap/Container'; import Nav from 'react-bootstrap/Nav'; import Navbar from 'react-bootstrap/Navbar'; import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaSearch } from 'react-icons/fa'; +import "../styles/bootstrap.css"; function Header() { return ( - - - - - Bootcamp - - - - - - - + <> + {/* */} + + + {/* // + // + // + // + // Bootcamp + // + // + // + // + // + // + // */} + ); } diff --git a/ui/src/components/Layout.js b/ui/src/components/Layout.js new file mode 100644 index 0000000..38109fc --- /dev/null +++ b/ui/src/components/Layout.js @@ -0,0 +1,12 @@ +import Header from './Header'; + +function Layout({ children }) { + return ( + <> +
+ {children} + + ); +} + +export default Layout; \ No newline at end of file diff --git a/ui/src/img/image_1.jpg b/ui/src/img/image_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab8e9d2abd5410cea533a1dd6aa40a4807096811 GIT binary patch literal 74132 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 N@oSC#kB_TT|Jkl`EWH2# literal 0 HcmV?d00001 diff --git a/ui/src/img/image_2.jpg b/ui/src/img/image_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65a7cbaba107ab73ed09b5682229228a92c0b44e GIT binary patch literal 73056 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
-
-
-

Find a Code Bootcamp

-

Find, rate and read reviews on coding bootcamps

-
- - - - - - - - - - - - - - -
- -
- -
-
-
-
-
+ <> + {/* */} +
+
+
+

Find a Code Bootcamp

+

+ Find, rate and read reviews on coding bootcamps +

+
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+
+ {/* //
+ //
+ //
+ //

Find a Code Bootcamp

+ //

Find, rate and read reviews on coding bootcamps

+ //
+ // + // + // + // + // + // + // + // + // + // + // + // + // + // + //
+ // + //
+ // + //
+ //
+ //
+ //
+ //
*/} + ); }; diff --git a/ui/src/styles/bootstrap.css b/ui/src/styles/bootstrap.css new file mode 100644 index 0000000..bee3af8 --- /dev/null +++ b/ui/src/styles/bootstrap.css @@ -0,0 +1,9708 @@ +/*! + * Bootstrap v4.3.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + :root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #e05433; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #e05433; + --secondary: #6c757d; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', + sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + } + *, + *::before, + *::after { + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + } + article, + aside, + figcaption, + figure, + footer, + header, + hgroup, + main, + nav, + section { + display: block; + } + body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #f8f9fa; + } + [tabindex='-1']:focus { + outline: 0 !important; + } + hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; + } + h1, + h2, + h3, + h4, + h5, + h6 { + margin-top: 0; + margin-bottom: 0.5rem; + } + p { + margin-top: 0; + margin-bottom: 1rem; + } + abbr[title], + abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + text-decoration-skip-ink: none; + } + address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; + } + ol, + ul, + dl { + margin-top: 0; + margin-bottom: 1rem; + } + ol ol, + ul ul, + ol ul, + ul ol { + margin-bottom: 0; + } + dt { + font-weight: 700; + } + dd { + margin-bottom: 0.5rem; + margin-left: 0; + } + blockquote { + margin: 0 0 1rem; + } + b, + strong { + font-weight: bolder; + } + small { + font-size: 80%; + } + sub, + sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + a { + color: #e05433; + text-decoration: none; + background-color: transparent; + } + a:hover { + color: #ac361a; + text-decoration: underline; + } + a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; + } + a:not([href]):not([tabindex]):hover, + a:not([href]):not([tabindex]):focus { + color: inherit; + text-decoration: none; + } + a:not([href]):not([tabindex]):focus { + outline: 0; + } + pre, + code, + kbd, + samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + font-size: 1em; + } + pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + } + figure { + margin: 0 0 1rem; + } + img { + vertical-align: middle; + border-style: none; + } + svg { + overflow: hidden; + vertical-align: middle; + } + table { + border-collapse: collapse; + } + caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; + } + th { + text-align: inherit; + } + label { + display: inline-block; + margin-bottom: 0.5rem; + } + button { + border-radius: 0; + } + button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; + } + input, + button, + select, + optgroup, + textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; + } + button, + input { + overflow: visible; + } + button, + select { + text-transform: none; + } + select { + word-wrap: normal; + } + button, + [type='button'], + [type='reset'], + [type='submit'] { + -webkit-appearance: button; + } + button:not(:disabled), + [type='button']:not(:disabled), + [type='reset']:not(:disabled), + [type='submit']:not(:disabled) { + cursor: pointer; + } + button::-moz-focus-inner, + [type='button']::-moz-focus-inner, + [type='reset']::-moz-focus-inner, + [type='submit']::-moz-focus-inner { + padding: 0; + border-style: none; + } + input[type='radio'], + input[type='checkbox'] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; + } + input[type='date'], + input[type='time'], + input[type='datetime-local'], + input[type='month'] { + -webkit-appearance: listbox; + } + textarea { + overflow: auto; + resize: vertical; + } + fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; + } + legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; + } + progress { + vertical-align: baseline; + } + [type='number']::-webkit-inner-spin-button, + [type='number']::-webkit-outer-spin-button { + height: auto; + } + [type='search'] { + outline-offset: -2px; + -webkit-appearance: none; + } + [type='search']::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; + } + output { + display: inline-block; + } + summary { + display: list-item; + cursor: pointer; + } + template { + display: none; + } + [hidden] { + display: none !important; + } + h1, + h2, + h3, + h4, + h5, + h6, + .h1, + .h2, + .h3, + .h4, + .h5, + .h6 { + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + } + h1, + .h1 { + font-size: 2.5rem; + } + h2, + .h2 { + font-size: 2rem; + } + h3, + .h3 { + font-size: 1.75rem; + } + h4, + .h4 { + font-size: 1.5rem; + } + h5, + .h5 { + font-size: 1.25rem; + } + h6, + .h6 { + font-size: 1rem; + } + .lead { + font-size: 1.25rem; + font-weight: 300; + } + .display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; + } + .display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; + } + .display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; + } + .display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; + } + hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); + } + small, + .small { + font-size: 80%; + font-weight: 400; + } + mark, + .mark { + padding: 0.2em; + background-color: #fcf8e3; + } + .list-unstyled { + padding-left: 0; + list-style: none; + } + .list-inline { + padding-left: 0; + list-style: none; + } + .list-inline-item { + display: inline-block; + } + .list-inline-item:not(:last-child) { + margin-right: 0.5rem; + } + .initialism { + font-size: 90%; + text-transform: uppercase; + } + .blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; + } + .blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; + } + .blockquote-footer::before { + content: '\2014\00A0'; + } + .img-fluid { + max-width: 100%; + height: auto; + } + .img-thumbnail { + padding: 0.25rem; + background-color: #f8f9fa; + border: 1px solid #dee2e6; + border-radius: 0; + max-width: 100%; + height: auto; + } + .figure { + display: inline-block; + } + .figure-img { + margin-bottom: 0.5rem; + line-height: 1; + } + .figure-caption { + font-size: 90%; + color: #6c757d; + } + code { + font-size: 87.5%; + color: #e83e8c; + word-break: break-word; + } + a > code { + color: inherit; + } + kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: 0; + } + kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; + } + pre { + display: block; + font-size: 87.5%; + color: #212529; + } + pre code { + font-size: inherit; + color: inherit; + word-break: normal; + } + .pre-scrollable { + max-height: 340px; + overflow-y: scroll; + } + .container { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + } + @media (min-width: 576px) { + .container { + max-width: 540px; + } + } + @media (min-width: 768px) { + .container { + max-width: 720px; + } + } + @media (min-width: 992px) { + .container { + max-width: 960px; + } + } + @media (min-width: 1200px) { + .container { + max-width: 1140px; + } + } + .container-fluid { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + } + .row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; + } + .no-gutters { + margin-right: 0; + margin-left: 0; + } + .no-gutters > .col, + .no-gutters > [class*='col-'] { + padding-right: 0; + padding-left: 0; + } + .col-1, + .col-2, + .col-3, + .col-4, + .col-5, + .col-6, + .col-7, + .col-8, + .col-9, + .col-10, + .col-11, + .col-12, + .col, + .col-auto, + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12, + .col-sm, + .col-sm-auto, + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11, + .col-md-12, + .col-md, + .col-md-auto, + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12, + .col-lg, + .col-lg-auto, + .col-xl-1, + .col-xl-2, + .col-xl-3, + .col-xl-4, + .col-xl-5, + .col-xl-6, + .col-xl-7, + .col-xl-8, + .col-xl-9, + .col-xl-10, + .col-xl-11, + .col-xl-12, + .col-xl, + .col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; + } + .col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-1 { + margin-left: 8.33333%; + } + .offset-2 { + margin-left: 16.66667%; + } + .offset-3 { + margin-left: 25%; + } + .offset-4 { + margin-left: 33.33333%; + } + .offset-5 { + margin-left: 41.66667%; + } + .offset-6 { + margin-left: 50%; + } + .offset-7 { + margin-left: 58.33333%; + } + .offset-8 { + margin-left: 66.66667%; + } + .offset-9 { + margin-left: 75%; + } + .offset-10 { + margin-left: 83.33333%; + } + .offset-11 { + margin-left: 91.66667%; + } + @media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-sm-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-sm-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-sm-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-sm-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-sm-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-sm-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-sm-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-sm-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.33333%; + } + .offset-sm-2 { + margin-left: 16.66667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.33333%; + } + .offset-sm-5 { + margin-left: 41.66667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.33333%; + } + .offset-sm-8 { + margin-left: 66.66667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.33333%; + } + .offset-sm-11 { + margin-left: 91.66667%; + } + } + @media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-md-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-md-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-md-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-md-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-md-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-md-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-md-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-md-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.33333%; + } + .offset-md-2 { + margin-left: 16.66667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.33333%; + } + .offset-md-5 { + margin-left: 41.66667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.33333%; + } + .offset-md-8 { + margin-left: 66.66667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.33333%; + } + .offset-md-11 { + margin-left: 91.66667%; + } + } + @media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-lg-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-lg-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-lg-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-lg-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-lg-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-lg-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-lg-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-lg-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.33333%; + } + .offset-lg-2 { + margin-left: 16.66667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.33333%; + } + .offset-lg-5 { + margin-left: 41.66667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.33333%; + } + .offset-lg-8 { + margin-left: 66.66667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.33333%; + } + .offset-lg-11 { + margin-left: 91.66667%; + } + } + @media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + -webkit-box-flex: 0; + -ms-flex: 0 0 8.33333%; + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .col-xl-2 { + -webkit-box-flex: 0; + -ms-flex: 0 0 16.66667%; + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .col-xl-3 { + -webkit-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -webkit-box-flex: 0; + -ms-flex: 0 0 33.33333%; + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .col-xl-5 { + -webkit-box-flex: 0; + -ms-flex: 0 0 41.66667%; + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .col-xl-6 { + -webkit-box-flex: 0; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -webkit-box-flex: 0; + -ms-flex: 0 0 58.33333%; + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .col-xl-8 { + -webkit-box-flex: 0; + -ms-flex: 0 0 66.66667%; + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .col-xl-9 { + -webkit-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -webkit-box-flex: 0; + -ms-flex: 0 0 83.33333%; + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .col-xl-11 { + -webkit-box-flex: 0; + -ms-flex: 0 0 91.66667%; + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .col-xl-12 { + -webkit-box-flex: 0; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -webkit-box-ordinal-group: 0; + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -webkit-box-ordinal-group: 14; + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -webkit-box-ordinal-group: 1; + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -webkit-box-ordinal-group: 2; + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -webkit-box-ordinal-group: 3; + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -webkit-box-ordinal-group: 4; + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -webkit-box-ordinal-group: 5; + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -webkit-box-ordinal-group: 6; + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -webkit-box-ordinal-group: 7; + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -webkit-box-ordinal-group: 8; + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -webkit-box-ordinal-group: 9; + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -webkit-box-ordinal-group: 10; + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -webkit-box-ordinal-group: 11; + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -webkit-box-ordinal-group: 12; + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -webkit-box-ordinal-group: 13; + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.33333%; + } + .offset-xl-2 { + margin-left: 16.66667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.33333%; + } + .offset-xl-5 { + margin-left: 41.66667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.33333%; + } + .offset-xl-8 { + margin-left: 66.66667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.33333%; + } + .offset-xl-11 { + margin-left: 91.66667%; + } + } + .table { + width: 100%; + margin-bottom: 1rem; + color: #212529; + } + .table th, + .table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dee2e6; + } + .table thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; + } + .table tbody + tbody { + border-top: 2px solid #dee2e6; + } + .table-sm th, + .table-sm td { + padding: 0.3rem; + } + .table-bordered { + border: 1px solid #dee2e6; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6; + } + .table-bordered thead th, + .table-bordered thead td { + border-bottom-width: 2px; + } + .table-borderless th, + .table-borderless td, + .table-borderless thead th, + .table-borderless tbody + tbody { + border: 0; + } + .table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); + } + .table-hover tbody tr:hover { + color: #212529; + background-color: rgba(0, 0, 0, 0.075); + } + .table-primary, + .table-primary > th, + .table-primary > td { + background-color: #f6cfc6; + } + .table-primary th, + .table-primary td, + .table-primary thead th, + .table-primary tbody + tbody { + border-color: #efa695; + } + .table-hover .table-primary:hover { + background-color: #f3bcb0; + } + .table-hover .table-primary:hover > td, + .table-hover .table-primary:hover > th { + background-color: #f3bcb0; + } + .table-secondary, + .table-secondary > th, + .table-secondary > td { + background-color: #d6d8db; + } + .table-secondary th, + .table-secondary td, + .table-secondary thead th, + .table-secondary tbody + tbody { + border-color: #b3b7bb; + } + .table-hover .table-secondary:hover { + background-color: #c8cbcf; + } + .table-hover .table-secondary:hover > td, + .table-hover .table-secondary:hover > th { + background-color: #c8cbcf; + } + .table-success, + .table-success > th, + .table-success > td { + background-color: #c3e6cb; + } + .table-success th, + .table-success td, + .table-success thead th, + .table-success tbody + tbody { + border-color: #8fd19e; + } + .table-hover .table-success:hover { + background-color: #b1dfbb; + } + .table-hover .table-success:hover > td, + .table-hover .table-success:hover > th { + background-color: #b1dfbb; + } + .table-info, + .table-info > th, + .table-info > td { + background-color: #bee5eb; + } + .table-info th, + .table-info td, + .table-info thead th, + .table-info tbody + tbody { + border-color: #86cfda; + } + .table-hover .table-info:hover { + background-color: #abdde5; + } + .table-hover .table-info:hover > td, + .table-hover .table-info:hover > th { + background-color: #abdde5; + } + .table-warning, + .table-warning > th, + .table-warning > td { + background-color: #ffeeba; + } + .table-warning th, + .table-warning td, + .table-warning thead th, + .table-warning tbody + tbody { + border-color: #ffdf7e; + } + .table-hover .table-warning:hover { + background-color: #ffe8a1; + } + .table-hover .table-warning:hover > td, + .table-hover .table-warning:hover > th { + background-color: #ffe8a1; + } + .table-danger, + .table-danger > th, + .table-danger > td { + background-color: #f5c6cb; + } + .table-danger th, + .table-danger td, + .table-danger thead th, + .table-danger tbody + tbody { + border-color: #ed969e; + } + .table-hover .table-danger:hover { + background-color: #f1b0b7; + } + .table-hover .table-danger:hover > td, + .table-hover .table-danger:hover > th { + background-color: #f1b0b7; + } + .table-light, + .table-light > th, + .table-light > td { + background-color: #fdfdfe; + } + .table-light th, + .table-light td, + .table-light thead th, + .table-light tbody + tbody { + border-color: #fbfcfc; + } + .table-hover .table-light:hover { + background-color: #ececf6; + } + .table-hover .table-light:hover > td, + .table-hover .table-light:hover > th { + background-color: #ececf6; + } + .table-dark, + .table-dark > th, + .table-dark > td { + background-color: #c6c8ca; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #95999c; + } + .table-hover .table-dark:hover { + background-color: #b9bbbe; + } + .table-hover .table-dark:hover > td, + .table-hover .table-dark:hover > th { + background-color: #b9bbbe; + } + .table-active, + .table-active > th, + .table-active > td { + background-color: rgba(0, 0, 0, 0.075); + } + .table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); + } + .table-hover .table-active:hover > td, + .table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); + } + .table .thead-dark th { + color: #fff; + background-color: #343a40; + border-color: #454d55; + } + .table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; + } + .table-dark { + color: #fff; + background-color: #343a40; + } + .table-dark th, + .table-dark td, + .table-dark thead th { + border-color: #454d55; + } + .table-dark.table-bordered { + border: 0; + } + .table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); + } + .table-dark.table-hover tbody tr:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.075); + } + @media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-sm > .table-bordered { + border: 0; + } + } + @media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-md > .table-bordered { + border: 0; + } + } + @media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-lg > .table-bordered { + border: 0; + } + } + @media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-xl > .table-bordered { + border: 0; + } + } + .table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive > .table-bordered { + border: 0; + } + .form-control { + display: block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0; + -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + @media (prefers-reduced-motion: reduce) { + .form-control { + -webkit-transition: none; + transition: none; + } + } + .form-control::-ms-expand { + background-color: transparent; + border: 0; + } + .form-control:focus { + color: #495057; + background-color: #fff; + border-color: #f1b1a2; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .form-control::-webkit-input-placeholder { + color: #6c757d; + opacity: 1; + } + .form-control:-ms-input-placeholder { + color: #6c757d; + opacity: 1; + } + .form-control::-ms-input-placeholder { + color: #6c757d; + opacity: 1; + } + .form-control::placeholder { + color: #6c757d; + opacity: 1; + } + .form-control:disabled, + .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; + } + select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; + } + .form-control-file, + .form-control-range { + display: block; + width: 100%; + } + .col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; + } + .col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; + } + .col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; + } + .form-control-plaintext { + display: block; + width: 100%; + padding-top: 0.375rem; + padding-bottom: 0.375rem; + margin-bottom: 0; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; + } + .form-control-plaintext.form-control-sm, + .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; + } + .form-control-sm { + height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0; + } + .form-control-lg { + height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0; + } + select.form-control[size], + select.form-control[multiple] { + height: auto; + } + textarea.form-control { + height: auto; + } + .form-group { + margin-bottom: 1rem; + } + .form-text { + display: block; + margin-top: 0.25rem; + } + .form-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; + } + .form-row > .col, + .form-row > [class*='col-'] { + padding-right: 5px; + padding-left: 5px; + } + .form-check { + position: relative; + display: block; + padding-left: 1.25rem; + } + .form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; + } + .form-check-input:disabled ~ .form-check-label { + color: #6c757d; + } + .form-check-label { + margin-bottom: 0; + } + .form-check-inline { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; + } + .form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; + } + .valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #28a745; + } + .valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(40, 167, 69, 0.9); + border-radius: 0; + } + .was-validated .form-control:valid, + .form-control.is-valid { + border-color: #28a745; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + } + .was-validated .form-control:valid:focus, + .form-control.is-valid:focus { + border-color: #28a745; + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + } + .was-validated .form-control:valid ~ .valid-feedback, + .was-validated .form-control:valid ~ .valid-tooltip, + .form-control.is-valid ~ .valid-feedback, + .form-control.is-valid ~ .valid-tooltip { + display: block; + } + .was-validated textarea.form-control:valid, + textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); + } + .was-validated .custom-select:valid, + .custom-select.is-valid { + border-color: #28a745; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") + no-repeat right 0.75rem center/8px 10px, + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") + #fff no-repeat center right 1.75rem / calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + } + .was-validated .custom-select:valid:focus, + .custom-select.is-valid:focus { + border-color: #28a745; + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + } + .was-validated .custom-select:valid ~ .valid-feedback, + .was-validated .custom-select:valid ~ .valid-tooltip, + .custom-select.is-valid ~ .valid-feedback, + .custom-select.is-valid ~ .valid-tooltip { + display: block; + } + .was-validated .form-control-file:valid ~ .valid-feedback, + .was-validated .form-control-file:valid ~ .valid-tooltip, + .form-control-file.is-valid ~ .valid-feedback, + .form-control-file.is-valid ~ .valid-tooltip { + display: block; + } + .was-validated .form-check-input:valid ~ .form-check-label, + .form-check-input.is-valid ~ .form-check-label { + color: #28a745; + } + .was-validated .form-check-input:valid ~ .valid-feedback, + .was-validated .form-check-input:valid ~ .valid-tooltip, + .form-check-input.is-valid ~ .valid-feedback, + .form-check-input.is-valid ~ .valid-tooltip { + display: block; + } + .was-validated .custom-control-input:valid ~ .custom-control-label, + .custom-control-input.is-valid ~ .custom-control-label { + color: #28a745; + } + .was-validated .custom-control-input:valid ~ .custom-control-label::before, + .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #28a745; + } + .was-validated .custom-control-input:valid ~ .valid-feedback, + .was-validated .custom-control-input:valid ~ .valid-tooltip, + .custom-control-input.is-valid ~ .valid-feedback, + .custom-control-input.is-valid ~ .valid-tooltip { + display: block; + } + .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, + .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #34ce57; + background-color: #34ce57; + } + .was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, + .custom-control-input.is-valid:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + } + .was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, + .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #28a745; + } + .was-validated .custom-file-input:valid ~ .custom-file-label, + .custom-file-input.is-valid ~ .custom-file-label { + border-color: #28a745; + } + .was-validated .custom-file-input:valid ~ .valid-feedback, + .was-validated .custom-file-input:valid ~ .valid-tooltip, + .custom-file-input.is-valid ~ .valid-feedback, + .custom-file-input.is-valid ~ .valid-tooltip { + display: block; + } + .was-validated .custom-file-input:valid:focus ~ .custom-file-label, + .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #28a745; + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); + } + .invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #dc3545; + } + .invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0; + } + .was-validated .form-control:invalid, + .form-control.is-invalid { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"); + background-repeat: no-repeat; + background-position: center right calc(0.375em + 0.1875rem); + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + } + .was-validated .form-control:invalid:focus, + .form-control.is-invalid:focus { + border-color: #dc3545; + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + } + .was-validated .form-control:invalid ~ .invalid-feedback, + .was-validated .form-control:invalid ~ .invalid-tooltip, + .form-control.is-invalid ~ .invalid-feedback, + .form-control.is-invalid ~ .invalid-tooltip { + display: block; + } + .was-validated textarea.form-control:invalid, + textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); + } + .was-validated .custom-select:invalid, + .custom-select.is-invalid { + border-color: #dc3545; + padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") + no-repeat right 0.75rem center/8px 10px, + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E") + #fff no-repeat center right 1.75rem / calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + } + .was-validated .custom-select:invalid:focus, + .custom-select.is-invalid:focus { + border-color: #dc3545; + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + } + .was-validated .custom-select:invalid ~ .invalid-feedback, + .was-validated .custom-select:invalid ~ .invalid-tooltip, + .custom-select.is-invalid ~ .invalid-feedback, + .custom-select.is-invalid ~ .invalid-tooltip { + display: block; + } + .was-validated .form-control-file:invalid ~ .invalid-feedback, + .was-validated .form-control-file:invalid ~ .invalid-tooltip, + .form-control-file.is-invalid ~ .invalid-feedback, + .form-control-file.is-invalid ~ .invalid-tooltip { + display: block; + } + .was-validated .form-check-input:invalid ~ .form-check-label, + .form-check-input.is-invalid ~ .form-check-label { + color: #dc3545; + } + .was-validated .form-check-input:invalid ~ .invalid-feedback, + .was-validated .form-check-input:invalid ~ .invalid-tooltip, + .form-check-input.is-invalid ~ .invalid-feedback, + .form-check-input.is-invalid ~ .invalid-tooltip { + display: block; + } + .was-validated .custom-control-input:invalid ~ .custom-control-label, + .custom-control-input.is-invalid ~ .custom-control-label { + color: #dc3545; + } + .was-validated .custom-control-input:invalid ~ .custom-control-label::before, + .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #dc3545; + } + .was-validated .custom-control-input:invalid ~ .invalid-feedback, + .was-validated .custom-control-input:invalid ~ .invalid-tooltip, + .custom-control-input.is-invalid ~ .invalid-feedback, + .custom-control-input.is-invalid ~ .invalid-tooltip { + display: block; + } + .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, + .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e4606d; + background-color: #e4606d; + } + .was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, + .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + } + .was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, + .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #dc3545; + } + .was-validated .custom-file-input:invalid ~ .custom-file-label, + .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #dc3545; + } + .was-validated .custom-file-input:invalid ~ .invalid-feedback, + .was-validated .custom-file-input:invalid ~ .invalid-tooltip, + .custom-file-input.is-invalid ~ .invalid-feedback, + .custom-file-input.is-invalid ~ .invalid-tooltip { + display: block; + } + .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, + .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #dc3545; + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); + } + .form-inline { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } + .form-inline .form-check { + width: 100%; + } + @media (min-width: 576px) { + .form-inline label { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + -ms-flex-negative: 0; + flex-shrink: 0; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } + } + .btn { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + @media (prefers-reduced-motion: reduce) { + .btn { + -webkit-transition: none; + transition: none; + } + } + .btn:hover { + color: #212529; + text-decoration: none; + } + .btn:focus, + .btn.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .btn.disabled, + .btn:disabled { + opacity: 0.65; + } + a.btn.disabled, + fieldset:disabled a.btn { + pointer-events: none; + } + .btn-primary { + color: #fff; + background-color: #e05433; + border-color: #e05433; + } + .btn-primary:hover { + color: #fff; + background-color: #ce401f; + border-color: #c23d1e; + } + .btn-primary:focus, + .btn-primary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(229, 110, 82, 0.5); + box-shadow: 0 0 0 0.2rem rgba(229, 110, 82, 0.5); + } + .btn-primary.disabled, + .btn-primary:disabled { + color: #fff; + background-color: #e05433; + border-color: #e05433; + } + .btn-primary:not(:disabled):not(.disabled):active, + .btn-primary:not(:disabled):not(.disabled).active, + .show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #c23d1e; + border-color: #b73a1c; + } + .btn-primary:not(:disabled):not(.disabled):active:focus, + .btn-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-primary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(229, 110, 82, 0.5); + box-shadow: 0 0 0 0.2rem rgba(229, 110, 82, 0.5); + } + .btn-secondary { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; + } + .btn-secondary:hover { + color: #fff; + background-color: #5a6268; + border-color: #545b62; + } + .btn-secondary:focus, + .btn-secondary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); + } + .btn-secondary.disabled, + .btn-secondary:disabled { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; + } + .btn-secondary:not(:disabled):not(.disabled):active, + .btn-secondary:not(:disabled):not(.disabled).active, + .show > .btn-secondary.dropdown-toggle { + color: #fff; + background-color: #545b62; + border-color: #4e555b; + } + .btn-secondary:not(:disabled):not(.disabled):active:focus, + .btn-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-secondary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); + box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5); + } + .btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745; + } + .btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; + } + .btn-success:focus, + .btn-success.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); + } + .btn-success.disabled, + .btn-success:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745; + } + .btn-success:not(:disabled):not(.disabled):active, + .btn-success:not(:disabled):not(.disabled).active, + .show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; + } + .btn-success:not(:disabled):not(.disabled):active:focus, + .btn-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-success.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); + } + .btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; + } + .btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; + } + .btn-info:focus, + .btn-info.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); + } + .btn-info.disabled, + .btn-info:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; + } + .btn-info:not(:disabled):not(.disabled):active, + .btn-info:not(:disabled):not(.disabled).active, + .show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #117a8b; + border-color: #10707f; + } + .btn-info:not(:disabled):not(.disabled):active:focus, + .btn-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-info.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); + } + .btn-warning { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; + } + .btn-warning:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; + } + .btn-warning:focus, + .btn-warning.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); + } + .btn-warning.disabled, + .btn-warning:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; + } + .btn-warning:not(:disabled):not(.disabled):active, + .btn-warning:not(:disabled):not(.disabled).active, + .show > .btn-warning.dropdown-toggle { + color: #212529; + background-color: #d39e00; + border-color: #c69500; + } + .btn-warning:not(:disabled):not(.disabled):active:focus, + .btn-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-warning.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); + } + .btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; + } + .btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; + } + .btn-danger:focus, + .btn-danger.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); + } + .btn-danger.disabled, + .btn-danger:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; + } + .btn-danger:not(:disabled):not(.disabled):active, + .btn-danger:not(:disabled):not(.disabled).active, + .show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; + } + .btn-danger:not(:disabled):not(.disabled):active:focus, + .btn-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-danger.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); + } + .btn-light { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; + } + .btn-light:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; + } + .btn-light:focus, + .btn-light.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); + } + .btn-light.disabled, + .btn-light:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; + } + .btn-light:not(:disabled):not(.disabled):active, + .btn-light:not(:disabled):not(.disabled).active, + .show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; + } + .btn-light:not(:disabled):not(.disabled):active:focus, + .btn-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-light.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); + } + .btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40; + } + .btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; + } + .btn-dark:focus, + .btn-dark.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); + } + .btn-dark.disabled, + .btn-dark:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40; + } + .btn-dark:not(:disabled):not(.disabled):active, + .btn-dark:not(:disabled):not(.disabled).active, + .show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; + } + .btn-dark:not(:disabled):not(.disabled):active:focus, + .btn-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-dark.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); + } + .btn-outline-primary { + color: #e05433; + border-color: #e05433; + } + .btn-outline-primary:hover { + color: #fff; + background-color: #e05433; + border-color: #e05433; + } + .btn-outline-primary:focus, + .btn-outline-primary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.5); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.5); + } + .btn-outline-primary.disabled, + .btn-outline-primary:disabled { + color: #e05433; + background-color: transparent; + } + .btn-outline-primary:not(:disabled):not(.disabled):active, + .btn-outline-primary:not(:disabled):not(.disabled).active, + .show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #e05433; + border-color: #e05433; + } + .btn-outline-primary:not(:disabled):not(.disabled):active:focus, + .btn-outline-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-primary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.5); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.5); + } + .btn-outline-secondary { + color: #6c757d; + border-color: #6c757d; + } + .btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; + } + .btn-outline-secondary:focus, + .btn-outline-secondary.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); + } + .btn-outline-secondary.disabled, + .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent; + } + .btn-outline-secondary:not(:disabled):not(.disabled):active, + .btn-outline-secondary:not(:disabled):not(.disabled).active, + .show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; + } + .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, + .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-secondary.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); + } + .btn-outline-success { + color: #28a745; + border-color: #28a745; + } + .btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; + } + .btn-outline-success:focus, + .btn-outline-success.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); + } + .btn-outline-success.disabled, + .btn-outline-success:disabled { + color: #28a745; + background-color: transparent; + } + .btn-outline-success:not(:disabled):not(.disabled):active, + .btn-outline-success:not(:disabled):not(.disabled).active, + .show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745; + } + .btn-outline-success:not(:disabled):not(.disabled):active:focus, + .btn-outline-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-success.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); + } + .btn-outline-info { + color: #17a2b8; + border-color: #17a2b8; + } + .btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; + } + .btn-outline-info:focus, + .btn-outline-info.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); + } + .btn-outline-info.disabled, + .btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent; + } + .btn-outline-info:not(:disabled):not(.disabled):active, + .btn-outline-info:not(:disabled):not(.disabled).active, + .show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; + } + .btn-outline-info:not(:disabled):not(.disabled):active:focus, + .btn-outline-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-info.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); + } + .btn-outline-warning { + color: #ffc107; + border-color: #ffc107; + } + .btn-outline-warning:hover { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; + } + .btn-outline-warning:focus, + .btn-outline-warning.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); + } + .btn-outline-warning.disabled, + .btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent; + } + .btn-outline-warning:not(:disabled):not(.disabled):active, + .btn-outline-warning:not(:disabled):not(.disabled).active, + .show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; + } + .btn-outline-warning:not(:disabled):not(.disabled):active:focus, + .btn-outline-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-warning.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); + } + .btn-outline-danger { + color: #dc3545; + border-color: #dc3545; + } + .btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; + } + .btn-outline-danger:focus, + .btn-outline-danger.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); + } + .btn-outline-danger.disabled, + .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; + } + .btn-outline-danger:not(:disabled):not(.disabled):active, + .btn-outline-danger:not(:disabled):not(.disabled).active, + .show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; + } + .btn-outline-danger:not(:disabled):not(.disabled):active:focus, + .btn-outline-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-danger.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); + } + .btn-outline-light { + color: #f8f9fa; + border-color: #f8f9fa; + } + .btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; + } + .btn-outline-light:focus, + .btn-outline-light.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); + } + .btn-outline-light.disabled, + .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; + } + .btn-outline-light:not(:disabled):not(.disabled):active, + .btn-outline-light:not(:disabled):not(.disabled).active, + .show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; + } + .btn-outline-light:not(:disabled):not(.disabled):active:focus, + .btn-outline-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-light.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); + } + .btn-outline-dark { + color: #343a40; + border-color: #343a40; + } + .btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; + } + .btn-outline-dark:focus, + .btn-outline-dark.focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); + } + .btn-outline-dark.disabled, + .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; + } + .btn-outline-dark:not(:disabled):not(.disabled):active, + .btn-outline-dark:not(:disabled):not(.disabled).active, + .show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; + } + .btn-outline-dark:not(:disabled):not(.disabled):active:focus, + .btn-outline-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-dark.dropdown-toggle:focus { + -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); + } + .btn-link { + font-weight: 400; + color: #e05433; + text-decoration: none; + } + .btn-link:hover { + color: #ac361a; + text-decoration: underline; + } + .btn-link:focus, + .btn-link.focus { + text-decoration: underline; + -webkit-box-shadow: none; + box-shadow: none; + } + .btn-link:disabled, + .btn-link.disabled { + color: #6c757d; + pointer-events: none; + } + .btn-lg, + .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0; + } + .btn-sm, + .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0; + } + .btn-block { + display: block; + width: 100%; + } + .btn-block + .btn-block { + margin-top: 0.5rem; + } + input[type='submit'].btn-block, + input[type='reset'].btn-block, + input[type='button'].btn-block { + width: 100%; + } + .fade { + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; + } + @media (prefers-reduced-motion: reduce) { + .fade { + -webkit-transition: none; + transition: none; + } + } + .fade:not(.show) { + opacity: 0; + } + .collapse:not(.show) { + display: none; + } + .collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; + } + @media (prefers-reduced-motion: reduce) { + .collapsing { + -webkit-transition: none; + transition: none; + } + } + .dropup, + .dropright, + .dropdown, + .dropleft { + position: relative; + } + .dropdown-toggle { + white-space: nowrap; + } + .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; + } + .dropdown-toggle:empty::after { + margin-left: 0; + } + .dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0; + } + .dropdown-menu-left { + right: auto; + left: 0; + } + .dropdown-menu-right { + right: 0; + left: auto; + } + @media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; + } + .dropdown-menu-sm-right { + right: 0; + left: auto; + } + } + @media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; + } + .dropdown-menu-md-right { + right: 0; + left: auto; + } + } + @media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; + } + .dropdown-menu-lg-right { + right: 0; + left: auto; + } + } + @media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; + } + .dropdown-menu-xl-right { + right: 0; + left: auto; + } + } + .dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; + } + .dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; + } + .dropup .dropdown-toggle:empty::after { + margin-left: 0; + } + .dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; + } + .dropright .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; + } + .dropright .dropdown-toggle:empty::after { + margin-left: 0; + } + .dropright .dropdown-toggle::after { + vertical-align: 0; + } + .dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; + } + .dropleft .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + } + .dropleft .dropdown-toggle::after { + display: none; + } + .dropleft .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; + } + .dropleft .dropdown-toggle:empty::after { + margin-left: 0; + } + .dropleft .dropdown-toggle::before { + vertical-align: 0; + } + .dropdown-menu[x-placement^='top'], + .dropdown-menu[x-placement^='right'], + .dropdown-menu[x-placement^='bottom'], + .dropdown-menu[x-placement^='left'] { + right: auto; + bottom: auto; + } + .dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; + } + .dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; + } + .dropdown-item:hover, + .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; + } + .dropdown-item.active, + .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #e05433; + } + .dropdown-item.disabled, + .dropdown-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: transparent; + } + .dropdown-menu.show { + display: block; + } + .dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; + } + .dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; + } + .btn-group, + .btn-group-vertical { + position: relative; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; + } + .btn-group > .btn, + .btn-group-vertical > .btn { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + } + .btn-group > .btn:hover, + .btn-group-vertical > .btn:hover { + z-index: 1; + } + .btn-group > .btn:focus, + .btn-group > .btn:active, + .btn-group > .btn.active, + .btn-group-vertical > .btn:focus, + .btn-group-vertical > .btn:active, + .btn-group-vertical > .btn.active { + z-index: 1; + } + .btn-toolbar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .btn-toolbar .input-group { + width: auto; + } + .btn-group > .btn:not(:first-child), + .btn-group > .btn-group:not(:first-child) { + margin-left: -1px; + } + .btn-group > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .btn-group > .btn:not(:first-child), + .btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; + } + .dropdown-toggle-split::after, + .dropup .dropdown-toggle-split::after, + .dropright .dropdown-toggle-split::after { + margin-left: 0; + } + .dropleft .dropdown-toggle-split::before { + margin-right: 0; + } + .btn-sm + .dropdown-toggle-split, + .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; + } + .btn-lg + .dropdown-toggle-split, + .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; + } + .btn-group-vertical { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + } + .btn-group-vertical > .btn, + .btn-group-vertical > .btn-group { + width: 100%; + } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; + } + .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), + .btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + .btn-group-vertical > .btn:not(:first-child), + .btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .btn-group-toggle > .btn, + .btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; + } + .btn-group-toggle > .btn input[type='radio'], + .btn-group-toggle > .btn input[type='checkbox'], + .btn-group-toggle > .btn-group > .btn input[type='radio'], + .btn-group-toggle > .btn-group > .btn input[type='checkbox'] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; + } + .input-group { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; + } + .input-group > .form-control, + .input-group > .form-control-plaintext, + .input-group > .custom-select, + .input-group > .custom-file { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; + } + .input-group > .form-control + .form-control, + .input-group > .form-control + .custom-select, + .input-group > .form-control + .custom-file, + .input-group > .form-control-plaintext + .form-control, + .input-group > .form-control-plaintext + .custom-select, + .input-group > .form-control-plaintext + .custom-file, + .input-group > .custom-select + .form-control, + .input-group > .custom-select + .custom-select, + .input-group > .custom-select + .custom-file, + .input-group > .custom-file + .form-control, + .input-group > .custom-file + .custom-select, + .input-group > .custom-file + .custom-file { + margin-left: -1px; + } + .input-group > .form-control:focus, + .input-group > .custom-select:focus, + .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; + } + .input-group > .custom-file .custom-file-input:focus { + z-index: 4; + } + .input-group > .form-control:not(:last-child), + .input-group > .custom-select:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .input-group > .form-control:not(:first-child), + .input-group > .custom-select:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .input-group > .custom-file { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } + .input-group > .custom-file:not(:last-child) .custom-file-label, + .input-group > .custom-file:not(:last-child) .custom-file-label::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .input-group > .custom-file:not(:first-child) .custom-file-label { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .input-group-prepend, + .input-group-append { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } + .input-group-prepend .btn, + .input-group-append .btn { + position: relative; + z-index: 2; + } + .input-group-prepend .btn:focus, + .input-group-append .btn:focus { + z-index: 3; + } + .input-group-prepend .btn + .btn, + .input-group-prepend .btn + .input-group-text, + .input-group-prepend .input-group-text + .input-group-text, + .input-group-prepend .input-group-text + .btn, + .input-group-append .btn + .btn, + .input-group-append .btn + .input-group-text, + .input-group-append .input-group-text + .input-group-text, + .input-group-append .input-group-text + .btn { + margin-left: -1px; + } + .input-group-prepend { + margin-right: -1px; + } + .input-group-append { + margin-left: -1px; + } + .input-group-text { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0; + } + .input-group-text input[type='radio'], + .input-group-text input[type='checkbox'] { + margin-top: 0; + } + .input-group-lg > .form-control:not(textarea), + .input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); + } + .input-group-lg > .form-control, + .input-group-lg > .custom-select, + .input-group-lg > .input-group-prepend > .input-group-text, + .input-group-lg > .input-group-append > .input-group-text, + .input-group-lg > .input-group-prepend > .btn, + .input-group-lg > .input-group-append > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0; + } + .input-group-sm > .form-control:not(textarea), + .input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); + } + .input-group-sm > .form-control, + .input-group-sm > .custom-select, + .input-group-sm > .input-group-prepend > .input-group-text, + .input-group-sm > .input-group-append > .input-group-text, + .input-group-sm > .input-group-prepend > .btn, + .input-group-sm > .input-group-append > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0; + } + .input-group-lg > .custom-select, + .input-group-sm > .custom-select { + padding-right: 1.75rem; + } + .input-group > .input-group-prepend > .btn, + .input-group > .input-group-prepend > .input-group-text, + .input-group > .input-group-append:not(:last-child) > .btn, + .input-group > .input-group-append:not(:last-child) > .input-group-text, + .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), + .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .input-group > .input-group-append > .btn, + .input-group > .input-group-append > .input-group-text, + .input-group > .input-group-prepend:not(:first-child) > .btn, + .input-group > .input-group-prepend:not(:first-child) > .input-group-text, + .input-group > .input-group-prepend:first-child > .btn:not(:first-child), + .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .custom-control { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; + } + .custom-control-inline { + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + margin-right: 1rem; + } + .custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; + } + .custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #e05433; + background-color: #e05433; + } + .custom-control-input:focus ~ .custom-control-label::before { + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #f1b1a2; + } + .custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #f8d6ce; + border-color: #f8d6ce; + } + .custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; + } + .custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; + } + .custom-control-label { + position: relative; + margin-bottom: 0; + vertical-align: top; + } + .custom-control-label::before { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ''; + background-color: #fff; + border: #adb5bd solid 1px; + } + .custom-control-label::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ''; + background: no-repeat 50% / 50% 50%; + } + .custom-checkbox .custom-control-label::before { + border-radius: 0; + } + .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e"); + } + .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #e05433; + background-color: #e05433; + } + .custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); + } + .custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(224, 84, 51, 0.5); + } + .custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background-color: rgba(224, 84, 51, 0.5); + } + .custom-radio .custom-control-label::before { + border-radius: 50%; + } + .custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); + } + .custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(224, 84, 51, 0.5); + } + .custom-switch { + padding-left: 2.25rem; + } + .custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; + } + .custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + @media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + -webkit-transition: none; + transition: none; + } + } + .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + -webkit-transform: translateX(0.75rem); + transform: translateX(0.75rem); + } + .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background-color: rgba(224, 84, 51, 0.5); + } + .custom-select { + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") + no-repeat right 0.75rem center/8px 10px; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + } + .custom-select:focus { + border-color: #f1b1a2; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; + } + .custom-select[multiple], + .custom-select[size]:not([size='1']) { + height: auto; + padding-right: 0.75rem; + background-image: none; + } + .custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; + } + .custom-select::-ms-expand { + display: none; + } + .custom-select-sm { + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + } + .custom-select-lg { + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + } + .custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin-bottom: 0; + } + .custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin: 0; + opacity: 0; + } + .custom-file-input:focus ~ .custom-file-label { + border-color: #f1b1a2; + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; + } + .custom-file-input:lang(en) ~ .custom-file-label::after { + content: 'Browse'; + } + .custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); + } + .custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0; + } + .custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(1.5em + 0.75rem); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: 'Browse'; + background-color: #e9ecef; + border-left: inherit; + border-radius: 0 0 0 0; + } + .custom-range { + width: 100%; + height: calc(1rem + 0.4rem); + padding: 0; + background-color: transparent; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + } + .custom-range:focus { + outline: none; + } + .custom-range:focus::-webkit-slider-thumb { + -webkit-box-shadow: 0 0 0 1px #f8f9fa, 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + box-shadow: 0 0 0 1px #f8f9fa, 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #f8f9fa, 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #f8f9fa, 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .custom-range::-moz-focus-outer { + border: 0; + } + .custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #e05433; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + -webkit-appearance: none; + appearance: none; + } + @media (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } + } + .custom-range::-webkit-slider-thumb:active { + background-color: #f8d6ce; + } + .custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; + } + .custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #e05433; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + -moz-appearance: none; + appearance: none; + } + @media (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + -webkit-transition: none; + transition: none; + } + } + .custom-range::-moz-range-thumb:active { + background-color: #f8d6ce; + } + .custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; + } + .custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #e05433; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + appearance: none; + } + @media (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + -webkit-transition: none; + transition: none; + } + } + .custom-range::-ms-thumb:active { + background-color: #f8d6ce; + } + .custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; + } + .custom-range::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; + } + .custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; + } + .custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; + } + .custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; + } + .custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; + } + .custom-range:disabled::-moz-range-track { + cursor: default; + } + .custom-range:disabled::-ms-thumb { + background-color: #adb5bd; + } + .custom-control-label::before, + .custom-file-label, + .custom-select { + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + } + @media (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + -webkit-transition: none; + transition: none; + } + } + .nav { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; + } + .nav-link { + display: block; + padding: 0.5rem 1rem; + } + .nav-link:hover, + .nav-link:focus { + text-decoration: none; + } + .nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; + } + .nav-tabs { + border-bottom: 1px solid #dee2e6; + } + .nav-tabs .nav-item { + margin-bottom: -1px; + } + .nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .nav-tabs .nav-link:hover, + .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; + } + .nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; + } + .nav-tabs .nav-link.active, + .nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #f8f9fa; + border-color: #dee2e6 #dee2e6 #f8f9fa; + } + .nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .nav-pills .nav-link { + border-radius: 0; + } + .nav-pills .nav-link.active, + .nav-pills .show > .nav-link { + color: #fff; + background-color: #e05433; + } + .nav-fill .nav-item { + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; + } + .nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center; + } + .tab-content > .tab-pane { + display: none; + } + .tab-content > .active { + display: block; + } + .navbar { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0.5rem 1rem; + } + .navbar > .container, + .navbar > .container-fluid { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + } + .navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; + } + .navbar-brand:hover, + .navbar-brand:focus { + text-decoration: none; + } + .navbar-nav { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; + } + .navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; + } + .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + } + .navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0; + } + .navbar-toggler:hover, + .navbar-toggler:focus { + text-decoration: none; + } + .navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ''; + background: no-repeat center center; + background-size: 100% 100%; + } + @media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + padding-right: 0; + padding-left: 0; + } + } + @media (min-width: 576px) { + .navbar-expand-sm { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + } + @media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + padding-right: 0; + padding-left: 0; + } + } + @media (min-width: 768px) { + .navbar-expand-md { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + } + @media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + padding-right: 0; + padding-left: 0; + } + } + @media (min-width: 992px) { + .navbar-expand-lg { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + } + @media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + padding-right: 0; + padding-left: 0; + } + } + @media (min-width: 1200px) { + .navbar-expand-xl { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + } + .navbar-expand { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + } + .navbar-expand > .container, + .navbar-expand > .container-fluid { + padding-right: 0; + padding-left: 0; + } + .navbar-expand .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-expand .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand > .container, + .navbar-expand > .container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + } + .navbar-expand .navbar-collapse { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + -ms-flex-preferred-size: auto; + flex-basis: auto; + } + .navbar-expand .navbar-toggler { + display: none; + } + .navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); + } + .navbar-light .navbar-brand:hover, + .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); + } + .navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); + } + .navbar-light .navbar-nav .nav-link:hover, + .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); + } + .navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); + } + .navbar-light .navbar-nav .show > .nav-link, + .navbar-light .navbar-nav .active > .nav-link, + .navbar-light .navbar-nav .nav-link.show, + .navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); + } + .navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); + } + .navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + } + .navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); + } + .navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); + } + .navbar-light .navbar-text a:hover, + .navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); + } + .navbar-dark .navbar-brand { + color: #fff; + } + .navbar-dark .navbar-brand:hover, + .navbar-dark .navbar-brand:focus { + color: #fff; + } + .navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); + } + .navbar-dark .navbar-nav .nav-link:hover, + .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); + } + .navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); + } + .navbar-dark .navbar-nav .show > .nav-link, + .navbar-dark .navbar-nav .active > .nav-link, + .navbar-dark .navbar-nav .nav-link.show, + .navbar-dark .navbar-nav .nav-link.active { + color: #fff; + } + .navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); + } + .navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + } + .navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); + } + .navbar-dark .navbar-text a { + color: #fff; + } + .navbar-dark .navbar-text a:hover, + .navbar-dark .navbar-text a:focus { + color: #fff; + } + .card { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0; + } + .card > hr { + margin-right: 0; + margin-left: 0; + } + .card > .list-group:first-child .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + .card-body { + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; + } + .card-title { + margin-bottom: 0.75rem; + } + .card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; + } + .card-text:last-child { + margin-bottom: 0; + } + .card-link:hover { + text-decoration: none; + } + .card-link + .card-link { + margin-left: 1.25rem; + } + .card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); + } + .card-header:first-child { + border-radius: calc(0 - 1px) calc(0 - 1px) 0 0; + } + .card-header + .list-group .list-group-item:first-child { + border-top: 0; + } + .card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); + } + .card-footer:last-child { + border-radius: 0 0 calc(0 - 1px) calc(0 - 1px); + } + .card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; + } + .card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; + } + .card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; + } + .card-img { + width: 100%; + border-radius: calc(0 - 1px); + } + .card-img-top { + width: 100%; + border-top-left-radius: calc(0 - 1px); + border-top-right-radius: calc(0 - 1px); + } + .card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(0 - 1px); + border-bottom-left-radius: calc(0 - 1px); + } + .card-deck { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } + .card-deck .card { + margin-bottom: 15px; + } + @media (min-width: 576px) { + .card-deck { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } + } + .card-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + } + .card-group > .card { + margin-bottom: 15px; + } + @media (min-width: 576px) { + .card-group { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group > .card { + -webkit-box-flex: 1; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } + } + .card-columns .card { + margin-bottom: 0.75rem; + } + @media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } + } + .accordion > .card { + overflow: hidden; + } + .accordion > .card:not(:first-of-type) .card-header:first-child { + border-radius: 0; + } + .accordion > .card:not(:first-of-type):not(:last-of-type) { + border-bottom: 0; + border-radius: 0; + } + .accordion > .card:first-of-type { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + .accordion > .card:last-of-type { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .accordion > .card .card-header { + margin-bottom: -1px; + } + .breadcrumb { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: 0; + } + .breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; + } + .breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: '/'; + } + .breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; + } + .breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; + } + .breadcrumb-item.active { + color: #6c757d; + } + .pagination { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0; + } + .page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #e05433; + background-color: #fff; + border: 1px solid #dee2e6; + } + .page-link:hover { + z-index: 2; + color: #ac361a; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; + } + .page-link:focus { + z-index: 2; + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.25); + } + .page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .page-item:last-child .page-link { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .page-item.active .page-link { + z-index: 1; + color: #fff; + background-color: #e05433; + border-color: #e05433; + } + .page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; + } + .pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; + } + .pagination-lg .page-item:first-child .page-link { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .pagination-lg .page-item:last-child .page-link { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + } + .pagination-sm .page-item:first-child .page-link { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .pagination-sm .page-item:last-child .page-link { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + -webkit-box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; + } + @media (prefers-reduced-motion: reduce) { + .badge { + -webkit-transition: none; + transition: none; + } + } + a.badge:hover, + a.badge:focus { + text-decoration: none; + } + .badge:empty { + display: none; + } + .btn .badge { + position: relative; + top: -1px; + } + .badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; + } + .badge-primary { + color: #fff; + background-color: #e05433; + } + a.badge-primary:hover, + a.badge-primary:focus { + color: #fff; + background-color: #c23d1e; + } + a.badge-primary:focus, + a.badge-primary.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.5); + box-shadow: 0 0 0 0.2rem rgba(224, 84, 51, 0.5); + } + .badge-secondary { + color: #fff; + background-color: #6c757d; + } + a.badge-secondary:hover, + a.badge-secondary:focus { + color: #fff; + background-color: #545b62; + } + a.badge-secondary:focus, + a.badge-secondary.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); + box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); + } + .badge-success { + color: #fff; + background-color: #28a745; + } + a.badge-success:hover, + a.badge-success:focus { + color: #fff; + background-color: #1e7e34; + } + a.badge-success:focus, + a.badge-success.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); + } + .badge-info { + color: #fff; + background-color: #17a2b8; + } + a.badge-info:hover, + a.badge-info:focus { + color: #fff; + background-color: #117a8b; + } + a.badge-info:focus, + a.badge-info.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); + } + .badge-warning { + color: #212529; + background-color: #ffc107; + } + a.badge-warning:hover, + a.badge-warning:focus { + color: #212529; + background-color: #d39e00; + } + a.badge-warning:focus, + a.badge-warning.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); + } + .badge-danger { + color: #fff; + background-color: #dc3545; + } + a.badge-danger:hover, + a.badge-danger:focus { + color: #fff; + background-color: #bd2130; + } + a.badge-danger:focus, + a.badge-danger.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); + } + .badge-light { + color: #212529; + background-color: #f8f9fa; + } + a.badge-light:hover, + a.badge-light:focus { + color: #212529; + background-color: #dae0e5; + } + a.badge-light:focus, + a.badge-light.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); + } + .badge-dark { + color: #fff; + background-color: #343a40; + } + a.badge-dark:hover, + a.badge-dark:focus { + color: #fff; + background-color: #1d2124; + } + a.badge-dark:focus, + a.badge-dark.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); + } + .jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 0; + } + @media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } + } + .jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; + } + .alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0; + } + .alert-heading { + color: inherit; + } + .alert-link { + font-weight: 700; + } + .alert-dismissible { + padding-right: 4rem; + } + .alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; + } + .alert-primary { + color: #742c1b; + background-color: #f9ddd6; + border-color: #f6cfc6; + } + .alert-primary hr { + border-top-color: #f3bcb0; + } + .alert-primary .alert-link { + color: #4b1c11; + } + .alert-secondary { + color: #383d41; + background-color: #e2e3e5; + border-color: #d6d8db; + } + .alert-secondary hr { + border-top-color: #c8cbcf; + } + .alert-secondary .alert-link { + color: #202326; + } + .alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; + } + .alert-success hr { + border-top-color: #b1dfbb; + } + .alert-success .alert-link { + color: #0b2e13; + } + .alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; + } + .alert-info hr { + border-top-color: #abdde5; + } + .alert-info .alert-link { + color: #062c33; + } + .alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; + } + .alert-warning hr { + border-top-color: #ffe8a1; + } + .alert-warning .alert-link { + color: #533f03; + } + .alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; + } + .alert-danger hr { + border-top-color: #f1b0b7; + } + .alert-danger .alert-link { + color: #491217; + } + .alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; + } + .alert-light hr { + border-top-color: #ececf6; + } + .alert-light .alert-link { + color: #686868; + } + .alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; + } + .alert-dark hr { + border-top-color: #b9bbbe; + } + .alert-dark .alert-link { + color: #040505; + } + @-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } + } + @keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } + } + .progress { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0; + } + .progress-bar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #e05433; + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; + } + @media (prefers-reduced-motion: reduce) { + .progress-bar { + -webkit-transition: none; + transition: none; + } + } + .progress-bar-striped { + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-size: 1rem 1rem; + } + .progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; + } + @media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + -webkit-animation: none; + animation: none; + } + } + .media { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + } + .media-body { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + } + .list-group { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + } + .list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; + } + .list-group-item-action:hover, + .list-group-item-action:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; + } + .list-group-item-action:active { + color: #212529; + background-color: #e9ecef; + } + .list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); + } + .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + .list-group-item.disabled, + .list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; + } + .list-group-item.active { + z-index: 2; + color: #fff; + background-color: #e05433; + border-color: #e05433; + } + .list-group-horizontal { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal .list-group-item:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0; + } + .list-group-horizontal .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + @media (min-width: 576px) { + .list-group-horizontal-sm { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-sm .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-sm .list-group-item:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0; + } + .list-group-horizontal-sm .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + } + @media (min-width: 768px) { + .list-group-horizontal-md { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-md .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-md .list-group-item:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0; + } + .list-group-horizontal-md .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + } + @media (min-width: 992px) { + .list-group-horizontal-lg { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-lg .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-lg .list-group-item:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0; + } + .list-group-horizontal-lg .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + } + @media (min-width: 1200px) { + .list-group-horizontal-xl { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + } + .list-group-horizontal-xl .list-group-item { + margin-right: -1px; + margin-bottom: 0; + } + .list-group-horizontal-xl .list-group-item:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 0; + } + .list-group-horizontal-xl .list-group-item:last-child { + margin-right: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + } + .list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; + } + .list-group-flush .list-group-item:last-child { + margin-bottom: -1px; + } + .list-group-flush:first-child .list-group-item:first-child { + border-top: 0; + } + .list-group-flush:last-child .list-group-item:last-child { + margin-bottom: 0; + border-bottom: 0; + } + .list-group-item-primary { + color: #742c1b; + background-color: #f6cfc6; + } + .list-group-item-primary.list-group-item-action:hover, + .list-group-item-primary.list-group-item-action:focus { + color: #742c1b; + background-color: #f3bcb0; + } + .list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #742c1b; + border-color: #742c1b; + } + .list-group-item-secondary { + color: #383d41; + background-color: #d6d8db; + } + .list-group-item-secondary.list-group-item-action:hover, + .list-group-item-secondary.list-group-item-action:focus { + color: #383d41; + background-color: #c8cbcf; + } + .list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #383d41; + border-color: #383d41; + } + .list-group-item-success { + color: #155724; + background-color: #c3e6cb; + } + .list-group-item-success.list-group-item-action:hover, + .list-group-item-success.list-group-item-action:focus { + color: #155724; + background-color: #b1dfbb; + } + .list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #155724; + border-color: #155724; + } + .list-group-item-info { + color: #0c5460; + background-color: #bee5eb; + } + .list-group-item-info.list-group-item-action:hover, + .list-group-item-info.list-group-item-action:focus { + color: #0c5460; + background-color: #abdde5; + } + .list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; + } + .list-group-item-warning { + color: #856404; + background-color: #ffeeba; + } + .list-group-item-warning.list-group-item-action:hover, + .list-group-item-warning.list-group-item-action:focus { + color: #856404; + background-color: #ffe8a1; + } + .list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #856404; + border-color: #856404; + } + .list-group-item-danger { + color: #721c24; + background-color: #f5c6cb; + } + .list-group-item-danger.list-group-item-action:hover, + .list-group-item-danger.list-group-item-action:focus { + color: #721c24; + background-color: #f1b0b7; + } + .list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #721c24; + border-color: #721c24; + } + .list-group-item-light { + color: #818182; + background-color: #fdfdfe; + } + .list-group-item-light.list-group-item-action:hover, + .list-group-item-light.list-group-item-action:focus { + color: #818182; + background-color: #ececf6; + } + .list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #818182; + border-color: #818182; + } + .list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca; + } + .list-group-item-dark.list-group-item-action:hover, + .list-group-item-dark.list-group-item-action:focus { + color: #1b1e21; + background-color: #b9bbbe; + } + .list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; + } + .close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: 0.5; + } + .close:hover { + color: #000; + text-decoration: none; + } + .close:not(:disabled):not(.disabled):hover, + .close:not(:disabled):not(.disabled):focus { + opacity: 0.75; + } + button.close { + padding: 0; + background-color: transparent; + border: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + } + a.close.disabled { + pointer-events: none; + } + .toast { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + -webkit-box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + -webkit-backdrop-filter: blur(10px); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; + } + .toast:not(:last-child) { + margin-bottom: 0.75rem; + } + .toast.showing { + opacity: 1; + } + .toast.show { + display: block; + opacity: 1; + } + .toast.hide { + display: none; + } + .toast-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + } + .toast-body { + padding: 0.75rem; + } + .modal-open { + overflow: hidden; + } + .modal-open .modal { + overflow-x: hidden; + overflow-y: auto; + } + .modal { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + display: none; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; + } + .modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; + } + .modal.fade .modal-dialog { + -webkit-transition: -webkit-transform 0.3s ease-out; + transition: -webkit-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out; + -webkit-transform: translate(0, -50px); + transform: translate(0, -50px); + } + @media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + -webkit-transition: none; + transition: none; + } + } + .modal.show .modal-dialog { + -webkit-transform: none; + transform: none; + } + .modal-dialog-scrollable { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + max-height: calc(100% - 1rem); + } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; + } + .modal-dialog-scrollable .modal-header, + .modal-dialog-scrollable .modal-footer { + -ms-flex-negative: 0; + flex-shrink: 0; + } + .modal-dialog-scrollable .modal-body { + overflow-y: auto; + } + .modal-dialog-centered { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + min-height: calc(100% - 1rem); + } + .modal-dialog-centered::before { + display: block; + height: calc(100vh - 1rem); + content: ''; + } + .modal-dialog-centered.modal-dialog-scrollable { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: 100%; + } + .modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; + } + .modal-dialog-centered.modal-dialog-scrollable::before { + content: none; + } + .modal-content { + position: relative; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0; + outline: 0; + } + .modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; + } + .modal-backdrop.fade { + opacity: 0; + } + .modal-backdrop.show { + opacity: 0.5; + } + .modal-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; + border-top-left-radius: 0; + border-top-right-radius: 0; + } + .modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; + } + .modal-title { + margin-bottom: 0; + line-height: 1.5; + } + .modal-body { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1rem; + } + .modal-footer { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 1rem; + border-top: 1px solid #dee2e6; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + .modal-footer > :not(:first-child) { + margin-left: 0.25rem; + } + .modal-footer > :not(:last-child) { + margin-right: 0.25rem; + } + .modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; + } + @media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); + } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-dialog-centered::before { + height: calc(100vh - 3.5rem); + } + .modal-sm { + max-width: 300px; + } + } + @media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } + } + @media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } + } + .tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; + } + .tooltip.show { + opacity: 0.9; + } + .tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; + } + .tooltip .arrow::before { + position: absolute; + content: ''; + border-color: transparent; + border-style: solid; + } + .bs-tooltip-top, + .bs-tooltip-auto[x-placement^='top'] { + padding: 0.4rem 0; + } + .bs-tooltip-top .arrow, + .bs-tooltip-auto[x-placement^='top'] .arrow { + bottom: 0; + } + .bs-tooltip-top .arrow::before, + .bs-tooltip-auto[x-placement^='top'] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; + } + .bs-tooltip-right, + .bs-tooltip-auto[x-placement^='right'] { + padding: 0 0.4rem; + } + .bs-tooltip-right .arrow, + .bs-tooltip-auto[x-placement^='right'] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; + } + .bs-tooltip-right .arrow::before, + .bs-tooltip-auto[x-placement^='right'] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; + } + .bs-tooltip-bottom, + .bs-tooltip-auto[x-placement^='bottom'] { + padding: 0.4rem 0; + } + .bs-tooltip-bottom .arrow, + .bs-tooltip-auto[x-placement^='bottom'] .arrow { + top: 0; + } + .bs-tooltip-bottom .arrow::before, + .bs-tooltip-auto[x-placement^='bottom'] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; + } + .bs-tooltip-left, + .bs-tooltip-auto[x-placement^='left'] { + padding: 0 0.4rem; + } + .bs-tooltip-left .arrow, + .bs-tooltip-auto[x-placement^='left'] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; + } + .bs-tooltip-left .arrow::before, + .bs-tooltip-auto[x-placement^='left'] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; + } + .tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0; + } + .popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0; + } + .popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0; + } + .popover .arrow::before, + .popover .arrow::after { + position: absolute; + display: block; + content: ''; + border-color: transparent; + border-style: solid; + } + .bs-popover-top, + .bs-popover-auto[x-placement^='top'] { + margin-bottom: 0.5rem; + } + .bs-popover-top > .arrow, + .bs-popover-auto[x-placement^='top'] > .arrow { + bottom: calc((0.5rem + 1px) * -1); + } + .bs-popover-top > .arrow::before, + .bs-popover-auto[x-placement^='top'] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); + } + .bs-popover-top > .arrow::after, + .bs-popover-auto[x-placement^='top'] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; + } + .bs-popover-right, + .bs-popover-auto[x-placement^='right'] { + margin-left: 0.5rem; + } + .bs-popover-right > .arrow, + .bs-popover-auto[x-placement^='right'] > .arrow { + left: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0 0; + } + .bs-popover-right > .arrow::before, + .bs-popover-auto[x-placement^='right'] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); + } + .bs-popover-right > .arrow::after, + .bs-popover-auto[x-placement^='right'] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; + } + .bs-popover-bottom, + .bs-popover-auto[x-placement^='bottom'] { + margin-top: 0.5rem; + } + .bs-popover-bottom > .arrow, + .bs-popover-auto[x-placement^='bottom'] > .arrow { + top: calc((0.5rem + 1px) * -1); + } + .bs-popover-bottom > .arrow::before, + .bs-popover-auto[x-placement^='bottom'] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); + } + .bs-popover-bottom > .arrow::after, + .bs-popover-auto[x-placement^='bottom'] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; + } + .bs-popover-bottom .popover-header::before, + .bs-popover-auto[x-placement^='bottom'] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ''; + border-bottom: 1px solid #f7f7f7; + } + .bs-popover-left, + .bs-popover-auto[x-placement^='left'] { + margin-right: 0.5rem; + } + .bs-popover-left > .arrow, + .bs-popover-auto[x-placement^='left'] > .arrow { + right: calc((0.5rem + 1px) * -1); + width: 0.5rem; + height: 1rem; + margin: 0 0; + } + .bs-popover-left > .arrow::before, + .bs-popover-auto[x-placement^='left'] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); + } + .bs-popover-left > .arrow::after, + .bs-popover-auto[x-placement^='left'] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; + } + .popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(0 - 1px); + border-top-right-radius: calc(0 - 1px); + } + .popover-header:empty { + display: none; + } + .popover-body { + padding: 0.5rem 0.75rem; + color: #212529; + } + .carousel { + position: relative; + } + .carousel.pointer-event { + -ms-touch-action: pan-y; + touch-action: pan-y; + } + .carousel-inner { + position: relative; + width: 100%; + overflow: hidden; + } + .carousel-inner::after { + display: block; + clear: both; + content: ''; + } + .carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transition: -webkit-transform 0.6s ease-in-out; + transition: -webkit-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out; + } + @media (prefers-reduced-motion: reduce) { + .carousel-item { + -webkit-transition: none; + transition: none; + } + } + .carousel-item.active, + .carousel-item-next, + .carousel-item-prev { + display: block; + } + .carousel-item-next:not(.carousel-item-left), + .active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + .carousel-item-prev:not(.carousel-item-right), + .active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + .carousel-fade .carousel-item { + opacity: 0; + -webkit-transition-property: opacity; + transition-property: opacity; + -webkit-transform: none; + transform: none; + } + .carousel-fade .carousel-item.active, + .carousel-fade .carousel-item-next.carousel-item-left, + .carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; + } + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + -webkit-transition: 0s 0.6s opacity; + transition: 0s 0.6s opacity; + } + @media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + -webkit-transition: none; + transition: none; + } + } + .carousel-control-prev, + .carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + -webkit-transition: opacity 0.15s ease; + transition: opacity 0.15s ease; + } + @media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + -webkit-transition: none; + transition: none; + } + } + .carousel-control-prev:hover, + .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; + } + .carousel-control-prev { + left: 0; + } + .carousel-control-next { + right: 0; + } + .carousel-control-prev-icon, + .carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: no-repeat 50% / 100% 100%; + } + .carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e"); + } + .carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e"); + } + .carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; + } + .carousel-indicators li { + -webkit-box-sizing: content-box; + box-sizing: content-box; + -webkit-box-flex: 0; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + -webkit-transition: opacity 0.6s ease; + transition: opacity 0.6s ease; + } + @media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + -webkit-transition: none; + transition: none; + } + } + .carousel-indicators .active { + opacity: 1; + } + .carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + } + @-webkit-keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + @keyframes spinner-border { + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + .spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + -webkit-animation: spinner-border 0.75s linear infinite; + animation: spinner-border 0.75s linear infinite; + } + .spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; + } + @-webkit-keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } + } + @keyframes spinner-grow { + 0% { + -webkit-transform: scale(0); + transform: scale(0); + } + 50% { + opacity: 1; + } + } + .spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + -webkit-animation: spinner-grow 0.75s linear infinite; + animation: spinner-grow 0.75s linear infinite; + } + .spinner-grow-sm { + width: 1rem; + height: 1rem; + } + .align-baseline { + vertical-align: baseline !important; + } + .align-top { + vertical-align: top !important; + } + .align-middle { + vertical-align: middle !important; + } + .align-bottom { + vertical-align: bottom !important; + } + .align-text-bottom { + vertical-align: text-bottom !important; + } + .align-text-top { + vertical-align: text-top !important; + } + .bg-primary { + background-color: #e05433 !important; + } + a.bg-primary:hover, + a.bg-primary:focus, + button.bg-primary:hover, + button.bg-primary:focus { + background-color: #c23d1e !important; + } + .bg-secondary { + background-color: #6c757d !important; + } + a.bg-secondary:hover, + a.bg-secondary:focus, + button.bg-secondary:hover, + button.bg-secondary:focus { + background-color: #545b62 !important; + } + .bg-success { + background-color: #28a745 !important; + } + a.bg-success:hover, + a.bg-success:focus, + button.bg-success:hover, + button.bg-success:focus { + background-color: #1e7e34 !important; + } + .bg-info { + background-color: #17a2b8 !important; + } + a.bg-info:hover, + a.bg-info:focus, + button.bg-info:hover, + button.bg-info:focus { + background-color: #117a8b !important; + } + .bg-warning { + background-color: #ffc107 !important; + } + a.bg-warning:hover, + a.bg-warning:focus, + button.bg-warning:hover, + button.bg-warning:focus { + background-color: #d39e00 !important; + } + .bg-danger { + background-color: #dc3545 !important; + } + a.bg-danger:hover, + a.bg-danger:focus, + button.bg-danger:hover, + button.bg-danger:focus { + background-color: #bd2130 !important; + } + .bg-light { + background-color: #f8f9fa !important; + } + a.bg-light:hover, + a.bg-light:focus, + button.bg-light:hover, + button.bg-light:focus { + background-color: #dae0e5 !important; + } + .bg-dark { + background-color: #343a40 !important; + } + a.bg-dark:hover, + a.bg-dark:focus, + button.bg-dark:hover, + button.bg-dark:focus { + background-color: #1d2124 !important; + } + .bg-white { + background-color: #fff !important; + } + .bg-transparent { + background-color: transparent !important; + } + .border { + border: 1px solid #dee2e6 !important; + } + .border-top { + border-top: 1px solid #dee2e6 !important; + } + .border-right { + border-right: 1px solid #dee2e6 !important; + } + .border-bottom { + border-bottom: 1px solid #dee2e6 !important; + } + .border-left { + border-left: 1px solid #dee2e6 !important; + } + .border-0 { + border: 0 !important; + } + .border-top-0 { + border-top: 0 !important; + } + .border-right-0 { + border-right: 0 !important; + } + .border-bottom-0 { + border-bottom: 0 !important; + } + .border-left-0 { + border-left: 0 !important; + } + .border-primary { + border-color: #e05433 !important; + } + .border-secondary { + border-color: #6c757d !important; + } + .border-success { + border-color: #28a745 !important; + } + .border-info { + border-color: #17a2b8 !important; + } + .border-warning { + border-color: #ffc107 !important; + } + .border-danger { + border-color: #dc3545 !important; + } + .border-light { + border-color: #f8f9fa !important; + } + .border-dark { + border-color: #343a40 !important; + } + .border-white { + border-color: #fff !important; + } + .rounded-sm { + border-radius: 0 !important; + } + .rounded { + border-radius: 0 !important; + } + .rounded-top { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; + } + .rounded-right { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; + } + .rounded-bottom { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; + } + .rounded-left { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; + } + .rounded-lg { + border-radius: 0 !important; + } + .rounded-circle { + border-radius: 50% !important; + } + .rounded-pill { + border-radius: 50rem !important; + } + .rounded-0 { + border-radius: 0 !important; + } + .clearfix::after { + display: block; + clear: both; + content: ''; + } + .d-none { + display: none !important; + } + .d-inline { + display: inline !important; + } + .d-inline-block { + display: inline-block !important; + } + .d-block { + display: block !important; + } + .d-table { + display: table !important; + } + .d-table-row { + display: table-row !important; + } + .d-table-cell { + display: table-cell !important; + } + .d-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + @media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + @media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + @media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + @media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + @media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -webkit-box !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -webkit-inline-box !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } + } + .embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; + } + .embed-responsive::before { + display: block; + content: ''; + } + .embed-responsive .embed-responsive-item, + .embed-responsive iframe, + .embed-responsive embed, + .embed-responsive object, + .embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; + } + .embed-responsive-21by9::before { + padding-top: 42.85714%; + } + .embed-responsive-16by9::before { + padding-top: 56.25%; + } + .embed-responsive-4by3::before { + padding-top: 75%; + } + .embed-responsive-1by1::before { + padding-top: 100%; + } + .flex-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } + @media (min-width: 576px) { + .flex-sm-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } + } + @media (min-width: 768px) { + .flex-md-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } + } + @media (min-width: 992px) { + .flex-lg-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } + } + @media (min-width: 1200px) { + .flex-xl-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -webkit-box-flex: 1 !important; + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -webkit-box-flex: 0 !important; + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -webkit-box-flex: 1 !important; + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -webkit-box-pack: start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -webkit-box-pack: end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -webkit-box-pack: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -webkit-box-pack: justify !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -webkit-box-align: start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -webkit-box-align: end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -webkit-box-align: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -webkit-box-align: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -webkit-box-align: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } + } + .float-left { + float: left !important; + } + .float-right { + float: right !important; + } + .float-none { + float: none !important; + } + @media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } + } + @media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } + } + @media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } + } + @media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } + } + .overflow-auto { + overflow: auto !important; + } + .overflow-hidden { + overflow: hidden !important; + } + .position-static { + position: static !important; + } + .position-relative { + position: relative !important; + } + .position-absolute { + position: absolute !important; + } + .position-fixed { + position: fixed !important; + } + .position-sticky { + position: -webkit-sticky !important; + position: sticky !important; + } + .fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; + } + .fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + } + @supports ((position: -webkit-sticky) or (position: sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + } + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; + } + .sr-only-focusable:active, + .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + } + .shadow-sm { + -webkit-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; + } + .shadow { + -webkit-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; + } + .shadow-lg { + -webkit-box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; + } + .shadow-none { + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + .w-25 { + width: 25% !important; + } + .w-50 { + width: 50% !important; + } + .w-75 { + width: 75% !important; + } + .w-100 { + width: 100% !important; + } + .w-auto { + width: auto !important; + } + .h-25 { + height: 25% !important; + } + .h-50 { + height: 50% !important; + } + .h-75 { + height: 75% !important; + } + .h-100 { + height: 100% !important; + } + .h-auto { + height: auto !important; + } + .mw-100 { + max-width: 100% !important; + } + .mh-100 { + max-height: 100% !important; + } + .min-vw-100 { + min-width: 100vw !important; + } + .min-vh-100 { + min-height: 100vh !important; + } + .vw-100 { + width: 100vw !important; + } + .vh-100 { + height: 100vh !important; + } + .stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ''; + background-color: rgba(0, 0, 0, 0); + } + .m-0 { + margin: 0 !important; + } + .mt-0, + .my-0 { + margin-top: 0 !important; + } + .mr-0, + .mx-0 { + margin-right: 0 !important; + } + .mb-0, + .my-0 { + margin-bottom: 0 !important; + } + .ml-0, + .mx-0 { + margin-left: 0 !important; + } + .m-1 { + margin: 0.25rem !important; + } + .mt-1, + .my-1 { + margin-top: 0.25rem !important; + } + .mr-1, + .mx-1 { + margin-right: 0.25rem !important; + } + .mb-1, + .my-1 { + margin-bottom: 0.25rem !important; + } + .ml-1, + .mx-1 { + margin-left: 0.25rem !important; + } + .m-2 { + margin: 0.5rem !important; + } + .mt-2, + .my-2 { + margin-top: 0.5rem !important; + } + .mr-2, + .mx-2 { + margin-right: 0.5rem !important; + } + .mb-2, + .my-2 { + margin-bottom: 0.5rem !important; + } + .ml-2, + .mx-2 { + margin-left: 0.5rem !important; + } + .m-3 { + margin: 1rem !important; + } + .mt-3, + .my-3 { + margin-top: 1rem !important; + } + .mr-3, + .mx-3 { + margin-right: 1rem !important; + } + .mb-3, + .my-3 { + margin-bottom: 1rem !important; + } + .ml-3, + .mx-3 { + margin-left: 1rem !important; + } + .m-4 { + margin: 1.5rem !important; + } + .mt-4, + .my-4 { + margin-top: 1.5rem !important; + } + .mr-4, + .mx-4 { + margin-right: 1.5rem !important; + } + .mb-4, + .my-4 { + margin-bottom: 1.5rem !important; + } + .ml-4, + .mx-4 { + margin-left: 1.5rem !important; + } + .m-5 { + margin: 3rem !important; + } + .mt-5, + .my-5 { + margin-top: 3rem !important; + } + .mr-5, + .mx-5 { + margin-right: 3rem !important; + } + .mb-5, + .my-5 { + margin-bottom: 3rem !important; + } + .ml-5, + .mx-5 { + margin-left: 3rem !important; + } + .p-0 { + padding: 0 !important; + } + .pt-0, + .py-0 { + padding-top: 0 !important; + } + .pr-0, + .px-0 { + padding-right: 0 !important; + } + .pb-0, + .py-0 { + padding-bottom: 0 !important; + } + .pl-0, + .px-0 { + padding-left: 0 !important; + } + .p-1 { + padding: 0.25rem !important; + } + .pt-1, + .py-1 { + padding-top: 0.25rem !important; + } + .pr-1, + .px-1 { + padding-right: 0.25rem !important; + } + .pb-1, + .py-1 { + padding-bottom: 0.25rem !important; + } + .pl-1, + .px-1 { + padding-left: 0.25rem !important; + } + .p-2 { + padding: 0.5rem !important; + } + .pt-2, + .py-2 { + padding-top: 0.5rem !important; + } + .pr-2, + .px-2 { + padding-right: 0.5rem !important; + } + .pb-2, + .py-2 { + padding-bottom: 0.5rem !important; + } + .pl-2, + .px-2 { + padding-left: 0.5rem !important; + } + .p-3 { + padding: 1rem !important; + } + .pt-3, + .py-3 { + padding-top: 1rem !important; + } + .pr-3, + .px-3 { + padding-right: 1rem !important; + } + .pb-3, + .py-3 { + padding-bottom: 1rem !important; + } + .pl-3, + .px-3 { + padding-left: 1rem !important; + } + .p-4 { + padding: 1.5rem !important; + } + .pt-4, + .py-4 { + padding-top: 1.5rem !important; + } + .pr-4, + .px-4 { + padding-right: 1.5rem !important; + } + .pb-4, + .py-4 { + padding-bottom: 1.5rem !important; + } + .pl-4, + .px-4 { + padding-left: 1.5rem !important; + } + .p-5 { + padding: 3rem !important; + } + .pt-5, + .py-5 { + padding-top: 3rem !important; + } + .pr-5, + .px-5 { + padding-right: 3rem !important; + } + .pb-5, + .py-5 { + padding-bottom: 3rem !important; + } + .pl-5, + .px-5 { + padding-left: 3rem !important; + } + .m-n1 { + margin: -0.25rem !important; + } + .mt-n1, + .my-n1 { + margin-top: -0.25rem !important; + } + .mr-n1, + .mx-n1 { + margin-right: -0.25rem !important; + } + .mb-n1, + .my-n1 { + margin-bottom: -0.25rem !important; + } + .ml-n1, + .mx-n1 { + margin-left: -0.25rem !important; + } + .m-n2 { + margin: -0.5rem !important; + } + .mt-n2, + .my-n2 { + margin-top: -0.5rem !important; + } + .mr-n2, + .mx-n2 { + margin-right: -0.5rem !important; + } + .mb-n2, + .my-n2 { + margin-bottom: -0.5rem !important; + } + .ml-n2, + .mx-n2 { + margin-left: -0.5rem !important; + } + .m-n3 { + margin: -1rem !important; + } + .mt-n3, + .my-n3 { + margin-top: -1rem !important; + } + .mr-n3, + .mx-n3 { + margin-right: -1rem !important; + } + .mb-n3, + .my-n3 { + margin-bottom: -1rem !important; + } + .ml-n3, + .mx-n3 { + margin-left: -1rem !important; + } + .m-n4 { + margin: -1.5rem !important; + } + .mt-n4, + .my-n4 { + margin-top: -1.5rem !important; + } + .mr-n4, + .mx-n4 { + margin-right: -1.5rem !important; + } + .mb-n4, + .my-n4 { + margin-bottom: -1.5rem !important; + } + .ml-n4, + .mx-n4 { + margin-left: -1.5rem !important; + } + .m-n5 { + margin: -3rem !important; + } + .mt-n5, + .my-n5 { + margin-top: -3rem !important; + } + .mr-n5, + .mx-n5 { + margin-right: -3rem !important; + } + .mb-n5, + .my-n5 { + margin-bottom: -3rem !important; + } + .ml-n5, + .mx-n5 { + margin-left: -3rem !important; + } + .m-auto { + margin: auto !important; + } + .mt-auto, + .my-auto { + margin-top: auto !important; + } + .mr-auto, + .mx-auto { + margin-right: auto !important; + } + .mb-auto, + .my-auto { + margin-bottom: auto !important; + } + .ml-auto, + .mx-auto { + margin-left: auto !important; + } + @media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-n1 { + margin: -0.25rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; + } + .m-sm-n2 { + margin: -0.5rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; + } + .m-sm-n3 { + margin: -1rem !important; + } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; + } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; + } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; + } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; + } + .m-sm-n4 { + margin: -1.5rem !important; + } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; + } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; + } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; + } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; + } + .m-sm-n5 { + margin: -3rem !important; + } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; + } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; + } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; + } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } + } + @media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-n1 { + margin: -0.25rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; + } + .m-md-n2 { + margin: -0.5rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; + } + .m-md-n3 { + margin: -1rem !important; + } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; + } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; + } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; + } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; + } + .m-md-n4 { + margin: -1.5rem !important; + } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; + } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; + } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; + } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; + } + .m-md-n5 { + margin: -3rem !important; + } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; + } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; + } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; + } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } + } + @media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-n1 { + margin: -0.25rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; + } + .m-lg-n2 { + margin: -0.5rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; + } + .m-lg-n3 { + margin: -1rem !important; + } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; + } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; + } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; + } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; + } + .m-lg-n4 { + margin: -1.5rem !important; + } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; + } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; + } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; + } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; + } + .m-lg-n5 { + margin: -3rem !important; + } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; + } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; + } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; + } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } + } + @media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-n1 { + margin: -0.25rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; + } + .m-xl-n2 { + margin: -0.5rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; + } + .m-xl-n3 { + margin: -1rem !important; + } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; + } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; + } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; + } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; + } + .m-xl-n4 { + margin: -1.5rem !important; + } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; + } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; + } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; + } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; + } + .m-xl-n5 { + margin: -3rem !important; + } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; + } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; + } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; + } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } + } + .text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace !important; + } + .text-justify { + text-align: justify !important; + } + .text-wrap { + white-space: normal !important; + } + .text-nowrap { + white-space: nowrap !important; + } + .text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .text-left { + text-align: left !important; + } + .text-right { + text-align: right !important; + } + .text-center { + text-align: center !important; + } + @media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } + } + @media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } + } + @media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } + } + @media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } + } + .text-lowercase { + text-transform: lowercase !important; + } + .text-uppercase { + text-transform: uppercase !important; + } + .text-capitalize { + text-transform: capitalize !important; + } + .font-weight-light { + font-weight: 300 !important; + } + .font-weight-lighter { + font-weight: lighter !important; + } + .font-weight-normal { + font-weight: 400 !important; + } + .font-weight-bold { + font-weight: 700 !important; + } + .font-weight-bolder { + font-weight: bolder !important; + } + .font-italic { + font-style: italic !important; + } + .text-white { + color: #fff !important; + } + .text-primary { + color: #e05433 !important; + } + a.text-primary:hover, + a.text-primary:focus { + color: #ac361a !important; + } + .text-secondary { + color: #6c757d !important; + } + a.text-secondary:hover, + a.text-secondary:focus { + color: #494f54 !important; + } + .text-success { + color: #28a745 !important; + } + a.text-success:hover, + a.text-success:focus { + color: #19692c !important; + } + .text-info { + color: #17a2b8 !important; + } + a.text-info:hover, + a.text-info:focus { + color: #0f6674 !important; + } + .text-warning { + color: #ffc107 !important; + } + a.text-warning:hover, + a.text-warning:focus { + color: #ba8b00 !important; + } + .text-danger { + color: #dc3545 !important; + } + a.text-danger:hover, + a.text-danger:focus { + color: #a71d2a !important; + } + .text-light { + color: #f8f9fa !important; + } + a.text-light:hover, + a.text-light:focus { + color: #cbd3da !important; + } + .text-dark { + color: #343a40 !important; + } + a.text-dark:hover, + a.text-dark:focus { + color: #121416 !important; + } + .text-body { + color: #212529 !important; + } + .text-muted { + color: #6c757d !important; + } + .text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; + } + .text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; + } + .text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; + } + .text-decoration-none { + text-decoration: none !important; + } + .text-break { + word-break: break-word !important; + overflow-wrap: break-word !important; + } + .text-reset { + color: inherit !important; + } + .visible { + visibility: visible !important; + } + .invisible { + visibility: hidden !important; + } + @media print { + *, + *::before, + *::after { + text-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: ' (' attr(title) ')'; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #dee2e6; + } + .table .thead-dark th { + color: inherit; + border-color: #dee2e6; + } + } + \ No newline at end of file diff --git a/ui/src/styles/common.css b/ui/src/styles/common.css new file mode 100644 index 0000000..c648654 --- /dev/null +++ b/ui/src/styles/common.css @@ -0,0 +1,25 @@ +img { + width: 100%; + } + .showcase { + position: relative; + background: url('../../img/showcase.jpg') no-repeat center center/cover; + min-height: 100vh; + color: #fff; + } + .showcase-inner { + text-align: center; + padding-top: 20%; + height: 100%; + width: 80%; + margin: auto; + } + .dark-overlay { + background-color: rgba(0, 0, 0, 0.6); + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } + \ No newline at end of file diff --git a/ui/src/styles/global.css b/ui/src/styles/global.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/ui/src/styles/global.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file From be70783e90dce47c6763cd37a8b537ab3242a1be Mon Sep 17 00:00:00 2001 From: Prasad Honrao Date: Wed, 11 Sep 2024 11:05:19 +0100 Subject: [PATCH 03/56] Create CI for API GitHub Action --- .github/workflows/ci-api.yml | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/ci-api.yml diff --git a/.github/workflows/ci-api.yml b/.github/workflows/ci-api.yml new file mode 100644 index 0000000..880ed45 --- /dev/null +++ b/.github/workflows/ci-api.yml @@ -0,0 +1,36 @@ +name: CI for API + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: Install dependencies + run: | + cd api + npm install + + - name: Run tests + run: | + cd api + npm test From 0786140ebf680f6d29b367b8ce4aa0556d4a32ec Mon Sep 17 00:00:00 2001 From: Prasad Honrao Date: Wed, 11 Sep 2024 11:15:26 +0100 Subject: [PATCH 04/56] Create GitHub Action to lint API code --- .github/workflows/lint-api.yml | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/lint-api.yml diff --git a/.github/workflows/lint-api.yml b/.github/workflows/lint-api.yml new file mode 100644 index 0000000..04e91e2 --- /dev/null +++ b/.github/workflows/lint-api.yml @@ -0,0 +1,36 @@ +name: Lint API Code Base + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: Install dependencies + run: | + cd api + npm install + + - name: Run linter + run: | + cd api + npm run lint From 8871f85e01631caad6a908631a8dc28792c6df62 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 11:16:31 +0100 Subject: [PATCH 05/56] Add jest and eslint dependencies --- api/.eslintignore | 2 + api/eslint.config.js | 11 + api/package-lock.json | 7643 ++++++++++++++++++++++++---- api/package.json | 8 +- api/tests/unit/sample.unit.test.js | 5 + 5 files changed, 6757 insertions(+), 912 deletions(-) create mode 100644 api/.eslintignore create mode 100644 api/eslint.config.js create mode 100644 api/tests/unit/sample.unit.test.js diff --git a/api/.eslintignore b/api/.eslintignore new file mode 100644 index 0000000..b51ea71 --- /dev/null +++ b/api/.eslintignore @@ -0,0 +1,2 @@ +node_modules/ +build/ \ No newline at end of file diff --git a/api/eslint.config.js b/api/eslint.config.js new file mode 100644 index 0000000..b36eb3a --- /dev/null +++ b/api/eslint.config.js @@ -0,0 +1,11 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; +import pluginReact from "eslint-plugin-react"; + + +export default [ + {files: ["**/*.{js,mjs,cjs,jsx}"]}, + {languageOptions: { globals: globals.node }}, + pluginJs.configs.recommended, + pluginReact.configs.flat.recommended, +]; \ No newline at end of file diff --git a/api/package-lock.json b/api/package-lock.json index 6be57f5..e7eac5f 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -29,970 +29,5497 @@ "xss-clean": "^0.1.4" }, "devDependencies": { + "@eslint/js": "^9.10.0", "cross-env": "^7.0.3", + "eslint": "^9.10.0", + "eslint-plugin-react": "^7.35.2", + "globals": "^15.9.0", + "jest": "^29.7.0", "nodemon": "^3.1.4" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.8.tgz", - "integrity": "sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==", + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "sparse-bitfield": "^3.0.3" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" - }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/webidl-conversions": "*" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "ms": "^2.1.3" }, "engines": { - "node": ">= 8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "5.1.2" + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" }, "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" } }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=6.9.0" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/bson": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", - "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.20.1" + "node": ">=6.9.0" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10.16.0" + "node": ">=6.9.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=6.9.0" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.9.0" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, + "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=6.9.0" } }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=0.1.90" + "node": ">=4" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/content-type": { + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.8.0" } }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=6.0.0" } }, - "node_modules/cookie-parser": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", "dependencies": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cookie-parser/node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">= 0.10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, - "funding": { - "url": "https://dotenvx.com" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">= 0.6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "dev": true, + "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { - "node": ">= 0.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/express-fileupload": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.5.1.tgz", - "integrity": "sha512-LsYG1ALXEB7vlmjuSw8ABeOctMp8a31aUC5ZF55zuz7O2jLFnmJYrCv10py357ky48aEoBQ/9bVXgFynjvaPmA==", + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", "dependencies": { - "busboy": "^1.6.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=6.9.0" } }, - "node_modules/express-mongo-sanitize": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/express-mongo-sanitize/-/express-mongo-sanitize-2.2.0.tgz", - "integrity": "sha512-PZBs5nwhD6ek9ZuP+W2xmpvcrHwXZxD5GdieX2dsjPbAbH4azOkrHbycBud2QRU+YQF1CT+pki/lZGedHgo/dQ==", + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" } }, - "node_modules/express-rate-limit": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.4.0.tgz", - "integrity": "sha512-v1204w3cXu5gCDmAvgvzI6qjzZzoMWKnyVDk3ACgfswTQLYiGen+r8w0VnXnGMmzEN/g8fwIQ4JrFFd4ZP6ssg==", - "engines": { - "node": ">= 16" + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" + "engines": { + "node": ">=6.0" }, - "peerDependencies": { - "express": "4 || 5 || ^5.0.0-beta.1" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">= 0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "ms": "^2.1.3" }, "engines": { - "node": ">= 6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", + "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz", + "integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "es-define-property": "^1.0.0" + "levn": "^0.4.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" + "node": ">=18.18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", "dependencies": { - "function-bind": "^1.1.2" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/helmet": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz", - "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/hpp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hpp/-/hpp-0.2.3.tgz", - "integrity": "sha512-4zDZypjQcxK/8pfFNR7jaON7zEUpXZxz4viyFmqjb3kWNWAHsLEUmWXcdn25c5l76ISvnD6hbOGO97cXUI3Ryw==", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", "dependencies": { - "lodash": "^4.17.12", - "type-is": "^1.6.12" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, "engines": { - "node": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, "engines": { - "node": ">=0.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">=12", - "npm": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/kareem": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", - "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, "engines": { - "node": ">=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6.0.0" } }, - "node_modules/memory-pager": { + "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.8.tgz", + "integrity": "sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==", + "dependencies": { + "sparse-bitfield": "^3.0.3" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 8" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 8" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "type-detect": "4.0.8" } }, - "node_modules/mongodb": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", - "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@mongodb-js/saslprep": "^1.1.5", - "bson": "^6.7.0", - "mongodb-connection-string-url": "^3.0.0" - }, - "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/bson": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", + "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.19", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.19.tgz", + "integrity": "sha512-kpLJJi3zxTR1U828P+LIUDZ5ohixyo68/IcYOHLqnbTPr/wdgn4i1ECvmALN9E16JPA6cvCG5UG79gVwVdEK5w==", + "dev": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz", + "integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.10.0", + "@eslint/plugin-kit": "^0.1.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.35.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz", + "integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-fileupload": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.5.1.tgz", + "integrity": "sha512-LsYG1ALXEB7vlmjuSw8ABeOctMp8a31aUC5ZF55zuz7O2jLFnmJYrCv10py357ky48aEoBQ/9bVXgFynjvaPmA==", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express-mongo-sanitize": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/express-mongo-sanitize/-/express-mongo-sanitize-2.2.0.tgz", + "integrity": "sha512-PZBs5nwhD6ek9ZuP+W2xmpvcrHwXZxD5GdieX2dsjPbAbH4azOkrHbycBud2QRU+YQF1CT+pki/lZGedHgo/dQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/express-rate-limit": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.4.0.tgz", + "integrity": "sha512-v1204w3cXu5gCDmAvgvzI6qjzZzoMWKnyVDk3ACgfswTQLYiGen+r8w0VnXnGMmzEN/g8fwIQ4JrFFd4ZP6ssg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "4 || 5 || ^5.0.0-beta.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helmet": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.1.0.tgz", + "integrity": "sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/hpp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hpp/-/hpp-0.2.3.tgz", + "integrity": "sha512-4zDZypjQcxK/8pfFNR7jaON7zEUpXZxz4viyFmqjb3kWNWAHsLEUmWXcdn25c5l76ISvnD6hbOGO97cXUI3Ryw==", + "dependencies": { + "lodash": "^4.17.12", + "type-is": "^1.6.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", + "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { "@aws-sdk/credential-providers": { "optional": true }, @@ -1016,60 +5543,376 @@ } } }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", - "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", - "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^13.0.0" + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.2.tgz", + "integrity": "sha512-GZB4rHMdYfGatV+23IpCrqFbyCOjCNOHXgWbirr92KRwTEncBrtW3kgU9vmpKjsGf7nMmnAy06SwWUv1vhDkSg==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.7.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-geocoder": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-geocoder/-/node-geocoder-4.3.0.tgz", + "integrity": "sha512-Rqsqc6O8C/TvYXezwUMj3/3txxb2VouvtT1kEOImekSnOx7oQ+efxYXeEfSXnR6tLSn/cRDlZw7a44f2rOyG0g==", + "dependencies": { + "bluebird": "^3.5.2", + "node-fetch": "^2.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemailer": { + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.14.tgz", + "integrity": "sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemon": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/mongoose": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.2.tgz", - "integrity": "sha512-GZB4rHMdYfGatV+23IpCrqFbyCOjCNOHXgWbirr92KRwTEncBrtW3kgU9vmpKjsGf7nMmnAy06SwWUv1vhDkSg==", + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", "dependencies": { - "bson": "^6.7.0", - "kareem": "2.6.3", - "mongodb": "6.7.0", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "17.1.3" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=16.20.1" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mongoose/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/morgan/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -1077,321 +5920,590 @@ "node": ">= 0.8" } }, - "node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "engines": { - "node": ">=4.0.0" + "node": ">= 0.8" } }, - "node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", "dependencies": { - "debug": "4.x" + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mquery/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">=6.0" + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mquery/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=8.6" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" } }, - "node_modules/node-geocoder": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-geocoder/-/node-geocoder-4.3.0.tgz", - "integrity": "sha512-Rqsqc6O8C/TvYXezwUMj3/3txxb2VouvtT1kEOImekSnOx7oQ+efxYXeEfSXnR6tLSn/cRDlZw7a44f2rOyG0g==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", "dependencies": { - "bluebird": "^3.5.2", - "node-fetch": "^2.6.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/nodemailer": { - "version": "6.9.14", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.14.tgz", - "integrity": "sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" } }, - "node_modules/nodemon": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", - "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 6" } }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true, + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, "engines": { - "node": ">= 0.4" + "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { - "ee-first": "1.1.1" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, "engines": { - "node": ">= 0.8" + "node": ">=8.10.0" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "engines": { - "node": ">=8.6" + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "queue-microtask": "^1.2.2" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">=8.10.0" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-buffer": { @@ -1413,6 +6525,24 @@ } ] }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1487,6 +6617,22 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -1535,6 +6681,13 @@ "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -1547,6 +6700,23 @@ "node": ">=10" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/slugify": { "version": "1.6.6", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", @@ -1555,6 +6725,27 @@ "node": ">=8.0.0" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -1563,6 +6754,26 @@ "memory-pager": "^1.0.2" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -1579,6 +6790,171 @@ "node": ">=10.0.0" } }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1591,6 +6967,58 @@ "node": ">=4" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1631,6 +7059,42 @@ "node": ">=14" } }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1643,12 +7107,112 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -1657,6 +7221,47 @@ "node": ">= 0.8" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1665,6 +7270,21 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1673,6 +7293,16 @@ "node": ">= 0.8" } }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -1708,6 +7338,138 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/xss-clean": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/xss-clean/-/xss-clean-0.1.4.tgz", @@ -1721,6 +7483,65 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/xss-filters/-/xss-filters-1.2.7.tgz", "integrity": "sha512-KzcmYT/f+YzcYrYRqw6mXxd25BEZCxBQnf+uXTopQDIhrmiaLwO+f+yLsIvvNlPhYvgff8g3igqrBxYh9k8NbQ==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/api/package.json b/api/package.json index 40ddc53..ae7f458 100644 --- a/api/package.json +++ b/api/package.json @@ -5,7 +5,8 @@ "main": "server.js", "type": "module", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "jest", + "lint": "eslint .", "start": "cross-env NODE_ENV=production node server.js", "dev": "nodemon server.js", "data:import": "node seeder.js", @@ -49,7 +50,12 @@ "xss-clean": "^0.1.4" }, "devDependencies": { + "@eslint/js": "^9.10.0", "cross-env": "^7.0.3", + "eslint": "^9.10.0", + "eslint-plugin-react": "^7.35.2", + "globals": "^15.9.0", + "jest": "^29.7.0", "nodemon": "^3.1.4" } } diff --git a/api/tests/unit/sample.unit.test.js b/api/tests/unit/sample.unit.test.js new file mode 100644 index 0000000..c7377be --- /dev/null +++ b/api/tests/unit/sample.unit.test.js @@ -0,0 +1,5 @@ +describe('Sample Unit Test', () => { + it('should return true', () => { + expect(true).toBe(true); + }); +}); From a740e52a4db83b3c75a267be1b09d9757a4ce3cd Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 11:26:05 +0100 Subject: [PATCH 06/56] Fix ESlint dependency related issues --- api/.eslintignore | 2 -- api/eslint.config.js | 18 ++++++++++-------- api/package.json | 1 - 3 files changed, 10 insertions(+), 11 deletions(-) delete mode 100644 api/.eslintignore diff --git a/api/.eslintignore b/api/.eslintignore deleted file mode 100644 index b51ea71..0000000 --- a/api/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -build/ \ No newline at end of file diff --git a/api/eslint.config.js b/api/eslint.config.js index b36eb3a..91a0bc4 100644 --- a/api/eslint.config.js +++ b/api/eslint.config.js @@ -1,11 +1,13 @@ -import globals from "globals"; -import pluginJs from "@eslint/js"; -import pluginReact from "eslint-plugin-react"; - +import globals from 'globals'; +import pluginJs from '@eslint/js'; export default [ - {files: ["**/*.{js,mjs,cjs,jsx}"]}, - {languageOptions: { globals: globals.node }}, + { + files: ['**/*.{js,mjs,cjs,jsx}'], + ignores: ['node_modules/', 'build/'], // Add the ignores property here + languageOptions: { + globals: globals.node, + }, + }, pluginJs.configs.recommended, - pluginReact.configs.flat.recommended, -]; \ No newline at end of file +]; diff --git a/api/package.json b/api/package.json index ae7f458..158d6be 100644 --- a/api/package.json +++ b/api/package.json @@ -53,7 +53,6 @@ "@eslint/js": "^9.10.0", "cross-env": "^7.0.3", "eslint": "^9.10.0", - "eslint-plugin-react": "^7.35.2", "globals": "^15.9.0", "jest": "^29.7.0", "nodemon": "^3.1.4" From 433c7c2d10e031bd1e20180afa01a60d7921e3dd Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 12:08:27 +0100 Subject: [PATCH 07/56] Fix lint errors --- api/controllers/bootcamps.js | 4 ++-- api/controllers/courses.js | 1 + api/controllers/reviews.js | 1 - api/controllers/users.js | 6 ++++-- api/eslint.config.js | 16 ++++++++++++++-- api/middleware/auth.js | 2 +- api/models/Bootcamp.js | 9 +++------ api/models/User.js | 2 +- api/server.js | 3 +-- api/utils/sendEmail.js | 3 +-- 10 files changed, 28 insertions(+), 19 deletions(-) diff --git a/api/controllers/bootcamps.js b/api/controllers/bootcamps.js index d1813f3..d31b456 100644 --- a/api/controllers/bootcamps.js +++ b/api/controllers/bootcamps.js @@ -123,7 +123,7 @@ const getBootcampsInRadius = asyncHandler(async (req, res, next) => { }); return res.status(200).json({ success: true, count: bootcamps.length, data: bootcamps }); } catch (error) { - throw new ErrorResponse('Geocoding failed'.error.message, 500); + throw new ErrorResponse(`Geocoding failed with error ${error.message}`, 500); } }); @@ -135,7 +135,7 @@ const testGeocode = asyncHandler(async (req, res, next) => { } try { result = await geocoder.geocode(address); - } catch (error) { + } catch { return next(new ErrorResponse(`Geocode failed for address ${address}`, 404)); } return res.status(200).json({ success: true, data: result }); diff --git a/api/controllers/courses.js b/api/controllers/courses.js index 0101184..52a87cd 100644 --- a/api/controllers/courses.js +++ b/api/controllers/courses.js @@ -70,6 +70,7 @@ const addCourse = asyncHandler(async (req, res, next) => { // @access Private const updateCourse = asyncHandler(async (req, res, next) => { let courseId = req.params.id; + let userId = req.user.id; // Check if the course exists let course = await Course.findById(courseId); diff --git a/api/controllers/reviews.js b/api/controllers/reviews.js index e440b1f..78768ab 100644 --- a/api/controllers/reviews.js +++ b/api/controllers/reviews.js @@ -2,7 +2,6 @@ import ErrorResponse from '../utils/errorResponse.js'; import asyncHandler from '../middleware/asyncHandler.js'; import Bootcamp from '../models/Bootcamp.js'; import Review from '../models/Review.js'; -import User from '../models/User.js'; // @desc Get reviews // @route GET /api/v1/reviews diff --git a/api/controllers/users.js b/api/controllers/users.js index 65b93d0..5958fde 100644 --- a/api/controllers/users.js +++ b/api/controllers/users.js @@ -5,6 +5,7 @@ import User from '../models/User.js'; // @desc Get all users // @route GET /api/v1/users // @access Private/Admin +// eslint-disable-next-line no-unused-vars const getUsers = asyncHandler(async (req, res, next) => { return res.status(200).json(res.advancedResults); }); @@ -27,6 +28,7 @@ const getUser = asyncHandler(async (req, res, next) => { // @desc Create user // @route POST /api/v1/users // @access Private/Admin +// eslint-disable-next-line no-unused-vars const createUser = asyncHandler(async (req, res, next) => { const user = await User.create(req.body); return res.status(201).json({ success: true, data: user }); @@ -42,7 +44,7 @@ const updateUser = asyncHandler(async (req, res, next) => { }); if (!user) { - return next(new ErrorResponse(`User not found with id of ${userId}`, 404)); + return next(new ErrorResponse(`User ${user} not found`, 404)); } return res.status(200).json({ success: true, data: user }); @@ -55,7 +57,7 @@ const deleteUser = asyncHandler(async (req, res, next) => { let user = await User.findByIdAndDelete(req.params.id); if (!user) { - return next(new ErrorResponse(`User not found with id of ${userId}`, 404)); + return next(new ErrorResponse(`User ${user} not found`, 404)); } return res.status(200).json({ success: true, data: {} }); diff --git a/api/eslint.config.js b/api/eslint.config.js index 91a0bc4..e1d1284 100644 --- a/api/eslint.config.js +++ b/api/eslint.config.js @@ -4,9 +4,21 @@ import pluginJs from '@eslint/js'; export default [ { files: ['**/*.{js,mjs,cjs,jsx}'], - ignores: ['node_modules/', 'build/'], // Add the ignores property here + ignores: ['node_modules/', 'build/'], languageOptions: { - globals: globals.node, + globals: { + ...globals.node, + ...globals.jest, // Add Jest globals + }, + }, + rules: { + 'no-unused-vars': 'error', + }, + }, + { + files: ['**/*.{js,mjs,cjs,jsx}'], + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: 'colors', argsIgnorePattern: '^next$' }], }, }, pluginJs.configs.recommended, diff --git a/api/middleware/auth.js b/api/middleware/auth.js index 14bce3f..2ce1bc4 100644 --- a/api/middleware/auth.js +++ b/api/middleware/auth.js @@ -25,7 +25,7 @@ const protect = asyncHandler(async (req, res, next) => { // Find user by id and set it to req.user so that we can use it in the controller req.user = await User.findById(decoded.id).select('-password'); // This is the id from JWT payload next(); - } catch (error) { + } catch { return next(new ErrorResponse('Not authorized to access this route', 401)); } }); diff --git a/api/models/Bootcamp.js b/api/models/Bootcamp.js index 4f0996b..d020847 100644 --- a/api/models/Bootcamp.js +++ b/api/models/Bootcamp.js @@ -23,17 +23,14 @@ const BootcampSchema = new mongoose.Schema( slug: String, website: { type: String, - match: [ - /^(https?:\/\/)?((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|((\d{1,3}\.){3}\d{1,3}))(\:\d+)?(\/[-a-z\d%_.~+]*)*(\?[;&a-z\d%_.~+=-]*)?(#[-a-z\d_]*)?$/i, - 'Please add a valid website URL', - ], + match: [/^(https?:\/\/)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(\/.*)?$/, 'Please add a valid website URL'], }, phone: { type: String, }, email: { type: String, - match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/, 'Please add a valid email'], + match: [/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, 'Please add a valid email'], }, address: { type: String, @@ -130,7 +127,7 @@ BootcampSchema.pre('save', async function (next) { // Do not save address in DB this.address = undefined; } catch (error) { - return next(new ErrorResponse('Geocoding failed', 500)); + return next(new ErrorResponse(`Geocoding failed during save operation with error ${error.message}`, 500)); } next(); }); diff --git a/api/models/User.js b/api/models/User.js index ecc2bc2..38a6273 100644 --- a/api/models/User.js +++ b/api/models/User.js @@ -13,7 +13,7 @@ const UserSchema = new mongoose.Schema( type: String, required: [true, 'Please add an email'], unique: true, - match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/, 'Please add a valid email'], + match: [/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, 'Please add a valid email'], }, role: { type: String, diff --git a/api/server.js b/api/server.js index b22ba13..1cd2ef3 100644 --- a/api/server.js +++ b/api/server.js @@ -1,6 +1,5 @@ import path from 'path'; import express from 'express'; -import dotenv from 'dotenv'; import morgan from 'morgan'; import colors from 'colors'; import fileUpload from 'express-fileupload'; @@ -64,7 +63,7 @@ const server = app.listen(PORT, () => { }); // Handle unhandled promise rejections -process.on('unhandledRejection', (error, promise) => { +process.on('unhandledRejection', (error) => { console.error(`Error: ${error.message}`.red); server.close(() => process.exit(1)); }); diff --git a/api/utils/sendEmail.js b/api/utils/sendEmail.js index 809474c..7a9c643 100644 --- a/api/utils/sendEmail.js +++ b/api/utils/sendEmail.js @@ -20,8 +20,7 @@ const sendEmail = async (options) => { subject: options.subject, // Subject line text: options.message, // plain text body }; - - const info = await transporter.sendMail(message); + await transporter.sendMail(message); }; export default sendEmail; From d7a19cbbbd6804407af1cea2355ceaeead510466 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 12:13:15 +0100 Subject: [PATCH 08/56] GitHub actions file renamed and fix lint errors --- .github/workflows/api-ci.yml | 36 ++++++++++++++++++++++++++++++++++ .github/workflows/api-lint.yml | 36 ++++++++++++++++++++++++++++++++++ .github/workflows/ci-api.yml | 36 ---------------------------------- .github/workflows/lint-api.yml | 36 ---------------------------------- api/controllers/users.js | 2 -- 5 files changed, 72 insertions(+), 74 deletions(-) create mode 100644 .github/workflows/api-ci.yml create mode 100644 .github/workflows/api-lint.yml delete mode 100644 .github/workflows/ci-api.yml delete mode 100644 .github/workflows/lint-api.yml diff --git a/.github/workflows/api-ci.yml b/.github/workflows/api-ci.yml new file mode 100644 index 0000000..1d5333e --- /dev/null +++ b/.github/workflows/api-ci.yml @@ -0,0 +1,36 @@ +name: CI for API + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + +jobs: + build-and-test: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + + - name: Install dependencies + run: | + cd api + npm install + + - name: Run tests + run: | + cd api + npm test diff --git a/.github/workflows/api-lint.yml b/.github/workflows/api-lint.yml new file mode 100644 index 0000000..debd3cc --- /dev/null +++ b/.github/workflows/api-lint.yml @@ -0,0 +1,36 @@ +name: Lint API Code Base + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + + - name: Install dependencies + run: | + cd api + npm install + + - name: Run linter + run: | + cd api + npm run lint diff --git a/.github/workflows/ci-api.yml b/.github/workflows/ci-api.yml deleted file mode 100644 index 880ed45..0000000 --- a/.github/workflows/ci-api.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: CI for API - -on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' - -jobs: - build-and-test: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: '14' - - - name: Install dependencies - run: | - cd api - npm install - - - name: Run tests - run: | - cd api - npm test diff --git a/.github/workflows/lint-api.yml b/.github/workflows/lint-api.yml deleted file mode 100644 index 04e91e2..0000000 --- a/.github/workflows/lint-api.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Lint API Code Base - -on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' - -jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: '14' - - - name: Install dependencies - run: | - cd api - npm install - - - name: Run linter - run: | - cd api - npm run lint diff --git a/api/controllers/users.js b/api/controllers/users.js index 5958fde..e261941 100644 --- a/api/controllers/users.js +++ b/api/controllers/users.js @@ -5,7 +5,6 @@ import User from '../models/User.js'; // @desc Get all users // @route GET /api/v1/users // @access Private/Admin -// eslint-disable-next-line no-unused-vars const getUsers = asyncHandler(async (req, res, next) => { return res.status(200).json(res.advancedResults); }); @@ -28,7 +27,6 @@ const getUser = asyncHandler(async (req, res, next) => { // @desc Create user // @route POST /api/v1/users // @access Private/Admin -// eslint-disable-next-line no-unused-vars const createUser = asyncHandler(async (req, res, next) => { const user = await User.create(req.body); return res.status(201).json({ success: true, data: user }); From e69a0fc96e98f838d8bb519f12be640910744d2d Mon Sep 17 00:00:00 2001 From: Prasad Honrao Date: Wed, 11 Sep 2024 12:23:07 +0100 Subject: [PATCH 09/56] Create Security pipeline for API project --- .github/workflows/api-security.yml | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/api-security.yml diff --git a/.github/workflows/api-security.yml b/.github/workflows/api-security.yml new file mode 100644 index 0000000..8e3ae5f --- /dev/null +++ b/.github/workflows/api-security.yml @@ -0,0 +1,36 @@ +name: API - Security Checks + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + +jobs: + codeql-analysis: + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: javascript + + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 From c7c904c89349042fd1f68598a50b444891446575 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 12:24:00 +0100 Subject: [PATCH 10/56] Rename workflows --- .github/workflows/api-ci.yml | 2 +- .github/workflows/api-lint.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/api-ci.yml b/.github/workflows/api-ci.yml index 1d5333e..4929a01 100644 --- a/.github/workflows/api-ci.yml +++ b/.github/workflows/api-ci.yml @@ -1,4 +1,4 @@ -name: CI for API +name: API - Continuous Integration on: push: diff --git a/.github/workflows/api-lint.yml b/.github/workflows/api-lint.yml index debd3cc..4b9bea9 100644 --- a/.github/workflows/api-lint.yml +++ b/.github/workflows/api-lint.yml @@ -1,4 +1,4 @@ -name: Lint API Code Base +name: API - Linting on: push: From 7a57a6b2f523c19b94d17b73f56582b9ce296ba0 Mon Sep 17 00:00:00 2001 From: Prasad Honrao Date: Wed, 11 Sep 2024 13:03:18 +0100 Subject: [PATCH 11/56] Create API CD GitHub Actions workflow --- .github/workflows/azure-webapps-node.yml | 64 ++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/workflows/azure-webapps-node.yml diff --git a/.github/workflows/azure-webapps-node.yml b/.github/workflows/azure-webapps-node.yml new file mode 100644 index 0000000..618e0cd --- /dev/null +++ b/.github/workflows/azure-webapps-node.yml @@ -0,0 +1,64 @@ +name: API - Continuous Deployment + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + + - name: Install dependencies + run: | + cd api + npm install + + - name: Build project + run: | + cd api + npm run build + + - name: Upload build artifacts + uses: actions/upload-artifact@v2 + with: + name: api-build + path: ./api + + deploy: + runs-on: ubuntu-latest + needs: build + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Download build artifacts + uses: actions/download-artifact@v2 + with: + name: api-build + path: ./api + + - name: Deploy to Azure Web App + uses: azure/webapps-deploy@v2 + with: + app-name: mern-bootcamp-api + slot-name: production + publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} + package: ./api From f5ef88d514b1887818abd0fde316594429804e6a Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 13:03:52 +0100 Subject: [PATCH 12/56] Update workflow filename --- .github/workflows/{azure-webapps-node.yml => api-cd.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{azure-webapps-node.yml => api-cd.yml} (100%) diff --git a/.github/workflows/azure-webapps-node.yml b/.github/workflows/api-cd.yml similarity index 100% rename from .github/workflows/azure-webapps-node.yml rename to .github/workflows/api-cd.yml From 15346fd72cbbc315610f45eda28c93847f119e39 Mon Sep 17 00:00:00 2001 From: Akanksha Date: Wed, 11 Sep 2024 19:34:15 +0530 Subject: [PATCH 13/56] converted register, login and browser pae --- ui/src/components/Header.jsx | 141 +++++++++++++----- ui/src/components/bootcamps.js | 213 +++++++++++++++++++++++++++ ui/src/components/login.js | 58 ++++++++ ui/src/components/register.jsx | 106 +++++++++++++ ui/src/pages/BrowseBootcampsPage.jsx | 5 +- ui/src/pages/LoginPage.jsx | 9 +- ui/src/pages/RegisterPage.jsx | 8 +- 7 files changed, 502 insertions(+), 38 deletions(-) create mode 100644 ui/src/components/bootcamps.js create mode 100644 ui/src/components/login.js create mode 100644 ui/src/components/register.jsx diff --git a/ui/src/components/Header.jsx b/ui/src/components/Header.jsx index 2481256..1be2cf1 100644 --- a/ui/src/components/Header.jsx +++ b/ui/src/components/Header.jsx @@ -2,49 +2,120 @@ import { Link } from 'react-router-dom'; import Container from 'react-bootstrap/Container'; import Nav from 'react-bootstrap/Nav'; import Navbar from 'react-bootstrap/Navbar'; -import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaSearch } from 'react-icons/fa'; +import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser } from 'react-icons/fa'; import "../styles/bootstrap.css"; +import { useEffect, useState } from 'react'; function Header() { + + const [getHeader, SetHeader] = useState(false); + + useEffect(() => { + if (window.location.href.includes('browse')) { + SetHeader(true); + } else { + SetHeader(false); + } + }, []); + + return ( <> {/* */} - } + + + {/* // // diff --git a/ui/src/components/bootcamps.js b/ui/src/components/bootcamps.js new file mode 100644 index 0000000..bc8ebcc --- /dev/null +++ b/ui/src/components/bootcamps.js @@ -0,0 +1,213 @@ +function Bootcamps(){ + return ( + <> + {/* */} +
+
+
+ {/* */} +
+
+

By Location

+
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+ +

Filter

+
+ {/* */} + +
+ + +
+ +
+ + +
+ +
+
+ {/* */} +
+ {/* */} +
+
+
+ ... +
+
+
+
+ Devworks Bootcamp + 8.8 +
+ Boston, MA +

+ Web Development, UI/UX, Mobile Development +

+
+
+
+
+ +
+
+
+ ... +
+
+
+
+ ModernTech Bootcamp + 7.5 +
+ Boston, MA +

+ Web Development, UI/UX, Mobile Development +

+
+
+
+
+
+
+
+ ... +
+
+
+
+ Codemasters + 9.2 +
+ Burlington, VT +

+ Web Development, Data Science, Marketing +

+
+
+
+
+ +
+
+
+ ... +
+
+
+
+ DevCentral Bootcamp + 6.4 +
+ Kingston, RI +

+ Web Development, UI/UX, Mobile Development, Marketing +

+
+
+
+
+ + {/* */} + +
+
+
+
+ + ) +} + +export default Bootcamps; \ No newline at end of file diff --git a/ui/src/components/login.js b/ui/src/components/login.js new file mode 100644 index 0000000..9275b93 --- /dev/null +++ b/ui/src/components/login.js @@ -0,0 +1,58 @@ +import { LuLogIn } from "react-icons/lu"; + +function Login() { + return ( + <> + {/* */} +
+
+
+
+
+
+

Login

+

+ Log in to list your bootcamp or rate, review and favorite + bootcamps +

+
+
+ + +
+
+ + +
+
+ +
+
+

Forgot Password? Reset Password

+
+
+
+
+
+
+ + ) +} + +export default Login; \ No newline at end of file diff --git a/ui/src/components/register.jsx b/ui/src/components/register.jsx new file mode 100644 index 0000000..a2dc65f --- /dev/null +++ b/ui/src/components/register.jsx @@ -0,0 +1,106 @@ +function Register() { + return ( + <> + {/* */} +
+
+
+
+
+
+

Register

+

+ Register to list your bootcamp or rate, review and favorite + bootcamps +

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
User Role
+
+ + +
+
+ + +
+
+

+ * You must be affiliated with the bootcamp in some way in + order to add it to DevCamper. +

+
+ +
+
+
+
+
+
+
+
+ + ) +} + +export default Register; \ No newline at end of file diff --git a/ui/src/pages/BrowseBootcampsPage.jsx b/ui/src/pages/BrowseBootcampsPage.jsx index ae35829..4e1856e 100644 --- a/ui/src/pages/BrowseBootcampsPage.jsx +++ b/ui/src/pages/BrowseBootcampsPage.jsx @@ -1,7 +1,10 @@ import React from 'react'; +import Bootcamp from '../components/bootcamps'; const BrowseBootcampsPage = () => { - return
BrowseBootcampsPage
; + return (<> + + ); }; export default BrowseBootcampsPage; diff --git a/ui/src/pages/LoginPage.jsx b/ui/src/pages/LoginPage.jsx index 85f0fa4..1e0fe4d 100644 --- a/ui/src/pages/LoginPage.jsx +++ b/ui/src/pages/LoginPage.jsx @@ -1,5 +1,12 @@ +import Login from "../components/login"; + + const LoginPage = () => { - return
LoginPage
; + return ( + <> + + + ); }; export default LoginPage; diff --git a/ui/src/pages/RegisterPage.jsx b/ui/src/pages/RegisterPage.jsx index 5df553d..bd7212c 100644 --- a/ui/src/pages/RegisterPage.jsx +++ b/ui/src/pages/RegisterPage.jsx @@ -1,5 +1,11 @@ +import Register from "../components/register"; + const RegisterPage = () => { - return
RegisterPage
; + return ( + <> + + + ); }; export default RegisterPage; From 0ad5241ea251916dc7c42173af5e9ad795cb6231 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 22:32:12 +0100 Subject: [PATCH 14/56] Add workflow dependencies --- .github/workflows/api-cd.yml | 51 ++++++------------------------ .github/workflows/api-ci.yml | 14 +++----- .github/workflows/api-lint.yml | 1 + .github/workflows/api-security.yml | 14 +++----- 4 files changed, 18 insertions(+), 62 deletions(-) diff --git a/.github/workflows/api-cd.yml b/.github/workflows/api-cd.yml index 618e0cd..34af841 100644 --- a/.github/workflows/api-cd.yml +++ b/.github/workflows/api-cd.yml @@ -1,19 +1,14 @@ name: API - Continuous Deployment on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' + workflow_run: + workflows: ['API - Continuous Integration'] + types: + - completed jobs: - build: + deploy: + if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest steps: @@ -30,35 +25,7 @@ jobs: cd api npm install - - name: Build project + - name: Deploy run: | - cd api - npm run build - - - name: Upload build artifacts - uses: actions/upload-artifact@v2 - with: - name: api-build - path: ./api - - deploy: - runs-on: ubuntu-latest - needs: build - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Download build artifacts - uses: actions/download-artifact@v2 - with: - name: api-build - path: ./api - - - name: Deploy to Azure Web App - uses: azure/webapps-deploy@v2 - with: - app-name: mern-bootcamp-api - slot-name: production - publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} - package: ./api + # Add your deployment steps here + echo "Deploying the application..." diff --git a/.github/workflows/api-ci.yml b/.github/workflows/api-ci.yml index 4929a01..4af22e3 100644 --- a/.github/workflows/api-ci.yml +++ b/.github/workflows/api-ci.yml @@ -1,16 +1,10 @@ name: API - Continuous Integration on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' + workflow_run: + workflows: ['API - Security'] + types: + - completed jobs: build-and-test: diff --git a/.github/workflows/api-lint.yml b/.github/workflows/api-lint.yml index 4b9bea9..8ff9417 100644 --- a/.github/workflows/api-lint.yml +++ b/.github/workflows/api-lint.yml @@ -11,6 +11,7 @@ on: - main paths: - 'api/**' + workflow_dispatch: jobs: lint: diff --git a/.github/workflows/api-security.yml b/.github/workflows/api-security.yml index 8e3ae5f..9b6febf 100644 --- a/.github/workflows/api-security.yml +++ b/.github/workflows/api-security.yml @@ -1,16 +1,10 @@ name: API - Security Checks on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' + workflow_run: + workflows: ['API - Lint'] + types: + - completed jobs: codeql-analysis: From ce45cba2de31ad28035b3094d26b65320367abf6 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 22:37:34 +0100 Subject: [PATCH 15/56] Correct workflow names --- .github/workflows/api-ci.yml | 2 +- .github/workflows/api-security.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/api-ci.yml b/.github/workflows/api-ci.yml index 4af22e3..25b1a38 100644 --- a/.github/workflows/api-ci.yml +++ b/.github/workflows/api-ci.yml @@ -2,7 +2,7 @@ name: API - Continuous Integration on: workflow_run: - workflows: ['API - Security'] + workflows: ['API - Security Checks'] types: - completed diff --git a/.github/workflows/api-security.yml b/.github/workflows/api-security.yml index 9b6febf..86c7d46 100644 --- a/.github/workflows/api-security.yml +++ b/.github/workflows/api-security.yml @@ -2,7 +2,7 @@ name: API - Security Checks on: workflow_run: - workflows: ['API - Lint'] + workflows: ['API - Linting'] types: - completed From 022396050905e8bd5958398928c24f3285ca42e4 Mon Sep 17 00:00:00 2001 From: Prasad Honrao Date: Wed, 11 Sep 2024 22:44:19 +0100 Subject: [PATCH 16/56] Create end to end API workflow --- .github/workflows/api.yml | 156 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 .github/workflows/api.yml diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml new file mode 100644 index 0000000..4d6754f --- /dev/null +++ b/.github/workflows/api.yml @@ -0,0 +1,156 @@ +name: API - Workflow + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + workflow_dispatch: + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + + - name: Install dependencies + run: | + cd api + npm install + + - name: Run linter + run: | + cd api + npm run lint + + security: + runs-on: ubuntu-latest + needs: lint + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + + - name: Install dependencies + run: | + cd api + npm install + + - name: Run security checks + run: | + cd api + npm run security + + build: + runs-on: ubuntu-latest + needs: security + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + + - name: Cache Node.js modules + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + run: | + cd api + npm install + + - name: Build project + run: | + cd api + npm run build + + - name: Upload code and build artifacts + uses: actions/upload-artifact@v2 + with: + name: code-and-build-artifacts + path: | + api/ + !api/node_modules/ + + test: + runs-on: ubuntu-latest + needs: build + + steps: + - name: Download code and build artifacts + uses: actions/download-artifact@v2 + with: + name: code-and-build-artifacts + path: . + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + + - name: Cache Node.js modules + uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + run: | + cd api + npm install + + - name: Run tests + run: | + cd api + npm test + + deploy: + runs-on: ubuntu-latest + needs: test + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20' + + - name: Install dependencies + run: | + cd api + npm install + + - name: Deploy + run: | + # Add your deployment steps here + echo "Deploying the application..." From edcb0f3f1c63a15265bf11a939814c10362f90bb Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 22:50:52 +0100 Subject: [PATCH 17/56] Integrate codeql in end to end workflow --- .github/workflows/api.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 4d6754f..1b67015 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -39,25 +39,25 @@ jobs: security: runs-on: ubuntu-latest needs: lint + permissions: + actions: read + contents: read + security-events: write steps: - - name: Checkout code + - name: Checkout repository uses: actions/checkout@v2 - - name: Set up Node.js - uses: actions/setup-node@v2 + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 with: - node-version: '20' + languages: javascript - - name: Install dependencies - run: | - cd api - npm install + - name: Autobuild + uses: github/codeql-action/autobuild@v2 - - name: Run security checks - run: | - cd api - npm run security + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 build: runs-on: ubuntu-latest From 16450ff78c6211943f6a521882cf3f97ee297a45 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Wed, 11 Sep 2024 23:00:33 +0100 Subject: [PATCH 18/56] Fix deprecated package error in build job --- .github/workflows/api.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 1b67015..edf08bd 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -91,7 +91,7 @@ jobs: npm run build - name: Upload code and build artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: code-and-build-artifacts path: | @@ -104,7 +104,7 @@ jobs: steps: - name: Download code and build artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: code-and-build-artifacts path: . @@ -115,7 +115,7 @@ jobs: node-version: '20' - name: Cache Node.js modules - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} From ed1391dd94a82d77715971364685ffbf0f23c360 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:00:26 +0100 Subject: [PATCH 19/56] Update API workflow and remove build step --- .github/workflows/api.yml | 134 ++-- api/package-lock.json | 1573 +++---------------------------------- 2 files changed, 181 insertions(+), 1526 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index edf08bd..bf48dc5 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -14,7 +14,7 @@ on: workflow_dispatch: jobs: - lint: + setup: runs-on: ubuntu-latest steps: @@ -31,22 +31,60 @@ jobs: cd api npm install + - name: Upload code and dependencies + uses: actions/upload-artifact@v3 + with: + name: code-and-dependencies + path: | + api/ + !api/node_modules/ + + lint: + runs-on: ubuntu-latest + needs: setup + + steps: + - name: Download code and dependencies + uses: actions/download-artifact@v3 + with: + name: code-and-dependencies + path: . + - name: Run linter run: | cd api npm run lint - security: + dependency-check: runs-on: ubuntu-latest needs: lint + + steps: + - name: Download code and dependencies + uses: actions/download-artifact@v3 + with: + name: code-and-dependencies + path: . + + - name: Run dependency check + run: | + cd api + npm audit + + security: + runs-on: ubuntu-latest + needs: dependency-check permissions: actions: read contents: read security-events: write steps: - - name: Checkout repository - uses: actions/checkout@v2 + - name: Download code and dependencies + uses: actions/download-artifact@v3 + with: + name: code-and-dependencies + path: . - name: Initialize CodeQL uses: github/codeql-action/init@v2 @@ -59,96 +97,54 @@ jobs: - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 - build: + test: runs-on: ubuntu-latest needs: security steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: '20' - - - name: Cache Node.js modules - uses: actions/cache@v2 + - name: Download code and dependencies + uses: actions/download-artifact@v3 with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install dependencies - run: | - cd api - npm install + name: code-and-dependencies + path: . - - name: Build project + - name: Run tests run: | cd api - npm run build - - - name: Upload code and build artifacts - uses: actions/upload-artifact@v3 - with: - name: code-and-build-artifacts - path: | - api/ - !api/node_modules/ + npm test - test: + code-coverage: runs-on: ubuntu-latest - needs: build + needs: test steps: - - name: Download code and build artifacts + - name: Download code and dependencies uses: actions/download-artifact@v3 with: - name: code-and-build-artifacts + name: code-and-dependencies path: . - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: '20' - - - name: Cache Node.js modules - uses: actions/cache@v3 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install dependencies + - name: Run tests with coverage run: | cd api - npm install + npm run test -- --coverage - - name: Run tests - run: | - cd api - npm test + - name: Upload coverage report + uses: actions/upload-artifact@v3 + with: + name: coverage-report + path: api/coverage deploy: runs-on: ubuntu-latest - needs: test + needs: code-coverage steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 + - name: Download code and dependencies + uses: actions/download-artifact@v3 with: - node-version: '20' - - - name: Install dependencies - run: | - cd api - npm install + name: code-and-dependencies + path: . - name: Deploy run: | diff --git a/api/package-lock.json b/api/package-lock.json index e7eac5f..729cb84 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -32,7 +32,6 @@ "@eslint/js": "^9.10.0", "cross-env": "^7.0.3", "eslint": "^9.10.0", - "eslint-plugin-react": "^7.35.2", "globals": "^15.9.0", "jest": "^29.7.0", "nodemon": "^3.1.4" @@ -1616,164 +1615,11 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -1945,9 +1791,10 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -1957,7 +1804,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -2067,6 +1914,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2309,6 +2157,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2419,60 +2268,6 @@ "node": ">= 8" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2529,24 +2324,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2559,6 +2336,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -2584,19 +2362,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -2666,67 +2431,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -2746,88 +2450,6 @@ "node": ">= 0.4" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -2913,88 +2535,27 @@ } } }, - "node_modules/eslint-plugin-react": { - "version": "7.35.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz", - "integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==", + "node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", - "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3186,6 +2747,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3241,36 +2803,37 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -3314,6 +2877,15 @@ "express": "4 || 5 || ^5.0.0-beta.1" } }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3381,12 +2953,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -3397,6 +2970,15 @@ "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -3432,16 +3014,6 @@ "dev": true, "license": "ISC" }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3454,6 +3026,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3487,35 +3060,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3577,24 +3121,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3642,23 +3168,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -3677,16 +3186,6 @@ "dev": true, "license": "ISC" }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3729,22 +3228,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -3787,6 +3270,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -3812,6 +3296,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -3909,21 +3394,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -3932,23 +3402,6 @@ "node": ">= 0.10" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3956,35 +3409,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3997,36 +3421,6 @@ "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", @@ -4043,38 +3437,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4084,19 +3446,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -4117,22 +3466,6 @@ "node": ">=6" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4145,113 +3478,25 @@ "node": ">=0.10.0" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.12.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -4265,104 +3510,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4488,20 +3635,6 @@ "node": ">=8" } }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, "node_modules/jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", @@ -5196,22 +4329,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -5350,19 +4467,6 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -5413,9 +4517,13 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -5450,6 +4558,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -5828,87 +4937,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -6063,6 +5091,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6104,9 +5133,10 @@ "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.0", @@ -6150,16 +5180,6 @@ "node": ">=8" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6212,25 +5232,6 @@ "node": ">= 6" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6275,11 +5276,12 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -6313,6 +5315,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -6321,6 +5324,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -6350,47 +5354,6 @@ "node": ">=8.10.0" } }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6487,25 +5450,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6525,28 +5469,11 @@ } ] }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/semver": { "version": "7.6.3", @@ -6560,9 +5487,10 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -6585,22 +5513,33 @@ "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -6617,26 +5556,11 @@ "node": ">= 0.4" } }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -6819,96 +5743,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7035,6 +5869,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -7107,99 +5942,6 @@ "node": ">= 0.6" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -7338,89 +6080,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "dev": true, - "license": "MIT", - "dependencies": { - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", From d0108c43a82ea42f2c729189ac1a48b7110c7922 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:06:43 +0100 Subject: [PATCH 20/56] Update API workflow to remove warnings --- .github/workflows/api.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index bf48dc5..d9833f7 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -1,4 +1,4 @@ -name: API - Workflow +name: API - End-to-End Workflow on: push: @@ -19,10 +19,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: '20' @@ -32,7 +32,7 @@ jobs: npm install - name: Upload code and dependencies - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: code-and-dependencies path: | @@ -45,7 +45,7 @@ jobs: steps: - name: Download code and dependencies - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: code-and-dependencies path: . @@ -61,7 +61,7 @@ jobs: steps: - name: Download code and dependencies - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: code-and-dependencies path: . @@ -69,7 +69,7 @@ jobs: - name: Run dependency check run: | cd api - npm audit + npm audit --audit-level=high security: runs-on: ubuntu-latest @@ -81,7 +81,7 @@ jobs: steps: - name: Download code and dependencies - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: code-and-dependencies path: . @@ -103,7 +103,7 @@ jobs: steps: - name: Download code and dependencies - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: code-and-dependencies path: . @@ -119,7 +119,7 @@ jobs: steps: - name: Download code and dependencies - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: code-and-dependencies path: . @@ -130,7 +130,7 @@ jobs: npm run test -- --coverage - name: Upload coverage report - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: coverage-report path: api/coverage @@ -141,7 +141,7 @@ jobs: steps: - name: Download code and dependencies - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: code-and-dependencies path: . From cf0fbc52dc628835e39c30b78cadff2f4d04f2d3 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:12:29 +0100 Subject: [PATCH 21/56] Update folder path in the workflow --- .github/workflows/api.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index d9833f7..3585bdd 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -48,7 +48,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Run linter run: | @@ -64,7 +64,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Run dependency check run: | @@ -84,7 +84,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Initialize CodeQL uses: github/codeql-action/init@v2 @@ -106,7 +106,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Run tests run: | @@ -122,7 +122,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Run tests with coverage run: | @@ -144,7 +144,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Deploy run: | From cd86fbe6641a07c6d6e16a660c5ab22b58153c6e Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:15:35 +0100 Subject: [PATCH 22/56] Upload node module dependencies during end to end workflow execution --- .github/workflows/api.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 3585bdd..e3086c1 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -37,7 +37,6 @@ jobs: name: code-and-dependencies path: | api/ - !api/node_modules/ lint: runs-on: ubuntu-latest From 8f38f29a641163065cd75605d75e0b8d5c5ec1ca Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:32:42 +0100 Subject: [PATCH 23/56] Update end to end workflow to fix lint job fail error --- .github/workflows/api.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index e3086c1..a624485 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -47,11 +47,12 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Run linter run: | cd api + export PATH=$(npm bin):$PATH npm run lint dependency-check: @@ -63,7 +64,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Run dependency check run: | @@ -83,7 +84,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Initialize CodeQL uses: github/codeql-action/init@v2 @@ -105,7 +106,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Run tests run: | @@ -121,7 +122,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Run tests with coverage run: | @@ -143,7 +144,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Deploy run: | From cf981430e7f31f5937d9901defc915ed7b18bbcd Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:42:35 +0100 Subject: [PATCH 24/56] Fix lint job error --- .github/workflows/api.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index a624485..e6b45dc 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -35,8 +35,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: code-and-dependencies - path: | - api/ + path: api/ lint: runs-on: ubuntu-latest @@ -47,7 +46,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Run linter run: | @@ -64,7 +63,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Run dependency check run: | @@ -84,7 +83,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Initialize CodeQL uses: github/codeql-action/init@v2 @@ -106,7 +105,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Run tests run: | @@ -122,7 +121,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Run tests with coverage run: | @@ -144,7 +143,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: . + path: ./api - name: Deploy run: | From 0da3981150a5fa9d932add3806ff8d28342d87c8 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:45:47 +0100 Subject: [PATCH 25/56] Include node_modules path during lint --- .github/workflows/api.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index e6b45dc..fa75725 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -46,12 +46,12 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Run linter run: | cd api - export PATH=$(npm bin):$PATH + export PATH=$(pwd)/node_modules/.bin:$PATH npm run lint dependency-check: @@ -63,7 +63,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Run dependency check run: | @@ -83,7 +83,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Initialize CodeQL uses: github/codeql-action/init@v2 @@ -105,7 +105,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Run tests run: | @@ -121,7 +121,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Run tests with coverage run: | @@ -143,7 +143,7 @@ jobs: uses: actions/download-artifact@v4 with: name: code-and-dependencies - path: ./api + path: . - name: Deploy run: | From 000cf0000c14e659ddee17ce25e5f2b731b610de Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:51:07 +0100 Subject: [PATCH 26/56] Remove upload and download artifacts stages --- .github/workflows/api.yml | 110 ++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 58 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index fa75725..e2a447f 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -14,7 +14,7 @@ on: workflow_dispatch: jobs: - setup: + lint: runs-on: ubuntu-latest steps: @@ -27,63 +27,49 @@ jobs: node-version: '20' - name: Install dependencies - run: | - cd api - npm install - - - name: Upload code and dependencies - uses: actions/upload-artifact@v4 - with: - name: code-and-dependencies - path: api/ - - lint: - runs-on: ubuntu-latest - needs: setup - - steps: - - name: Download code and dependencies - uses: actions/download-artifact@v4 - with: - name: code-and-dependencies - path: . + run: npm install --prefix api - name: Run linter run: | - cd api - export PATH=$(pwd)/node_modules/.bin:$PATH - npm run lint + export PATH=$(pwd)/api/node_modules/.bin:$PATH + npm run lint --prefix api dependency-check: runs-on: ubuntu-latest - needs: lint steps: - - name: Download code and dependencies - uses: actions/download-artifact@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 with: - name: code-and-dependencies - path: . + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api - name: Run dependency check - run: | - cd api - npm audit --audit-level=high + run: npm audit --audit-level=high --prefix api security: runs-on: ubuntu-latest - needs: dependency-check permissions: actions: read contents: read security-events: write steps: - - name: Download code and dependencies - uses: actions/download-artifact@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 with: - name: code-and-dependencies - path: . + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api - name: Initialize CodeQL uses: github/codeql-action/init@v2 @@ -98,35 +84,39 @@ jobs: test: runs-on: ubuntu-latest - needs: security steps: - - name: Download code and dependencies - uses: actions/download-artifact@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 with: - name: code-and-dependencies - path: . + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api - name: Run tests - run: | - cd api - npm test + run: npm test --prefix api code-coverage: runs-on: ubuntu-latest - needs: test steps: - - name: Download code and dependencies - uses: actions/download-artifact@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 with: - name: code-and-dependencies - path: . + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api - name: Run tests with coverage - run: | - cd api - npm run test -- --coverage + run: npm run test -- --coverage --prefix api - name: Upload coverage report uses: actions/upload-artifact@v4 @@ -136,14 +126,18 @@ jobs: deploy: runs-on: ubuntu-latest - needs: code-coverage steps: - - name: Download code and dependencies - uses: actions/download-artifact@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 with: - name: code-and-dependencies - path: . + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api - name: Deploy run: | From 764bf6a42b60efb6b5633c389b8bfbe614dd5be1 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 06:54:33 +0100 Subject: [PATCH 27/56] Define job dependencies --- .github/workflows/api.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index e2a447f..1b7b7df 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -36,6 +36,7 @@ jobs: dependency-check: runs-on: ubuntu-latest + needs: lint steps: - name: Checkout code @@ -54,6 +55,7 @@ jobs: security: runs-on: ubuntu-latest + needs: dependency-check permissions: actions: read contents: read @@ -84,6 +86,7 @@ jobs: test: runs-on: ubuntu-latest + needs: security steps: - name: Checkout code @@ -102,6 +105,7 @@ jobs: code-coverage: runs-on: ubuntu-latest + needs: test steps: - name: Checkout code @@ -126,6 +130,7 @@ jobs: deploy: runs-on: ubuntu-latest + needs: code-coverage steps: - name: Checkout code From 3f8510c93724e89e5b77933ecca6e07ec2d8c78b Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 15:53:00 +0100 Subject: [PATCH 28/56] Fix code coverage job failure --- .github/workflows/api.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 1b7b7df..ff0282a 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -120,7 +120,7 @@ jobs: run: npm install --prefix api - name: Run tests with coverage - run: npm run test -- --coverage --prefix api + run: npm run test --prefix api -- --coverage - name: Upload coverage report uses: actions/upload-artifact@v4 From 28bd1408f9f3410e1d8f82fe5277c7c4d2b79911 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Thu, 12 Sep 2024 16:09:21 +0100 Subject: [PATCH 29/56] Add all the design assets including HTML pages and Logo files in assets folder --- {design/v1 => assets/html}/add-bootcamp.html | 0 {design/v1 => assets/html}/add-course.html | 0 {design/v1 => assets/html}/add-review.html | 0 {design/v1 => assets/html}/bootcamp.html | 0 {design/v1 => assets/html}/bootcamps.html | 0 {design/v1 => assets/html}/css/bootstrap.css | 0 {design/v1 => assets/html}/css/style.css | 0 {design/v1 => assets/html}/img/image_1.jpg | Bin {design/v1 => assets/html}/img/image_2.jpg | Bin {design/v1 => assets/html}/img/image_3.jpg | Bin {design/v1 => assets/html}/img/image_4.jpg | Bin {design/v1 => assets/html}/img/showcase.jpg | Bin {design/v1 => assets/html}/index.html | 0 {design/v1 => assets/html}/js/mapbox.js | 0 {design/v1 => assets/html}/login.html | 0 {design/v1 => assets/html}/manage-account.html | 0 .../v1 => assets/html}/manage-bootcamp-none.html | 0 {design/v1 => assets/html}/manage-bootcamp.html | 0 {design/v1 => assets/html}/manage-courses-none.html | 0 {design/v1 => assets/html}/manage-courses.html | 0 {design/v1 => assets/html}/manage-reviews.html | 0 {design/v1 => assets/html}/register.html | 0 {design/v1 => assets/html}/reset-password.html | 0 {design/v1 => assets/html}/reviews.html | 0 {design/v1 => assets/html}/update-password.html | 0 .../logos}/Color_Logo/dc_color_logo_jpg.jpg | Bin .../logos}/Color_Logo/dc_color_logo_pdf.pdf | Bin .../logos}/Color_Logo/dc_color_logo_png.png | Bin .../logos}/Color_Logo/dc_color_logo_svg.svg | 0 .../logos}/Color_favicons/android-icon-144x144.png | Bin .../logos}/Color_favicons/android-icon-192x192.png | Bin .../logos}/Color_favicons/android-icon-36x36.png | Bin .../logos}/Color_favicons/android-icon-48x48.png | Bin .../logos}/Color_favicons/android-icon-72x72.png | Bin .../logos}/Color_favicons/android-icon-96x96.png | Bin .../logos}/Color_favicons/apple-icon-114x114.png | Bin .../logos}/Color_favicons/apple-icon-120x120.png | Bin .../logos}/Color_favicons/apple-icon-144x144.png | Bin .../logos}/Color_favicons/apple-icon-152x152.png | Bin .../logos}/Color_favicons/apple-icon-180x180.png | Bin .../logos}/Color_favicons/apple-icon-57x57.png | Bin .../logos}/Color_favicons/apple-icon-60x60.png | Bin .../logos}/Color_favicons/apple-icon-72x72.png | Bin .../logos}/Color_favicons/apple-icon-76x76.png | Bin .../Color_favicons/apple-icon-precomposed.png | Bin .../logos}/Color_favicons/apple-icon.png | Bin .../logos}/Color_favicons/browserconfig.xml | 0 .../logos}/Color_favicons/favicon-16x16.png | Bin .../logos}/Color_favicons/favicon-32x32.png | Bin .../logos}/Color_favicons/favicon-96x96.png | Bin .../logos}/Color_favicons/favicon.ico | Bin .../logos}/Color_favicons/manifest.json | 0 .../logos}/Color_favicons/ms-icon-144x144.png | Bin .../logos}/Color_favicons/ms-icon-150x150.png | Bin .../logos}/Color_favicons/ms-icon-310x310.png | Bin .../logos}/Color_favicons/ms-icon-70x70.png | Bin .../logos}/Dark_Logo/dc_dark_logo_jpg.jpg | Bin .../logos}/Dark_Logo/dc_dark_logo_pdf.pdf | Bin .../logos}/Dark_Logo/dc_dark_logo_png.png | Bin .../logos}/Dark_Logo/dc_dark_logo_svg.svg | 0 .../logos}/Dark_favicons/android-icon-144x144.png | Bin .../logos}/Dark_favicons/android-icon-192x192.png | Bin .../logos}/Dark_favicons/android-icon-36x36.png | Bin .../logos}/Dark_favicons/android-icon-48x48.png | Bin .../logos}/Dark_favicons/android-icon-72x72.png | Bin .../logos}/Dark_favicons/android-icon-96x96.png | Bin .../logos}/Dark_favicons/apple-icon-114x114.png | Bin .../logos}/Dark_favicons/apple-icon-120x120.png | Bin .../logos}/Dark_favicons/apple-icon-144x144.png | Bin .../logos}/Dark_favicons/apple-icon-152x152.png | Bin .../logos}/Dark_favicons/apple-icon-180x180.png | Bin .../logos}/Dark_favicons/apple-icon-57x57.png | Bin .../logos}/Dark_favicons/apple-icon-60x60.png | Bin .../logos}/Dark_favicons/apple-icon-72x72.png | Bin .../logos}/Dark_favicons/apple-icon-76x76.png | Bin .../logos}/Dark_favicons/apple-icon-precomposed.png | Bin .../logos}/Dark_favicons/apple-icon.png | Bin .../logos}/Dark_favicons/browserconfig.xml | 0 .../logos}/Dark_favicons/favicon-16x16.png | Bin .../logos}/Dark_favicons/favicon-32x32.png | Bin .../logos}/Dark_favicons/favicon-96x96.png | Bin .../logos}/Dark_favicons/favicon.ico | Bin .../logos}/Dark_favicons/manifest.json | 0 .../logos}/Dark_favicons/ms-icon-144x144.png | Bin .../logos}/Dark_favicons/ms-icon-150x150.png | Bin .../logos}/Dark_favicons/ms-icon-310x310.png | Bin .../logos}/Dark_favicons/ms-icon-70x70.png | Bin .../logos}/Light_Logo/dc_light_logo_jpg.jpg | Bin .../logos}/Light_Logo/dc_light_logo_pdf.pdf | Bin .../logos}/Light_Logo/dc_light_logo_png.png | Bin .../logos}/Light_Logo/dc_light_logo_svg.svg | 0 .../logos}/Light_favicons/android-icon-144x144.png | Bin .../logos}/Light_favicons/android-icon-192x192.png | Bin .../logos}/Light_favicons/android-icon-36x36.png | Bin .../logos}/Light_favicons/android-icon-48x48.png | Bin .../logos}/Light_favicons/android-icon-72x72.png | Bin .../logos}/Light_favicons/android-icon-96x96.png | Bin .../logos}/Light_favicons/apple-icon-114x114.png | Bin .../logos}/Light_favicons/apple-icon-120x120.png | Bin .../logos}/Light_favicons/apple-icon-144x144.png | Bin .../logos}/Light_favicons/apple-icon-152x152.png | Bin .../logos}/Light_favicons/apple-icon-180x180.png | Bin .../logos}/Light_favicons/apple-icon-57x57.png | Bin .../logos}/Light_favicons/apple-icon-60x60.png | Bin .../logos}/Light_favicons/apple-icon-72x72.png | Bin .../logos}/Light_favicons/apple-icon-76x76.png | Bin .../Light_favicons/apple-icon-precomposed.png | Bin .../logos}/Light_favicons/apple-icon.png | Bin .../logos}/Light_favicons/browserconfig.xml | 0 .../logos}/Light_favicons/favicon-16x16.png | Bin .../logos}/Light_favicons/favicon-32x32.png | Bin .../logos}/Light_favicons/favicon-96x96.png | Bin .../logos}/Light_favicons/favicon.ico | Bin .../logos}/Light_favicons/manifest.json | 0 .../logos}/Light_favicons/ms-icon-144x144.png | Bin .../logos}/Light_favicons/ms-icon-150x150.png | Bin .../logos}/Light_favicons/ms-icon-310x310.png | Bin .../logos}/Light_favicons/ms-icon-70x70.png | Bin 118 files changed, 0 insertions(+), 0 deletions(-) rename {design/v1 => assets/html}/add-bootcamp.html (100%) rename {design/v1 => assets/html}/add-course.html (100%) rename {design/v1 => assets/html}/add-review.html (100%) rename {design/v1 => assets/html}/bootcamp.html (100%) rename {design/v1 => assets/html}/bootcamps.html (100%) rename {design/v1 => assets/html}/css/bootstrap.css (100%) rename {design/v1 => assets/html}/css/style.css (100%) rename {design/v1 => assets/html}/img/image_1.jpg (100%) rename {design/v1 => assets/html}/img/image_2.jpg (100%) rename {design/v1 => assets/html}/img/image_3.jpg (100%) rename {design/v1 => assets/html}/img/image_4.jpg (100%) rename {design/v1 => assets/html}/img/showcase.jpg (100%) rename {design/v1 => assets/html}/index.html (100%) rename {design/v1 => assets/html}/js/mapbox.js (100%) rename {design/v1 => assets/html}/login.html (100%) rename {design/v1 => assets/html}/manage-account.html (100%) rename {design/v1 => assets/html}/manage-bootcamp-none.html (100%) rename {design/v1 => assets/html}/manage-bootcamp.html (100%) rename {design/v1 => assets/html}/manage-courses-none.html (100%) rename {design/v1 => assets/html}/manage-courses.html (100%) rename {design/v1 => assets/html}/manage-reviews.html (100%) rename {design/v1 => assets/html}/register.html (100%) rename {design/v1 => assets/html}/reset-password.html (100%) rename {design/v1 => assets/html}/reviews.html (100%) rename {design/v1 => assets/html}/update-password.html (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_Logo/dc_color_logo_jpg.jpg (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_Logo/dc_color_logo_pdf.pdf (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_Logo/dc_color_logo_png.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_Logo/dc_color_logo_svg.svg (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/android-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/android-icon-192x192.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/android-icon-36x36.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/android-icon-48x48.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/android-icon-72x72.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/android-icon-96x96.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-114x114.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-120x120.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-152x152.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-180x180.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-57x57.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-60x60.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-72x72.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-76x76.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon-precomposed.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/apple-icon.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/browserconfig.xml (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/favicon-16x16.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/favicon-32x32.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/favicon-96x96.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/favicon.ico (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/manifest.json (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/ms-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/ms-icon-150x150.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/ms-icon-310x310.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Color_favicons/ms-icon-70x70.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_Logo/dc_dark_logo_jpg.jpg (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_Logo/dc_dark_logo_pdf.pdf (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_Logo/dc_dark_logo_png.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_Logo/dc_dark_logo_svg.svg (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/android-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/android-icon-192x192.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/android-icon-36x36.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/android-icon-48x48.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/android-icon-72x72.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/android-icon-96x96.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-114x114.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-120x120.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-152x152.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-180x180.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-57x57.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-60x60.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-72x72.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-76x76.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon-precomposed.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/apple-icon.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/browserconfig.xml (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/favicon-16x16.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/favicon-32x32.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/favicon-96x96.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/favicon.ico (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/manifest.json (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/ms-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/ms-icon-150x150.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/ms-icon-310x310.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Dark_favicons/ms-icon-70x70.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_Logo/dc_light_logo_jpg.jpg (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_Logo/dc_light_logo_pdf.pdf (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_Logo/dc_light_logo_png.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_Logo/dc_light_logo_svg.svg (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/android-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/android-icon-192x192.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/android-icon-36x36.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/android-icon-48x48.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/android-icon-72x72.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/android-icon-96x96.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-114x114.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-120x120.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-152x152.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-180x180.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-57x57.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-60x60.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-72x72.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-76x76.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon-precomposed.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/apple-icon.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/browserconfig.xml (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/favicon-16x16.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/favicon-32x32.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/favicon-96x96.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/favicon.ico (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/manifest.json (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/ms-icon-144x144.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/ms-icon-150x150.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/ms-icon-310x310.png (100%) rename {ux/Final_Logo_Design => assets/logos}/Light_favicons/ms-icon-70x70.png (100%) diff --git a/design/v1/add-bootcamp.html b/assets/html/add-bootcamp.html similarity index 100% rename from design/v1/add-bootcamp.html rename to assets/html/add-bootcamp.html diff --git a/design/v1/add-course.html b/assets/html/add-course.html similarity index 100% rename from design/v1/add-course.html rename to assets/html/add-course.html diff --git a/design/v1/add-review.html b/assets/html/add-review.html similarity index 100% rename from design/v1/add-review.html rename to assets/html/add-review.html diff --git a/design/v1/bootcamp.html b/assets/html/bootcamp.html similarity index 100% rename from design/v1/bootcamp.html rename to assets/html/bootcamp.html diff --git a/design/v1/bootcamps.html b/assets/html/bootcamps.html similarity index 100% rename from design/v1/bootcamps.html rename to assets/html/bootcamps.html diff --git a/design/v1/css/bootstrap.css b/assets/html/css/bootstrap.css similarity index 100% rename from design/v1/css/bootstrap.css rename to assets/html/css/bootstrap.css diff --git a/design/v1/css/style.css b/assets/html/css/style.css similarity index 100% rename from design/v1/css/style.css rename to assets/html/css/style.css diff --git a/design/v1/img/image_1.jpg b/assets/html/img/image_1.jpg similarity index 100% rename from design/v1/img/image_1.jpg rename to assets/html/img/image_1.jpg diff --git a/design/v1/img/image_2.jpg b/assets/html/img/image_2.jpg similarity index 100% rename from design/v1/img/image_2.jpg rename to assets/html/img/image_2.jpg diff --git a/design/v1/img/image_3.jpg b/assets/html/img/image_3.jpg similarity index 100% rename from design/v1/img/image_3.jpg rename to assets/html/img/image_3.jpg diff --git a/design/v1/img/image_4.jpg b/assets/html/img/image_4.jpg similarity index 100% rename from design/v1/img/image_4.jpg rename to assets/html/img/image_4.jpg diff --git a/design/v1/img/showcase.jpg b/assets/html/img/showcase.jpg similarity index 100% rename from design/v1/img/showcase.jpg rename to assets/html/img/showcase.jpg diff --git a/design/v1/index.html b/assets/html/index.html similarity index 100% rename from design/v1/index.html rename to assets/html/index.html diff --git a/design/v1/js/mapbox.js b/assets/html/js/mapbox.js similarity index 100% rename from design/v1/js/mapbox.js rename to assets/html/js/mapbox.js diff --git a/design/v1/login.html b/assets/html/login.html similarity index 100% rename from design/v1/login.html rename to assets/html/login.html diff --git a/design/v1/manage-account.html b/assets/html/manage-account.html similarity index 100% rename from design/v1/manage-account.html rename to assets/html/manage-account.html diff --git a/design/v1/manage-bootcamp-none.html b/assets/html/manage-bootcamp-none.html similarity index 100% rename from design/v1/manage-bootcamp-none.html rename to assets/html/manage-bootcamp-none.html diff --git a/design/v1/manage-bootcamp.html b/assets/html/manage-bootcamp.html similarity index 100% rename from design/v1/manage-bootcamp.html rename to assets/html/manage-bootcamp.html diff --git a/design/v1/manage-courses-none.html b/assets/html/manage-courses-none.html similarity index 100% rename from design/v1/manage-courses-none.html rename to assets/html/manage-courses-none.html diff --git a/design/v1/manage-courses.html b/assets/html/manage-courses.html similarity index 100% rename from design/v1/manage-courses.html rename to assets/html/manage-courses.html diff --git a/design/v1/manage-reviews.html b/assets/html/manage-reviews.html similarity index 100% rename from design/v1/manage-reviews.html rename to assets/html/manage-reviews.html diff --git a/design/v1/register.html b/assets/html/register.html similarity index 100% rename from design/v1/register.html rename to assets/html/register.html diff --git a/design/v1/reset-password.html b/assets/html/reset-password.html similarity index 100% rename from design/v1/reset-password.html rename to assets/html/reset-password.html diff --git a/design/v1/reviews.html b/assets/html/reviews.html similarity index 100% rename from design/v1/reviews.html rename to assets/html/reviews.html diff --git a/design/v1/update-password.html b/assets/html/update-password.html similarity index 100% rename from design/v1/update-password.html rename to assets/html/update-password.html diff --git a/ux/Final_Logo_Design/Color_Logo/dc_color_logo_jpg.jpg b/assets/logos/Color_Logo/dc_color_logo_jpg.jpg similarity index 100% rename from ux/Final_Logo_Design/Color_Logo/dc_color_logo_jpg.jpg rename to assets/logos/Color_Logo/dc_color_logo_jpg.jpg diff --git a/ux/Final_Logo_Design/Color_Logo/dc_color_logo_pdf.pdf b/assets/logos/Color_Logo/dc_color_logo_pdf.pdf similarity index 100% rename from ux/Final_Logo_Design/Color_Logo/dc_color_logo_pdf.pdf rename to assets/logos/Color_Logo/dc_color_logo_pdf.pdf diff --git a/ux/Final_Logo_Design/Color_Logo/dc_color_logo_png.png b/assets/logos/Color_Logo/dc_color_logo_png.png similarity index 100% rename from ux/Final_Logo_Design/Color_Logo/dc_color_logo_png.png rename to assets/logos/Color_Logo/dc_color_logo_png.png diff --git a/ux/Final_Logo_Design/Color_Logo/dc_color_logo_svg.svg b/assets/logos/Color_Logo/dc_color_logo_svg.svg similarity index 100% rename from ux/Final_Logo_Design/Color_Logo/dc_color_logo_svg.svg rename to assets/logos/Color_Logo/dc_color_logo_svg.svg diff --git a/ux/Final_Logo_Design/Color_favicons/android-icon-144x144.png b/assets/logos/Color_favicons/android-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/android-icon-144x144.png rename to assets/logos/Color_favicons/android-icon-144x144.png diff --git a/ux/Final_Logo_Design/Color_favicons/android-icon-192x192.png b/assets/logos/Color_favicons/android-icon-192x192.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/android-icon-192x192.png rename to assets/logos/Color_favicons/android-icon-192x192.png diff --git a/ux/Final_Logo_Design/Color_favicons/android-icon-36x36.png b/assets/logos/Color_favicons/android-icon-36x36.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/android-icon-36x36.png rename to assets/logos/Color_favicons/android-icon-36x36.png diff --git a/ux/Final_Logo_Design/Color_favicons/android-icon-48x48.png b/assets/logos/Color_favicons/android-icon-48x48.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/android-icon-48x48.png rename to assets/logos/Color_favicons/android-icon-48x48.png diff --git a/ux/Final_Logo_Design/Color_favicons/android-icon-72x72.png b/assets/logos/Color_favicons/android-icon-72x72.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/android-icon-72x72.png rename to assets/logos/Color_favicons/android-icon-72x72.png diff --git a/ux/Final_Logo_Design/Color_favicons/android-icon-96x96.png b/assets/logos/Color_favicons/android-icon-96x96.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/android-icon-96x96.png rename to assets/logos/Color_favicons/android-icon-96x96.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-114x114.png b/assets/logos/Color_favicons/apple-icon-114x114.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-114x114.png rename to assets/logos/Color_favicons/apple-icon-114x114.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-120x120.png b/assets/logos/Color_favicons/apple-icon-120x120.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-120x120.png rename to assets/logos/Color_favicons/apple-icon-120x120.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-144x144.png b/assets/logos/Color_favicons/apple-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-144x144.png rename to assets/logos/Color_favicons/apple-icon-144x144.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-152x152.png b/assets/logos/Color_favicons/apple-icon-152x152.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-152x152.png rename to assets/logos/Color_favicons/apple-icon-152x152.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-180x180.png b/assets/logos/Color_favicons/apple-icon-180x180.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-180x180.png rename to assets/logos/Color_favicons/apple-icon-180x180.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-57x57.png b/assets/logos/Color_favicons/apple-icon-57x57.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-57x57.png rename to assets/logos/Color_favicons/apple-icon-57x57.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-60x60.png b/assets/logos/Color_favicons/apple-icon-60x60.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-60x60.png rename to assets/logos/Color_favicons/apple-icon-60x60.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-72x72.png b/assets/logos/Color_favicons/apple-icon-72x72.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-72x72.png rename to assets/logos/Color_favicons/apple-icon-72x72.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-76x76.png b/assets/logos/Color_favicons/apple-icon-76x76.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-76x76.png rename to assets/logos/Color_favicons/apple-icon-76x76.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon-precomposed.png b/assets/logos/Color_favicons/apple-icon-precomposed.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon-precomposed.png rename to assets/logos/Color_favicons/apple-icon-precomposed.png diff --git a/ux/Final_Logo_Design/Color_favicons/apple-icon.png b/assets/logos/Color_favicons/apple-icon.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/apple-icon.png rename to assets/logos/Color_favicons/apple-icon.png diff --git a/ux/Final_Logo_Design/Color_favicons/browserconfig.xml b/assets/logos/Color_favicons/browserconfig.xml similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/browserconfig.xml rename to assets/logos/Color_favicons/browserconfig.xml diff --git a/ux/Final_Logo_Design/Color_favicons/favicon-16x16.png b/assets/logos/Color_favicons/favicon-16x16.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/favicon-16x16.png rename to assets/logos/Color_favicons/favicon-16x16.png diff --git a/ux/Final_Logo_Design/Color_favicons/favicon-32x32.png b/assets/logos/Color_favicons/favicon-32x32.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/favicon-32x32.png rename to assets/logos/Color_favicons/favicon-32x32.png diff --git a/ux/Final_Logo_Design/Color_favicons/favicon-96x96.png b/assets/logos/Color_favicons/favicon-96x96.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/favicon-96x96.png rename to assets/logos/Color_favicons/favicon-96x96.png diff --git a/ux/Final_Logo_Design/Color_favicons/favicon.ico b/assets/logos/Color_favicons/favicon.ico similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/favicon.ico rename to assets/logos/Color_favicons/favicon.ico diff --git a/ux/Final_Logo_Design/Color_favicons/manifest.json b/assets/logos/Color_favicons/manifest.json similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/manifest.json rename to assets/logos/Color_favicons/manifest.json diff --git a/ux/Final_Logo_Design/Color_favicons/ms-icon-144x144.png b/assets/logos/Color_favicons/ms-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/ms-icon-144x144.png rename to assets/logos/Color_favicons/ms-icon-144x144.png diff --git a/ux/Final_Logo_Design/Color_favicons/ms-icon-150x150.png b/assets/logos/Color_favicons/ms-icon-150x150.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/ms-icon-150x150.png rename to assets/logos/Color_favicons/ms-icon-150x150.png diff --git a/ux/Final_Logo_Design/Color_favicons/ms-icon-310x310.png b/assets/logos/Color_favicons/ms-icon-310x310.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/ms-icon-310x310.png rename to assets/logos/Color_favicons/ms-icon-310x310.png diff --git a/ux/Final_Logo_Design/Color_favicons/ms-icon-70x70.png b/assets/logos/Color_favicons/ms-icon-70x70.png similarity index 100% rename from ux/Final_Logo_Design/Color_favicons/ms-icon-70x70.png rename to assets/logos/Color_favicons/ms-icon-70x70.png diff --git a/ux/Final_Logo_Design/Dark_Logo/dc_dark_logo_jpg.jpg b/assets/logos/Dark_Logo/dc_dark_logo_jpg.jpg similarity index 100% rename from ux/Final_Logo_Design/Dark_Logo/dc_dark_logo_jpg.jpg rename to assets/logos/Dark_Logo/dc_dark_logo_jpg.jpg diff --git a/ux/Final_Logo_Design/Dark_Logo/dc_dark_logo_pdf.pdf b/assets/logos/Dark_Logo/dc_dark_logo_pdf.pdf similarity index 100% rename from ux/Final_Logo_Design/Dark_Logo/dc_dark_logo_pdf.pdf rename to assets/logos/Dark_Logo/dc_dark_logo_pdf.pdf diff --git a/ux/Final_Logo_Design/Dark_Logo/dc_dark_logo_png.png b/assets/logos/Dark_Logo/dc_dark_logo_png.png similarity index 100% rename from ux/Final_Logo_Design/Dark_Logo/dc_dark_logo_png.png rename to assets/logos/Dark_Logo/dc_dark_logo_png.png diff --git a/ux/Final_Logo_Design/Dark_Logo/dc_dark_logo_svg.svg b/assets/logos/Dark_Logo/dc_dark_logo_svg.svg similarity index 100% rename from ux/Final_Logo_Design/Dark_Logo/dc_dark_logo_svg.svg rename to assets/logos/Dark_Logo/dc_dark_logo_svg.svg diff --git a/ux/Final_Logo_Design/Dark_favicons/android-icon-144x144.png b/assets/logos/Dark_favicons/android-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/android-icon-144x144.png rename to assets/logos/Dark_favicons/android-icon-144x144.png diff --git a/ux/Final_Logo_Design/Dark_favicons/android-icon-192x192.png b/assets/logos/Dark_favicons/android-icon-192x192.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/android-icon-192x192.png rename to assets/logos/Dark_favicons/android-icon-192x192.png diff --git a/ux/Final_Logo_Design/Dark_favicons/android-icon-36x36.png b/assets/logos/Dark_favicons/android-icon-36x36.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/android-icon-36x36.png rename to assets/logos/Dark_favicons/android-icon-36x36.png diff --git a/ux/Final_Logo_Design/Dark_favicons/android-icon-48x48.png b/assets/logos/Dark_favicons/android-icon-48x48.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/android-icon-48x48.png rename to assets/logos/Dark_favicons/android-icon-48x48.png diff --git a/ux/Final_Logo_Design/Dark_favicons/android-icon-72x72.png b/assets/logos/Dark_favicons/android-icon-72x72.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/android-icon-72x72.png rename to assets/logos/Dark_favicons/android-icon-72x72.png diff --git a/ux/Final_Logo_Design/Dark_favicons/android-icon-96x96.png b/assets/logos/Dark_favicons/android-icon-96x96.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/android-icon-96x96.png rename to assets/logos/Dark_favicons/android-icon-96x96.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-114x114.png b/assets/logos/Dark_favicons/apple-icon-114x114.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-114x114.png rename to assets/logos/Dark_favicons/apple-icon-114x114.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-120x120.png b/assets/logos/Dark_favicons/apple-icon-120x120.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-120x120.png rename to assets/logos/Dark_favicons/apple-icon-120x120.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-144x144.png b/assets/logos/Dark_favicons/apple-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-144x144.png rename to assets/logos/Dark_favicons/apple-icon-144x144.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-152x152.png b/assets/logos/Dark_favicons/apple-icon-152x152.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-152x152.png rename to assets/logos/Dark_favicons/apple-icon-152x152.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-180x180.png b/assets/logos/Dark_favicons/apple-icon-180x180.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-180x180.png rename to assets/logos/Dark_favicons/apple-icon-180x180.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-57x57.png b/assets/logos/Dark_favicons/apple-icon-57x57.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-57x57.png rename to assets/logos/Dark_favicons/apple-icon-57x57.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-60x60.png b/assets/logos/Dark_favicons/apple-icon-60x60.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-60x60.png rename to assets/logos/Dark_favicons/apple-icon-60x60.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-72x72.png b/assets/logos/Dark_favicons/apple-icon-72x72.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-72x72.png rename to assets/logos/Dark_favicons/apple-icon-72x72.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-76x76.png b/assets/logos/Dark_favicons/apple-icon-76x76.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-76x76.png rename to assets/logos/Dark_favicons/apple-icon-76x76.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon-precomposed.png b/assets/logos/Dark_favicons/apple-icon-precomposed.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon-precomposed.png rename to assets/logos/Dark_favicons/apple-icon-precomposed.png diff --git a/ux/Final_Logo_Design/Dark_favicons/apple-icon.png b/assets/logos/Dark_favicons/apple-icon.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/apple-icon.png rename to assets/logos/Dark_favicons/apple-icon.png diff --git a/ux/Final_Logo_Design/Dark_favicons/browserconfig.xml b/assets/logos/Dark_favicons/browserconfig.xml similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/browserconfig.xml rename to assets/logos/Dark_favicons/browserconfig.xml diff --git a/ux/Final_Logo_Design/Dark_favicons/favicon-16x16.png b/assets/logos/Dark_favicons/favicon-16x16.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/favicon-16x16.png rename to assets/logos/Dark_favicons/favicon-16x16.png diff --git a/ux/Final_Logo_Design/Dark_favicons/favicon-32x32.png b/assets/logos/Dark_favicons/favicon-32x32.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/favicon-32x32.png rename to assets/logos/Dark_favicons/favicon-32x32.png diff --git a/ux/Final_Logo_Design/Dark_favicons/favicon-96x96.png b/assets/logos/Dark_favicons/favicon-96x96.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/favicon-96x96.png rename to assets/logos/Dark_favicons/favicon-96x96.png diff --git a/ux/Final_Logo_Design/Dark_favicons/favicon.ico b/assets/logos/Dark_favicons/favicon.ico similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/favicon.ico rename to assets/logos/Dark_favicons/favicon.ico diff --git a/ux/Final_Logo_Design/Dark_favicons/manifest.json b/assets/logos/Dark_favicons/manifest.json similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/manifest.json rename to assets/logos/Dark_favicons/manifest.json diff --git a/ux/Final_Logo_Design/Dark_favicons/ms-icon-144x144.png b/assets/logos/Dark_favicons/ms-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/ms-icon-144x144.png rename to assets/logos/Dark_favicons/ms-icon-144x144.png diff --git a/ux/Final_Logo_Design/Dark_favicons/ms-icon-150x150.png b/assets/logos/Dark_favicons/ms-icon-150x150.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/ms-icon-150x150.png rename to assets/logos/Dark_favicons/ms-icon-150x150.png diff --git a/ux/Final_Logo_Design/Dark_favicons/ms-icon-310x310.png b/assets/logos/Dark_favicons/ms-icon-310x310.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/ms-icon-310x310.png rename to assets/logos/Dark_favicons/ms-icon-310x310.png diff --git a/ux/Final_Logo_Design/Dark_favicons/ms-icon-70x70.png b/assets/logos/Dark_favicons/ms-icon-70x70.png similarity index 100% rename from ux/Final_Logo_Design/Dark_favicons/ms-icon-70x70.png rename to assets/logos/Dark_favicons/ms-icon-70x70.png diff --git a/ux/Final_Logo_Design/Light_Logo/dc_light_logo_jpg.jpg b/assets/logos/Light_Logo/dc_light_logo_jpg.jpg similarity index 100% rename from ux/Final_Logo_Design/Light_Logo/dc_light_logo_jpg.jpg rename to assets/logos/Light_Logo/dc_light_logo_jpg.jpg diff --git a/ux/Final_Logo_Design/Light_Logo/dc_light_logo_pdf.pdf b/assets/logos/Light_Logo/dc_light_logo_pdf.pdf similarity index 100% rename from ux/Final_Logo_Design/Light_Logo/dc_light_logo_pdf.pdf rename to assets/logos/Light_Logo/dc_light_logo_pdf.pdf diff --git a/ux/Final_Logo_Design/Light_Logo/dc_light_logo_png.png b/assets/logos/Light_Logo/dc_light_logo_png.png similarity index 100% rename from ux/Final_Logo_Design/Light_Logo/dc_light_logo_png.png rename to assets/logos/Light_Logo/dc_light_logo_png.png diff --git a/ux/Final_Logo_Design/Light_Logo/dc_light_logo_svg.svg b/assets/logos/Light_Logo/dc_light_logo_svg.svg similarity index 100% rename from ux/Final_Logo_Design/Light_Logo/dc_light_logo_svg.svg rename to assets/logos/Light_Logo/dc_light_logo_svg.svg diff --git a/ux/Final_Logo_Design/Light_favicons/android-icon-144x144.png b/assets/logos/Light_favicons/android-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/android-icon-144x144.png rename to assets/logos/Light_favicons/android-icon-144x144.png diff --git a/ux/Final_Logo_Design/Light_favicons/android-icon-192x192.png b/assets/logos/Light_favicons/android-icon-192x192.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/android-icon-192x192.png rename to assets/logos/Light_favicons/android-icon-192x192.png diff --git a/ux/Final_Logo_Design/Light_favicons/android-icon-36x36.png b/assets/logos/Light_favicons/android-icon-36x36.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/android-icon-36x36.png rename to assets/logos/Light_favicons/android-icon-36x36.png diff --git a/ux/Final_Logo_Design/Light_favicons/android-icon-48x48.png b/assets/logos/Light_favicons/android-icon-48x48.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/android-icon-48x48.png rename to assets/logos/Light_favicons/android-icon-48x48.png diff --git a/ux/Final_Logo_Design/Light_favicons/android-icon-72x72.png b/assets/logos/Light_favicons/android-icon-72x72.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/android-icon-72x72.png rename to assets/logos/Light_favicons/android-icon-72x72.png diff --git a/ux/Final_Logo_Design/Light_favicons/android-icon-96x96.png b/assets/logos/Light_favicons/android-icon-96x96.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/android-icon-96x96.png rename to assets/logos/Light_favicons/android-icon-96x96.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-114x114.png b/assets/logos/Light_favicons/apple-icon-114x114.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-114x114.png rename to assets/logos/Light_favicons/apple-icon-114x114.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-120x120.png b/assets/logos/Light_favicons/apple-icon-120x120.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-120x120.png rename to assets/logos/Light_favicons/apple-icon-120x120.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-144x144.png b/assets/logos/Light_favicons/apple-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-144x144.png rename to assets/logos/Light_favicons/apple-icon-144x144.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-152x152.png b/assets/logos/Light_favicons/apple-icon-152x152.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-152x152.png rename to assets/logos/Light_favicons/apple-icon-152x152.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-180x180.png b/assets/logos/Light_favicons/apple-icon-180x180.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-180x180.png rename to assets/logos/Light_favicons/apple-icon-180x180.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-57x57.png b/assets/logos/Light_favicons/apple-icon-57x57.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-57x57.png rename to assets/logos/Light_favicons/apple-icon-57x57.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-60x60.png b/assets/logos/Light_favicons/apple-icon-60x60.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-60x60.png rename to assets/logos/Light_favicons/apple-icon-60x60.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-72x72.png b/assets/logos/Light_favicons/apple-icon-72x72.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-72x72.png rename to assets/logos/Light_favicons/apple-icon-72x72.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-76x76.png b/assets/logos/Light_favicons/apple-icon-76x76.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-76x76.png rename to assets/logos/Light_favicons/apple-icon-76x76.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon-precomposed.png b/assets/logos/Light_favicons/apple-icon-precomposed.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon-precomposed.png rename to assets/logos/Light_favicons/apple-icon-precomposed.png diff --git a/ux/Final_Logo_Design/Light_favicons/apple-icon.png b/assets/logos/Light_favicons/apple-icon.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/apple-icon.png rename to assets/logos/Light_favicons/apple-icon.png diff --git a/ux/Final_Logo_Design/Light_favicons/browserconfig.xml b/assets/logos/Light_favicons/browserconfig.xml similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/browserconfig.xml rename to assets/logos/Light_favicons/browserconfig.xml diff --git a/ux/Final_Logo_Design/Light_favicons/favicon-16x16.png b/assets/logos/Light_favicons/favicon-16x16.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/favicon-16x16.png rename to assets/logos/Light_favicons/favicon-16x16.png diff --git a/ux/Final_Logo_Design/Light_favicons/favicon-32x32.png b/assets/logos/Light_favicons/favicon-32x32.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/favicon-32x32.png rename to assets/logos/Light_favicons/favicon-32x32.png diff --git a/ux/Final_Logo_Design/Light_favicons/favicon-96x96.png b/assets/logos/Light_favicons/favicon-96x96.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/favicon-96x96.png rename to assets/logos/Light_favicons/favicon-96x96.png diff --git a/ux/Final_Logo_Design/Light_favicons/favicon.ico b/assets/logos/Light_favicons/favicon.ico similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/favicon.ico rename to assets/logos/Light_favicons/favicon.ico diff --git a/ux/Final_Logo_Design/Light_favicons/manifest.json b/assets/logos/Light_favicons/manifest.json similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/manifest.json rename to assets/logos/Light_favicons/manifest.json diff --git a/ux/Final_Logo_Design/Light_favicons/ms-icon-144x144.png b/assets/logos/Light_favicons/ms-icon-144x144.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/ms-icon-144x144.png rename to assets/logos/Light_favicons/ms-icon-144x144.png diff --git a/ux/Final_Logo_Design/Light_favicons/ms-icon-150x150.png b/assets/logos/Light_favicons/ms-icon-150x150.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/ms-icon-150x150.png rename to assets/logos/Light_favicons/ms-icon-150x150.png diff --git a/ux/Final_Logo_Design/Light_favicons/ms-icon-310x310.png b/assets/logos/Light_favicons/ms-icon-310x310.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/ms-icon-310x310.png rename to assets/logos/Light_favicons/ms-icon-310x310.png diff --git a/ux/Final_Logo_Design/Light_favicons/ms-icon-70x70.png b/assets/logos/Light_favicons/ms-icon-70x70.png similarity index 100% rename from ux/Final_Logo_Design/Light_favicons/ms-icon-70x70.png rename to assets/logos/Light_favicons/ms-icon-70x70.png From 046e7ecf7591a6e792e53610ba479cbf9d9fa546 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Fri, 13 Sep 2024 14:27:42 +0100 Subject: [PATCH 30/56] Create Dockerfile and docker compose files to dockerize and deploy the API project. --- .vscode/settings.json | 1 + api/.dockerignore | 12 +++ api/{.env.production => .env.example} | 7 +- api/Dockerfile | 20 ++++ api/README.md | 135 +++++++++++++++++++++++++- api/config/env.js | 21 ++-- api/docker-compose.yml | 38 ++++++++ api/utils/geocoder.js | 2 +- 8 files changed, 216 insertions(+), 20 deletions(-) create mode 100644 api/.dockerignore rename api/{.env.production => .env.example} (73%) create mode 100644 api/Dockerfile create mode 100644 api/docker-compose.yml diff --git a/.vscode/settings.json b/.vscode/settings.json index 6a73210..2cd451f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,7 @@ "cSpell.words": [ "bootcamp", "bootcamps", + "devcamper", "dsphere", "Geocoder", "mapquest", diff --git a/api/.dockerignore b/api/.dockerignore new file mode 100644 index 0000000..a1c080d --- /dev/null +++ b/api/.dockerignore @@ -0,0 +1,12 @@ +node_modules +npm-debug.log +Dockerfile +.dockerignore +docker-compose.yml +.git +.gitignore +_postman +tests +eslint.config.js +README.md +coverage \ No newline at end of file diff --git a/api/.env.production b/api/.env.example similarity index 73% rename from api/.env.production rename to api/.env.example index 85f418d..e29ad47 100644 --- a/api/.env.production +++ b/api/.env.example @@ -1,9 +1,11 @@ +# Add .env file in the root of the api folder if you are running in development mode, otherwise add the following environment variables in your server. + # Server configuration PORT=6000 -NODE_ENV=production +NODE_ENV=development # Database configuration -MONGO_URI=mongodb://localhost:27017/mern-bootcamp-prod-db +MONGO_URI=mongodb://localhost:27017/devcamper-db # Geocoder configuration GEOCODER_PROVIDER=mapquest @@ -29,4 +31,3 @@ FROM_NAME= # Rate limiting configuration RATE_LIMIT_WINDOW=10 RATE_LIMIT_MAX=100 - diff --git a/api/Dockerfile b/api/Dockerfile new file mode 100644 index 0000000..0520104 --- /dev/null +++ b/api/Dockerfile @@ -0,0 +1,20 @@ +# Use the official Node.js image as the base image +FROM node:20 + +# Set the working directory inside the container +WORKDIR /usr/src/app + +# Copy package.json and package-lock.json to the working directory +COPY package*.json ./ + +# Install dependencies +RUN npm install + +# Copy the rest of the application code to the working directory +COPY . . + +# Expose the port the app runs on +EXPOSE 3000 + +# Define the command to run the application +CMD ["npm", "start"] \ No newline at end of file diff --git a/api/README.md b/api/README.md index bc08882..6cd0ac6 100644 --- a/api/README.md +++ b/api/README.md @@ -1,7 +1,134 @@ -# MERN Bootcamp API +# DevCamper API -## Description +## Overview -This is the API for the MERN Bootcamp project. It is a RESTful API that provides endpoints for the MERN Bootcamp project. +The DevCamper API is a backend service for managing bootcamp-related data, including courses, reviews, and user authentication. This documentation provides detailed instructions for setting up the API in both local and production environments. - +## Table of Contents + +- [Prerequisites](#prerequisites) + - [Setup Geocoding Service](#setup-geocoding-service) + - [Setup SMTP Service (Local Setup)](#setup-smtp-service) + - [Setup Postman](#setup-postman) +- [Local Setup](#local-setup) + - [Install NodeJs](#install-nodejs) + - [Install MongoDB](#install-mongodb) + - [Setup Environment Variables](#setup-environment-variables) + - [Seed the Database](#seed-the-database) + - [Validate the Data in MongoDB Compass](#validate-the-data-in-mongodb-compass) + - [Running the API](#running-the-api) + - [Cleanup the Database](#cleanup-the-database) + +## Prerequisites + +Before setting up the DevCamper API, you need to sign up for the following services and obtain the necessary API keys and credentials. You would also need to install Postman client for testing. + +### Setup Geocoding Service + +1. Sign up for a free account on [MapQuest](https://developer.mapquest.com/). +2. Create a new application to get an API key. + +### Setup SMTP Service + +1. Sign up for a free account on [Mailtrap](https://mailtrap.io/). +2. Create a new inbox to get SMTP credentials. + +### Setup Postman + +1. Download and install [Postman](https://www.postman.com/downloads/). +2. Import the Postman collection provided in the `postman` directory. + +## Local Setup + +### Install NodeJs + +1. Download and install Node.js from the [official website](https://nodejs.org/). + +### Install MongoDB + +1. Install MongoDB in local environment using one of the following options: + + - [MongoDB Community Server](https://www.mongodb.com/try/download/community) + - [Docker](https://docs.docker.com/get-docker/) + + - Run the following command to start a MongoDB container: + + ```bash + docker run -d -p 27017:27017 --name devcamper-mongo mongo + ``` + +2. Download and install [MongoDB Compass](https://www.mongodb.com/try/download/compass) for a graphical user interface to interact with the database. +3. Connect to the MongoDB server using the following connection string: + + ```plaintext + mongodb://localhost:27017 + ``` + +4. Create a new database named `devcamper-db`. + +### Setup Environment Variables + +Create a `.env` file in the root of your project directory and configure the following environment variables. Replace the placeholder values with your own credentials and API keys obtained from earlier steps. + +```plaintext +PORT=6000 +NODE_ENV=development +MONGO_URI=mongodb://localhost:27017/devcamper-db +GEOCODER_PROVIDER=mapquest +GEOCODER_API_KEY=your_mapquest_api_key +FILE_UPLOAD_PATH=./public/uploads +MAX_FILE_UPLOAD=1000000 +JWT_SECRET=your_jwt_secret +JWT_EXPIRE=30d +JWT_COOKIE_EXPIRE=30 +SMTP_HOST=your_smtp_host +SMTP_PORT=your_smtp_port +SMTP_EMAIL=your_smtp_email +SMTP_PASSWORD=your_smtp_password +FROM_EMAIL=your_from_email +FROM_NAME=your_from_name +RATE_LIMIT_MAX=100 +RATE_LIMIT_WINDOW_MS=60000 +``` + +### Seed the Database + +Run the following command to seed the database with bootcamps, courses, and users. + +```bash +node run data:import +``` + +### Validate the Data in MongoDB Compass + +1. Open MongoDB Compass and connect +2. Select the `devcamper-db` database +3. Verify that the `bootcamps`, `courses`, and `users` collections have been created and populated with data. + +### Running the API + +1. Install dependencies: + + ```bash + npm install + ``` + +2. Start the API server: + + ```bash + npm run dev + ``` + +3. Use the Postman collection provided in the `postman` directory to interact with the API. + +4. Make sure that the environment is set to development in Postman. + +5. Test the API endpoints to verify that the API is working as expected. + +### Cleanup the Database + +Run the following command to delete all data from the database. This will remove all bootcamps, courses, and users. + +```bash +node run data:delete +``` diff --git a/api/config/env.js b/api/config/env.js index 8bbb26a..01e0967 100644 --- a/api/config/env.js +++ b/api/config/env.js @@ -2,18 +2,15 @@ import dotenv from 'dotenv'; const loadEnvironmentConfig = () => { process.env.NODE_ENV = process.env.NODE_ENV || 'development'; - switch (process.env.NODE_ENV) { - case 'development': - dotenv.config(); - break; - case 'test': - dotenv.config({ path: '.env.test' }); - break; - case 'production': - dotenv.config({ path: '.env.production' }); - break; - default: - throw new Error('Environment not recognized'); + + // Load environment variables from .env file only in development mode + if (process.env.NODE_ENV === 'development') { + dotenv.config(); + } + + // For test and production, assume environment variables are passed directly + if (process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'production') { + console.log(`Running in ${process.env.NODE_ENV} mode`); } }; diff --git a/api/docker-compose.yml b/api/docker-compose.yml new file mode 100644 index 0000000..f632ddf --- /dev/null +++ b/api/docker-compose.yml @@ -0,0 +1,38 @@ +version: '3.8' + +services: + api: + image: prasadhonrao/devcamper-api:latest + ports: + - '${PORT}:${PORT}' + environment: + - PORT=${PORT} + - NODE_ENV=${NODE_ENV} + - MONGO_URI=${MONGO_URI} + - GEOCODER_PROVIDER=${GEOCODER_PROVIDER} + - GEOCODER_API_KEY=${GEOCODER_API_KEY} + - FILE_UPLOAD_PATH=${FILE_UPLOAD_PATH} + - MAX_FILE_UPLOAD=${MAX_FILE_UPLOAD} + - JWT_SECRET=${JWT_SECRET} + - JWT_EXPIRE=${JWT_EXPIRE} + - JWT_COOKIE_EXPIRE=${JWT_COOKIE_EXPIRE} + - SMTP_HOST=${SMTP_HOST} + - SMTP_PORT=${SMTP_PORT} + - SMTP_EMAIL=${SMTP_EMAIL} + - SMTP_PASSWORD=${SMTP_PASSWORD} + - FROM_EMAIL=${FROM_EMAIL} + - FROM_NAME=${FROM_NAME} + - RATE_LIMIT_MAX=${RATE_LIMIT_MAX} + - RATE_LIMIT_WINDOW_MS=${RATE_LIMIT_WINDOW_MS} + depends_on: + - mongo + + mongo: + image: mongo:latest + ports: + - '27017:27017' + volumes: + - mongo-data:/data/db + +volumes: + mongo-data: diff --git a/api/utils/geocoder.js b/api/utils/geocoder.js index a665c89..e5269af 100644 --- a/api/utils/geocoder.js +++ b/api/utils/geocoder.js @@ -3,7 +3,7 @@ import NodeGeocoder from 'node-geocoder'; const options = { provider: 'mapquest', httpAdapter: 'https', - apiKey: '', // Add your own API key here + apiKey: process.env.GEOCODER_API_KEY, formatter: null, }; From 8c021df48a2e53e241d9988cffd428076dc3c89e Mon Sep 17 00:00:00 2001 From: komal gavasane Date: Fri, 13 Sep 2024 20:24:49 +0530 Subject: [PATCH 31/56] Replace the Mern Bootcamp to DevCamper --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 17589eb..e91c490 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# MERN Bootcamp +# DevCamper ## Overview -MERN Bootcamp is a web application created to help users discover, rate, and review coding bootcamps. The platform provides a comprehensive solution for users to search for bootcamps based on location, browse reviews from other users, and submit their own feedback. Its primary goal is to provide a resource for aspiring coders to find the right bootcamp for their needs. +DevCamper is a web application created to help users discover, rate, and review coding bootcamps. The platform provides a comprehensive solution for users to search for bootcamps based on location, browse reviews from other users, and submit their own feedback. Its primary goal is to provide a resource for aspiring coders to find the right bootcamp for their needs. Built using the MERN stack, the application leverages MongoDB, Express.js, React, and Node.js to deliver a full-stack experience. On the backend, Express.js and MongoDB are utilized to handle API requests and manage data storage. Meanwhile, the frontend is powered by React, which provides a dynamic and responsive user interface. From d2bcd5c3bc13895b7ae2e130e970dd9393d78f5d Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Sat, 14 Sep 2024 17:26:15 +0100 Subject: [PATCH 32/56] Refactor GitHub Actions workflow to build and push Docker image --- .github/workflows/api.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index ff0282a..f0e47d8 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -13,6 +13,9 @@ on: - 'api/**' workflow_dispatch: +env: + DOCKER_IMAGE: prasadhonrao/devcamper-api + jobs: lint: runs-on: ubuntu-latest @@ -128,6 +131,30 @@ jobs: name: coverage-report path: api/coverage + build: + runs-on: ubuntu-latest + needs: code-coverage + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Log in to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push Docker image + run: | + docker build -t ${{ env.DOCKER_IMAGE }}:${{ github.sha }} . + docker tag ${{ env.DOCKER_IMAGE }}:${{ github.sha }} ${{ env.DOCKER_IMAGE }}:latest + docker push ${{ env.DOCKER_IMAGE }}:${{ github.sha }} + docker push ${{ env.DOCKER_IMAGE }}:latest + deploy: runs-on: ubuntu-latest needs: code-coverage From 20301836e7b6f0b89e1b8422887a9d8f7cf2ea3d Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Sat, 14 Sep 2024 17:39:16 +0100 Subject: [PATCH 33/56] Correct job dependencies in workflow. Remove docker files from dockerignore --- .github/workflows/api.yml | 2 +- api/.dockerignore | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index f0e47d8..6f3781f 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -157,7 +157,7 @@ jobs: deploy: runs-on: ubuntu-latest - needs: code-coverage + needs: build steps: - name: Checkout code diff --git a/api/.dockerignore b/api/.dockerignore index a1c080d..6ff3a2f 100644 --- a/api/.dockerignore +++ b/api/.dockerignore @@ -1,8 +1,6 @@ node_modules npm-debug.log -Dockerfile .dockerignore -docker-compose.yml .git .gitignore _postman From 6207dd4464a6d3f05f6bbd189fcd7da29ff2a8dd Mon Sep 17 00:00:00 2001 From: Akanksha Date: Sat, 14 Sep 2024 23:25:58 +0530 Subject: [PATCH 34/56] changes --- ui/src/components/Header.jsx | 52 ++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/ui/src/components/Header.jsx b/ui/src/components/Header.jsx index 1be2cf1..8e0b613 100644 --- a/ui/src/components/Header.jsx +++ b/ui/src/components/Header.jsx @@ -2,7 +2,7 @@ import { Link } from 'react-router-dom'; import Container from 'react-bootstrap/Container'; import Nav from 'react-bootstrap/Nav'; import Navbar from 'react-bootstrap/Navbar'; -import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser } from 'react-icons/fa'; +import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser, FaSearch } from 'react-icons/fa'; import "../styles/bootstrap.css"; import { useEffect, useState } from 'react'; @@ -22,7 +22,7 @@ function Header() { return ( <> {/* */} - {getHeader == true ? + {/* {getHeader == true ?

5nbUR!W4yiXiS<+D`J1q&^w4VA*RE%h|_-b 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 literal 0 HcmV?d00001 diff --git a/ui/src/img/image_4.jpg b/ui/src/img/image_4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..789c7ba7cb97c49c00694783843df351549096f2 GIT binary patch literal 71706 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 P7-$x~KkkQ)`Go)3_c#_z literal 0 HcmV?d00001 diff --git a/ui/src/pages/HomePage.jsx b/ui/src/pages/HomePage.jsx index d5c8419..74c727e 100644 --- a/ui/src/pages/HomePage.jsx +++ b/ui/src/pages/HomePage.jsx @@ -2,37 +2,79 @@ import { Row, Col, Form, Button } from 'react-bootstrap'; const HomePage = () => { return ( -

- } + } */} - {/* // - // - // - // - // Bootcamp - // - // - // - // - // - // - // */} + + + + + Bootcamp + + + + + + + ); } From f3543ea5d9399fd832dce9a25bf29abeb2d39392 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Sat, 14 Sep 2024 19:18:41 +0100 Subject: [PATCH 35/56] Refactor Docker build command in GitHub Actions workflow --- .github/workflows/api.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml index 6f3781f..1ad264c 100644 --- a/.github/workflows/api.yml +++ b/.github/workflows/api.yml @@ -150,7 +150,7 @@ jobs: - name: Build and push Docker image run: | - docker build -t ${{ env.DOCKER_IMAGE }}:${{ github.sha }} . + docker build -t ${{ env.DOCKER_IMAGE }}:${{ github.sha }} -f api/Dockerfile api docker tag ${{ env.DOCKER_IMAGE }}:${{ github.sha }} ${{ env.DOCKER_IMAGE }}:latest docker push ${{ env.DOCKER_IMAGE }}:${{ github.sha }} docker push ${{ env.DOCKER_IMAGE }}:latest From 079c5afa7fbbb55e942e4bb7475d660bedc0713e Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Sat, 14 Sep 2024 19:30:27 +0100 Subject: [PATCH 36/56] Refactor GitHub Actions workflows for building and deploying the API --- .github/workflows/api-build.yml | 41 ++++++++++++++++++++++++++++++++ .github/workflows/api-deploy.yml | 35 +++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 .github/workflows/api-build.yml create mode 100644 .github/workflows/api-deploy.yml diff --git a/.github/workflows/api-build.yml b/.github/workflows/api-build.yml new file mode 100644 index 0000000..c410d38 --- /dev/null +++ b/.github/workflows/api-build.yml @@ -0,0 +1,41 @@ +name: API - Build + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + workflow_dispatch: + +env: + DOCKER_IMAGE: prasadhonrao/devcamper-api + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Log in to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push Docker image + run: | + docker build -t ${{ env.DOCKER_IMAGE }}:${{ github.sha }} -f api/Dockerfile api + docker tag ${{ env.DOCKER_IMAGE }}:${{ github.sha }} ${{ env.DOCKER_IMAGE }}:latest + docker push ${{ env.DOCKER_IMAGE }}:${{ github.sha }} + docker push ${{ env.DOCKER_IMAGE }}:latest diff --git a/.github/workflows/api-deploy.yml b/.github/workflows/api-deploy.yml new file mode 100644 index 0000000..dd6cc63 --- /dev/null +++ b/.github/workflows/api-deploy.yml @@ -0,0 +1,35 @@ +name: API - Deploy + +on: + push: + branches: + - main + paths: + - 'api/**' + pull_request: + branches: + - main + paths: + - 'api/**' + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api + + - name: Deploy + run: | + # Add your deployment steps here + echo "Deploying the application..." From f5ff5b5ad8d3f56f50283f0452845de997a0d949 Mon Sep 17 00:00:00 2001 From: komal gavasane Date: Mon, 16 Sep 2024 14:21:08 +0530 Subject: [PATCH 37/56] updated all the documents, code and comments to the Devcamper --- CONTRIBUTING.md | 8 ++++---- SETUP.md | 10 +++++----- api/_postman/prod-environment.json | 2 +- api/package-lock.json | 4 ++-- api/package.json | 10 +++++----- api/routes/home.js | 2 +- api/seeder.js | 2 +- ui/package-lock.json | 4 ++-- ui/package.json | 2 +- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff69f72..2a0156c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ -# Contributing to MERN Bootcamp +# Contributing to DevCamper -We welcome contributions to the MERN Bootcamp project! By contributing, you can help improve the project and make it more useful for everyone. +We welcome contributions to the DevCamper project! By contributing, you can help improve the project and make it more useful for everyone. ## How to Contribute @@ -9,8 +9,8 @@ We welcome contributions to the MERN Bootcamp project! By contributing, you can Fork the repository on GitHub and clone your fork locally. ```sh - git clone https://github.com/your-username/mern-bootcamp.git - cd mern-bootcamp + git clone https://github.com/your-username/DevCamper.git + cd DevCamper ``` 2. **Create a branch:** diff --git a/SETUP.md b/SETUP.md index 529b30a..d298394 100644 --- a/SETUP.md +++ b/SETUP.md @@ -1,6 +1,6 @@ -# MERN Bootcamp Project Setup Instructions +# DevCamper Project Setup Instructions -Welcome to the MERN Bootcamp project! This guide will walk you through the process of setting up the API server and the UI application. Please follow the steps carefully to get the application up and running. +Welcome to the DevCamper project! This guide will walk you through the process of setting up the API server and the UI application. Please follow the steps carefully to get the application up and running. ## Prerequisites @@ -16,8 +16,8 @@ Before starting, make sure you have the following installed on your machine: ### Step 1: Clone the repository ```bash -git clone https://github.com/prasadhonrao/mern-bootcamp -cd mern-bootcamp +git clone https://github.com/prasadhonrao/DevCamper +cd DevCamper cd api ``` @@ -49,7 +49,7 @@ PORT=5000 NODE_ENV=development # Database configuration -MONGO_URI=mongodb://localhost:27017/mern-bootcamp-dev-db +MONGO_URI=mongodb://localhost:27017/DevCamper-dev-db # Geocoder configuration GEOCODER_PROVIDER=mapquest diff --git a/api/_postman/prod-environment.json b/api/_postman/prod-environment.json index b4a0612..2034297 100644 --- a/api/_postman/prod-environment.json +++ b/api/_postman/prod-environment.json @@ -4,7 +4,7 @@ "values": [ { "key": "url", - "value": "http://mern-bootcamp.io", + "value": "http://DevCamper.io", "type": "default", "enabled": true }, diff --git a/api/package-lock.json b/api/package-lock.json index 729cb84..4d83d8d 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -1,11 +1,11 @@ { - "name": "mern-bootcamp-api", + "name": "DevCamper-api", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "mern-bootcamp-api", + "name": "DevCamper-api", "version": "1.0.0", "license": "MIT", "dependencies": { diff --git a/api/package.json b/api/package.json index 158d6be..a18ca5d 100644 --- a/api/package.json +++ b/api/package.json @@ -1,7 +1,7 @@ { - "name": "mern-bootcamp-api", + "name": "DevCamper-api", "version": "1.0.0", - "description": "API for MERN Bootcamp web application", + "description": "API for DevCamper web application", "main": "server.js", "type": "module", "scripts": { @@ -14,7 +14,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/prasadhonrao/mern-bootcamp.git" + "url": "git+https://github.com/prasadhonrao/DevCamper.git" }, "keywords": [ "api", @@ -26,9 +26,9 @@ "author": "Prasad Honrao", "license": "MIT", "bugs": { - "url": "https://github.com/prasadhonrao/mern-bootcamp/issues" + "url": "https://github.com/prasadhonrao/DevCamper/issues" }, - "homepage": "https://github.com/prasadhonrao/mern-bootcamp#readme", + "homepage": "https://github.com/prasadhonrao/DevCamper#readme", "dependencies": { "bcryptjs": "^2.4.3", "colors": "^1.4.0", diff --git a/api/routes/home.js b/api/routes/home.js index 4e68f37..52a064c 100644 --- a/api/routes/home.js +++ b/api/routes/home.js @@ -3,7 +3,7 @@ import express from 'express'; const router = express.Router(); router.get('/', (req, res) => { - res.send('Welcome to MERN bootcamp API!'); + res.send('Welcome to DevCamper API!'); }); router.get('/status', (req, res) => { diff --git a/api/seeder.js b/api/seeder.js index bff7226..9dd9cb5 100644 --- a/api/seeder.js +++ b/api/seeder.js @@ -17,7 +17,7 @@ if (ENV === 'development') { } // Connect to MongoDB -const MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017/mern-bootcamp-db'; +const MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017/devCamper-db'; await mongoose.connect(MONGO_URI); // Read JSON files diff --git a/ui/package-lock.json b/ui/package-lock.json index f25e289..fff7561 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,11 +1,11 @@ { - "name": "mern-bootcamp-ui", + "name": "devCamper-ui", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "mern-bootcamp-ui", + "name": "devCamper-ui", "version": "0.1.0", "dependencies": { "bootstrap": "^5.3.3", diff --git a/ui/package.json b/ui/package.json index 73b7f36..d9bd956 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,5 +1,5 @@ { - "name": "mern-bootcamp-ui", + "name": "devCamper-ui", "version": "0.1.0", "private": true, "dependencies": { From 70549a31e42bc0bccc9ce60d59436c1bc4c074d8 Mon Sep 17 00:00:00 2001 From: Akanksha Date: Mon, 16 Sep 2024 14:36:09 +0530 Subject: [PATCH 38/56] index page converted to react code --- ui/src/components/Header.jsx | 52 ++++++++--------- ui/src/index.css | 6 +- ui/src/pages/HomePage.jsx | 108 +++++++++++------------------------ ui/src/styles/bootstrap.css | 11 ++-- ui/src/styles/common.css | 50 ++++++++-------- 5 files changed, 95 insertions(+), 132 deletions(-) diff --git a/ui/src/components/Header.jsx b/ui/src/components/Header.jsx index 1be2cf1..1ab21f9 100644 --- a/ui/src/components/Header.jsx +++ b/ui/src/components/Header.jsx @@ -2,7 +2,7 @@ import { Link } from 'react-router-dom'; import Container from 'react-bootstrap/Container'; import Nav from 'react-bootstrap/Nav'; import Navbar from 'react-bootstrap/Navbar'; -import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser } from 'react-icons/fa'; +import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser, FaSearch } from 'react-icons/fa'; import "../styles/bootstrap.css"; import { useEffect, useState } from 'react'; @@ -22,7 +22,7 @@ function Header() { return ( <> {/* */} - {getHeader == true ? + {/* {getHeader == true ? } + } */} - {/* // - // - // - // - // Bootcamp - // - // - // - // - // - // - // */} + + + + + DevCamper + + + + + + + ); } diff --git a/ui/src/index.css b/ui/src/index.css index 1d2c954..f321d6b 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -1,7 +1,7 @@ .nav-separator { width: 1px; height: 24px; - background-color: #333; + background-color: rgba(255, 255, 255, 0.5); margin: 0 10px; align-self: center; } @@ -17,13 +17,13 @@ img { .showcase { position: relative; background: url('./img/showcase.jpg') no-repeat center center/cover; - min-height: 100vh; + min-height: 91.5vh; color: #fff; } .showcase-inner { text-align: center; - padding-top: 20%; + padding-top: 15%; height: 100%; width: 80%; margin: auto; diff --git a/ui/src/pages/HomePage.jsx b/ui/src/pages/HomePage.jsx index 74c727e..d11d83e 100644 --- a/ui/src/pages/HomePage.jsx +++ b/ui/src/pages/HomePage.jsx @@ -1,81 +1,41 @@ import { Row, Col, Form, Button } from 'react-bootstrap'; const HomePage = () => { - return ( - <> - {/* */} -
-
-
-

Find a Code Bootcamp

-

- Find, rate and read reviews on coding bootcamps -

-
-
-
-
- -
-
-
-
- -
-
-
- -
+ return ( + <> +
+
+
+

Find a Code Bootcamp

+

Find, rate and read reviews on coding bootcamps

+
+ + + + + + + + + + + + + + +
+ +
+ +
+
+
-
-
- {/* //
- //
- //
- //

Find a Code Bootcamp

- //

Find, rate and read reviews on coding bootcamps

- //
- // - // - // - // - // - // - // - // - // - // - // - // - // - // - //
- // - //
- // - //
- //
- //
- //
- //
*/} - - ); + + + ); }; export default HomePage; diff --git a/ui/src/styles/bootstrap.css b/ui/src/styles/bootstrap.css index bee3af8..eaa1123 100644 --- a/ui/src/styles/bootstrap.css +++ b/ui/src/styles/bootstrap.css @@ -90,7 +90,7 @@ } p { margin-top: 0; - margin-bottom: 1rem; + margin-bottom: 0rem; } abbr[title], abbr[data-original-title] { @@ -361,7 +361,7 @@ font-size: 1rem; } .lead { - font-size: 1.25rem; + font-size: 1.20rem; font-weight: 300; } .display-1 { @@ -3015,7 +3015,7 @@ .btn-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; - line-height: 1.5; + line-height: 1; border-radius: 0; } .btn-sm, @@ -4121,6 +4121,7 @@ font-size: 1.25rem; line-height: inherit; white-space: nowrap; + color: #fff !important; } .navbar-brand:hover, .navbar-brand:focus { @@ -4416,11 +4417,11 @@ color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-nav .nav-link { - color: rgba(0, 0, 0, 0.5); + color: rgba(255, 255, 255, 0.5); } .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { - color: rgba(0, 0, 0, 0.7); + color: rgba(255, 255, 255, 0.75); } .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); diff --git a/ui/src/styles/common.css b/ui/src/styles/common.css index c648654..3471e1a 100644 --- a/ui/src/styles/common.css +++ b/ui/src/styles/common.css @@ -1,25 +1,27 @@ img { - width: 100%; - } - .showcase { - position: relative; - background: url('../../img/showcase.jpg') no-repeat center center/cover; - min-height: 100vh; - color: #fff; - } - .showcase-inner { - text-align: center; - padding-top: 20%; - height: 100%; - width: 80%; - margin: auto; - } - .dark-overlay { - background-color: rgba(0, 0, 0, 0.6); - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - } - \ No newline at end of file + width: 100%; +} + +.showcase { + position: relative; + background: url('../../img/showcase.jpg') no-repeat center center/cover; + min-height: 100vh; + color: #fff; +} + +.showcase-inner { + text-align: center; + padding-top: 10%; + height: 100%; + width: 80%; + margin: auto; +} + +.dark-overlay { + background-color: rgba(0, 0, 0, 0.6); + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} \ No newline at end of file From 4f10a2236f2ce966e98700c2e6e66d68ef94da76 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Mon, 16 Sep 2024 10:16:42 +0100 Subject: [PATCH 39/56] Define separate CI and CD workflows --- .github/workflows/api-build.yml | 41 ------- .github/workflows/api-cd.yml | 73 ++++++++++-- .github/workflows/api-ci.yml | 123 ++++++++++++++++++-- .github/workflows/api-deploy.yml | 35 ------ .github/workflows/api-lint.yml | 37 ------ .github/workflows/api-security.yml | 30 ----- .github/workflows/api.yml | 177 ----------------------------- 7 files changed, 174 insertions(+), 342 deletions(-) delete mode 100644 .github/workflows/api-build.yml delete mode 100644 .github/workflows/api-deploy.yml delete mode 100644 .github/workflows/api-lint.yml delete mode 100644 .github/workflows/api-security.yml delete mode 100644 .github/workflows/api.yml diff --git a/.github/workflows/api-build.yml b/.github/workflows/api-build.yml deleted file mode 100644 index c410d38..0000000 --- a/.github/workflows/api-build.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: API - Build - -on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' - workflow_dispatch: - -env: - DOCKER_IMAGE: prasadhonrao/devcamper-api - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Log in to Docker Hub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push Docker image - run: | - docker build -t ${{ env.DOCKER_IMAGE }}:${{ github.sha }} -f api/Dockerfile api - docker tag ${{ env.DOCKER_IMAGE }}:${{ github.sha }} ${{ env.DOCKER_IMAGE }}:latest - docker push ${{ env.DOCKER_IMAGE }}:${{ github.sha }} - docker push ${{ env.DOCKER_IMAGE }}:latest diff --git a/.github/workflows/api-cd.yml b/.github/workflows/api-cd.yml index 34af841..d485a9a 100644 --- a/.github/workflows/api-cd.yml +++ b/.github/workflows/api-cd.yml @@ -1,31 +1,84 @@ name: API - Continuous Deployment on: - workflow_run: - workflows: ['API - Continuous Integration'] - types: - - completed + push: + branches: + - main + paths: + - 'api/**' + workflow_dispatch: + +env: + DOCKER_IMAGE: prasadhonrao/devcamper-api jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Log in to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push Docker image + run: | + docker build -t ${{ env.DOCKER_IMAGE }}:${{ github.sha }} -f api/Dockerfile api + docker tag ${{ env.DOCKER_IMAGE }}:${{ github.sha }} ${{ env.DOCKER_IMAGE }}:latest + docker push ${{ env.DOCKER_IMAGE }}:${{ github.sha }} + docker push ${{ env.DOCKER_IMAGE }}:latest + deploy: - if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest + needs: build steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: '20' - name: Install dependencies - run: | - cd api - npm install + run: npm install --prefix api - name: Deploy run: | # Add your deployment steps here echo "Deploying the application..." + notify: + runs-on: ubuntu-latest + needs: deploy + if: always() + + steps: + - name: Send email notification + uses: dawidd6/action-send-mail@v3 + with: + server_address: smtp.gmail.com + server_port: 587 + username: ${{ secrets.GMAIL_USERNAME }} + password: ${{ secrets.GMAIL_PASSWORD }} + subject: ${{ job.status }}: Deployment Notification + body: | + The deployment has ${{ job.status }}! + Repository: ${{ github.repository }} + Branch: ${{ github.ref }} + Commit: ${{ github.sha }} + Author: ${{ github.actor }} + Workflow: ${{ github.workflow }} + Job: ${{ github.job }} + Run ID: ${{ github.run_id }} + Run Number: ${{ github.run_number }} + Logs: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + to: ${{ secrets.NOTIFY_EMAIL }} + from: ${{ secrets.GMAIL_USERNAME }} \ No newline at end of file diff --git a/.github/workflows/api-ci.yml b/.github/workflows/api-ci.yml index 25b1a38..10a0d3d 100644 --- a/.github/workflows/api-ci.yml +++ b/.github/workflows/api-ci.yml @@ -1,30 +1,129 @@ name: API - Continuous Integration on: - workflow_run: - workflows: ['API - Security Checks'] - types: - - completed + push: + branches: + - development + paths: + - 'api/**' + pull_request: + branches: + - development + paths: + - 'api/**' + workflow_dispatch: jobs: - build-and-test: + lint: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: '20' - name: Install dependencies + run: npm install --prefix api + + - name: Run linter run: | - cd api - npm install + export PATH=$(pwd)/api/node_modules/.bin:$PATH + npm run lint --prefix api + + dependency-check: + runs-on: ubuntu-latest + needs: lint + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api + + - name: Run dependency check + run: npm audit --audit-level=high --prefix api + + security: + runs-on: ubuntu-latest + needs: dependency-check + permissions: + actions: read + contents: read + security-events: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: javascript + + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + + test: + runs-on: ubuntu-latest + needs: security + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api - name: Run tests - run: | - cd api - npm test + run: npm test --prefix api + + code-coverage: + runs-on: ubuntu-latest + needs: test + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm install --prefix api + + - name: Run tests with coverage + run: npm run test --prefix api -- --coverage + + - name: Upload coverage report + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: api/coverage diff --git a/.github/workflows/api-deploy.yml b/.github/workflows/api-deploy.yml deleted file mode 100644 index dd6cc63..0000000 --- a/.github/workflows/api-deploy.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: API - Deploy - -on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' - workflow_dispatch: - -jobs: - deploy: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: npm install --prefix api - - - name: Deploy - run: | - # Add your deployment steps here - echo "Deploying the application..." diff --git a/.github/workflows/api-lint.yml b/.github/workflows/api-lint.yml deleted file mode 100644 index 8ff9417..0000000 --- a/.github/workflows/api-lint.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: API - Linting - -on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' - workflow_dispatch: - -jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Set up Node.js - uses: actions/setup-node@v2 - with: - node-version: '20' - - - name: Install dependencies - run: | - cd api - npm install - - - name: Run linter - run: | - cd api - npm run lint diff --git a/.github/workflows/api-security.yml b/.github/workflows/api-security.yml deleted file mode 100644 index 86c7d46..0000000 --- a/.github/workflows/api-security.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: API - Security Checks - -on: - workflow_run: - workflows: ['API - Linting'] - types: - - completed - -jobs: - codeql-analysis: - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: javascript - - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/api.yml b/.github/workflows/api.yml deleted file mode 100644 index 1ad264c..0000000 --- a/.github/workflows/api.yml +++ /dev/null @@ -1,177 +0,0 @@ -name: API - End-to-End Workflow - -on: - push: - branches: - - main - paths: - - 'api/**' - pull_request: - branches: - - main - paths: - - 'api/**' - workflow_dispatch: - -env: - DOCKER_IMAGE: prasadhonrao/devcamper-api - -jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: npm install --prefix api - - - name: Run linter - run: | - export PATH=$(pwd)/api/node_modules/.bin:$PATH - npm run lint --prefix api - - dependency-check: - runs-on: ubuntu-latest - needs: lint - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: npm install --prefix api - - - name: Run dependency check - run: npm audit --audit-level=high --prefix api - - security: - runs-on: ubuntu-latest - needs: dependency-check - permissions: - actions: read - contents: read - security-events: write - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: npm install --prefix api - - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: javascript - - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - - test: - runs-on: ubuntu-latest - needs: security - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: npm install --prefix api - - - name: Run tests - run: npm test --prefix api - - code-coverage: - runs-on: ubuntu-latest - needs: test - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: npm install --prefix api - - - name: Run tests with coverage - run: npm run test --prefix api -- --coverage - - - name: Upload coverage report - uses: actions/upload-artifact@v4 - with: - name: coverage-report - path: api/coverage - - build: - runs-on: ubuntu-latest - needs: code-coverage - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Log in to Docker Hub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push Docker image - run: | - docker build -t ${{ env.DOCKER_IMAGE }}:${{ github.sha }} -f api/Dockerfile api - docker tag ${{ env.DOCKER_IMAGE }}:${{ github.sha }} ${{ env.DOCKER_IMAGE }}:latest - docker push ${{ env.DOCKER_IMAGE }}:${{ github.sha }} - docker push ${{ env.DOCKER_IMAGE }}:latest - - deploy: - runs-on: ubuntu-latest - needs: build - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: npm install --prefix api - - - name: Deploy - run: | - # Add your deployment steps here - echo "Deploying the application..." From c436046051e7449cdeb2f7be67868b468624ec59 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Mon, 16 Sep 2024 10:48:51 +0100 Subject: [PATCH 40/56] Remove YAML warning --- .github/workflows/api-cd.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/api-cd.yml b/.github/workflows/api-cd.yml index d485a9a..2a5eb67 100644 --- a/.github/workflows/api-cd.yml +++ b/.github/workflows/api-cd.yml @@ -68,7 +68,7 @@ jobs: server_port: 587 username: ${{ secrets.GMAIL_USERNAME }} password: ${{ secrets.GMAIL_PASSWORD }} - subject: ${{ job.status }}: Deployment Notification + subject: '${{ job.status }}: Deployment Notification' body: | The deployment has ${{ job.status }}! Repository: ${{ github.repository }} @@ -81,4 +81,4 @@ jobs: Run Number: ${{ github.run_number }} Logs: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} to: ${{ secrets.NOTIFY_EMAIL }} - from: ${{ secrets.GMAIL_USERNAME }} \ No newline at end of file + from: ${{ secrets.GMAIL_USERNAME }} From 11494c4eeea9e3bf8dfbfce9cda2c5bb63850328 Mon Sep 17 00:00:00 2001 From: Akanksha Date: Mon, 16 Sep 2024 15:45:49 +0530 Subject: [PATCH 41/56] devCamper logo added in base64 format --- ui/src/components/Header.jsx | 5 +++-- ui/src/img/logo/DevCamper.png | Bin 0 -> 4859 bytes 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 ui/src/img/logo/DevCamper.png diff --git a/ui/src/components/Header.jsx b/ui/src/components/Header.jsx index 1ab21f9..cf2ad60 100644 --- a/ui/src/components/Header.jsx +++ b/ui/src/components/Header.jsx @@ -5,6 +5,7 @@ import Navbar from 'react-bootstrap/Navbar'; import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser, FaSearch } from 'react-icons/fa'; import "../styles/bootstrap.css"; import { useEffect, useState } from 'react'; +import { Image } from 'react-bootstrap'; function Header() { @@ -120,8 +121,8 @@ function Header() { - - DevCamper + {/* */} + DevCamp diff --git a/ui/src/img/logo/DevCamper.png b/ui/src/img/logo/DevCamper.png new file mode 100644 index 0000000000000000000000000000000000000000..938faabd0cf551a55784919188d621cc6c6948da GIT binary patch literal 4859 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 Date: Tue, 17 Sep 2024 14:01:49 +0530 Subject: [PATCH 42/56] Made the correction (Lowercase) according to the comments. --- CONTRIBUTING.md | 2 +- SETUP.md | 4 ++-- api/_postman/prod-environment.json | 2 +- api/package.json | 10 +++++----- api/seeder.js | 2 +- ui/package.json | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2a0156c..0a37bbe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ We welcome contributions to the DevCamper project! By contributing, you can help Fork the repository on GitHub and clone your fork locally. ```sh - git clone https://github.com/your-username/DevCamper.git + git clone https://github.com/your-username/devcamper.git cd DevCamper ``` diff --git a/SETUP.md b/SETUP.md index d298394..8bb8a39 100644 --- a/SETUP.md +++ b/SETUP.md @@ -16,7 +16,7 @@ Before starting, make sure you have the following installed on your machine: ### Step 1: Clone the repository ```bash -git clone https://github.com/prasadhonrao/DevCamper +git clone https://github.com/prasadhonrao/devcamper cd DevCamper cd api ``` @@ -49,7 +49,7 @@ PORT=5000 NODE_ENV=development # Database configuration -MONGO_URI=mongodb://localhost:27017/DevCamper-dev-db +MONGO_URI=mongodb://localhost:27017/devcamper-dev-db # Geocoder configuration GEOCODER_PROVIDER=mapquest diff --git a/api/_postman/prod-environment.json b/api/_postman/prod-environment.json index 2034297..3f36bec 100644 --- a/api/_postman/prod-environment.json +++ b/api/_postman/prod-environment.json @@ -4,7 +4,7 @@ "values": [ { "key": "url", - "value": "http://DevCamper.io", + "value": "http://devcamper.io", "type": "default", "enabled": true }, diff --git a/api/package.json b/api/package.json index a18ca5d..ef072eb 100644 --- a/api/package.json +++ b/api/package.json @@ -1,7 +1,7 @@ { - "name": "DevCamper-api", + "name": "devcamper-api", "version": "1.0.0", - "description": "API for DevCamper web application", + "description": "API for devcamper web application", "main": "server.js", "type": "module", "scripts": { @@ -14,7 +14,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/prasadhonrao/DevCamper.git" + "url": "git+https://github.com/prasadhonrao/devcamper.git" }, "keywords": [ "api", @@ -26,9 +26,9 @@ "author": "Prasad Honrao", "license": "MIT", "bugs": { - "url": "https://github.com/prasadhonrao/DevCamper/issues" + "url": "https://github.com/prasadhonrao/devcamper/issues" }, - "homepage": "https://github.com/prasadhonrao/DevCamper#readme", + "homepage": "https://github.com/prasadhonrao/devcamper#readme", "dependencies": { "bcryptjs": "^2.4.3", "colors": "^1.4.0", diff --git a/api/seeder.js b/api/seeder.js index 9dd9cb5..f98f1ba 100644 --- a/api/seeder.js +++ b/api/seeder.js @@ -17,7 +17,7 @@ if (ENV === 'development') { } // Connect to MongoDB -const MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017/devCamper-db'; +const MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017/devcamper-db'; await mongoose.connect(MONGO_URI); // Read JSON files diff --git a/ui/package.json b/ui/package.json index d9bd956..bcbe6e7 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,5 +1,5 @@ { - "name": "devCamper-ui", + "name": "devcamper-ui", "version": "0.1.0", "private": true, "dependencies": { From 534a6e3f9bea51aeb2eb4df08c27ec7de76fd788 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Tue, 17 Sep 2024 10:07:47 +0100 Subject: [PATCH 43/56] Refactor Azure deployment workflow to include Azure Web App deployment --- .github/workflows/api-cd.yml | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/.github/workflows/api-cd.yml b/.github/workflows/api-cd.yml index 2a5eb67..0ae6469 100644 --- a/.github/workflows/api-cd.yml +++ b/.github/workflows/api-cd.yml @@ -10,6 +10,7 @@ on: env: DOCKER_IMAGE: prasadhonrao/devcamper-api + AZURE_WEBAPP_NAME: devcamper-api jobs: build: @@ -40,21 +41,17 @@ jobs: needs: build steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 + - name: Log in to Azure + uses: azure/login@v2 with: - node-version: '20' + creds: ${{ secrets.AZURE_CREDENTIALS }} - - name: Install dependencies - run: npm install --prefix api + - name: Deploy to Azure Web App + uses: azure/webapps-deploy@v2 + with: + app-name: ${{ env.AZURE_WEBAPP_NAME }} + images: '${{ env.DOCKER_IMAGE }}:latest' - - name: Deploy - run: | - # Add your deployment steps here - echo "Deploying the application..." notify: runs-on: ubuntu-latest needs: deploy From 4a86efe443de702bd05abc4f722e56045832a139 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Tue, 17 Sep 2024 10:10:38 +0100 Subject: [PATCH 44/56] Refactor Azure deployment workflow to update Azure Web App name --- .github/workflows/api-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/api-cd.yml b/.github/workflows/api-cd.yml index 0ae6469..30cd1ba 100644 --- a/.github/workflows/api-cd.yml +++ b/.github/workflows/api-cd.yml @@ -10,7 +10,7 @@ on: env: DOCKER_IMAGE: prasadhonrao/devcamper-api - AZURE_WEBAPP_NAME: devcamper-api + AZURE_WEBAPP_NAME: devcamperapi jobs: build: From c942469af1231fa8c2548539690666d497b7b8ea Mon Sep 17 00:00:00 2001 From: Akanksha Date: Tue, 17 Sep 2024 15:41:28 +0530 Subject: [PATCH 45/56] convert html to react -> login --- ui/src/components/login.js | 57 ++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/ui/src/components/login.js b/ui/src/components/login.js index 9275b93..e2da600 100644 --- a/ui/src/components/login.js +++ b/ui/src/components/login.js @@ -1,4 +1,5 @@ import { LuLogIn } from "react-icons/lu"; +import { Row, Col, Form, Button } from 'react-bootstrap'; function Login() { return ( @@ -15,36 +16,32 @@ function Login() { Log in to list your bootcamp or rate, review and favorite bootcamps

-
-
- - -
-
- - -
-
- -
-
-

Forgot Password? Reset Password

+
+ + + + Email Address + + + + + + Password + + + + + + +
+ +
+ +
+
+

Forgot Password? Reset Password

From 4ce671660201b865d3dbfd1fed5703efa6bd09c9 Mon Sep 17 00:00:00 2001 From: Akanksha Date: Thu, 19 Sep 2024 14:56:16 +0530 Subject: [PATCH 46/56] changes done as commented in PR --- api/routes/bootcamps.js | 2 +- ui/src/components/Header.jsx | 2 +- .../{bootcamps.js => bootcamps.jsx} | 0 ui/src/components/login.jsx | 55 +++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) rename ui/src/components/{bootcamps.js => bootcamps.jsx} (100%) create mode 100644 ui/src/components/login.jsx diff --git a/api/routes/bootcamps.js b/api/routes/bootcamps.js index 5e4527e..c5a29dd 100644 --- a/api/routes/bootcamps.js +++ b/api/routes/bootcamps.js @@ -8,7 +8,7 @@ import { getBootcampsInRadius, testGeocode, uploadBootcampPhoto, -} from '../controllers/bootcamps.js'; +} from '../controllers/bootcamps.jsx'; import advancedResults from '../middleware/advancedResults.js'; import Bootcamp from '../models/Bootcamp.js'; diff --git a/ui/src/components/Header.jsx b/ui/src/components/Header.jsx index cf2ad60..4aa4234 100644 --- a/ui/src/components/Header.jsx +++ b/ui/src/components/Header.jsx @@ -3,9 +3,9 @@ import Container from 'react-bootstrap/Container'; import Nav from 'react-bootstrap/Nav'; import Navbar from 'react-bootstrap/Navbar'; import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser, FaSearch } from 'react-icons/fa'; -import "../styles/bootstrap.css"; import { useEffect, useState } from 'react'; import { Image } from 'react-bootstrap'; +import "../styles/bootstrap.css"; function Header() { diff --git a/ui/src/components/bootcamps.js b/ui/src/components/bootcamps.jsx similarity index 100% rename from ui/src/components/bootcamps.js rename to ui/src/components/bootcamps.jsx diff --git a/ui/src/components/login.jsx b/ui/src/components/login.jsx new file mode 100644 index 0000000..e2da600 --- /dev/null +++ b/ui/src/components/login.jsx @@ -0,0 +1,55 @@ +import { LuLogIn } from "react-icons/lu"; +import { Row, Col, Form, Button } from 'react-bootstrap'; + +function Login() { + return ( + <> + {/* */} +
+
+
+
+
+
+

Login

+

+ Log in to list your bootcamp or rate, review and favorite + bootcamps +

+
+ + + + Email Address + + + + + + Password + + + + + + +
+ +
+ +
+
+

Forgot Password? Reset Password

+
+
+
+
+
+
+ + ) +} + +export default Login; \ No newline at end of file From 05341ed9fe4d454e1fcfeb1e9b34816d07d9c1d5 Mon Sep 17 00:00:00 2001 From: Akanksha Date: Thu, 19 Sep 2024 20:33:12 +0530 Subject: [PATCH 47/56] worked on register page --- ui/src/index.css | 2 +- ui/src/pages/RegisterPage.jsx | 142 +++++++++++++++++++++++++++++++++- ui/src/styles/bootstrap.css | 6 +- 3 files changed, 144 insertions(+), 6 deletions(-) diff --git a/ui/src/index.css b/ui/src/index.css index f321d6b..c8156cd 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -1,7 +1,7 @@ .nav-separator { width: 1px; height: 24px; - background-color: rgba(255, 255, 255, 0.5); + background-color: #e05433 !important; margin: 0 10px; align-self: center; } diff --git a/ui/src/pages/RegisterPage.jsx b/ui/src/pages/RegisterPage.jsx index bd7212c..9551025 100644 --- a/ui/src/pages/RegisterPage.jsx +++ b/ui/src/pages/RegisterPage.jsx @@ -1,9 +1,147 @@ -import Register from "../components/register"; +import Form from 'react-bootstrap/Form'; +import { TiUserAdd } from "react-icons/ti"; +import Button from 'react-bootstrap/Button'; const RegisterPage = () => { return ( <> - +
+
+
+
+
+
+

Register

+

+ Register to list your bootcamp or rate, review and favorite + bootcamps +

+
+ + Name + + + + Email Address + + + + Password + + + + Confirm Password + + +
+
User Role
+
+ +
+
+ +
+
+
+

+ * You must be affiliated with the bootcamp in some way in + order to add it to DevCamper. +

+ + {/*
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
User Role
+
+ + +
+
+ + +
+
+

+ * You must be affiliated with the bootcamp in some way in + order to add it to DevCamper. +

+
+ +
+
*/} +
+
+
+
+
+
); }; diff --git a/ui/src/styles/bootstrap.css b/ui/src/styles/bootstrap.css index eaa1123..05fa3b5 100644 --- a/ui/src/styles/bootstrap.css +++ b/ui/src/styles/bootstrap.css @@ -4417,11 +4417,11 @@ color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-nav .nav-link { - color: rgba(255, 255, 255, 0.5); + color: #e05433 !important; } .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { - color: rgba(255, 255, 255, 0.75); + color: #e05433 !important; } .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); @@ -6319,7 +6319,7 @@ vertical-align: text-top !important; } .bg-primary { - background-color: #e05433 !important; + background-color: #fff !important; } a.bg-primary:hover, a.bg-primary:focus, From 83c257308a271f3ff51562ae69ce597a01dd3f88 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Sun, 22 Sep 2024 20:58:41 +0200 Subject: [PATCH 48/56] Use JSX file extension for all react files. Remove unnecessary component definition. --- ui/src/App.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/src/App.js b/ui/src/App.js index c77d31f..005635a 100644 --- a/ui/src/App.js +++ b/ui/src/App.js @@ -5,7 +5,7 @@ import HomePage from './pages/HomePage'; import LoginPage from './pages/LoginPage'; import RegisterPage from './pages/RegisterPage'; import AboutPage from './pages/AboutPage'; -import BrowseBootcampsPage from './pages/BrowseBootcampsPage'; +import BootcampsPage from './pages/BootcampsPage'; function App() { return ( @@ -17,7 +17,7 @@ function App() { } /> } /> } /> - } /> + } /> From 1cb427ee2e6c41d684be43fbb7aeeb8bd47ea365 Mon Sep 17 00:00:00 2001 From: prasadhonrao Date: Sun, 22 Sep 2024 20:59:00 +0200 Subject: [PATCH 49/56] Refactor login and register pages - Remove unnecessary component definitions and imports - Update JSX file extensions for React files - Update login page to use react-bootstrap components - Update register page with additional form fields and user role options --- ui/src/components/{Layout.js => Layout.jsx} | 0 ui/src/components/bootcamps.jsx | 213 -------------------- ui/src/components/login.js | 58 ------ ui/src/components/login.jsx | 55 ----- ui/src/components/register.jsx | 106 ---------- ui/src/pages/BootcampsPage.jsx | 196 ++++++++++++++++++ ui/src/pages/BrowseBootcampsPage.jsx | 10 - ui/src/pages/LoginPage.jsx | 57 +++++- ui/src/pages/RegisterPage.jsx | 69 ++++++- 9 files changed, 312 insertions(+), 452 deletions(-) rename ui/src/components/{Layout.js => Layout.jsx} (100%) delete mode 100644 ui/src/components/bootcamps.jsx delete mode 100644 ui/src/components/login.js delete mode 100644 ui/src/components/login.jsx delete mode 100644 ui/src/components/register.jsx create mode 100644 ui/src/pages/BootcampsPage.jsx delete mode 100644 ui/src/pages/BrowseBootcampsPage.jsx diff --git a/ui/src/components/Layout.js b/ui/src/components/Layout.jsx similarity index 100% rename from ui/src/components/Layout.js rename to ui/src/components/Layout.jsx diff --git a/ui/src/components/bootcamps.jsx b/ui/src/components/bootcamps.jsx deleted file mode 100644 index bc8ebcc..0000000 --- a/ui/src/components/bootcamps.jsx +++ /dev/null @@ -1,213 +0,0 @@ -function Bootcamps(){ - return ( - <> - {/* */} -
-
-
- {/* */} -
-
-

By Location

-
-
-
-
- -
-
-
-
- -
-
-
- -
-
- -

Filter

-
- {/* */} - -
- - -
- -
- - -
- -
-
- {/* */} -
- {/* */} -
-
-
- ... -
-
-
-
- Devworks Bootcamp - 8.8 -
- Boston, MA -

- Web Development, UI/UX, Mobile Development -

-
-
-
-
- -
-
-
- ... -
-
-
-
- ModernTech Bootcamp - 7.5 -
- Boston, MA -

- Web Development, UI/UX, Mobile Development -

-
-
-
-
-
-
-
- ... -
-
-
-
- Codemasters - 9.2 -
- Burlington, VT -

- Web Development, Data Science, Marketing -

-
-
-
-
- -
-
-
- ... -
-
-
-
- DevCentral Bootcamp - 6.4 -
- Kingston, RI -

- Web Development, UI/UX, Mobile Development, Marketing -

-
-
-
-
- - {/* */} - -
-
-
-
- - ) -} - -export default Bootcamps; \ No newline at end of file diff --git a/ui/src/components/login.js b/ui/src/components/login.js deleted file mode 100644 index 9275b93..0000000 --- a/ui/src/components/login.js +++ /dev/null @@ -1,58 +0,0 @@ -import { LuLogIn } from "react-icons/lu"; - -function Login() { - return ( - <> - {/* */} -
-
-
-
-
-
-

Login

-

- Log in to list your bootcamp or rate, review and favorite - bootcamps -

-
-
- - -
-
- - -
-
- -
-
-

Forgot Password? Reset Password

-
-
-
-
-
-
- - ) -} - -export default Login; \ No newline at end of file diff --git a/ui/src/components/login.jsx b/ui/src/components/login.jsx deleted file mode 100644 index e2da600..0000000 --- a/ui/src/components/login.jsx +++ /dev/null @@ -1,55 +0,0 @@ -import { LuLogIn } from "react-icons/lu"; -import { Row, Col, Form, Button } from 'react-bootstrap'; - -function Login() { - return ( - <> - {/* */} -
-
-
-
-
-
-

Login

-

- Log in to list your bootcamp or rate, review and favorite - bootcamps -

-
- - - - Email Address - - - - - - Password - - - - - - -
- -
- -
-
-

Forgot Password? Reset Password

-
-
-
-
-
-
- - ) -} - -export default Login; \ No newline at end of file diff --git a/ui/src/components/register.jsx b/ui/src/components/register.jsx deleted file mode 100644 index a2dc65f..0000000 --- a/ui/src/components/register.jsx +++ /dev/null @@ -1,106 +0,0 @@ -function Register() { - return ( - <> - {/* */} -
-
-
-
-
-
-

Register

-

- Register to list your bootcamp or rate, review and favorite - bootcamps -

-
-
- - -
-
- - -
-
- - -
-
- - -
- -
-
User Role
-
- - -
-
- - -
-
-

- * You must be affiliated with the bootcamp in some way in - order to add it to DevCamper. -

-
- -
-
-
-
-
-
-
-
- - ) -} - -export default Register; \ No newline at end of file diff --git a/ui/src/pages/BootcampsPage.jsx b/ui/src/pages/BootcampsPage.jsx new file mode 100644 index 0000000..bdec770 --- /dev/null +++ b/ui/src/pages/BootcampsPage.jsx @@ -0,0 +1,196 @@ +const BrowseBootcampsPage = () => { + return ( +
+
+
+ {/* */} +
+
+

By Location

+
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+ +

Filter

+
+ {/* */} + +
+ + +
+ +
+ + +
+ +
+
+ {/* */} +
+ {/* */} +
+
+
+ ... +
+
+
+
+ + Devworks Bootcamp + 8.8 + +
+ Boston, MA +

Web Development, UI/UX, Mobile Development

+
+
+
+
+ +
+
+
+ ... +
+
+
+
+ + ModernTech Bootcamp + 7.5 + +
+ Boston, MA +

Web Development, UI/UX, Mobile Development

+
+
+
+
+
+
+
+ ... +
+
+
+
+ + Codemasters + 9.2 + +
+ Burlington, VT +

Web Development, Data Science, Marketing

+
+
+
+
+ +
+
+
+ ... +
+
+
+
+ + DevCentral Bootcamp + 6.4 + +
+ Kingston, RI +

Web Development, UI/UX, Mobile Development, Marketing

+
+
+
+
+ + {/* */} + +
+
+
+
+ ); +}; + +export default BrowseBootcampsPage; diff --git a/ui/src/pages/BrowseBootcampsPage.jsx b/ui/src/pages/BrowseBootcampsPage.jsx deleted file mode 100644 index 4e1856e..0000000 --- a/ui/src/pages/BrowseBootcampsPage.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react'; -import Bootcamp from '../components/bootcamps'; - -const BrowseBootcampsPage = () => { - return (<> - - ); -}; - -export default BrowseBootcampsPage; diff --git a/ui/src/pages/LoginPage.jsx b/ui/src/pages/LoginPage.jsx index 1e0fe4d..798aadc 100644 --- a/ui/src/pages/LoginPage.jsx +++ b/ui/src/pages/LoginPage.jsx @@ -1,11 +1,58 @@ -import Login from "../components/login"; - +import { LuLogIn } from 'react-icons/lu'; +import { Row, Col, Form, Button } from 'react-bootstrap'; const LoginPage = () => { return ( - <> - - +
+
+
+
+
+
+

+ Login +

+

Log in to list your bootcamp or rate, review and favorite bootcamps

+
+ + + + Email Address + + + + + + Password + + + + + + +
+ +
+ +
+
+

+ Forgot Password? Reset Password +

+
+
+
+
+
+
); }; diff --git a/ui/src/pages/RegisterPage.jsx b/ui/src/pages/RegisterPage.jsx index bd7212c..d81a172 100644 --- a/ui/src/pages/RegisterPage.jsx +++ b/ui/src/pages/RegisterPage.jsx @@ -1,10 +1,69 @@ -import Register from "../components/register"; - const RegisterPage = () => { return ( - <> - - +
+
+
+
+
+
+

+ Register +

+

Register to list your bootcamp or rate, review and favorite bootcamps

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
User Role
+
+ + +
+
+ + +
+
+

+ * You must be affiliated with the bootcamp in some way in order to add it to DevCamper. +

+
+ +
+
+
+
+
+
+
+
); }; From 09e5f5d9eb37818d847131ac618e0e859a53b20d Mon Sep 17 00:00:00 2001 From: shrushtidoshi22 Date: Tue, 24 Sep 2024 11:31:44 +0530 Subject: [PATCH 50/56] Converted html to react Addbootcamp page --- ui/package-lock.json | 4 +- ui/src/App.js | 2 + ui/src/components/Header.jsx | 38 +++++-- ui/src/pages/AddBootcampPage.jsx | 170 +++++++++++++++++++++++++++++++ 4 files changed, 202 insertions(+), 12 deletions(-) create mode 100644 ui/src/pages/AddBootcampPage.jsx diff --git a/ui/package-lock.json b/ui/package-lock.json index 8c4fc8a..be46f73 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,11 +1,11 @@ { - "name": "devCamper-ui", + "name": "devcamper-ui", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "devCamper-ui", + "name": "devcamper-ui", "version": "0.1.0", "dependencies": { "bootstrap": "^5.3.3", diff --git a/ui/src/App.js b/ui/src/App.js index 005635a..5db58bd 100644 --- a/ui/src/App.js +++ b/ui/src/App.js @@ -6,6 +6,7 @@ import LoginPage from './pages/LoginPage'; import RegisterPage from './pages/RegisterPage'; import AboutPage from './pages/AboutPage'; import BootcampsPage from './pages/BootcampsPage'; +import AddBootcampPage from './pages/AddBootcampPage'; function App() { return ( @@ -18,6 +19,7 @@ function App() { } /> } /> } /> + } /> diff --git a/ui/src/components/Header.jsx b/ui/src/components/Header.jsx index 4aa4234..0d5b56d 100644 --- a/ui/src/components/Header.jsx +++ b/ui/src/components/Header.jsx @@ -2,8 +2,9 @@ import { Link } from 'react-router-dom'; import Container from 'react-bootstrap/Container'; import Nav from 'react-bootstrap/Nav'; import Navbar from 'react-bootstrap/Navbar'; -import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser, FaSearch } from 'react-icons/fa'; +import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser, FaSearch,FaSignOutAlt } from 'react-icons/fa'; import { useEffect, useState } from 'react'; +import NavDropdown from 'react-bootstrap/NavDropdown'; import { Image } from 'react-bootstrap'; import "../styles/bootstrap.css"; @@ -12,7 +13,7 @@ function Header() { const [getHeader, SetHeader] = useState(false); useEffect(() => { - if (window.location.href.includes('browse')) { + if (window.location.href.includes('addboot')) { SetHeader(true); } else { SetHeader(false); @@ -23,7 +24,7 @@ function Header() { return ( <> {/* */} - {/* {getHeader == true ? + {/*{getHeader == true ? } */} + }*/} @@ -127,12 +128,28 @@ function Header() { } */} @@ -158,9 +158,8 @@ function Header() { - ); } -export default Header; +export default Header; \ No newline at end of file diff --git a/ui/src/pages/AddBootcampPage.jsx b/ui/src/pages/AddBootcampPage.jsx index 0c944ca..4560efb 100644 --- a/ui/src/pages/AddBootcampPage.jsx +++ b/ui/src/pages/AddBootcampPage.jsx @@ -1,5 +1,6 @@ const BrowseBootcampsPage = () => { return ( + //Addbootcamp

Add Bootcamp

From b7f24af27244351a11a3823e00772408521f8288 Mon Sep 17 00:00:00 2001 From: shrushtidoshi22 Date: Wed, 25 Sep 2024 13:43:03 +0530 Subject: [PATCH 52/56] converted addbootcamppage to react --- ui/src/App.js | 2 +- ui/src/components/Header.jsx | 33 ++++++++------------------------ ui/src/pages/AddBootcampPage.jsx | 1 - 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/ui/src/App.js b/ui/src/App.js index 9336ab6..5db58bd 100644 --- a/ui/src/App.js +++ b/ui/src/App.js @@ -19,7 +19,7 @@ function App() { } /> } /> } /> - } /> {/*Mapping*/} + } />
diff --git a/ui/src/components/Header.jsx b/ui/src/components/Header.jsx index a878c3e..d2db1c3 100644 --- a/ui/src/components/Header.jsx +++ b/ui/src/components/Header.jsx @@ -2,10 +2,9 @@ import { Link } from 'react-router-dom'; import Container from 'react-bootstrap/Container'; import Nav from 'react-bootstrap/Nav'; import Navbar from 'react-bootstrap/Navbar'; -import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode,FaSignOutAlt, FaUser, FaSearch } from 'react-icons/fa'; +import { FaGraduationCap, FaSignInAlt, FaUserPlus, FaLaptopCode, FaUser, FaSearch } from 'react-icons/fa'; import "../styles/bootstrap.css"; import { useEffect, useState } from 'react'; -import NavDropdown from 'react-bootstrap/NavDropdown'; import { Image } from 'react-bootstrap'; function Header() { @@ -13,7 +12,7 @@ function Header() { const [getHeader, SetHeader] = useState(false); useEffect(() => { - if (window.location.href.includes('addboot')) { + if (window.location.href.includes('browse')) { SetHeader(true); } else { SetHeader(false); @@ -128,28 +127,12 @@ function Header() {
- } + + )} ); } -export default Header; \ No newline at end of file +export default Header;