diff --git a/.gitignore b/.gitignore index 9d3debb..f44e799 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,7 @@ db/ .yarn/ public/*.js public/*.map +public/*.css .yarnrc.yml +.pnp* +build/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index c5c8264..c7caa24 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,7 @@ WORKDIR /usr/src/app # where available (npm@5+) COPY package*.json ./ RUN yarn +RUN yarn build # If you are building your code for production # RUN npm ci --only=production # Bundle app source diff --git a/package.json b/package.json index 019efc2..1362059 100644 --- a/package.json +++ b/package.json @@ -2,12 +2,14 @@ "name": "volp", "version": "1.0.0", "description": "Open Travel Mapper", - "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "build": "esbuild src/app.ts --bundle --outfile=public/main.js --bundle --minify --sourcemap --tsconfig=tsconfig.json", - "start": "node server.js", - "demon": "nodemon -e ts,pug --watch src --exec \"yarn build && yarn start\"" + "build": "yarn build-server && yarn build-client && yarn build-style", + "build-style": "esbuild src/style/index.css --outfile=public/index.css --bundle --minify ", + "build-client": "esbuild src/client/main.ts --outfile=public/main.js --tree-shaking=true --bundle --minify --sourcemap --tsconfig=tsconfig-client.json", + "build-server": "esbuild src/server/**/*.ts --outdir=build --platform=node --format=cjs", + "start": "node build/main.js", + "demon": "nodemon -e ts,js --watch src --watch template --watch router --exec \"yarn build && yarn start\"" }, "repository": { "type": "git", @@ -19,14 +21,13 @@ "@fastify/leveldb": "^6.0.0", "@fastify/static": "^8.0.0", "@fastify/view": "^10.0.0", - "@prettier/plugin-pug": "^3.0.0", "@types/node": "^22.13.5", - "axios": "^1.7.9", "esbuild": "^0.25.0", - "fastify": "^5.0.0", + "fastify": "^5.2.1", + "jsdom": "^26.0.0", "nodemon": "^3.0.1", - "pretier": "^0.0.1", "prettier": "^3.5.2", - "pug": "^3.0.2" + "pug": "^3.0.2", + "undici": "^7.3.0" } } diff --git a/public/css/index.css b/public/css/index.css deleted file mode 100644 index a04cbc2..0000000 --- a/public/css/index.css +++ /dev/null @@ -1,2928 +0,0 @@ -/** - * SETTINGS - */ -/** - * COMPONENTS - */ -/** - * BACKGROUND - */ -.bg-primary { - background-color: #03a9f4; -} - -.bg-dark { - background-color: #18232f; -} - -.bg-secondary { - background-color: #e91e63; -} - -.bg-white { - background-color: #fff; -} - -.bg-success { - background-color: #4caf50; -} - -.bg-info { - background-color: #5bc0de; -} - -.bg-warning { - background-color: #f0ad4e; -} - -.bg-error { - background-color: #e74c3c; -} - -.bg-gray { - background-color: #969da6; -} - -.bg-gray-light { - background-color: #eceff1; -} - -/** - * BORDER - */ -.border { - border: 1px solid #d5d9db; -} - -.border-bottom { - border-bottom: 1px solid #d5d9db; -} - -.border-left { - border-left: 1px solid #d5d9db; -} - -.border-right { - border-right: 1px solid #d5d9db; -} - -.border-top { - border-top: 1px solid #d5d9db; -} - -/** - * ALIGNERS - */ -.aligner { - display: flex; -} - -.aligner--spaceBetween { - justify-content: space-between; - width: 100%; -} - -.aligner--spaceAround { - justify-content: space-around; - width: 100%; -} - -.aligner--centerVertical { - align-items: center; -} - -.aligner--centerHoritzontal { - justify-content: center; -} - -.aligner--contentStart { - justify-content: flex-start; -} - -.aligner--contentEnd { - justify-content: flex-end; -} - -.aligner--itemTop { - align-self: flex-start; -} - -.aligner--itemBottom { - align-self: flex-end; -} - -.flex-grow, -.aligner--grow { - flex-grow: 1; -} - -/** - * FLOATS - */ -.fleft { - float: left; -} - -.fright { - float: right; -} - -.clearfix ::after { - clear: both; - content: ""; - display: table; -} - -/** - * MARGINS - */ -.m-xsmall { - margin: 4px; -} - -.mb-xsmall { - margin-bottom: 4px; -} - -.m-small { - margin: 8px; -} - -.mb-small { - margin-bottom: 8px; -} - -.m-medium { - margin: 16px; -} - -.mb-medium { - margin-bottom: 16px; -} - -.m-big { - margin: 36px; -} - -.mb-big { - margin-bottom: 36px; -} - -.m-huge { - margin: 48px; -} - -.mb-huge { - margin-bottom: 48px; -} - -.m-none { - margin: 0 !important; -} - -/** - * PADDINGS - */ -.p-small { - padding: 4px; -} - -.pb-small { - padding-bottom: 4px; -} - -.p-medium { - padding: 8px; -} - -.pb-medium { - padding-bottom: 8px; -} - -.p-big { - padding: 16px; -} - -.pb-big { - padding-bottom: 16px; -} - -.p-huge { - padding: 36px; -} - -.pb-huge { - padding-bottom: 36px; -} - -/** - * OTHERS - */ -.no-wrap { - white-space: nowrap; -} - -.overflow-hidden { - overflow: hidden; -} - -.opacity-low { - opacity: 0.5; -} - -.rounded-corners { - border-radius: 5px; -} - -.rounded { - border-radius: 100%; -} - -/** - * LAYOUT - */ -.section { - padding-bottom: 36px; - padding-top: 36px; -} - -@media (min-width: 768px) { - .section { - padding-bottom: 72px; - padding-top: 72px; - } -} - -.section + .section { - padding-top: 0; -} - -.container { - background-color: transparent; - margin: 0 auto; - max-width: 1380px; - padding-left: 12px; - padding-right: 12px; - width: 100%; -} - -@media (min-width: 768px) { - .container { - padding-left: 24px; - padding-right: 24px; - } -} - -.container-medium { - margin: 0 auto; - max-width: 944px; - padding-left: 12px; - padding-right: 12px; -} - -@media (min-width: 768px) { - .container-medium { - padding-left: 24px; - padding-right: 24px; - } -} - -.container-small { - margin: 0 auto; - max-width: 400px; - padding-left: 12px; - padding-right: 12px; -} - -@media (min-width: 768px) { - .container-small { - padding-left: 24px; - padding-right: 24px; - } -} - -/** - * TYPOGRAPHY - */ -body { - color: #272727; - font-family: "Lato", sans-serif; - font-size: 16px; - font-weight: 400; - line-height: 1.5em; -} - -a { - color: #03a9f4; - text-decoration: none; -} - -a:hover { - color: rgba(3, 169, 244, 0.8); -} - -a:focus { - color: #03a9f4; -} - -.text-huge, -.text-big, -.text-medium { - margin-bottom: 1em; -} - -.text-huge { - font-size: 36px; - line-height: 1.3em; -} - -.text-big { - font-size: 24px; - line-height: 1.3em; -} - -.text-medium { - font-size: 16px; - line-height: 1.5em; -} - -.text-small { - font-size: 12px; - line-height: 1.3em; -} - -.text-body { - font-size: 16px; - line-height: 1.5em; -} - -.text-primary { - color: #03a9f4; -} - -.text-dark { - color: #18232f; -} - -.text-secondary { - color: #e91e63; -} - -.text-white { - color: #fff; -} - -.text-success { - color: #4caf50; -} - -.text-info { - color: #5bc0de; -} - -.text-warning { - color: #f0ad4e; -} - -.text-error { - color: #e74c3c; -} - -.text-gray { - color: #969da6; -} - -.text-gray-light { - color: #eceff1; -} - -.text-light { - font-weight: 300; -} - -.text-normal { - font-weight: 400; -} - -.text-lineThrough { - text-decoration: line-through; -} - -.text-italic { - font-style: italic; -} - -.text-underline { - text-decoration: underline; -} - -.text-uppercase { - text-transform: uppercase; -} - -.text-withSubtitle { - margin-bottom: 0 !important; -} - -.text-withSubtitle + .text-huge, -.text-withSubtitle + .text-big, -.text-withSubtitle + .text-medium, -.text-withSubtitle + .text-small { - margin-top: 0.5em; -} - -h1, -h2, -h3, -h4 { - font-weight: 300; -} - -.text-center { - text-align: center; -} - -.text-right { - text-align: right; -} - -.text-left { - text-align: left; -} - -/** - * BADGE - * - * Markup: - * ------- - * - * - * - */ -.badge { - background-color: #eceff1; - border-radius: 3px; - color: #272727; - display: inline-block; - line-height: 1.2em; - padding: 8px 16px; -} - -.badge--big { - font-size: 1.3em; -} - -.badge--small { - font-size: 0.7em; -} - -.badge--primary { - background-color: #03a9f4; - color: #fff; -} - -.badge--secondary { - background-color: #e91e63; - color: #fff; -} - -.badge--dark { - background-color: #18232f; - color: #fff; -} - -.badge--light { - background-color: #969da6; - color: #fff; -} - -.badge--success { - background-color: #4caf50; - color: #fff; -} - -.badge--error { - background-color: #e74c3c; - color: #fff; -} - -.badge--warning { - background-color: #f0ad4e; - color: #fff; -} - -/** - * BUTTON - * - * Markup: - * ------- - * - * - * - * - * - */ -button { - background-color: transparent; - cursor: pointer; -} - -.button { - background-color: #03a9f4; - border: 0; - border-radius: 200px; - color: #fff; - display: inline-block; - font-family: "Lato", sans-serif; - font-size: 16px; - font-weight: 600; - line-height: 1.5em; - margin: 0 8px 16px 8px; - padding: 8px 16px; - text-align: center; - text-decoration: none; - text-transform: uppercase; - transition: opacity 0.2s ease-in-out; - white-space: nowrap; -} - -.button:focus, -.button:hover, -.button:active { - color: #fff; -} - -.button:hover { - background-color: rgba(3, 169, 244, 0.8); - color: #fff; - cursor: pointer; - text-decoration: none; -} - -.button:active { - opacity: 1; -} - -.button:first-child { - margin-left: 0; -} - -.button:last-child { - margin-right: 0; -} - -.button--big { - font-size: 24px; - padding: 16px 36px; -} - -.button--small { - font-size: 12px; - padding: 4px 16px; -} - -@media (max-width: 991px) { - .button--mobileFull { - margin-left: 0; - margin-right: 0; - width: 100%; - } -} - -.button--secondary { - background-color: #e91e63; - color: #fff; -} - -.button--secondary:hover { - background-color: rgba(233, 30, 99, 0.8); - color: #fff; -} - -.button--white { - background-color: #fff; - color: #03a9f4; -} - -.button--white:hover { - background-color: rgba(255, 255, 255, 0.8); - color: rgba(3, 169, 244, 0.8); -} - -.button--green { - background-color: #4caf50; - color: #fff; -} - -.button--green:hover { - background-color: rgba(76, 175, 80, 0.8); - color: #fff; -} - -.button--red { - background-color: #e74c3c; - color: #fff; -} - -.button--red:hover { - background-color: rgba(231, 76, 60, 0.8); - color: #fff; -} - -.button--transparent { - background-color: transparent; - color: #03a9f4; -} - -.button--transparent:active, -.button--transparent:hover, -.button--transparent:focus { - background-color: transparent; - color: rgba(3, 169, 244, 0.8); - opacity: 0.8; -} - -.button--outlined { - background-color: transparent; - border: 1px solid #d5d9db; - color: #03a9f4; -} - -.button--outlined:active, -.button--outlined:hover, -.button--outlined:focus { - background-color: transparent; - color: rgba(3, 169, 244, 0.8); - opacity: 0.8; -} - -/** - * FORMS - * - * Markup: - * --------- - *
- * - *
- * - *
- * - *
- * - *
- * - *
- * - *
- * - * - *
- * - *
- * - * - *
- */ -input, -textarea { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} - -label { - display: block; - font-weight: normal; -} - -input:-webkit-autofill { - box-shadow: 0 0 0 1000px #eceff1 inset; -} - -.textarea, -.input, -.select { - border: 1px solid #d5d9db; - border-radius: 3px; - box-shadow: none; - display: inline-block; - font-weight: normal; - margin-bottom: 20px; - overflow: hidden; -} - -.textarea :focus, -.input :focus, -.select :focus { - outline: none; -} - -.textarea.has-error, -.input.has-error, -.select.has-error { - background: #eceff1; - border: 1px solid #e74c3c; - margin-bottom: 0; -} - -.select { - background-color: #eceff1; - display: inline-block; - margin-right: 16px; - position: relative; -} - -.select:last-child { - margin-right: 0; -} - -.select-fullWidth { - display: block; - margin-left: 0; - margin-right: 0; - width: 100%; -} - -.select select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: transparent; - border: 0; - border-radius: 0; - color: #272727; - display: block; - font-size: 16px; - line-height: 1.5em; - margin: 0; - padding: 8px 16px; - padding-right: 30px; - transition: background-color 0.2s ease-in-out; - width: 100%; -} - -.select select:active, -.select select:focus { - background-color: #fbfbfc; - border: 0; - outline: none; -} - -.select select::-ms-expand { - display: none; -} - -.select::after, -.select::before { - background: #03a9f4; - content: ""; - display: block; - height: 2px; - margin-top: 2px; - position: absolute; - right: 5px; - top: 50%; - -webkit-transform-origin: 1px; - transform-origin: 1px; - width: 10px; -} - -.select::after { - -webkit-transform: rotate(-135deg); - transform: rotate(-135deg); -} - -.select::before { - -webkit-transform: rotate(-45deg); - transform: rotate(-45deg); -} - -.textarea { - background-color: #eceff1; - padding: 0; -} - -.textarea-fullWidth { - display: block; - margin-left: 0; - margin-right: 0; - width: 100%; -} - -.textarea textarea { - background: transparent; - border: 0; - color: #272727; - display: block; - font-family: "Lato", sans-serif; - font-size: 16px; - line-height: 1.5em; - margin: 0; - min-height: 120px; - padding: 8px 16px; - transition: background-color 0.2s ease-in-out; - width: 100%; -} - -.textarea textarea::-webkit-input-placeholder { - color: #969da6; -} - -.textarea textarea::-ms-input-placeholder { - color: #969da6; -} - -.textarea textarea::placeholder { - color: #969da6; -} - -.textarea textarea:focus, -.textarea textarea:active { - background-color: #fbfbfc; - border: 0; - outline: none; -} - -.checkbox { - margin-bottom: 8px; - position: relative; -} - -.checkbox input[type="checkbox"] { - display: none; -} - -.checkbox input[type="checkbox"]:checked + label::after { - -webkit-animation: checkboxAndRadioAnimation 0.25s; - animation: checkboxAndRadioAnimation 0.25s; - content: ""; - -webkit-transform: scale(1) rotate(45deg); - transform: scale(1) rotate(45deg); -} - -.checkbox input[type="checkbox"] + label { - display: block; - overflow: hidden; - padding-left: 30px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.checkbox input[type="checkbox"] + label::before { - background-color: #eceff1; - border: 1px solid #d5d9db; - border-radius: 3px; - content: ""; - display: inline-block; - height: 20px; - left: 0; - margin-top: -10px; - position: absolute; - top: 50%; - width: 20px; -} - -.checkbox input[type="checkbox"] + label::after { - border-bottom: 3px solid #03a9f4; - border-right: 3px solid #03a9f4; - display: block; - height: 12px; - left: 11px; - margin-left: -4px; - margin-top: -7px; - position: absolute; - top: 50%; - width: 7px; - z-index: 1; -} - -.radio { - margin-bottom: 8px; - position: relative; -} - -.radio input[type="radio"] { - display: none; -} - -.radio input[type="radio"]:checked + label::after { - -webkit-animation: checkboxAndRadioAnimation 0.25s; - animation: checkboxAndRadioAnimation 0.25s; - content: ""; - -webkit-transform: scale(1) rotate(45deg); - transform: scale(1) rotate(45deg); -} - -.radio input[type="radio"] + label { - display: block; - overflow: hidden; - padding-left: 30px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.radio input[type="radio"] + label::before { - background-color: #eceff1; - border: 1px solid #d5d9db; - border-radius: 20px; - content: ""; - display: inline-block; - height: 20px; - left: 0; - margin-top: -10px; - position: absolute; - top: 50%; - width: 20px; -} - -.radio input[type="radio"] + label::after { - background-color: #03a9f4; - border-radius: 20px; - display: block; - height: 10px; - left: 11px; - margin-left: -6px; - margin-top: -6px; - position: absolute; - top: 13px; - width: 10px; - z-index: 1; -} - -@-webkit-keyframes checkboxAndRadioAnimation { - 0% { - -webkit-transform: scale(0) rotate(45deg); - transform: scale(0) rotate(45deg); - } - 50% { - -webkit-transform: scale(1.5) rotate(45deg); - transform: scale(1.5) rotate(45deg); - } - 100% { - -webkit-transform: scale(1) rotate(45deg); - transform: scale(1) rotate(45deg); - } -} - -@keyframes checkboxAndRadioAnimation { - 0% { - -webkit-transform: scale(0) rotate(45deg); - transform: scale(0) rotate(45deg); - } - 50% { - -webkit-transform: scale(1.5) rotate(45deg); - transform: scale(1.5) rotate(45deg); - } - 100% { - -webkit-transform: scale(1) rotate(45deg); - transform: scale(1) rotate(45deg); - } -} - -.input-invis { - background-color: transparent !important; - margin: auto !important; - border: 0 !important; -} - -.input { - background-color: #eceff1; - margin-right: 10px; - padding: 0; - position: relative; -} - -.input :focus, -.input :active { - background-color: #fbfbfc; - border-radius: 3px; -} - -.input input, -.input textarea { - background: transparent; - border: 0; - box-shadow: none; - color: #272727; - font-size: 16px; - line-height: 1.5em; - margin: 0; - outline: none; - padding: 8px 16px; - width: 100%; -} - -.input input::-webkit-input-placeholder { - color: #969da6; -} - -.input input::-ms-input-placeholder { - color: #969da6; -} - -.input input::placeholder { - color: #969da6; -} - -.input input.small { - line-height: 1em; - padding: 0; -} - -.input-withIcon input { - padding-right: 32px; -} - -.input-icon { - fill: #969da6; - height: 16px; - margin-top: -8px; - position: absolute; - right: 16px; - top: 50%; - width: 16px; -} - -.input-fullWidth { - display: block; - margin-left: 0; - margin-right: 0; - width: 100%; -} - -/** - * FORM COLLAPSED (items in row without gap between them) - * - * Markup: - * ------- - * - *
- *
- * - *
- *
- * - *
- * - *
- **/ -.formCollapsed { - display: flex; - margin-bottom: 20px; -} - -.formCollapsed-item { - border-radius: 0 !important; - margin: 0 !important; -} - -.formCollapsed-item:first-child { - border-bottom-left-radius: 3px !important; - border-top-left-radius: 3px !important; -} - -.formCollapsed-item:last-child { - border-bottom-right-radius: 3px !important; - border-top-right-radius: 3px !important; -} - -.formCollapsed-item:not(:last-child) { - border-right: 0; -} - -.formCollapsed-itemPrimary { - flex: 1; -} - -/** - * LOADING BAR - * - * Markup: - * --------- - *
- * - */ -.loadingBar { - height: 6px; - left: 0; - overflow: hidden; - position: fixed; - right: 0; - top: 0; - width: 100%; - z-index: 1000; -} - -.loadingBar::before { - -webkit-animation: loading 2s linear infinite; - animation: loading 2s linear infinite; - background-color: #03a9f4; - content: ""; - display: block; - height: 6px; - left: -300px; - position: absolute; - width: 300px; -} - -@-webkit-keyframes loading { - from { - left: -300px; - width: 30%; - } - 50% { - width: 30%; - } - 70% { - width: 70%; - } - 80% { - left: 50%; - } - 95% { - left: 120%; - } - to { - left: 100%; - } -} - -@keyframes loading { - from { - left: -300px; - width: 30%; - } - 50% { - width: 30%; - } - 70% { - width: 70%; - } - 80% { - left: 50%; - } - 95% { - left: 120%; - } - to { - left: 100%; - } -} - -/** - * LOADING SPINNER - * - * Markup: - * --------- - *
- * - * - * - * - *
- * - */ -.loadingSpinner { - -webkit-animation: rotateLoader 4s infinite; - animation: rotateLoader 4s infinite; - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - display: block; - height: 30px; - left: 50%; - margin-left: -15px; - margin-top: -15px; - position: fixed; - top: 50%; - width: 30px; - z-index: 1000; -} - -.loadingSpinner-inner { - -webkit-animation-timing-function: ease-in-out; - animation-timing-function: ease-in-out; - background-color: #e91e63; - border-radius: 100%; - display: block; - height: 9px; - position: absolute; - width: 9px; -} - -.loadingSpinner-inner:nth-child(1) { - -webkit-animation: translateBall1 1s infinite; - animation: translateBall1 1s infinite; - left: 0; - top: 0; - -webkit-transform: translate3d(4.5px, 4.5px, 0); - transform: translate3d(4.5px, 4.5px, 0); -} - -.loadingSpinner-inner:nth-child(2) { - -webkit-animation: translateBall2 1s infinite; - animation: translateBall2 1s infinite; - right: 0; - top: 0; -} - -.loadingSpinner-inner:nth-child(3) { - -webkit-animation: translateBall3 1s infinite; - animation: translateBall3 1s infinite; - bottom: 0; - right: 0; -} - -.loadingSpinner-inner:nth-child(4) { - -webkit-animation: translateBall4 1s infinite; - animation: translateBall4 1s infinite; - bottom: 0; - left: 0; -} - -@-webkit-keyframes rotateLoader { - 0% { - -webkit-transform: rotate(0); - transform: rotate(0); - } - 25% { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - } - 50% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } - 75% { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@keyframes rotateLoader { - 0% { - -webkit-transform: rotate(0); - transform: rotate(0); - } - 25% { - -webkit-transform: rotate(90deg); - transform: rotate(90deg); - } - 50% { - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - } - 75% { - -webkit-transform: rotate(270deg); - transform: rotate(270deg); - } - 100% { - -webkit-transform: rotate(360deg); - transform: rotate(360deg); - } -} - -@-webkit-keyframes translateBall1 { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - 50% { - -webkit-transform: translate3d(4.5px, 4.5px, 0); - transform: translate3d(4.5px, 4.5px, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes translateBall1 { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - 50% { - -webkit-transform: translate3d(4.5px, 4.5px, 0); - transform: translate3d(4.5px, 4.5px, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@-webkit-keyframes translateBall2 { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - 50% { - -webkit-transform: translate3d(-4.5px, 4.5px, 0); - transform: translate3d(-4.5px, 4.5px, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes translateBall2 { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - 50% { - -webkit-transform: translate3d(-4.5px, 4.5px, 0); - transform: translate3d(-4.5px, 4.5px, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@-webkit-keyframes translateBall3 { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - 50% { - -webkit-transform: translate3d(-4.5px, -4.5px, 0); - transform: translate3d(-4.5px, -4.5px, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes translateBall3 { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - 50% { - -webkit-transform: translate3d(-4.5px, -4.5px, 0); - transform: translate3d(-4.5px, -4.5px, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@-webkit-keyframes translateBall4 { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - 50% { - -webkit-transform: translate3d(4.5px, -4.5px, 0); - transform: translate3d(4.5px, -4.5px, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -@keyframes translateBall4 { - 0% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } - 50% { - -webkit-transform: translate3d(4.5px, -4.5px, 0); - transform: translate3d(4.5px, -4.5px, 0); - } - 100% { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} - -/** - * NOTIFICATION - * - * Markup: - * ------- - * - *
Success notification
- *
Success info
- *
Success error
- *
Success warning
- * - */ -.notification { - border-radius: 3px; - color: #fff; - margin-bottom: 36px; - padding: 16px; -} - -.notification p:last-child { - margin-bottom: 0; -} - -.notification--primary { - background-color: #03a9f4; -} - -.notification--dark { - background-color: #18232f; -} - -.notification--secondary { - background-color: #e91e63; -} - -.notification--white { - background-color: #fff; -} - -.notification--success { - background-color: #4caf50; -} - -.notification--info { - background-color: #5bc0de; -} - -.notification--warning { - background-color: #f0ad4e; -} - -.notification--error { - background-color: #e74c3c; -} - -.notification--gray { - background-color: #969da6; -} - -.notification--gray-light { - background-color: #eceff1; -} - -/** - * PAGINATOR - * - * Markup: - * ------- - * - * - */ -.paginator-item { - display: inline-block; - margin-right: 4px; -} - -.paginator-itemLink { - background-color: #eceff1; - border-radius: 3px; - display: block; - padding: 8px 16px; -} - -.paginator-itemLink.is-active { - background-color: #03a9f4; - color: #fff; - cursor: default; -} - -/** - * TABLE - * - * Markup: - * ------- - * - * - * - * - * - * - * - * - * Blue - * One - * My life fades - * - *
First columnSecond columnThird column
- * - */ -.table { - background-color: #eceff1; - border: 1px solid #d5d9db; - border-collapse: collapse; - color: #272727; - max-width: 100%; - width: 100%; -} - -.table th, -.table td { - border-bottom: 1px solid #d5d9db; - padding: 8px; - position: relative; -} - -.table thead { - border-bottom: 1px solid #d5d9db; -} - -.table th { - background-color: #fff; - color: #969da6; - font-size: 12px; - font-weight: normal; - padding: 8px; - white-space: nowrap; -} - -/** - * TABLE RESPONSIVE - * - * Markup: - * ------- - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
First columnSecond columnThird column
BlueOneMy life fades
GreenTwo - * when the world was powered by the black fuel... and the desert - * sprouted great cities of pipe and steel. - *
YellowThree - * A whirlwind of looting, a firestorm of fear. - *
- * - */ -.table--responsive th { - display: none; -} - -.table--responsive td { - display: block; -} - -@media (max-width: 767px) { - .table--responsive td { - border: 0; - } -} - -.table--responsive td::before { - color: #969da6; - content: attr(data-th) ": "; - display: block; - font-weight: normal; -} - -@media (min-width: 576px) { - .table--responsive td::before { - display: none; - } -} - -.table--responsive td:first-child { - border-top: 1px solid #d5d9db; -} - -.table--responsive th, -.table--responsive td { - text-align: left; -} - -@media (min-width: 576px) { - .table--responsive th, - .table--responsive td { - border-top: 1px solid #d5d9db; - display: table-cell; - } -} - -/** - * TABS - * - * Markup: - * ------- - * - *
- * [...] - * [...] - *
- * - */ -.tabs { - border-bottom: 1px solid #d5d9db; - text-align: center; -} - -.tabs-item { - border-bottom: 3px solid transparent; - color: #969da6; - display: inline-block; - margin: 0 16px 0 0; - min-width: 70px; - padding: 16px; - position: relative; -} - -.tabs-item:hover { - color: #03a9f4; - text-decoration: none; -} - -.tabs-item.is-selected { - border-bottom: 3px solid #03a9f4; - color: #03a9f4; -} - -/** - * TAG - * - * Markup: - * ------- - * - * - * - * - * - */ -.tag { - background-color: #eceff1; - border-radius: 3px 0 0 3px; - color: #272727; - display: inline-block; - line-height: 16px; - margin: 0 16px 16px 0; - padding: 8px; - position: relative; -} - -.tag::before { - border-bottom: 16px solid transparent; - border-left: 8px solid #eceff1; - border-top: 16px solid transparent; - content: ""; - height: 0; - position: absolute; - right: -8px; - top: 0; - width: 0; -} - -.tag::after { - background: #fff; - border-radius: 100%; - content: ""; - height: 5px; - margin-top: -2.5px; - position: absolute; - right: -2.5px; - top: 50%; - width: 5px; -} - -.container { - width: 100%; - padding-right: 12px; - padding-left: 12px; - 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: 12px; - padding-left: 12px; - margin-right: auto; - margin-left: auto; -} - -.row { - display: flex; - flex-wrap: wrap; - margin-right: -12px; - margin-left: -12px; -} - -.no-gutters { - margin-left: 0; - margin-right: 0; -} - -.no-gutters > .col, -.no-gutters > [class*="col-"] { - padding-left: 0; - padding-right: 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%; - min-height: 1px; - padding-right: 12px; - padding-left: 12px; -} - -.col { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; -} - -.col-auto { - flex: 0 0 auto; - width: auto; - max-width: none; -} - -.col-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; -} - -.col-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; -} - -.col-3 { - flex: 0 0 25%; - max-width: 25%; -} - -.col-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; -} - -.col-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; -} - -.col-6 { - flex: 0 0 50%; - max-width: 50%; -} - -.col-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; -} - -.col-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; -} - -.col-9 { - flex: 0 0 75%; - max-width: 75%; -} - -.col-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; -} - -.col-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; -} - -.col-12 { - flex: 0 0 100%; - max-width: 100%; -} - -.order-first { - order: -1; -} - -.order-1 { - order: 1; -} - -.order-2 { - order: 2; -} - -.order-3 { - order: 3; -} - -.order-4 { - order: 4; -} - -.order-5 { - order: 5; -} - -.order-6 { - order: 6; -} - -.order-7 { - order: 7; -} - -.order-8 { - order: 8; -} - -.order-9 { - order: 9; -} - -.order-10 { - order: 10; -} - -.order-11 { - order: 11; -} - -.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 { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .col-sm-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-sm-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .col-sm-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .col-sm-3 { - flex: 0 0 25%; - max-width: 25%; - } - .col-sm-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .col-sm-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .col-sm-6 { - flex: 0 0 50%; - max-width: 50%; - } - .col-sm-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .col-sm-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .col-sm-9 { - flex: 0 0 75%; - max-width: 75%; - } - .col-sm-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .col-sm-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .col-sm-12 { - flex: 0 0 100%; - max-width: 100%; - } - .order-sm-first { - order: -1; - } - .order-sm-1 { - order: 1; - } - .order-sm-2 { - order: 2; - } - .order-sm-3 { - order: 3; - } - .order-sm-4 { - order: 4; - } - .order-sm-5 { - order: 5; - } - .order-sm-6 { - order: 6; - } - .order-sm-7 { - order: 7; - } - .order-sm-8 { - order: 8; - } - .order-sm-9 { - order: 9; - } - .order-sm-10 { - order: 10; - } - .order-sm-11 { - order: 11; - } - .order-sm-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 { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .col-md-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-md-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .col-md-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .col-md-3 { - flex: 0 0 25%; - max-width: 25%; - } - .col-md-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .col-md-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .col-md-6 { - flex: 0 0 50%; - max-width: 50%; - } - .col-md-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .col-md-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .col-md-9 { - flex: 0 0 75%; - max-width: 75%; - } - .col-md-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .col-md-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .col-md-12 { - flex: 0 0 100%; - max-width: 100%; - } - .order-md-first { - order: -1; - } - .order-md-1 { - order: 1; - } - .order-md-2 { - order: 2; - } - .order-md-3 { - order: 3; - } - .order-md-4 { - order: 4; - } - .order-md-5 { - order: 5; - } - .order-md-6 { - order: 6; - } - .order-md-7 { - order: 7; - } - .order-md-8 { - order: 8; - } - .order-md-9 { - order: 9; - } - .order-md-10 { - order: 10; - } - .order-md-11 { - order: 11; - } - .order-md-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 { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .col-lg-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-lg-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .col-lg-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .col-lg-3 { - flex: 0 0 25%; - max-width: 25%; - } - .col-lg-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .col-lg-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .col-lg-6 { - flex: 0 0 50%; - max-width: 50%; - } - .col-lg-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .col-lg-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .col-lg-9 { - flex: 0 0 75%; - max-width: 75%; - } - .col-lg-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .col-lg-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .col-lg-12 { - flex: 0 0 100%; - max-width: 100%; - } - .order-lg-first { - order: -1; - } - .order-lg-1 { - order: 1; - } - .order-lg-2 { - order: 2; - } - .order-lg-3 { - order: 3; - } - .order-lg-4 { - order: 4; - } - .order-lg-5 { - order: 5; - } - .order-lg-6 { - order: 6; - } - .order-lg-7 { - order: 7; - } - .order-lg-8 { - order: 8; - } - .order-lg-9 { - order: 9; - } - .order-lg-10 { - order: 10; - } - .order-lg-11 { - order: 11; - } - .order-lg-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 { - flex-basis: 0; - flex-grow: 1; - max-width: 100%; - } - .col-xl-auto { - flex: 0 0 auto; - width: auto; - max-width: none; - } - .col-xl-1 { - flex: 0 0 8.33333%; - max-width: 8.33333%; - } - .col-xl-2 { - flex: 0 0 16.66667%; - max-width: 16.66667%; - } - .col-xl-3 { - flex: 0 0 25%; - max-width: 25%; - } - .col-xl-4 { - flex: 0 0 33.33333%; - max-width: 33.33333%; - } - .col-xl-5 { - flex: 0 0 41.66667%; - max-width: 41.66667%; - } - .col-xl-6 { - flex: 0 0 50%; - max-width: 50%; - } - .col-xl-7 { - flex: 0 0 58.33333%; - max-width: 58.33333%; - } - .col-xl-8 { - flex: 0 0 66.66667%; - max-width: 66.66667%; - } - .col-xl-9 { - flex: 0 0 75%; - max-width: 75%; - } - .col-xl-10 { - flex: 0 0 83.33333%; - max-width: 83.33333%; - } - .col-xl-11 { - flex: 0 0 91.66667%; - max-width: 91.66667%; - } - .col-xl-12 { - flex: 0 0 100%; - max-width: 100%; - } - .order-xl-first { - order: -1; - } - .order-xl-1 { - order: 1; - } - .order-xl-2 { - order: 2; - } - .order-xl-3 { - order: 3; - } - .order-xl-4 { - order: 4; - } - .order-xl-5 { - order: 5; - } - .order-xl-6 { - order: 6; - } - .order-xl-7 { - order: 7; - } - .order-xl-8 { - order: 8; - } - .order-xl-9 { - order: 9; - } - .order-xl-10 { - order: 10; - } - .order-xl-11 { - order: 11; - } - .order-xl-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%; - } -} - -/** - * Demo website styles - */ -body { - padding-top: 60px; -} - -@media (min-width: 576px) { - body { - padding-top: 80px; - } -} - -.anchor { - display: block; - position: relative; - top: -65px; - visibility: hidden; -} - -.main-logo { - width: 150px; - fill: #03a9f4; -} - -@media (max-width: 767px) { - .main-logo { - width: 100px; - } -} - -@media screen and (max-width: 550px) { - .example-image { - width: 50px; - } -} - -.examples { - width: 100%; -} - -.example1, -.example2 { - background-color: #eceff1; - display: inline-block; - max-width: 300px; - padding: 16px; - text-align: center; -} - -@media screen and (max-width: 550px) { - .example1, - .example2 { - max-width: 100%; - } - .example1 img, - .example2 img { - width: 100% !important; - } -} - -.language-js { - font-size: 14px; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background-color: #eceff1 !important; -} - -pre { - margin-bottom: 2em !important; - overflow-x: auto; -} - -.example-code { - max-width: 700px; -} - -.example-code pre[class*="language-"] { - font-size: 14px; - margin: 0 !important; -} - -.token.tag { - background-color: transparent; - border-radius: 0; - color: #905; - line-height: auto; - margin: 0; - padding: 0; -} - -.token.tag:before, -.token.tag:after { - display: none; -} - -.token.operator { - background: none !important; -} - -.header { - background-color: #fff; - z-index: 2000; -} - -@media (min-width: 576px) { - .header { - padding: 16px 0; - } -} - -.header.is-visible { - top: 0; -} - -.header-inner { - align-items: center; - display: flex; - justify-content: space-between; -} - -.header-logo { - align-items: center; - display: flex; - flex-shrink: 0; - position: relative; -} - -.header-logoImage { - margin-right: 8px; -} - -@media (min-width: 576px) { - .header-logoImage { - margin-right: 8px; - } -} - -.header-nav { - align-items: center; - display: flex; - margin: 0; - margin-right: -12px; - overflow-x: auto; - padding: 20px 16px 20px 8px; - white-space: nowrap; -} - -@media (min-width: 576px) { - .header-nav { - margin-right: 0; - padding: 0; - } -} - -.header-navItem { - margin: 0; - margin-right: 16px; -} - -.header-navItem:last-child { - margin-right: 0; -} - -@media (max-width: 767px) { - .hide-small { - display: none; - } -} - -[v-cloak] { - display: none; -} - -/** - * Reset - */ -html, -body, -body, -div, -span, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -abbr, -address, -cite, -code, -del, -dfn, -em, -ins, -kbd, -q, -samp, -small, -strong, -sub, -sup, -var, -b, -i, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td, -article, -aside, -figure, -footer, -header, -hgroup, -menu, -nav, -section, -time, -mark, -audio, -video { - background: transparent; - border: 0; - font-size: 100%; - margin: 0; - outline: 0; - padding: 0; - vertical-align: baseline; -} - -article, -aside, -figure, -footer, -header, -main, -nav, -section { - display: block; -} - -*, -*:before, -*:after { - box-sizing: border-box; -} - -/** - * MAIN RULES - */ -*, -*::after, -*::before { - box-sizing: border-box; - outline: none; -} - -body { - background-color: #fff; - min-height: 100%; - overflow-x: hidden; - position: relative; -} - -p { - font-weight: normal; - margin-bottom: 1.5em; -} - -img { - max-width: 100%; -} - -strong { - font-weight: 600; -} - -ul { - margin-bottom: 1em; -} - -li { - list-style: none; - margin-bottom: 0.5em; -} - -.leaflet-popup-close-button { - visibility: hidden; -} - -.p-abs { - position: absolute; -} - -.list-group { - overflow: auto; - white-space: nowrap; - scrollbar-width: none; - padding: 1rem 0rem; -} - -.list-group-item { - border: 1px solid rgba(0, 0, 0, 0.125); - display: inline-block; - position: relative; -} - -.list-group-item div { - display: block; - padding: 0.5rem 1.5rem; -} diff --git a/router/api.js b/router/api.js deleted file mode 100644 index 1d8e13a..0000000 --- a/router/api.js +++ /dev/null @@ -1,103 +0,0 @@ -const axios = require("axios"); - -module.exports = (fastify, opts, done) => { - fastify.get("/flight/:id", async (req, reply) => { - const ENDPOINT = "https://www.flightradar24.com/v1/search/web/find"; - const FORMAT = "-"; - if (req.params.id) { - axios - .get(ENDPOINT, { - params: { - format: FORMAT, - query: req.params.id, - limit: 16, - type: "schedule", - }, - }) - .then((res) => reply.send(res.data)); - } else { - return reply.send([]); - } - return reply; - }); - fastify.get("/place/:id", async (req, reply) => { - const ENDPOINT = "https://nominatim.openstreetmap.org/"; - const FORMAT = "jsonv2"; - if (req.params.id) { - axios - .get(ENDPOINT, { - params: { - format: FORMAT, - q: req.params.id, - }, - }) - .then((res) => reply.send(res.data)); - } else { - return reply.send([]); - } - return reply; - }); - - fastify.get("/gpx/:id", async (req, reply) => { - if (req.params.id == undefined) - return reply.code(400).send({ error: "No ID query parameter" }); - - fastify.level.db.get(req.params.id, (err, val) => { - if (err) { - console.warn(err); - reply.code(500).send(); - } else { - let file = '' - const data = JSON.parse(val); - const gen_wpt = (name,desc,latlon,icon="Flag") => `0${name}-${desc}${icon}` - const esc_str = (str) => (str||"Undefined").replace('"',""").replace("'","'").replace("<","<").replace(">",">").replace("&","&").replace("\n","...") - data.main.forEach(a => { - file+= gen_wpt(esc_str(a.hotel.name), esc_str(a.hotel.notes), a.hotel.latlon, icon="Hotel"); - a.places.restaurants.forEach(b => { - file+= gen_wpt(esc_str(b.name), esc_str(b.notes), b.latlon, icon="Restaurant"); - }); - a.places.activities.forEach(b => { - file+= gen_wpt(esc_str(b.name), esc_str(b.notes), b.latlon, icon="Tree"); - }); - }); - file+=""; - reply.header('Content-Type', 'application/gpx+xml'); - reply.header('Content-Disposition', `attachment; filename=${req.params.id}.gpx`); - reply.send(file); - } - }); - return reply; - }); - - fastify.get("/:id", async (req, reply) => { - if (req.params.id == undefined) - return reply.code(400).send({ error: "No ID query parameter" }); - - fastify.level.db.get(req.params.id, (err, val) => { - if (err) { - console.warn(err); - reply.code(500).send(); - } else { - reply.send(JSON.parse(val)); - } - }); - return reply; - }); - - fastify.post("/:id", async (req, reply) => { - if (req.params.id == undefined) - return reply.code(400).send({ error: "No ID query parameter" }); - - fastify.level.db.put(req.params.id, JSON.stringify(req.body), (err) => { - if (err) { - console.warn(err); - reply.code(500).send({ error: "Error with DB" }); - } else { - reply.send({ content: "ok" }); - } - }); - return reply; - }); - - done(); -}; diff --git a/server.js b/server.js deleted file mode 100644 index bffdc7c..0000000 --- a/server.js +++ /dev/null @@ -1,35 +0,0 @@ -const fastify = require("fastify")(); //{ logger: true }); -const path = require("path"); - -fastify.register(require("@fastify/static"), { - root: path.join(__dirname, "public"), - prefix: "/public/", -}); - -fastify.register( - require("@fastify/leveldb"), - { - name: "db", - }, - (err) => { - if (err) throw err; - } -); - -fastify.register(require("@fastify/view"), { - engine: { - pug: require("pug"), - }, -}); - -fastify.register(require("./router/api"), { prefix: "/api" }); - -fastify.get("/", (req, reply) => reply.view("/template/home.pug")); -fastify.get("/:id", (req, reply) => reply.view("/template/journey.pug")); -fastify.get("/view/:id", (req, reply) => reply.view("/template/view.pug")); -fastify.get("/short/:id", (req, reply) => reply.view("/template/short.pug")); - -fastify.listen({ port: 8080, host: "0.0.0.0" }, (err, address) => { - if (err) throw err; - console.log("Listening on", address); -}); diff --git a/src/api.ts b/src/api.ts deleted file mode 100644 index f13157f..0000000 --- a/src/api.ts +++ /dev/null @@ -1,122 +0,0 @@ -import axios from "axios"; - -export const load = (id: string) => - axios.get("/api/" + id).then((response) => { - if (response.data == "") throw "Invalid Journey Data Received"; - let res = response.data; - - for (let e of res.main) { - if (e.dateRange) { - e.dateRange[0] = new Date(e.dateRange[0]); - e.dateRange[1] = new Date(e.dateRange[1]); - } - e.step_title = e.step_title || []; - } - return res; - }); - -export const save = (id: string, v: string) => - axios - .post("/api/" + id, v) - .then((response) => { - console.log("Saved..."); - }) - .catch((error) => { - console.warn("Error! Could not reach the API."); - }); - -export const query_nominatim = ( - q: string, - f: (v: string) => Boolean = () => true, -) => - axios - .get("/api/place/" + q) - .then((res) => res.data) - .then((res) => res.filter(f)); - -export const query_flight = (q: string) => - axios.get("/api/flight/" + q).then((res) => res.data); - -type NominatimResult = { - type: string; - category: string; - display_name: string; // DEBUG ONLY -}; - -export const is_restauration_type = (e: NominatimResult) => - ["restaurant", "cafe", "pub", "bar", "fast_food", "food_court"].indexOf( - e.type, - ) != -1; - -export const is_attraction_type = (e: NominatimResult): boolean => - [ - "tourism", - "leisure", - "place", - "amenity", - "highway", - "historic", - "natural", - "waterway", - ].indexOf(e.category) != -1 || - [ - "place_of_worship", - "national_park", - "nature_reserve", - "protected_area", - ].indexOf(e.type) != -1; - -export const icon_type = (item: NominatimResult): string => { - let t = item.type; - let c = item.category; - const arr = ["restaurant", "cafe", "pub", "bar", "fast_food", "food_court"]; - if (arr.indexOf(t) != -1) { - return "utensils"; - } else if (t == "hotel" || t == "hostel" || t == "guest_house") { - return "bed"; - } else if (t == "museum" || c == "historic" || t == "place_of_worship") { - return "landmark"; - } else if (t == "peak" || t == "viewpoint") { - return "mountain"; - } else if (t == "parking") { - return "parking"; - } else if ( - t == "water" || - t == "river" || - t == "lake" || - t == "torrent" || - t == "aquarium" - ) { - return "water"; - } else if (t == "community_centre" || t == "locality") { - return "building"; - } else if (t == "attraction") { - return "landmark"; - } else if (t == "information" || t == "university") { - return "landmark"; - } else if (t == "bridge") { - return "archway"; - } else if ( - t == "woodland" || - t == "shieling" || - t == "national_park" || - t == "zoo" || - t == "park" || - t == "garden" || - 0 - ) { - return "tree"; - } else if (t == "water_park" || t == "theme_park") { - return "dice-five"; - } else if ( - t == "?" || - t == "neighbourhood" || - t == "quarter" || - c == "highway" - ) { - return ""; - } else { - console.log(item.display_name, item.category, item.type); - return "question"; - } -}; diff --git a/src/app.ts b/src/app.ts deleted file mode 100644 index 524306e..0000000 --- a/src/app.ts +++ /dev/null @@ -1,13 +0,0 @@ -import "./types/ext"; -import "./api"; -import "./old.js"; - -console.log("TEST"); - -if (false) { - console.log("B"); -} - -function test() { - console.log("CC"); -} diff --git a/src/client/api.ts b/src/client/api.ts new file mode 100644 index 0000000..a1dee6b --- /dev/null +++ b/src/client/api.ts @@ -0,0 +1,152 @@ +export const throttle = (func: () => void, wait: number) => { + var lastTime = 0; + var timeoutId: ReturnType | undefined; + var lastArgs: any[]; + + return function (...args: any[]) { + const now = Date.now(); + lastArgs = args; + + if (timeoutId) clearTimeout(timeoutId); + timeoutId = undefined; + if (now - lastTime >= wait) { + lastTime = now; + func.apply(this, lastArgs); + } else { + timeoutId = setTimeout( + () => { + lastTime = Date.now(); + func.apply(this, lastArgs); + }, + wait - (now - lastTime) + ); + } + }; +}; + +export const load = (id: string) => + fetch("/api/" + id) + .then((res) => { + if (!res.ok) throw new Error("Error " + res.statusText); + return res.json(); + }) + .then((res) => { + for (let e of res.main) { + if (e.date_range) { + e.date_range[0] = new Date(e.date_range[0]); + e.date_range[1] = new Date(e.date_range[1]); + } + e.day_title = e.day_title || []; + } + return res; + }); + +export const save = (id: string, v: journey) => + fetch("/api/" + id, { method: "post", body: JSON.stringify(v) }) + .then((res) => { + if (!res.ok) throw new Error("Error " + res.statusText); + return res.json(); + }) + .then((_res) => { + console.log("Saved..."); + }); + +export const query_nominatim = ( + q: string, + bb: any, + f: (v: string) => Boolean = () => true +) => { + if (q.length == 0) return Promise.resolve([]) + let url = new URL("/api/place/" + q, window.location.origin); + url.searchParams.append("id", q); + url.searchParams.append("bb", JSON.stringify(bb)); + return fetch(url) + .then((res) => (res.status == 200 ? res.json() : [])) + .then((res) => res.filter(f)); +}; + +export const query_flight = (q: string) => + fetch("/api/flight/" + q).then((res) => res.json()); + +type NominatimResult = { + type: string; + category: string; + display_name: string; // DEBUG ONLY +}; + +export const is_restauration_type = (e: NominatimResult) => + ["restaurant", "cafe", "pub", "bar", "fast_food", "food_court"].indexOf( + e.type + ) != -1; +export const is_attraction_type = (e: NominatimResult): boolean => + [ + "tourism", + "leisure", + "place", + "amenity", + // "highway", + "historic", + "natural", + "waterway", + ].indexOf(e.category) != -1 || + [ + "place_of_worship", + "national_park", + "nature_reserve", + "protected_area", + ].indexOf(e.type) != -1 || is_travel_type(e); + +export const is_hotel_type = (e: NominatimResult): boolean => + ["hotel", "hostel", "guest_house"].indexOf(e.type) != -1 +export const is_travel_type = (e: NominatimResult): boolean => + ["bus_stop", "tram_stop", "station", , "aerodrome", "parking"].indexOf(e.type) != -1 + + +export const icon_type = (item: string | NominatimResult): string => { + if (typeof (item) == "string") { + return item + } + let t = item.type; + let c = item.category; + let types = { + utensils: [ + "restaurant", + "cafe", + "pub", + "bar", + "fast_food", + "food_court", + ], + bed: ["hotel", "hostel", "guest_house"], + landmark: [ + "museum", + "historic", + "place_of_worship", + "attraction", + "information", + "university", "science_park", "theatre", "opera" + ], + mountain: ["peak", "viewpoint"], + parking: ["parking"], + water: ["water", "river", "lake", "torrent", "aquarium"], + building: ["community_center", "locality"], + archway: ["bridge"], + tree: [ + "woodland", + "shieling", + "national_park", + "park", + "zoo", + "garden", + "nature_reserve", + ], + "dice-five": ["water_park", "theme_park", "casino"], + "": ["?", "neighbourhood", "quarter", "highway"], + }; + + for (let k in types) { + if (types[k].indexOf(t) >= 0 || types[k].indexOf(c) >= 0) return k; + } + console.log(item.display_name, item.category, item.type); + return "question"; +}; diff --git a/src/client/main.ts b/src/client/main.ts new file mode 100644 index 0000000..9c35ce8 --- /dev/null +++ b/src/client/main.ts @@ -0,0 +1,4 @@ +import "./types/ext"; +import "./types/format"; +import "./api"; +import "./old"; diff --git a/src/client/old.js b/src/client/old.js new file mode 100644 index 0000000..419b1dd --- /dev/null +++ b/src/client/old.js @@ -0,0 +1,291 @@ + +import * as api from "./api"; +import journey_wrapper from "./types/wrapper"; +import { migrator } from "./types/migration"; +import { getGeoLine } from "./types/geom"; + +Vue.component("l-map", window.Vue2Leaflet.LMap); +Vue.component("l-tile-layer", window.Vue2Leaflet.LTileLayer); +Vue.component("l-marker", window.Vue2Leaflet.LMarker); +Vue.component("l-icon", window.Vue2Leaflet.LIcon); +Vue.component("l-popup", window.Vue2Leaflet.LPopup); +Vue.component("l-tooltip", window.Vue2Leaflet.LTooltip); +Vue.component("l-polyline", window.Vue2Leaflet.LPolyline); +Vue.component("l-control-scale", window.Vue2Leaflet.LControlScale); + +const app = new Vue({ + el: "#app", + data: { + edit_active: ["view", "short"].indexOf(window.location.pathname.split("/")[1]) == -1, + journey: new journey_wrapper(window.location.pathname.split("/").pop() || String.gen_id(16)), + map_override: { active: false, elements: [] }, + query: { + type: "", res: [], load: false, sub: false, note: false, drawer: false, + }, + leg_nav: { + scrollInterval: null, + scrollDir: null + }, + impexp: "", + lang: { + format: "ddd D MMM", + formatLocale: { + firstDayOfWeek: 1, + }, + monthBeforeYear: true, + }, + }, + methods: { + start_journey: function () { window.location.href = "/" + this.journey.id }, + + compute_bb: function () { + if (!this.$refs.map) return undefined + const bounds = this.$refs.map.mapObject.getBounds(); + return [[bounds.getSouthWest().lng, bounds.getSouthWest().lat], + [bounds.getNorthEast().lng, bounds.getNorthEast().lat]] + }, + generate_rotation: function (index, list) { + if (index < 0 || index >= list.length) return 0; + const c0 = list[(index == 0) ? index : (index - 1)] + const c1 = list[(index == list.length - 1) ? index : (index + 1)] + const brng = Math.atan2(c1[1] - c0[1], c1[0] - c0[0]); + return `rotate:${brng - Math.PI / 2}rad`; + + }, + generate_marker: function (item, fcolor) { + return ` +
+ + + + ` + }, + generate_icon: function (item, fcolor = "", styling = "", classes = "") { + return ``; + }, + + + import_data: function () { + this.journey.data = Object.assign( + {}, + JSON.parse(this.impexp.toDecoded()), + ); + this.journey.data.main.forEach((e) => { + if (e.date_range) { + e.date_range[0] = new Date(e.date_range[0]); + e.date_range[1] = new Date(e.date_range[1]); + } + }); + }, + export_data: function () { + this.impexp = JSON.stringify(this.journey.data).toEncoded(); + }, + filter_selected: function (list, step) { + return list.filter((e) => + step ? e.step == this.journey.sel_day : e.step >= 0, + ); + }, + filter_unselected: function (list) { + return list.filter((e) => e.step == undefined || e.step < 0); + }, + remove_item: function (list, idx) { + list[idx].step = -1; + list.splice(idx, 1); + }, + log: function (e) { + console.log(e); + }, + place_delete: function (f, idx) { + switch (f) { + case "hotel": return this.journey.leg_get().hotel = null; + case "restaurant": return this.journey.leg_get().places.restaurants.splice(idx, 1); + case "activities": return this.journey.leg_get().places.activities.splice(idx, 1); + case "other": return; + case "flight": return this.journey.leg_get().travel.splice(idx, 1); + default: return true; + } + }, + get_filter: function (f) { + switch (f) { + case "hotel": return api.is_hotel_type; + case "restaurant": return api.is_restauration_type; + case "place": return api.is_attraction_type; + case "other": + default: return () => true; + } + }, + + search_nominatim: function (f) { + return (q) => api.query_nominatim(q, this.compute_bb(), this.get_filter(f)).catch((_err) => []).then((r) => { + r.forEach((rr) => { + rr.latlon = [parseFloat(rr.lat), parseFloat(rr.lon)]; + rr.sname = rr.display_name.split(",")[0]; + }); + r = r.filter(e => { + if (this.journey.leg_get().hotel && this.journey.leg_get().hotel.osm_id == e.osm_id) return false; + if (this.journey.leg_get().places.restaurants.find(i => i.osm_id == e.osm_id)) return false; + if (this.journey.leg_get().places.activities.find(i => i.osm_id == e.osm_id)) return false; + return true + }) + this.query.load = false; + this.query.res = r; + return r + }); + }, + search_travel: function (f) { + return (q) => api.query_flight(q).then((r) => { + r.forEach(el => { + el.path = getGeoLine( + { lat: el.from_geo.lat, lng: el.from_geo.lon }, + { lat: el.to_geo.lat, lng: el.to_geo.lon }, { dist: 2_500_000 }).map(v => [v.lat, v.lng]) + el.type = "flight"; + }); + r = r.filter(e => { + if (this.journey.leg_get().travel.find(i => `${i.from}->${i.to}` == `${e.from}->${e.to}`)) return false; + return true + }) + this.query.load = false; + this.query.res = r; + return r; + }); + }, + + drawer_hover_item: function (item) { + if (item) { + this.map_override.active = true + if (item.type == 'flight') { + this.map_override.elements = [[item.from_geo.lat, item.from_geo.lon], [item.to_geo.lat, item.to_geo.lon]] + } else { + this.map_override.elements = [[item.lat, item.lon]] + } + } else { + this.map_override.active = false + } + }, + + drawer_click_item: function (item) { + const tpe = this.query.type; + this.query.res = []; + this.query.note = false; + this.query.type = null; + this.query.drawer = item ? true : false; + setTimeout(() => this.$refs.map.mapObject.invalidateSize(), 500); + this.query.sub = false; + this.drawer_hover_item() + if (item) { + item.step = -1; + switch (tpe) { + case 'hotel': return this.journey.leg_get().hotel = item; + case 'restaurant': return this.journey.leg_get().places.restaurants.push(item); + case 'place': return this.journey.leg_get().places.activities.push(item); + case 'other': return; + case 'flight': return this.journey.leg_get().travel.push(item); + } + } + }, + + search_active: function (q) { + const txt = q.target.value + this.query.load = true; + switch (this.query.type) { + case 'hotel': return this.search_hotel(txt); + case 'restaurant': return this.search_restaurant(txt); + case 'place': return this.search_place(txt); + case 'other': return this.search_other(txt); + case 'flight': return this.search_flight(txt); + } + }, + + search_enable: function (f) { + this.query.drawer = true; + setTimeout(() => this.$refs.map.mapObject.invalidateSize(), 500); + if (f == "notes") { + this.query.note = true; + this.query.type = null; + const query_in = document.getElementById('query_note') + setTimeout(() => query_in.focus(), 500); + return; + } + this.query.note = false; + this.query.type = f; + const query_in = document.getElementById('query_input') + setTimeout(() => query_in.focus(), 500); + this.search_active({ target: query_in }) + }, + + + sideScroll: function (element, direction, speed, step) { + this.leg_nav.scrollDir = direction + if (direction == 'none') return; + this.leg_nav.scrollInterval = setInterval(() => { + element.scrollLeft += (direction == 'left') ? -step : step; + }, speed); + }, + + keyboardEvent(e) { + if (e.which === 13) { + } + }, + nav_mousemove(e) { + const c = document.querySelector('.scroll-content') + const left = e.pageX - c.getBoundingClientRect().left; + const newDir = + left < c.offsetWidth * 0.1 ? 'left' : + (left > c.offsetWidth * 0.9 ? 'right' : 'none') + if (!this.leg_nav.scrollInterval || this.leg_nav.scrollDir != newDir) { + if (this.leg_nav.scrollInterval) clearInterval(this.leg_nav.scrollInterval) + this.sideScroll(c, newDir, 25, 10); + } + }, + nav_mouseleave(e) { + clearInterval(this.leg_nav.scrollInterval); + this.leg_nav.scrollDir = 'none' + this.leg_nav.scrollInterval = null + }, + + refreshTextAreaHeight(event) { + console.log("AAA", event.target.scrollHeight, event.target) + event.target.style['height'] = 'auto'; + event.target.style['height'] = event.target.scrollHeight + 'px'; + event.target.style['max-height'] = "100%"; + }, + }, + created: function () { + this.search_hotel = api.throttle(this.search_nominatim("hotel"), 1000) + this.search_restaurant = api.throttle(this.search_nominatim("restaurant"), 1000) + this.search_place = api.throttle(this.search_nominatim("place"), 1000) + this.save_data = api.throttle(() => { + this.impexp = JSON.stringify(this.journey.data).toEncoded(); + api.save(this.journey.id, this.journey.data); + }, 1000); + this.search_flight = api.throttle(this.search_travel("flight"), 2000) + + window.addEventListener("keydown", (e) => { + switch (e.key) { + case "ArrowLeft": + this.journey.day_prev(); + break; + case "ArrowRight": + this.journey.day_next(); + break; + default: + console.log(e.key); + } + }); + + api.load(this.journey.id).then((r) => { + app.journey.data = migrator(r) + }); + }, + watch: { + journey: { + handler: function (ndata, odata) { + if (this.edit_active) + this.save_data(); + }, + deep: true, + }, + }, +}); + + diff --git a/src/types/ext.ts b/src/client/types/ext.ts similarity index 69% rename from src/types/ext.ts rename to src/client/types/ext.ts index cddb2b8..0344b70 100644 --- a/src/types/ext.ts +++ b/src/client/types/ext.ts @@ -2,8 +2,10 @@ declare global { interface Date { toJSONLocal: () => string; + toLocal: () => string; } } + Date.prototype.toJSONLocal = function () { function addZ(n: number): string { return n <= 9 ? `0${n}` : `${n}`; @@ -13,7 +15,27 @@ Date.prototype.toJSONLocal = function () { addZ(this.getMonth() + 1), addZ(this.getDate()), ].join("-"); -}; +} + +Date.prototype.toLocal = function () { + return [["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][this.getDay()], + this.getDate(), + [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", + ][this.getMonth()]].join(" ") + ; +} // ARRAY EXTENTION declare global { @@ -34,27 +56,20 @@ Array.prototype.foldl = function (f: (x: T, acc: B) => B, acc: B): B { // STRING EXTENTION declare global { interface String { - btoa: () => String; toEncoded: () => String; toDecoded: () => String; } } -String.prototype.btoa = function () { - return window.btoa(this); -}; - String.prototype.toEncoded = function () { - return window.btoa( - Array.from(this as string, (c) => c.charCodeAt(0)).foldl( - (e, v) => v + String.fromCharCode(e), - "", - ), - ); + return window.btoa(encodeURIComponent(Array.from(this as string, (c) => c.charCodeAt(0)).foldl( + (e, v) => v + String.fromCharCode(e), + "", + ))) }; String.prototype.toDecoded = function () { - return Array.from(window.atob(this), (c) => c.charCodeAt(0)).foldl( + return Array.from(decodeURIComponent(window.atob(this as string)), (c) => c.charCodeAt(0)).foldl( (e, v) => v + String.fromCharCode(e), "", ); @@ -76,4 +91,4 @@ String.gen_id = function (length) { .join(""); }; -export {}; +export { }; diff --git a/src/client/types/format.ts b/src/client/types/format.ts new file mode 100644 index 0000000..a0f1ff9 --- /dev/null +++ b/src/client/types/format.ts @@ -0,0 +1,59 @@ + + +declare global { + interface LatLng { + lat: number + lng: number + } + interface geoloc { + latlon: [number, number] + notes: string + step: -1 + } + + interface map { + zoom: number + center: LatLng + } + + + interface leg { + title: string + day_title: string[] + date_range: [Date, Date] | null + map: map + travel: unknown[] + hotel: geoloc | null + places: { + restaurants: geoloc[] + activities: geoloc[] + } + notes: string + } + + interface journey { + fmt_ver: number + title: string + main: leg[] + } +} + +const leg_template: leg = { + title: "", + day_title: [], + map: { zoom: 2, center: { lng: 0, lat: 0 } }, + travel: [], + hotel: null, + places: { restaurants: [], activities: [] }, + notes: "", + date_range: null +} +const journey_template: journey = { + fmt_ver: 1, + title: "New Journey", + main: [leg_template], +} + + +export { map, geoloc, leg, journey } +export { journey_template, leg_template } \ No newline at end of file diff --git a/src/client/types/geom.ts b/src/client/types/geom.ts new file mode 100644 index 0000000..23a864a --- /dev/null +++ b/src/client/types/geom.ts @@ -0,0 +1,165 @@ +const ellipsoid = { + a: 6378137, + b: 6356752.3142, + f: 1 / 298.257223563 +}; + +function mod(n: number, p: number): number { + const r = n % p; + return r < 0 ? r + p : r; +} + +function wrap(degrees: number, max = 360) { + if (-max <= degrees && degrees <= max) { + return degrees; + } else { + return mod(degrees + max, 2 * max) - max; + } +} + +function dist(src: LatLng, dst: LatLng, itr = 100, mit = true): number { + const p1 = src, + p2 = dst; + const φ1 = toRadians(p1.lat), + λ1 = toRadians(p1.lng); + const φ2 = toRadians(p2.lat), + λ2 = toRadians(p2.lng); + const π = Math.PI; + const ε = Number.EPSILON; + + // allow alternative ellipsoid to be specified + const { a, b, f } = ellipsoid; + + const dL = λ2 - λ1; // L = difference in longitude, U = reduced latitude, defined by tan U = (1-f)·tanφ. + const tanU1 = (1 - f) * Math.tan(φ1), + cosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1), + sinU1 = tanU1 * cosU1; + const tanU2 = (1 - f) * Math.tan(φ2), + cosU2 = 1 / Math.sqrt(1 + tanU2 * tanU2), + sinU2 = tanU2 * cosU2; + + const antipodal = Math.abs(dL) > π / 2 || Math.abs(φ2 - φ1) > π / 2; + + let λ = dL, + sinλ: number | null = null, + cosλ: number | null = null; // λ = difference in longitude on an auxiliary sphere + let σ = antipodal ? π : 0, + sinσ = 0, + cosσ = antipodal ? -1 : 1, + sinSqσ: number | null = null; // σ = angular distance P₁ P₂ on the sphere + let cos2σₘ = 1; // σₘ = angular distance on the sphere from the equator to the midpoint of the line + let sinα: number | null = null, + cosSqα = 1; // α = azimuth of the geodesic at the equator + let C: number | null = null; + + let λʹ: number | null = null, + iterations = 0; + do { + sinλ = Math.sin(λ); + cosλ = Math.cos(λ); + sinSqσ = + cosU2 * sinλ * (cosU2 * sinλ) + + (cosU1 * sinU2 - sinU1 * cosU2 * cosλ) * (cosU1 * sinU2 - sinU1 * cosU2 * cosλ); + if (Math.abs(sinSqσ) < ε) { + break; // co-incident/antipodal points (falls back on λ/σ = L) + } + sinσ = Math.sqrt(sinSqσ); + cosσ = sinU1 * sinU2 + cosU1 * cosU2 * cosλ; + σ = Math.atan2(sinσ, cosσ); + sinα = (cosU1 * cosU2 * sinλ) / sinσ; + cosSqα = 1 - sinα * sinα; + cos2σₘ = cosSqα !== 0 ? cosσ - (2 * sinU1 * sinU2) / cosSqα : 0; // on equatorial line cos²α = 0 (§6) + C = (f / 16) * cosSqα * (4 + f * (4 - 3 * cosSqα)); + λʹ = λ; + λ = dL + (1 - C) * f * sinα * (σ + C * sinσ * (cos2σₘ + C * cosσ * (-1 + 2 * cos2σₘ * cos2σₘ))); + const iterationCheck = antipodal ? Math.abs(λ) - π : Math.abs(λ); + if (iterationCheck > π) { + throw new EvalError("λ > π"); + } + } while (Math.abs(λ - λʹ) > 1e-12 && ++iterations < itr); + + if (iterations >= itr) { + if (mit) { + return dist( + src, + { lat: dst.lat, lng: dst.lng - 0.01 }, + itr, + mit + ); + } else { + throw new EvalError(`Inverse vincenty formula failed to converge after ${itr} iterations + (start=${src.lat}/${src.lng}; dest=${dst.lat}/${dst.lng})`); + } + } + const uSq = (cosSqα * (a * a - b * b)) / (b * b); + const A = 1 + (uSq / 16384) * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq))); + const B = (uSq / 1024) * (256 + uSq * (-128 + uSq * (74 - 47 * uSq))); + const Δσ = + B * + sinσ * + (cos2σₘ + + (B / 4) * + (cosσ * (-1 + 2 * cos2σₘ * cos2σₘ) - + (B / 6) * cos2σₘ * (-3 + 4 * sinσ * sinσ) * (-3 + 4 * cos2σₘ * cos2σₘ))); + + const s = b * A * (σ - Δσ); // s = length of the geodesic + return s + +} + +function pointDistance(src: LatLng, dst: LatLng): number { + return dist( + { lat: src.lat, lng: wrap(src.lng, 180) }, + { lat: dst.lat, lng: wrap(dst.lng, 180) } + ); +} + +function toRadians(degree: number): number { + return (degree * Math.PI) / 180; +} + +function toDegrees(radians: number): number { + return (radians * 180) / Math.PI; +} + +function midpoint(src: LatLng, dst: LatLng): LatLng { + // φm = atan2( sinφ1 + sinφ2, √( (cosφ1 + cosφ2⋅cosΔλ)² + cos²φ2⋅sin²Δλ ) ) + // λm = λ1 + atan2(cosφ2⋅sinΔλ, cosφ1 + cosφ2⋅cosΔλ) + // midpoint is sum of vectors to two points: mathforum.org/library/drmath/view/51822.html + + const φ1 = toRadians(src.lat); + const λ1 = toRadians(src.lng); + const φ2 = toRadians(dst.lat); + const Δλ = toRadians(dst.lng - src.lng); + + // get cartesian coordinates for the two points + const A = { x: Math.cos(φ1), y: 0, z: Math.sin(φ1) }; // place point A on prime meridian y=0 + const B = { x: Math.cos(φ2) * Math.cos(Δλ), y: Math.cos(φ2) * Math.sin(Δλ), z: Math.sin(φ2) }; + + // vector to midpoint is sum of vectors to two points (no need to normalise) + const C = { x: A.x + B.x, y: A.y + B.y, z: A.z + B.z }; + + const φm = Math.atan2(C.z, Math.sqrt(C.x * C.x + C.y * C.y)); + const λm = λ1 + Math.atan2(C.y, C.x); + + return { lat: toDegrees(φm), lng: toDegrees(λm) }; +} + +function recursiveMidPoint(src: LatLng, dst: LatLng, opt: { step?: number, dist?: number } = {}, curr = 0): LatLng[] { + const geom: LatLng[] = [src, dst]; + const mp = midpoint(src, dst); + const split_step = (opt.step != undefined && (opt.step > 0 || curr == 0)) + const split_dist = (opt.dist != undefined && (pointDistance(src, dst) > opt.dist || curr == 0)) + const next_opt = split_step ? { step: (opt.step || 0) - 1 } : { dist: opt.dist }; + if (split_step || split_dist) { + geom.splice(0, 1, ...recursiveMidPoint(src, mp, next_opt, curr + 1)); + geom.splice(geom.length - 2, 2, ...recursiveMidPoint(mp, dst, next_opt, curr + 1)); + } else { + geom.splice(1, 0, mp); + } + return geom; +} + +export function getGeoLine(src: LatLng, dst: LatLng, opt: { step?: number, dist?: number }) { + return recursiveMidPoint(src, dst, opt, 1) +} \ No newline at end of file diff --git a/src/client/types/migration.ts b/src/client/types/migration.ts new file mode 100644 index 0000000..2ccf0c0 --- /dev/null +++ b/src/client/types/migration.ts @@ -0,0 +1,24 @@ +const FMT_VER_0 = 0 +const FMT_VER_LATEST = FMT_VER_0 + +function migrate_A_to_0(e: journey): journey { + e.title = (e as any).name; + e.main.forEach((v) => { + v.date_range = v.date_range || (v as any).dateRange; + v.day_title = v.day_title || (v as any).step_title; + v.places.activities = v.places.activities || (v as any).places.places; + v.travel = v.travel || []; + }) + console.log(e) + return e; +} + +export const migrator = (e: journey): journey => { + if (e.fmt_ver == FMT_VER_LATEST) return e; + switch (e.fmt_ver) { + case FMT_VER_0: break; // Update when FMT_VER_1 releases + default: + return migrate_A_to_0(e) + } + return e; +} \ No newline at end of file diff --git a/src/client/types/wrapper.ts b/src/client/types/wrapper.ts new file mode 100644 index 0000000..ade7429 --- /dev/null +++ b/src/client/types/wrapper.ts @@ -0,0 +1,144 @@ +import { journey_template, leg_template } from "./format" + +const date_day_diff = (d0: Date, d1: Date): number => + (d1.getTime() - d0.getTime()) / (1000 * 60 * 60 * 24) + +class journey_wrapper { + id: String + data: journey = journey_template; + sel_leg: number = 0; + sel_day: number = 0; + + constructor(id: String) { + this.id = id; + } + + leg_first = () => this.data.main[0] + leg_last = () => this.data.main[this.leg_count() - 1] + leg_count(): number { + return this.data.main.length; + } + leg_len(idx?: number): number { + let d = this.leg_get(idx == undefined ? this.sel_leg : idx).date_range; + return d ? date_day_diff(d[0], d[1]) + 1 : 1; + } + add_leg(): void { + if (this.data.main == undefined) this.data.main = []; + this.data.main.push(leg_template); + } + rm_leg(idx: number): void { + this.data.main.splice(idx, 1); + if (this.sel_leg == idx) this.leg_prev(); + if (this.sel_leg > this.data.main.length - 1) this.leg_next(); + } + tot_len(): number | "?" { + if (this.leg_count() == 0) return 0; + let lf = this.leg_first(), ll = this.leg_last(); + if (lf.date_range && ll.date_range) { + let d0 = lf.date_range[0] + let d1 = ll.date_range[1] + return date_day_diff(d0, d1); + } + return "?"; + } + leg_sel(idx: number): void { + this.sel_leg = idx; + this.sel_day = 0; + } + leg_get(idx?: number): leg { + return this.data.main[idx != undefined ? idx : this.sel_leg] + } + leg_next(): void { + this.sel_leg = Math.min(this.sel_leg + 1, this.leg_count() - 1); + this.sel_day = 0; + } + leg_prev(): void { + this.sel_leg = Math.max(this.sel_leg - 1, 0); + this.sel_day = 0; + } + day_next() { + this.sel_day += 1 + if (this.sel_day > this.leg_len() - 1) { + if (this.sel_leg < this.leg_count() - 1) { + this.leg_next() + this.sel_day = 0; + } else { + this.sel_day = this.leg_len() - 1; + } + } + } + day_prev() { + this.sel_day -= 1 + if (this.sel_day < 0) { + if (this.sel_leg > 0) { + this.leg_prev() + this.sel_day = this.leg_len() - 1; + } else { + this.sel_day = 0; + } + } + } + date_sel(): string { + if (this.sel_day < 0) return "?"; + let leg = this.leg_get() + if (!leg.date_range) + return "?"; + var date = new Date(leg.date_range[0]); + date.setDate(date.getDate() + this.sel_day); + return date.toLocal(); + } + date_tot() { + if (this.leg_count() == 0) return ""; + let lf = this.leg_first(), ll = this.leg_last(); + if (lf.date_range && ll.date_range) + return `${lf.date_range[0].toLocal()} - ${ll.date_range[1].toLocal()}`; + return "?"; + } + + date_update(idx: number) { + let date_range = this.leg_get(idx).date_range; + if (!date_range) return; + let start_end = [0, 0]; + let step_len = 0; + + let last_start = date_range[0]; + for (let i = idx - 1; i >= 0; --i) { + step_len = this.leg_len(i) - 1; + if (this.leg_get(i).date_range) { + start_end = [last_start.getDate() - step_len, last_start.getDate()]; + } else { + this.leg_get(i).date_range = [new Date(), new Date()]; + start_end = [last_start.getDate() - step_len, last_start.getDate()]; + } + let leg = this.leg_get(i) + if (leg.date_range) { + leg.date_range[0].setTime(last_start.getTime()); + leg.date_range[0].setDate(start_end[0]); + leg.date_range[1].setTime(last_start.getTime()); + leg.date_range[1].setDate(start_end[1]); + last_start = leg.date_range[0]; + } + } + + let last_end = date_range[1]; + for (let i = idx + 1; i < this.leg_count(); ++i) { + step_len = this.leg_len(i) - 1; + if (this.leg_get(i).date_range) { + start_end = [last_end.getDate(), last_end.getDate() + step_len]; + } else { + this.leg_get(i).date_range = [new Date(), new Date()]; + start_end = [last_end.getDate(), last_end.getDate() + step_len]; + } + let leg = this.leg_get(i) + if (leg.date_range) { + leg.date_range[0].setTime(last_end.getTime()); + leg.date_range[0].setDate(start_end[0]); + leg.date_range[1].setTime(last_end.getTime()); + leg.date_range[1].setDate(start_end[1]); + last_end = leg.date_range[1]; + } + } + } +} + +export default journey_wrapper; \ No newline at end of file diff --git a/src/old.js b/src/old.js deleted file mode 100644 index 07049a7..0000000 --- a/src/old.js +++ /dev/null @@ -1,344 +0,0 @@ -import * as api from "./api"; - -Vue.component("l-map", window.Vue2Leaflet.LMap); -Vue.component("l-tile-layer", window.Vue2Leaflet.LTileLayer); -Vue.component("l-marker", window.Vue2Leaflet.LMarker); -Vue.component("l-icon", window.Vue2Leaflet.LIcon); -Vue.component("l-popup", window.Vue2Leaflet.LPopup); -Vue.component("l-tooltip", window.Vue2Leaflet.LTooltip); -Vue.component("l-control-scale", window.Vue2Leaflet.LControlScale); -Vue.component("multiselect", window.VueMultiselect.default); -Vue.use(window.VueTextareaAutosize); - -const app = new Vue({ - el: "#app", - data: { - journey_edit: - ["view", "short"].indexOf(window.location.pathname.split("/")[1]) == -1, - journey_id: window.location.pathname.split("/").pop() || String.gen_id(16), - - journey_step_data: { day: 1, section: 0 }, - journey_data: { - name: "New Journey", - main: [], - }, - - query: { hotel: [], flight: [], nominatim: [] }, - querying: { hotel: false, flight: false, place: false, food: false }, - impexp: "", - lang: { - format: "ddd D MMM", - formatLocale: { - firstDayOfWeek: 1, - }, - monthBeforeYear: true, - }, - }, - methods: { - start_journey: function (event) { - window.location.href = "/" + this.journey_id; - }, - add_section: function (event) { - if (this.journey_data.main == undefined) this.journey_data.main = []; - this.journey_data.main.push({ - title: "?", - step_title: [], - map: { zoom: 2 }, - hotel: { latlon: [0, 0] }, - places: { restaurants: [], places: [] }, - }); - }, - step_len: function (idx) { - return this.journey_data.main[idx].dateRange - ? (this.journey_data.main[idx].dateRange[1] - - this.journey_data.main[idx].dateRange[0]) / - (1000 * 60 * 60 * 24) + - 1 - : 1; - }, - next_step: function () { - this.journey_step_data.day += 1; - let s = this.journey_step_data.section; - let cd = this.step_len(s); - - if (this.journey_step_data.day > cd) { - this.journey_step_data.section += 1; - if (this.journey_step_data.section >= this.journey_data.main.length) { - this.journey_step_data.section = this.journey_data.main.length - 1; - this.journey_step_data.day = cd; - } else { - this.journey_step_data.day = 1; - } - } - }, - prev_step: function () { - this.journey_step_data.day -= 1; - if (this.journey_step_data.day <= 0) { - this.journey_step_data.section -= 1; - if (this.journey_step_data.section < 0) { - this.first_step(); - } else { - let s = this.journey_step_data.section; - - let cd = this.step_len(s); - this.journey_step_data.day = cd; - } - } - }, - nextnext_step: function () { - this.journey_step_data.section += 1; - this.journey_step_data.day = 1; - if (this.journey_step_data.section >= this.journey_data.main.length) - this.first_step(); - }, - prevprev_step: function () { - this.journey_step_data.section -= 1; - this.journey_step_data.day = 1; - if (this.journey_step_data.section < 0) this.first_step(); - }, - first_step: function () { - this.journey_step_data.section = 0; - this.journey_step_data.day = 1; - }, - - active_date: function () { - if (this.journey_step_data.day < 0) return "?"; - if (!this.journey_data.main[this.journey_step_data.section].dateRange) - return "?"; - var date = new Date( - this.journey_data.main[this.journey_step_data.section].dateRange[0], - ); - date.setDate(date.getDate() + this.journey_step_data.day - 1); - return this.format_date(date); - }, - format_date: function (d) { - return ( - ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][d.getDay()] + - " " + - d.getDate() + - " " + - [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - ][d.getMonth()] - ); - }, - - total_days: function () { - if (this.journey_data.main.length == 0) return 0; - try { - return ( - (this.journey_data.main[this.journey_data.main.length - 1] - .dateRange[1] - - this.journey_data.main[0].dateRange[0]) / - (1000 * 60 * 60 * 24) - ); - } catch { - return "?"; - } - }, - total_date: function () { - if (this.journey_data.main.length == 0) return ""; - try { - return `${this.format_date( - this.journey_data.main[0].dateRange[0], - )} - ${this.format_date( - this.journey_data.main[this.journey_data.main.length - 1] - .dateRange[1], - )}`; - } catch { - return "?"; - } - }, - update_date: function (idx) { - let dateRange = this.journey_data.main[idx].dateRange; - let start_end = [0, 0]; - let step_len = 0; - - let last_start = dateRange[0]; - for (let i = idx - 1; i >= 0; --i) { - step_len = this.step_len(i) - 1; - if (this.journey_data.main[i].dateRange) { - start_end = [last_start.getDate() - step_len, last_start.getDate()]; - } else { - this.journey_data.main[i].dateRange = [new Date(), new Date()]; - start_end = [last_start.getDate() - step_len, last_start.getDate()]; - } - this.journey_data.main[i].dateRange[0].setTime(last_start.getTime()); - this.journey_data.main[i].dateRange[0].setDate(start_end[0]); - this.journey_data.main[i].dateRange[1].setTime(last_start.getTime()); - this.journey_data.main[i].dateRange[1].setDate(start_end[1]); - last_start = this.journey_data.main[i].dateRange[0]; - } - - let last_end = dateRange[1]; - for (let i = idx + 1; i < this.journey_data.main.length; ++i) { - step_len = this.step_len(i) - 1; - if (this.journey_data.main[i].dateRange) { - start_end = [last_end.getDate(), last_end.getDate() + step_len]; - } else { - this.journey_data.main[i].dateRange = [new Date(), new Date()]; - start_end = [last_end.getDate(), last_end.getDate() + step_len]; - } - this.journey_data.main[i].dateRange[0].setTime(last_end.getTime()); - this.journey_data.main[i].dateRange[0].setDate(start_end[0]); - this.journey_data.main[i].dateRange[1].setTime(last_end.getTime()); - this.journey_data.main[i].dateRange[1].setDate(start_end[1]); - last_end = this.journey_data.main[i].dateRange[1]; - } - }, - - rm_section: function (idx) { - this.journey_data.main.splice(idx, 1); - if (this.journey_step_data.section == idx) { - this.prevprev_step(); - } - }, - sel_section: function (idx) { - this.journey_step_data.section = idx; - this.journey_step_data.day = 1; - }, - search_nominatim: function (txt, f) { - if (txt == "") { - this.query.nominatim = []; - return Promise.resolve([]); - } - return query_nominatim(txt, f).then((results) => { - results.forEach((r) => { - r.latlon = [parseFloat(r.lat), parseFloat(r.lon)]; - r.sname = r.display_name.split(",")[0]; - }); - this.query.nominatim = results; - }); - }, - search_flight: function (txt) { - if (txt == "") return; - this.querying.flight = true; - query_flight(txt.replace(" ", "")).then((results) => { - if (results.results == "") { - this.query.flight = []; - this.querying.flight = false; - return; - } - this.query.flight = results.results; - this.querying.flight = false; - }); - }, - generate_icon: function (item, fcolor) { - return L.AwesomeMarkers.icon({ - icon: api.icon_type(item) || "star", - prefix: "fa", - markerColor: fcolor || item.color || "blue", - }).createIcon().outerHTML; - }, - - save_data: function () { - this.impexp = JSON.stringify(this.journey_data).toEncoded(); - api.save(this.journey_id, this.journey_data); - }, - import_data: function () { - this.journey_data = Object.assign( - {}, - JSON.parse(this.impexp.toDecoded()), - ); - this.journey_data.main.forEach((e) => { - if (e.dateRange) { - e.dateRange[0] = new Date(e.dateRange[0]); - e.dateRange[1] = new Date(e.dateRange[1]); - } - }); - }, - export_data: function () { - this.impexp = JSON.stringify(this.journey_data).toEncoded(); - }, - filter_selected: function (list, step) { - return list.filter((e) => - step ? e.step == this.journey_step_data.day : e.step >= 0, - ); - }, - filter_unselected: function (list) { - return list.filter((e) => e.step == undefined || e.step < 0); - }, - remove_item: function (list, idx) { - list[idx].step = -1; - list.splice(idx, 1); - }, - log: function (e) { - console.log(e); - }, - - keyboardEvent(e) { - if (e.which === 13) { - } - }, - }, - created: function () { - window.addEventListener("keydown", (e) => { - switch (e.key) { - case "ArrowLeft": - this.prev_step(); - break; - case "ArrowRight": - this.next_step(); - break; - default: - console.log(e.key); - } - }); - - api.load(this.journey_id).then((r) => (app.journey_data = r)); - - this.debounceSave = _.debounce(this.save_data, 500); - this.debounceSearch = { - hotel: _.debounce((q) => { - this.querying.hotel = true; - this.search_nominatim( - q, - (r) => - r.type == "hotel" || r.type == "hostel" || r.type == "guest_house", - ).then((r) => { - this.querying.hotel = false; - }); - }, 500), - restaurants: _.debounce((q) => { - this.querying.food = true; - this.search_nominatim(q, (r) => api.is_restauration_type(r)).then( - (r) => { - this.querying.food = false; - }, - ); - }, 500), - places: _.debounce((q) => { - this.querying.place = true; - this.search_nominatim(q, (r) => api.is_attraction_type(r)).then((r) => { - this.querying.place = false; - }); - }, 500), - other: _.debounce((q) => { - this.querying.any = true; - this.search_nominatim(q, (r) => true).then((r) => { - this.querying.any = false; - }); - }, 500), - flight: _.debounce((q) => this.search_flight(q), 500), - }; - }, - watch: { - journey_data: { - handler: function (ndata, odata) { - this.debounceSave(); - }, - deep: true, - }, - }, -}); diff --git a/src/server/api.ts b/src/server/api.ts new file mode 100644 index 0000000..9b8b531 --- /dev/null +++ b/src/server/api.ts @@ -0,0 +1,90 @@ +//import { ProxyAgent, setGlobalDispatcher } from 'undici'; + +import { flight_get_data } from './api_flight' +import { nominatim_get_data } from './api_nominatim'; + +//setGlobalDispatcher(new ProxyAgent(process.env.HTTPS_PROXY as string)); + + +export default function (server, opts, done) { + server.get("/flight/:id", async (req, reply) => + flight_get_data(req.params.id) + .then(res => { + let wait_for_all: Promise[] = [] + res.forEach(r => { + wait_for_all.push(nominatim_get_data(r.from).then(geo => (r as any).from_geo = geo[0])); + wait_for_all.push(nominatim_get_data(r.to).then(geo => (r as any).to_geo = geo[0])); + }); + return Promise.all(wait_for_all).then(_ => res) + }) + .then(res => reply.send(res)) + ); + + server.get("/place/:id", async (req, reply) => + nominatim_get_data(req.params.id, JSON.parse(req.query.bb)) + .then(res => reply.send(res)) + ); + + server.get("/gpx/:id", async (req, reply) => { + if (req.params.id == undefined) + return reply.code(400).send({ error: "No ID query parameter" }); + + server.level.db.get(req.params.id, (err, val) => { + if (err) { + console.warn(err); + reply.code(500).send(); + } else { + let file = '' + const data = JSON.parse(val); + const gen_wpt = (name, desc, latlon, icon = "Flag") => `0${name}-${desc}${icon}` + const esc_str = (str) => (str || "Undefined").replace('"', """).replace("'", "'").replace("<", "<").replace(">", ">").replace("&", "&").replace("\n", "...") + data.main.forEach(a => { + file += gen_wpt(esc_str(a.hotel.name), esc_str(a.hotel.notes), a.hotel.latlon, "Hotel"); + a.places.restaurants.forEach(b => { + file += gen_wpt(esc_str(b.name), esc_str(b.notes), b.latlon, "Restaurant"); + }); + a.places.activities.forEach(b => { + file += gen_wpt(esc_str(b.name), esc_str(b.notes), b.latlon, "Tree"); + }); + }); + file += ""; + reply.header('Content-Type', 'application/gpx+xml'); + reply.header('Content-Disposition', `attachment; filename=${req.params.id}.gpx`); + reply.send(file); + } + }); + return reply; + }); + + server.get("/:id", async (req, reply) => { + if (req.params.id == undefined) + return reply.code(400).send({ error: "No ID query parameter" }); + + server.level.db.get(req.params.id, (err, val) => { + if (err) { + console.warn(err); + reply.code(500).send(); + } else { + reply.send(JSON.parse(val)); + } + }); + return reply; + }); + + server.post("/:id", async (req, reply) => { + if (req.params.id == undefined) + return reply.code(400).send({ error: "No ID query parameter" }); + + server.level.db.put(req.params.id, req.body, (err) => { + if (err) { + console.warn(err); + reply.code(500).send({ error: "Error with DB" }); + } else { + reply.send({ content: "ok" }); + } + }); + return reply; + }); + + done(); +}; diff --git a/src/server/api_flight.ts b/src/server/api_flight.ts new file mode 100644 index 0000000..14f5977 --- /dev/null +++ b/src/server/api_flight.ts @@ -0,0 +1,86 @@ +import { JSDOM } from 'jsdom'; + +interface FlightData { + id: string; + date: string; + from: string; + to: string; + std: string; + atd: string | string[] | null; + sta: string; + ata: string | string[] | null; +} + +function clean_times(s: string): string | null { + if (s == "—" || s == "Scheduled") return null + if (s.indexOf("Estimated departure") == 0) return null + if (s.indexOf("Landed") == 0) return s.replace("Landed ", "") + return s +} + +export function flight_get_data(flightId: string): Promise { + const url = new URL(`https://www.flightradar24.com/data/flights/${flightId}`); + return fetch(url).then(res => res.text()).then(res => new JSDOM(res)).then(dom => { + const rows = dom.window.document.querySelectorAll('table tbody tr'); + const flightData: FlightData[] = []; + rows.forEach(row => { + const columns = row.querySelectorAll('td'); + /* + * 2/6 = Date/Duration + * 3/4 = From/To + * 7/8 = STD/ATD + * 9/11 = STA/ATA + */ + const flight: FlightData = { + id: flightId, + date: columns[2].textContent.trim(), + from: columns[3].textContent.trim(), + to: columns[4].textContent.trim(), + std: columns[7].textContent.trim(), + atd: clean_times(columns[8].textContent.trim()), + sta: columns[9].textContent.trim(), + ata: clean_times(columns[11].textContent.trim()) + }; + flightData.push(flight); + }); + + return groupByPair(flightData).map(v => groupByFrequency(v)); + }) +} + +function groupByPair(flightData: FlightData[]): FlightData[][] { + const flightMap: { [key: string]: FlightData[] } = {}; + flightData.forEach(flight => { + const key = `${flight.from}-${flight.to}-${flight.std}`; + if (!flightMap[key]) + flightMap[key] = []; + flightMap[key].push(flight); + }); + return Object.values(flightMap); +} + +function groupByFrequency(flightData: FlightData[]): FlightData { + let data = 'OOOOOOO'; // Initialize with no flights + const atdArray: string[] = []; + const ataArray: string[] = []; + + flightData.forEach(flight => { + const dayOfWeek = (new Date(flight.date).getDay() + 6) % 7; + data = data.substring(0, dayOfWeek) + 'X' + data.substring(dayOfWeek + 1); + if (flight.atd) + atdArray.push(flight.atd as string); + if (flight.ata) + ataArray.push(flight.ata as string); + }); + + return { + id: flightData[0].id, + date: data, + from: flightData[0].from, + to: flightData[0].to, + std: flightData[0].std, + sta: flightData[0].sta, + atd: atdArray, + ata: ataArray + }; +}; diff --git a/src/server/api_nominatim.ts b/src/server/api_nominatim.ts new file mode 100644 index 0000000..874b77c --- /dev/null +++ b/src/server/api_nominatim.ts @@ -0,0 +1,27 @@ + +function drop_fields(results) { + results.forEach(e => { + delete e.licence; + delete e.place_rank; + delete e.importance; + delete e.boundingbox; + }); + return results +} + +export function nominatim_get_data(id: string, bb: string[][] | null = null): Promise { + if (!id) return Promise.resolve([]) + + const url = new URL("https://nominatim.openstreetmap.org/search"); + url.searchParams.append('format', 'jsonv2') + url.searchParams.append('q', id) + url.searchParams.append('limit', '20') + if (bb) { + url.searchParams.append('viewbox', `${bb[0][0]},${bb[0][1]},${bb[1][0]},${bb[1][1]}`) + url.searchParams.append('bounded', `1`) + } + return fetch(url).then((res) => { + if (!res.ok) throw new Error("Nominatim Error") + return res.json().then(r => drop_fields(r)) + }) +} diff --git a/src/server/main.ts b/src/server/main.ts new file mode 100644 index 0000000..599b401 --- /dev/null +++ b/src/server/main.ts @@ -0,0 +1,36 @@ +import fastify from 'fastify' +import fastify_static from '@fastify/static' +import fastify_db from '@fastify/leveldb' +import fastify_view from '@fastify/view'; +import pug from 'pug' +import { join as pathJoin } from "path"; + +import api from "./api" + +const server = fastify(); //{ logger: true }); + +server.register(fastify_static, { + root: pathJoin(__dirname, "../public"), + prefix: "/public/", +}); + +server.register( + fastify_db as any, + { name: "db" } +); + +server.register(fastify_view, { + engine: { pug: pug }, +}); + +server.register(api, { prefix: "/api" }); + +server.get("/", (req, reply) => reply.view("/src/template/home.pug")); +server.get("/:id", (req, reply) => reply.view("/src/template/journey.pug")); +server.get("/view/:id", (req, reply) => reply.view("/src/template/view.pug")); +server.get("/short/:id", (req, reply) => reply.view("/src/template/short.pug")); + +server.listen({ port: 8080, host: "0.0.0.0" }, (err, address) => { + if (err) throw err; + console.log("Listening on", address); +}); diff --git a/src/style/custom.css b/src/style/custom.css new file mode 100644 index 0000000..e9b5b85 --- /dev/null +++ b/src/style/custom.css @@ -0,0 +1,207 @@ +.leaflet-popup-close-button { + visibility: hidden; +} + +.p-abs { + position: absolute; +} + +.list-group { + overflow: auto; + white-space: nowrap; + scrollbar-width: none; + padding: 1rem 0rem; +} + +.list-group-item { + border: 1px solid var(--darkdark); + display: inline-block; + position: relative; + cursor: pointer; + text-align: center; + padding: 0.5rem 0.8rem; +} + +.list-group-item:hover { + filter: brightness(85%); +} + +.leaflet-control-attribution { + display: none; +} + +.display-none { + display: none; +} + +.col-0 { + flex: 0 0 0%; + max-width: 0%; + overflow: hidden; +} + +.map-container, +.drawer-container { + transition: flex 0.5s ease-in-out, max-width 0.5s ease-in-out; +} + +.map-container { + min-width: 52px; + height: 100%; +} + +.drawer-container { + height: 100%; + right: 0; + top: 0; + overflow: scroll; +} + +.travel-path-icon { + margin-left: -12px; + margin-top: -32px; +} + + +.ml-auto { + margin-left: auto; +} + +.mr-auto { + margin-right: auto; +} + +.input .mx-input { + height: 40px; +} + +.h-100 { + height: 100%; +} + +.map-menu { + position: absolute; + display: flex; + z-index: 1100; + right: 0; + flex-direction: column; + gap: 10px; + margin: 5px; +} + +.map-menu-top { + top: 0; +} + +.map-menu-bottom { + bottom: 0; +} + +.map-menu-center { + top: 50%; +} + +.padding-1 { + padding: 5px; +} + +.map-menu-item { + background-color: var(--darkdark); + padding: 5px; + border-radius: 50%; + cursor: pointer; +} + +.map-menu-item:hover { + filter: brightness(150%); +} + +.map-menu-sub { + display: flex; + flex-direction: row-reverse; + gap: 5px; +} + +.map-menu-item, +.map-menu-sub-item { + background-color: var(--darkdark); + padding: 5px; + border-radius: 50%; + cursor: pointer; + float: right; + width: 42px; + height: 42px; + align-content: center; + text-align: center; +} + +.vue2leaflet-map { + border-radius: var(--border-radius); +} + +.leaflet-popup-content { + margin: 10px 20px !important; + /* display: flex; + align-items: center; + justify-content: center; + width: auto !important; + max-width: 100%; */ +} + + +.leaflet-popup>.leaflet-popup-content-wrapper { + border-radius: var(--border-radius); + width: 350px; +} + +.leaflet-popup-button-group { + position: absolute; + top: 0; + right: 0; + display: flex; + flex-direction: row; + gap: 5px; + margin: 2px 6px; +} + +.leaflet-popup-button-group>a { + cursor: pointer; +} + +.leaflet-popup-button-group>a:hover { + cursor: pointer; + filter: brightness(150%); +} + +.leaflet-popup-button-group>a>i { + font-size: 1em; +} + +.query-result { + display: flex; + align-items: center; + border-radius: var(--border-radius); + cursor: pointer; +} + +.query-result:hover { + filter: brightness(85%); +} + +.scroll-content>div:first-child { + border-top-left-radius: var(--border-radius); + border-bottom-left-radius: var(--border-radius); +} + +.scroll-content>div:nth-last-child(3) { + border-top-right-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); +} + +.scroll-content>div:last-child { + border-radius: var(--border-radius); +} + +.mx-datepicker { + width: 100% !important; +} \ No newline at end of file diff --git a/src/style/define.css b/src/style/define.css new file mode 100644 index 0000000..e7bbaed --- /dev/null +++ b/src/style/define.css @@ -0,0 +1,19 @@ +:root { + --black: #030B12; + --darkdark: #0C1D2E; + --dark: #203A53; + --lightdark: #425F7C; + --light: #93A9BE; + --lightlight: #B6C5D5; + --white: #F0F3F7; + --orange: ##F5B97D; + --yellow: #F5F57D; + --green: #B9F57D; + --turquoise: #7DF5B9; + --blue: #7DB9F5; + --purple: #B97DF5; + --pink: #F57DB9; + --red: #F57D7D; + + --border-radius: 3px; +} \ No newline at end of file diff --git a/src/style/index.css b/src/style/index.css new file mode 100644 index 0000000..018e967 --- /dev/null +++ b/src/style/index.css @@ -0,0 +1,13 @@ +@import './define.css'; + +@import './module/input.css'; +@import './module/load_n_spin.css'; +@import './module/typography.css'; +@import './module/layout.css'; +@import './module/general.css'; + +@import './custom.css'; + +[v-cloak] { + display: none; +} \ No newline at end of file diff --git a/src/style/module/general.css b/src/style/module/general.css new file mode 100644 index 0000000..88a2419 --- /dev/null +++ b/src/style/module/general.css @@ -0,0 +1,202 @@ +html, +body, +body, +div, +span, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +abbr, +address, +cite, +code, +del, +dfn, +em, +ins, +kbd, +q, +samp, +small, +strong, +sub, +sup, +var, +b, +i, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +figure, +footer, +header, +hgroup, +menu, +nav, +section, +time, +mark, +audio, +video { + background: transparent; + border: 0; + font-size: 100%; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} + +article, +aside, +figure, +footer, +header, +main, +nav, +section { + display: block; +} + +*, +*:before, +*:after { + box-sizing: border-box; +} + + +*, +*::after, +*::before { + box-sizing: border-box; + outline: none; +} + +body { + background-color: #fff; + min-height: 100%; + overflow-x: hidden; + position: relative; +} + +p { + font-weight: normal; + margin-bottom: 1.5em; +} + +img { + max-width: 100%; +} + +strong { + font-weight: 600; +} + +ul { + margin-bottom: 1em; +} + +li { + list-style: none; + margin-bottom: 0.5em; +} + +/** + * BACKGROUND + */ +.bg-primary { + background-color: var(--blue); +} + +.bg-dark { + background-color: var(--darkdark); +} + +.bg-secondary { + background-color: var(--pink); +} + +.bg-white { + background-color: var(--white); +} + +.bg-success { + background-color: var(--green); +} + +.bg-info { + background-color: var(--yellow); +} + +.bg-warning { + background-color: var(--orange); +} + +.bg-error { + background-color: var(--red); +} + +.bg-gray { + background-color: var(--lightdark); +} + +.bg-gray-light { + background-color: var(--lightlight); +} + + +.align { + align-items: center; + justify-content: center; +} + +.fleft { + float: left; +} + +.fright { + float: right; +} + +.clearfix ::after { + clear: both; + content: ""; + display: table; +} + +.no-wrap { + white-space: nowrap; +} + +.overflow-hidden { + overflow: hidden; +} + +.rounded { + border-radius: var(--border-radius); +} \ No newline at end of file diff --git a/src/style/module/input.css b/src/style/module/input.css new file mode 100644 index 0000000..5ebba66 --- /dev/null +++ b/src/style/module/input.css @@ -0,0 +1,362 @@ +input, +textarea { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + resize: none; +} + +label { + display: block; + font-weight: normal; +} + +input:-webkit-autofill { + box-shadow: 0 0 0 1000px #eceff1 inset; +} + +.textarea, +.input, +.select { + border: 1px solid var(--white); + border-radius: var(--border-radius); + box-shadow: none; + display: inline-block; + font-weight: normal; + overflow: hidden; +} + +.textarea :focus, +.input :focus, +.select :focus { + outline: none; +} + +.textarea.has-error, +.input.has-error, +.select.has-error { + background: #eceff1; + border: 1px solid #e74c3c; + margin-bottom: 0; +} + +.select { + background-color: #eceff1; + display: inline-block; + margin-right: 16px; + position: relative; +} + +.select:last-child { + margin-right: 0; +} + +.select-fullWidth { + display: block; + margin-left: 0; + margin-right: 0; + width: 100%; +} + +.select select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: transparent; + border: 0; + border-radius: 0; + color: #272727; + display: block; + font-size: 16px; + line-height: 1.5em; + margin: 0; + padding: 8px 16px; + padding-right: 30px; + transition: background-color 0.2s ease-in-out; + width: 100%; +} + +.select select:active, +.select select:focus { + background-color: #fbfbfc; + border: 0; + outline: none; +} + +.select select::-ms-expand { + display: none; +} + +.select::after, +.select::before { + background: #03a9f4; + content: ""; + display: block; + height: 2px; + margin-top: 2px; + position: absolute; + right: 5px; + top: 50%; + -webkit-transform-origin: 1px; + transform-origin: 1px; + width: 10px; +} + +.select::after { + -webkit-transform: rotate(-135deg); + transform: rotate(-135deg); +} + +.select::before { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); +} + +.textarea { + background-color: #eceff1; + padding: 0; +} + +.textarea-fullWidth { + display: block; + margin-left: 0; + margin-right: 0; + width: 100%; +} + +.textarea textarea { + background: transparent; + border: 0; + color: #272727; + display: block; + font-family: "Lato", sans-serif; + font-size: 16px; + line-height: 1.5em; + margin: 0; + min-height: 120px; + padding: 8px 16px; + transition: background-color 0.2s ease-in-out; + width: 100%; +} + +.textarea textarea::-webkit-input-placeholder { + color: #969da6; +} + +.textarea textarea::-ms-input-placeholder { + color: #969da6; +} + +.textarea textarea::placeholder { + color: #969da6; +} + +.textarea textarea:focus, +.textarea textarea:active { + background-color: #fbfbfc; + border: 0; + outline: none; +} + +.checkbox { + margin-bottom: 8px; + position: relative; +} + +.checkbox input[type="checkbox"] { + display: none; +} + +.checkbox input[type="checkbox"]:checked+label::after { + -webkit-animation: checkboxAndRadioAnimation 0.25s; + animation: checkboxAndRadioAnimation 0.25s; + content: ""; + -webkit-transform: scale(1) rotate(45deg); + transform: scale(1) rotate(45deg); +} + +.checkbox input[type="checkbox"]+label { + display: block; + overflow: hidden; + padding-left: 30px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.checkbox input[type="checkbox"]+label::before { + background-color: #eceff1; + border: 1px solid var(--white); + border-radius: var(--border-radius); + content: ""; + display: inline-block; + height: 20px; + left: 0; + margin-top: -10px; + position: absolute; + top: 50%; + width: 20px; +} + +.checkbox input[type="checkbox"]+label::after { + border-bottom: 3px solid #03a9f4; + border-right: 3px solid #03a9f4; + display: block; + height: 12px; + left: 11px; + margin-left: -4px; + margin-top: -7px; + position: absolute; + top: 50%; + width: 7px; + z-index: 1; +} + +.radio { + margin-bottom: 8px; + position: relative; +} + +.radio input[type="radio"] { + display: none; +} + +.radio input[type="radio"]:checked+label::after { + -webkit-animation: checkboxAndRadioAnimation 0.25s; + animation: checkboxAndRadioAnimation 0.25s; + content: ""; + -webkit-transform: scale(1) rotate(45deg); + transform: scale(1) rotate(45deg); +} + +.radio input[type="radio"]+label { + display: block; + overflow: hidden; + padding-left: 30px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.radio input[type="radio"]+label::before { + background-color: #eceff1; + border: 1px solid var(--white); + border-radius: 20px; + content: ""; + display: inline-block; + height: 20px; + left: 0; + margin-top: -10px; + position: absolute; + top: 50%; + width: 20px; +} + +.radio input[type="radio"]+label::after { + background-color: #03a9f4; + border-radius: 20px; + display: block; + height: 10px; + left: 11px; + margin-left: -6px; + margin-top: -6px; + position: absolute; + top: 13px; + width: 10px; + z-index: 1; +} + +@-webkit-keyframes checkboxAndRadioAnimation { + 0% { + -webkit-transform: scale(0) rotate(45deg); + transform: scale(0) rotate(45deg); + } + + 50% { + -webkit-transform: scale(1.5) rotate(45deg); + transform: scale(1.5) rotate(45deg); + } + + 100% { + -webkit-transform: scale(1) rotate(45deg); + transform: scale(1) rotate(45deg); + } +} + +@keyframes checkboxAndRadioAnimation { + 0% { + -webkit-transform: scale(0) rotate(45deg); + transform: scale(0) rotate(45deg); + } + + 50% { + -webkit-transform: scale(1.5) rotate(45deg); + transform: scale(1.5) rotate(45deg); + } + + 100% { + -webkit-transform: scale(1) rotate(45deg); + transform: scale(1) rotate(45deg); + } +} + +.input-invis { + background-color: transparent !important; + margin: auto !important; + border: 0 !important; +} + +.input { + background-color: var(--white); + padding: 0; + position: relative; +} + +.input :focus, +.input :active { + background-color: var(--white); + border-radius: var(--border-radius); +} + +.input input, +.input textarea { + background: transparent; + border: 0; + box-shadow: none; + color: #272727; + font-size: 16px; + line-height: 1.5em; + margin: 0; + outline: none; + padding: 8px 16px; + width: 100%; +} + +.input input::-webkit-input-placeholder { + color: #969da6; +} + +.input input::-ms-input-placeholder { + color: #969da6; +} + +.input input::placeholder { + color: #969da6; +} + +.input input.small { + line-height: 1em; + padding: 0; +} + +.input-withIcon input { + padding-right: 32px; +} + +.input-icon { + fill: #969da6; + height: 16px; + margin-top: -8px; + position: absolute; + right: 16px; + top: 50%; + width: 16px; +} \ No newline at end of file diff --git a/src/style/module/layout.css b/src/style/module/layout.css new file mode 100644 index 0000000..58ec6d9 --- /dev/null +++ b/src/style/module/layout.css @@ -0,0 +1,354 @@ +/** + * LAYOUT + */ +.section { + padding-bottom: 36px; + padding-top: 36px; +} + +@media (min-width: 768px) { + .section { + padding-bottom: 72px; + padding-top: 72px; + } +} + +.section+.section { + padding-top: 0; +} + +.container { + margin: 0 auto; + max-width: 1380px; + padding-left: 12px; + padding-right: 12px; + width: 100%; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} + +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} + +@media (min-width: 768px) { + .container { + padding-left: 24px; + padding-right: 24px; + max-width: 720px; + } +} + +.container-medium { + margin: 0 auto; + max-width: 944px; + padding-left: 12px; + padding-right: 12px; +} + +@media (min-width: 768px) { + .container-medium { + padding-left: 24px; + padding-right: 24px; + } +} + +.container { + width: 100%; + padding-right: 12px; + padding-left: 12px; + margin-right: auto; + margin-left: auto; +} + +.container-fluid { + width: 100%; + padding-right: 12px; + padding-left: 12px; + margin-right: auto; + margin-left: auto; +} + +.row { + display: flex; + flex-wrap: wrap; + margin-right: -12px; + margin-left: -12px; +} + +.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-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 { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 12px; + padding-left: 12px; +} + +.col { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; + max-width: none; +} + +.col-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; +} + +.col-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; +} + +.col-3 { + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; +} + +.col-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; +} + +.col-6 { + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; +} + +.col-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; +} + +.col-9 { + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; +} + +.col-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; +} + +.col-12 { + flex: 0 0 100%; + max-width: 100%; +} + +@media (min-width: 576px) { + .col-sm { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + + .col-sm-auto { + flex: 0 0 auto; + width: auto; + max-width: none; + } + + .col-sm-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + + .col-sm-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + + .col-sm-3 { + flex: 0 0 25%; + max-width: 25%; + } + + .col-sm-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + + .col-sm-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + + .col-sm-6 { + flex: 0 0 50%; + max-width: 50%; + } + + .col-sm-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + + .col-sm-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + + .col-sm-9 { + flex: 0 0 75%; + max-width: 75%; + } + + .col-sm-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + + .col-sm-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + + .col-sm-12 { + flex: 0 0 100%; + max-width: 100%; + } +} + +@media (min-width: 768px) { + .col-md { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + + .col-md-auto { + flex: 0 0 auto; + width: auto; + max-width: none; + } + + .col-md-1 { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + + .col-md-2 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + + .col-md-3 { + flex: 0 0 25%; + max-width: 25%; + } + + .col-md-4 { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + + .col-md-5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + + .col-md-6 { + flex: 0 0 50%; + max-width: 50%; + } + + .col-md-7 { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + + .col-md-8 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + + .col-md-9 { + flex: 0 0 75%; + max-width: 75%; + } + + .col-md-10 { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + + .col-md-11 { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + + .col-md-12 { + flex: 0 0 100%; + max-width: 100%; + } +} \ No newline at end of file diff --git a/src/style/module/load_n_spin.css b/src/style/module/load_n_spin.css new file mode 100644 index 0000000..17fe58c --- /dev/null +++ b/src/style/module/load_n_spin.css @@ -0,0 +1,166 @@ +/** + * LOADING BAR + * + * Markup: + * --------- + *
+ * + */ +.loadingBar { + height: 6px; + left: 0; + overflow: hidden; + position: fixed; + right: 0; + top: 0; + width: 100%; + z-index: 1000; +} + +.loadingBar::before { + -webkit-animation: loading 2s linear infinite; + animation: loading 2s linear infinite; + background-color: #03a9f4; + content: ""; + display: block; + height: 6px; + left: -300px; + position: absolute; + width: 300px; +} + +@-webkit-keyframes loading { + from { + left: -300px; + width: 30%; + } + + 50% { + width: 30%; + } + + 70% { + width: 70%; + } + + 80% { + left: 50%; + } + + 95% { + left: 120%; + } + + to { + left: 100%; + } +} + +@keyframes loading { + from { + left: -300px; + width: 30%; + } + + 50% { + width: 30%; + } + + 70% { + width: 70%; + } + + 80% { + left: 50%; + } + + 95% { + left: 120%; + } + + to { + left: 100%; + } +} + +.spinner { + position: absolute; + right: 0; + top: 0; + width: 40px; + height: 40px; + display: block +} + +.spinner:after, +.spinner:before { + position: absolute; + content: ""; + top: 50%; + left: 50%; + margin: -12px 0 0 -12px; + width: 24px; + height: 24px; + border-radius: 100%; + border: 3px solid transparent; + border-top-color: var(--blue); +} + +.spinner:before { + -webkit-animation: spinning 2.4s cubic-bezier(.41, .26, .2, .62); + animation: spinning 2.4s cubic-bezier(.41, .26, .2, .62); + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite +} + +.spinner:after { + -webkit-animation: spinning 2.4s cubic-bezier(.51, .09, .21, .8); + animation: spinning 2.4s cubic-bezier(.51, .09, .21, .8); + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite +} + +@-webkit-keyframes spinning { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 25% { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); + } + + 50% { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + + 75% { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes spinning { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 50% { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/src/style/module/typography.css b/src/style/module/typography.css new file mode 100644 index 0000000..96a1fa2 --- /dev/null +++ b/src/style/module/typography.css @@ -0,0 +1,148 @@ +/** + * TYPOGRAPHY + */ +body { + color: #272727; + font-family: "Lato", sans-serif; + font-size: 16px; + font-weight: 400; + line-height: 1.5em; +} + +a { + color: var(--blue); + text-decoration: none; +} + +a:hover { + color: color-mix(in srgb, var(--color-primary), #FFF 15%); +} + +a:focus { + color: var(--blue); +} + +.text-huge, +.text-big, +.text-medium { + margin-bottom: 1em; +} + +.text-huge { + font-size: 36px; + line-height: 1.3em; +} + +.text-big { + font-size: 24px; + line-height: 1.3em; +} + +.text-medium { + font-size: 16px; + line-height: 1.5em; +} + +.text-small { + font-size: 12px; + line-height: 1.3em; +} + +.text-body { + font-size: 16px; + line-height: 1.5em; +} + +.text-primary { + color: #03a9f4; +} + +.text-dark { + color: #18232f; +} + +.text-secondary { + color: #e91e63; +} + +.text-white { + color: #fff; +} + +.text-success { + color: #4caf50; +} + +.text-info { + color: #5bc0de; +} + +.text-warning { + color: #f0ad4e; +} + +.text-error { + color: #e74c3c; +} + +.text-gray { + color: #969da6; +} + +.text-gray-light { + color: #eceff1; +} + +.text-light { + font-weight: 300; +} + +.text-normal { + font-weight: 400; +} + +.text-lineThrough { + text-decoration: line-through; +} + +.text-italic { + font-style: italic; +} + +.text-underline { + text-decoration: underline; +} + +.text-uppercase { + text-transform: uppercase; +} + +.text-withSubtitle { + margin-bottom: 0 !important; +} + +.text-withSubtitle+.text-huge, +.text-withSubtitle+.text-big, +.text-withSubtitle+.text-medium, +.text-withSubtitle+.text-small { + margin-top: 0.5em; +} + +h1, +h2, +h3, +h4 { + font-weight: 300; +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text-left { + text-align: left; +} \ No newline at end of file diff --git a/src/template/home.pug b/src/template/home.pug new file mode 100644 index 0000000..2a3d520 --- /dev/null +++ b/src/template/home.pug @@ -0,0 +1,32 @@ +doctype html + +include module/head.pug +main#app + .bg-white.section.text-dark + .container.mb-big + .text-center + div + h1.text-huge.text-withSubtitle Open Tourism Map + h2.text-big.text-gray Collaborative Holiday Planner + .spacer + .section.bg-dark.text-white + .container-medium + .row + .col-8 + h2.text-big Your journey + p.text-gray + | Browse hotels, restaurants and attractions,.... + br + | + | Select and plan the varying elements of your journey + .col-4 + .row.align + .input + input#journey.id(v-model="journey.id", placeholder="ID", type="text") + p + .row.align + button.button.button--primary.button--mobileFull( + v-on:click="start_journey" + ) Start the journey + +include module/foot.pug diff --git a/src/template/journey.pug b/src/template/journey.pug new file mode 100644 index 0000000..3b3e81b --- /dev/null +++ b/src/template/journey.pug @@ -0,0 +1,7 @@ +doctype html + +include module/head.pug + +main#app(v-cloak) + include module/journey/main.pug +include module/foot.pug diff --git a/src/template/module/foot.pug b/src/template/module/foot.pug new file mode 100644 index 0000000..6ea8792 --- /dev/null +++ b/src/template/module/foot.pug @@ -0,0 +1,13 @@ +script(src="https://unpkg.com/leaflet") + +script(src="https://unpkg.com/vue@2") +script(src="https://unpkg.com/vue2-datepicker") +script(src="https://unpkg.com/vue2-leaflet") +script(src="https://unpkg.com/sortablejs") +script(src="https://unpkg.com/vuedraggable") +script(src="/public/main.js", type="text/javascript", charset="utf-8") +footer.bg-dark.section + .container.text-center.text-small.text-white + | Built with   ❤   by Helcel + br + span.text-small.text-gray v0.0.1 diff --git a/template/module/head.pug b/src/template/module/head.pug similarity index 67% rename from template/module/head.pug rename to src/template/module/head.pug index 6252ff0..3274cfa 100644 --- a/template/module/head.pug +++ b/src/template/module/head.pug @@ -8,18 +8,10 @@ head href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:400,700,300", type="text/css" ) - link(rel="stylesheet", href="/public/css/index.css") + link(rel="stylesheet", href="/public/index.css") link(rel="stylesheet", href="https://unpkg.com/vue2-datepicker/index.css") - link( - rel="stylesheet", - href="https://unpkg.com/vue-multiselect@2/dist/vue-multiselect.min.css" - ) link(rel="stylesheet", href="https://unpkg.com/leaflet/dist/leaflet.css") - link( - rel="stylesheet", - href="https://unpkg.com/leaflet.awesome-markers/dist/leaflet.awesome-markers.css" - ) link( rel="stylesheet", href="https://unpkg.com/@fortawesome/fontawesome-free/css/all.min.css" diff --git a/template/module/importexport.pug b/src/template/module/journey/impexp.pug similarity index 93% rename from template/module/importexport.pug rename to src/template/module/journey/impexp.pug index b66f61e..6e0c3a5 100644 --- a/template/module/importexport.pug +++ b/src/template/module/journey/impexp.pug @@ -1,4 +1,4 @@ -div +.impexp .container-medium.section .aligner .input.col-sm-4 @@ -10,4 +10,4 @@ div .col-sm-2 button.button.button--primary.button--mobileFull( v-on:click="export_data" - ) Export + ) Export \ No newline at end of file diff --git a/src/template/module/journey/leg/drawer-notes.pug b/src/template/module/journey/leg/drawer-notes.pug new file mode 100644 index 0000000..0f4a1c7 --- /dev/null +++ b/src/template/module/journey/leg/drawer-notes.pug @@ -0,0 +1,8 @@ +.col-12.input.text-dark() + textarea.text-small#query_note( + v-model="journey.leg_get().notes" + @input="refreshTextAreaHeight" + @focus="refreshTextAreaHeight" + rows="1" + placeholder="...", + ) \ No newline at end of file diff --git a/src/template/module/journey/leg/drawer.pug b/src/template/module/journey/leg/drawer.pug new file mode 100644 index 0000000..cc30f3e --- /dev/null +++ b/src/template/module/journey/leg/drawer.pug @@ -0,0 +1,48 @@ + +.col-12.input.text-dark + input#query_input( + type="search" + @input="search_active" + @focus="search_active" + placeholder="Search ... " + style="width:85%;" + :disabled="query.note" + ) + .spinner(v-if="query.load") + +div(v-if="['hotel', 'restaurant', 'place','other', 'travel'].indexOf(query.type)>=0") + template(v-for="(item, idx) in query.res" ) + .query-result.col-12.bg-white.text-dark( + :key="'q'+idx" + @mouseover="drawer_hover_item(item)" + @mouseleave="drawer_hover_item()" + @click="drawer_click_item(item)" ) + div( v-html="generate_icon(item, 'var(--dark)')") + .col-10() + | {{ item.name }} + .bg-dark.divider( + :key="'qdiv'+idx" style="height:1px" ) + .query-result.col-12.bg-white.text-dark( + v-if="query.load==false && query.res.length==0" ) + div( v-html="generate_icon('star', 'var(--dark)')") + .col-10() + | Add custom + + .col-12.text-white.text-center( + ) {{query.load? `Loading ...` : `Found ${query.res.length} results`}} +div(v-else-if="['flight'].indexOf(query.type)>=0") + template(v-for="(item, idx) in query.res" ) + .query-result.col-12.bg-white.text-dark( + :key="'q'+idx" + @mouseover="drawer_hover_item(item)" + @mouseleave="drawer_hover_item()" + @click="drawer_click_item(item)" ) + div( v-html="generate_icon('plane', 'var(--dark)')") + .col-10() + | {{ item.from }} => {{item.to}} + bg-dark.divider( + :key="'qdiv'+idx" style="height:1px" ) +div(v-else) + template() + .query-result.col-12.bg-white.text-dark() + | Unsuppored Query type {{query.type}} diff --git a/src/template/module/journey/leg/nav.pug b/src/template/module/journey/leg/nav.pug new file mode 100644 index 0000000..736c95e --- /dev/null +++ b/src/template/module/journey/leg/nav.pug @@ -0,0 +1,34 @@ +.scroll-handler.row( + @mouseleave="nav_mouseleave" + @mousemove="nav_mousemove") + + .col-3.col-sm-2.col-md-1 + .list-group.text-dark.h-100 + .fleft.list-group-item.bg-white.text-small.rounded.h-100(v-on:click.prevent="journey.leg_prev()") + i.fas.fa-angle-left + .col-6.col-sm-8.col-md-10 + draggable.scroll-content.list-group.bg-dark( + tag="div", + :list="journey.data.main", + handle=".handle" + ) + .list-group-item.handle.text-dark( + v-for="(element, idx) in journey.data.main", + :key="idx", + @click="journey.leg_sel(idx)", + :class="journey.sel_leg == idx ? 'bg-primary' : 'bg-white'" + ) + .text {{ element.title || "Leg "+idx}} + i.fa.fa-times.close.fright( + style="top: 2px; right: 2px; position: absolute", + @click="journey.rm_leg(idx)" + ) + .list-group-item.bg-dark + .list-group-item.bg-white.text-dark(@click="journey.add_leg()") + div + i.fa.fa-plus.add() + + .col-3.col-sm-2.col-md-1 + .list-group.text-dark.h-100 + a.fright.list-group-item.bg-white.text-small.rounded.h-100(v-on:click.prevent="journey.leg_next()") + i.fas.fa-angle-right \ No newline at end of file diff --git a/src/template/module/journey/leg/top.pug b/src/template/module/journey/leg/top.pug new file mode 100644 index 0000000..bd63bec --- /dev/null +++ b/src/template/module/journey/leg/top.pug @@ -0,0 +1,36 @@ +.row.text-center.align + .col-5.col-sm-4.col-md-2 + .input + input( + placeholder="Leg" + v-model="journey.leg_get().title") + + .col-5.col-sm-4.col-md-2.mr-auto + .input + input( + placeholder="Day" + v-model="journey.leg_get().day_title[journey.sel_day]" + ) + .col-8.col-sm-6.col-md-4 + .input + //- label Date Range ({{ journey.leg_len() }}) + date-picker( + :lang="lang", + v-model="journey.leg_get().date_range", + range="", + format="ddd D MMM", + placeholder="Date Range", + v-on:change="journey.date_update(journey.sel_leg)" + ) + .col-4.col-sm-4.col-md-3.ml-auto + .input + input( + disabled="", + :value="journey.date_sel() + ' (' + journey.sel_day + ')'" + ) + //- .col-6.list-group-item.align.center.bg-white(style="padding: 0.5rem 0;") + //- i.fas.fa-angle-double-right(v-on:click.prevent="journey.day_next()") + .col-sm-1.text-small + + //- a(href="#prev", v-on:click.prevent="journey.day_prev()") + i.fas.fa-angle-left \ No newline at end of file diff --git a/src/template/module/journey/main.pug b/src/template/module/journey/main.pug new file mode 100644 index 0000000..fb8d244 --- /dev/null +++ b/src/template/module/journey/main.pug @@ -0,0 +1,31 @@ +.row.fleft(style="position:absolute;right:0;") + .col-1 + a(:href="'/short/' + journey.id") + i.fas.fa-file-contract + .col-1 + a(:href="'/view/' + journey.id") + i.fas.fa-camera + .col-1 + a(href="#", v-on:click.prevent="first_step") + i.fas.fa-tools + + +.bg-dark.text-white(v-if="journey && journey.leg_get()") + .container + .row.align(style="padding-top:45px;") + .col-6.col-sm-4.col-md-3.input.text-big + input.text-center(v-model="journey.data.name" placeholder="My Journey" type="text") + //- input.small(type="text", :placeholder="journey.date_tot() + ' (' + journey.tot_len() + ')'" ) + + include leg/nav.pug + include leg/top.pug + .row(style="aspect-ratio:1.25;") + .map-container(:class=" { 'col-2 col-sm-5 col-md-8': query.type, 'col-2 col-sm-5 col-md-6': query.note , 'col-12': (!query.type && !query.note) }" ) + include map.pug + .row.drawer-container(:class="{ 'col-10 col-sm-7 col-md-4': query.type, 'col-10 col-sm-7 col-md-6': query.note, 'col-0': (!query.type && !query.note) }") + .drawer-container(:class="{ 'col-12 ': query.type, 'col-0': !query.type }") + include leg/drawer.pug + .drawer-container(:class="{ 'col-12': query.note, 'col-0': !query.note }") + include leg/drawer-notes.pug + +//- include impexp.pug \ No newline at end of file diff --git a/src/template/module/journey/map.pug b/src/template/module/journey/map.pug new file mode 100644 index 0000000..5087f8a --- /dev/null +++ b/src/template/module/journey/map.pug @@ -0,0 +1,21 @@ +l-map( + :zoom.sync="journey.leg_get().map.zoom", + :center.sync="journey.leg_get().map.center", + style="height:100%" + no-blocking-animations=true + ref="map" +) + l-tile-layer( + url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + attribution="© OpenStreetMap contributors" + ) + l-control-scale(position="bottomleft", :imperial="false", :metric="true") + include map/override.pug + + include map/hotel.pug + include map/activities.pug + include map/restaurants.pug + + include map/travel.pug + template(v-if="edit_active") + include map/right_menu.pug \ No newline at end of file diff --git a/src/template/module/journey/map/activities.pug b/src/template/module/journey/map/activities.pug new file mode 100644 index 0000000..a7bb1c5 --- /dev/null +++ b/src/template/module/journey/map/activities.pug @@ -0,0 +1,6 @@ +include mixin-marker.pug +div( + v-for="(place, index) in journey.leg_get().places.activities", + :key="'activities'+index", + ) + +map_marker("activities", "var(--lightdark)", "var(--light)", "var(--lightlight)") \ No newline at end of file diff --git a/src/template/module/journey/map/hotel.pug b/src/template/module/journey/map/hotel.pug new file mode 100644 index 0000000..42947f7 --- /dev/null +++ b/src/template/module/journey/map/hotel.pug @@ -0,0 +1,7 @@ +include mixin-marker.pug +div( + v-if="journey.leg_get().hotel", + v-for="(place, index) in [journey.leg_get().hotel]", + :key="'hotel'+index", + ) + +map_marker("hotel", "var(--darkdark)", "var(--darkdark)", "var(--darkdark)") \ No newline at end of file diff --git a/src/template/module/journey/map/mixin-marker.pug b/src/template/module/journey/map/mixin-marker.pug new file mode 100644 index 0000000..9dc67e4 --- /dev/null +++ b/src/template/module/journey/map/mixin-marker.pug @@ -0,0 +1,37 @@ + +mixin map_marker(place, color_sel_c, color_sel_o, color_else) + l-marker( + :lat-lng="place.latlon" + ) + l-icon( + v-if="(place.step == journey.sel_day)" + v-html="generate_marker(place, \""+color_sel_c+"\")" + ) + l-icon( + v-else-if="(place.step >=0)" + v-html="generate_marker(place, \""+color_sel_o+"\")" + ) + l-icon( + v-else + v-html="generate_marker(place, \""+color_else+"\")" + ) + l-popup( + :options="{maxWidth:400, minWidth:300}") + h1.row.text-medium.text-center {{ place.sname }} + span.row.text-small.text-gray {{ place.display_name }} + span(v-if="edit_active") + .row.input() + textarea.col-12.col-sm-12.text-small( + placeholder="", + v-model="place.notes", + ) + .leaflet-popup-button-group(v-if="edit_active") + a.text-gray( + v-on:click.prevent="place.step = ((place.step==journey.sel_day)?-1:journey.sel_day)" + v-html="generate_icon(((place.step==journey.sel_day)?'calendar-xmark':'calendar-plus'), 'NA')" + ) + a.text-gray( + v-on:click.prevent="place_delete(\""+place+"\",index)" + v-html="generate_icon('trash', 'NA')" + ) + span.row.text-small.text-dark(v-else) {{ place.notes }} diff --git a/src/template/module/journey/map/override.pug b/src/template/module/journey/map/override.pug new file mode 100644 index 0000000..5fe6755 --- /dev/null +++ b/src/template/module/journey/map/override.pug @@ -0,0 +1,11 @@ +l-marker( + v-if="map_override.active", + v-for="(el, idx) in map_override.elements" + key="'ovr'+idx" + :lat-lng="el" + ) + l-icon(v-html="generate_marker('plus', 'darkgreen')") +l-polyline( + v-if="map_override.active && map_override.elements.length>1" + :lat-lngs="map_override.elements" :color="'darkgreen'" +) \ No newline at end of file diff --git a/src/template/module/journey/map/restaurants.pug b/src/template/module/journey/map/restaurants.pug new file mode 100644 index 0000000..1685cd8 --- /dev/null +++ b/src/template/module/journey/map/restaurants.pug @@ -0,0 +1,6 @@ +include mixin-marker.pug +div( + v-for="(place, index) in journey.leg_get().places.restaurants", + :key="'restaurants'+index", + ) + +map_marker("restaurants", "var(--dark)", "var(--dark)", "var(--dark)") \ No newline at end of file diff --git a/src/template/module/journey/map/right_menu.pug b/src/template/module/journey/map/right_menu.pug new file mode 100644 index 0000000..bd5990a --- /dev/null +++ b/src/template/module/journey/map/right_menu.pug @@ -0,0 +1,21 @@ +.map-menu.map-menu-top + div(v-if="query.type" @click="drawer_click_item()" ) + .map-menu-item(v-html="generate_icon('close')") + div(v-if="!query.type" @click="search_enable('hotel')") + .map-menu-item( v-html="generate_icon('bed')") + div(v-if="!query.type" @click="search_enable('restaurant')") + .map-menu-item( v-html="generate_icon('utensils')") + div(v-if="!query.type" @click="search_enable('place')") + .map-menu-item( v-html="generate_icon('star')") + .map-menu-sub(v-if="!query.type" @mouseenter="query.sub=true" @mouseleave="query.sub=false" ) + .map-menu-item(v-html="generate_icon('route')") + .map-menu-item(v-if="query.sub" @click="search_enable('flight')" v-html="generate_icon('plane')") + .map-menu-item(v-if="query.sub" @click="search_enable('train')" v-html="generate_icon('train')") + .map-menu-item(v-if="query.sub" @click="search_enable('car')" v-html="generate_icon('car')") + .map-menu-item(v-if="query.sub" @click="search_enable('other')" v-html="generate_icon('person-biking')") + +.map-menu.map-menu-center + div(v-if="query.note" @click="drawer_click_item()" ) + .map-menu-item(v-html="generate_icon('close')") + div(v-if="!query.note" @click="search_enable('notes')") + .map-menu-item( v-html="generate_icon('pencil')") \ No newline at end of file diff --git a/src/template/module/journey/map/travel.pug b/src/template/module/journey/map/travel.pug new file mode 100644 index 0000000..d7e0799 --- /dev/null +++ b/src/template/module/journey/map/travel.pug @@ -0,0 +1,32 @@ +mixin flight_popup() + l-popup( + :options="{maxWidth:400, minWidth:300}" + ) + h1.row.text-medium.text-center.text-uppercase {{ travel.id }} + span.row.text-small.text-gray {{ travel.from }} - {{travel.to}} + span(v-if="edit_active") + .row.input(style="margin-bottom:0") + textarea.col-12.col-sm-12.text-small( + placeholder="", + v-model="travel.notes", + ) + span.row.text-small.text-dark(v-else) {{ travel.notes }} + span(v-if="edit_active") + .leaflet-popup-button-group(v-if="edit_active") + a.text-gray( + v-on:click.prevent="place_delete('flight',idx)" + v-html="generate_icon('trash', 'NA')" + ) + +div(v-for= "(travel, idx) in journey.leg_get().travel") + l-polyline(:lat-lngs="travel.path" :color="travel.color || 'gray'") + +flight_popup() + + l-marker( + v-for="(place, index) in travel.path" + :key="'plane'+index" + :lat-lng="place" + ) + l-icon(v-html="generate_icon('plane', travel.color || 'gray', generate_rotation(index,travel.path), 'travel-path-icon')" + ) + +flight_popup() diff --git a/src/template/module/view/nav.pug b/src/template/module/view/nav.pug new file mode 100644 index 0000000..fa9eb3b --- /dev/null +++ b/src/template/module/view/nav.pug @@ -0,0 +1,10 @@ +.row.fleft(style="position:absolute;right:0;") + .col-1 + a(:href="'/short/' + journey.id") + i.fas.fa-file-contract + .col-1 + a(:href="'/view/' + journey.id") + i.fas.fa-camera + //- .col-1 + //- a(:href="'/' + journey.id" v-on:click.prevent="first_step") + //- i.fas.fa-tools diff --git a/src/template/module/view/short_leg.pug b/src/template/module/view/short_leg.pug new file mode 100644 index 0000000..756cabb --- /dev/null +++ b/src/template/module/view/short_leg.pug @@ -0,0 +1,39 @@ +.col-11.container.section + .row.text-center.align.padding-1 + .input.col-5.col-sm-2 + input(disabled="", placeholder="Unnamed" :value="item.title") + .col-sm-1 + .input.col-6.col-sm-4 + input( + disabled="", + placeholder="No Dates", + :value="item.date_range ? item.date_range[0].toLocal() + ' - ' + item.date_range[1].toLocal() : ''" + ) + .col-1.col-sm-2 + .input.col-5.col-sm-3.text-dark + .text(disabled="" placeholder="No Hotel" :value="item.hotel?item.hotel.sname:''") {{item.hotel?item.hotel.sname:'No Hotel'}} + //- .row.text-center + .input.col-sm-3(v-if="item.travel") + div(v-for="(item, idx) in item.travel") + input(disabled="", placeholder="-" :value="item.map((v) => v.id).join(', ')") + .row.align.padding-1 + .input.col-sm-10.text-dark + .text-small( + placeholder="No Restaurants", + :value="item.places.restaurants.map((v) => v.sname + (v.notes ? '(' + v.notes + ')' : '')).join(', ') || 'No Restaurants'", + disabled="" + ) {{item.places.restaurants.map((v) => v.sname + (v.notes ? '(' + v.notes + ')' : '')).join(', ') || 'No Restaurants'}} + .row.align.padding-1 + .input.col-sm-10.text-dark + .text-small( + placeholder="No Activities", + :value="item.places.activities.map((v) => v.sname + (v.notes ? '(' + v.notes + ')' : '')).join(', ') || 'No Activites'", + disabled="" + ) {{item.places.activities.map((v) => v.sname + (v.notes ? '(' + v.notes + ')' : '')).join(', ') || 'No Activites'}} + .row.align.padding-1 + .input.col-sm-10.text-dark + .text-small( + placeholder="No Notes", + :value="item.notes || 'No Notes'", + disabled="" + ) {{item.notes || 'No Notes'}} diff --git a/src/template/module/view/view_day.pug b/src/template/module/view/view_day.pug new file mode 100644 index 0000000..a90fcd6 --- /dev/null +++ b/src/template/module/view/view_day.pug @@ -0,0 +1,19 @@ +div(v-for="(e, idx) in journey.data.main", :key="idx") + .bg-dark.text-white(v-if="journey.sel_leg == idx") + .container.section + .row + .col-3.fleft.text-center.text-white.text-huge + a(v-on:click.prevent="journey.day_prev()") + i.fas.fa-angle-left + .col-6.container.text-center.align + span.small {{ journey.data.main[idx].title }} {{ journey.sel_day }} + .text-big.text-gray {{ journey.data.main[idx].day_title[journey.sel_day] }} + .col-3.fright.text-center.text-white.text-huge + a(v-on:click.prevent="journey.day_next()") + i.fas.fa-angle-right + .row + .col-12.col-sm-12(style="aspect-ratio:1.25;") + include ../journey/map.pug + .row + .col-10 + span.small.text-gray {{journey.data.main[idx].note || '...'}} diff --git a/src/template/short.pug b/src/template/short.pug new file mode 100644 index 0000000..61662f6 --- /dev/null +++ b/src/template/short.pug @@ -0,0 +1,16 @@ +doctype html +include module/head.pug +main#app(v-cloak) + include module/view/nav.pug + + .bg-dark.text-white(v-if="journey && journey.leg_get()") + .container + .row.align(style="padding-top:45px;") + .col-7.col-sm-5.col-md-4.input.text-big + input.text-center(v-model="journey.data.name" placeholder="My Journey" type="text" disabled) + div( + v-for="(item, idx) in journey.data.main", + :class="idx % 2 === 0 ? 'bg-white text-dark' : 'bg-dark text-white'" + ) + include module/view/short_leg.pug +include module/foot.pug diff --git a/src/template/view.pug b/src/template/view.pug new file mode 100644 index 0000000..ff1fff4 --- /dev/null +++ b/src/template/view.pug @@ -0,0 +1,6 @@ +doctype html +include module/head.pug +main#app(v-cloak) + div(v-if="journey.leg_get()") + include module/view/view_day.pug +include module/foot.pug diff --git a/template/home.pug b/template/home.pug deleted file mode 100644 index 41087ea..0000000 --- a/template/home.pug +++ /dev/null @@ -1,77 +0,0 @@ -doctype html - -include module/head.pug -main#app - .container - section.mb-big - .text-center - img.main-logo.mb-medium( - src="/public/img/helcel.png", - alt="Helcel logo" - ) - div - h1.text-huge.text-withSubtitle Open Tourism Map - h2.text-big.text-gray Collaborative Holiday Planner - p#js-header-waypoint.m-none - a.button.button--primary.button--mobileFull(href="#go") Get started - .bg-dark - .container - .row.text-center - .col-12.col-sm-3 - .section - img( - src="/public/img/lightweight.png", - alt="Lightweight", - width="118" - ) - br - h2.text-withSubtitle.text-big.text-white - | Lightweight - br - span.text-medium.text-gray - | Powered By - br - | Fastify & Sierra - .col-12.col-sm-4 - .section - img( - src="/public/img/customizable.png", - alt="Customizable", - width="118" - ) - br - h2.text-withSubtitle.text-big.text-white - | Customizable - br - span.text-medium.text-gray - | Many Templates - br - | to choose from - .col-12.col-sm-4 - .section - h2.text-withSubtitle.text-big.text-white - img( - src="/public/img/opensource.png", - alt="Open Source", - width="118" - ) - br - | - | FOSS - br - span.text-medium.text-gray :-) - #go.container-medium.section - h2.text-big Your journey - p - | Browse hotels, restaurants and attractions,.... - br - | - | Select and plan the varying elements of your journey - .aligner.aligner--contentEnd - .input - input#journey_id(v-model="journey_id", placeholder="ID", type="text") - button.button.button--primary.button--mobileFull( - v-on:click="start_journey" - ) Start the journey - -include module/foot.pug diff --git a/template/journey.pug b/template/journey.pug deleted file mode 100644 index 3d9a79c..0000000 --- a/template/journey.pug +++ /dev/null @@ -1,10 +0,0 @@ -doctype html - -include module/head.pug - -main#app(v-cloak) - include module/nav.pug - include module/journey_sec.pug - include module/journey_step.pug - include module/importexport.pug -include module/foot.pug diff --git a/template/module/foot.pug b/template/module/foot.pug deleted file mode 100644 index 9c2437c..0000000 --- a/template/module/foot.pug +++ /dev/null @@ -1,26 +0,0 @@ -script(src="https://unpkg.com/leaflet") -script(src="https://unpkg.com/leaflet.awesome-markers") -//- script(src="https://unpkg.com/axios") -script(src="https://unpkg.com/lodash") -script(src="https://unpkg.com/sortablejs") - -script(src="https://unpkg.com/vue@2") -script(src="https://unpkg.com/vue2-datepicker") -script(src="https://unpkg.com/vue-textarea-autosize") -script(src="https://unpkg.com/vue-multiselect@2") -script(src="https://unpkg.com/vue2-leaflet") -script(src="https://unpkg.com/vuedraggable") -script(src="/public/main.js", type="text/javascript", charset="utf-8") -footer.bg-dark - .container - .section.text-center.text-small - p.text-white - img(src="/public/img/helcel.png", alt="helcel logo", width="100") - br - br - | - | Built with   ❤   by Helcel - br - span.text-small.text-gray v0.0.1 - p.text-gray - a(href="https://git.helcel.net") Helcel Git diff --git a/template/module/journey_sec.pug b/template/module/journey_sec.pug deleted file mode 100644 index 4b5640e..0000000 --- a/template/module/journey_sec.pug +++ /dev/null @@ -1,20 +0,0 @@ -draggable.list-group.bg-dark( - tag="div", - :list="journey_data.main", - handle=".handle" -) - .list-group-item.handle( - v-for="(element, idx) in journey_data.main", - :key="idx", - @click="sel_section(idx)", - :class="journey_step_data.section == idx ? 'bg-primary' : 'bg-white'" - ) - .text {{ element.title }} - i.fa.fa-times.close.fright( - style="top: 2px; right: 2px; position: absolute", - @click="rm_section(idx)" - ) - - .list-group-item.bg-white(@click="add_section()") - .text Add Section - i.fa.fa-plus.add(style="top: 12px; right: 5px; position: absolute") diff --git a/template/module/journey_step.pug b/template/module/journey_step.pug deleted file mode 100644 index 10281da..0000000 --- a/template/module/journey_step.pug +++ /dev/null @@ -1,102 +0,0 @@ -div(v-for="(e, idx) in journey_data.main", :key="idx") - .bg-dark.text-white(v-if="journey_step_data.section == idx") - .container.section - .row.text-center - .input.col-sm-2 - input(v-model="journey_data.main[idx].title") - .input.col-sm-2 - input( - placeholder="Day title", - v-model="journey_data.main[idx].step_title[journey_step_data.day]" - ) - .col-sm-3 - .right.input.col-sm-2 - input( - disabled="", - :value="active_date() + ' (' + journey_step_data.day + ')'" - ) - .row - .col-9.col-ssm-12 - include map.pug - .col-3.col-ssm-12 - .row.text-center - div - label Date Range ({{ step_len(idx) }}) - .input.text-dark - date-picker( - :lang="lang", - v-model="journey_data.main[idx].dateRange", - range="", - format="ddd D MMM", - placeholder="Date Range", - v-on:change="update_date(idx)" - ) - .row.text-center - div - label Hotel - multiselect#ajax( - v-model="journey_data.main[idx].hotel", - label="sname", - track-by="place_id", - placeholder="Type to search", - open-direction="bottom", - :options="query.nominatim", - :searchable="true", - :loading="querying.hotel", - :internal-search="false", - :clear-on-select="false", - :options-limit="50", - :limit="1", - :max-height="600", - @search-change="debounceSearch.hotel" - ) - .row.text-center - div - label Restoration - multiselect#ajax( - v-model="journey_data.main[idx].places.restaurants", - label="sname", - track-by="place_id", - placeholder="Type to search", - open-direction="bottom", - :multiple="true", - :options="query.nominatim", - :searchable="true", - :loading="querying.food", - :internal-search="false", - :clear-on-select="false", - :options-limit="50", - :limit="10", - :max-height="600", - @search-change="debounceSearch.restaurants" - ) - .row.text-center - div - label Activities - multiselect#ajax( - v-model="journey_data.main[idx].places.activities", - label="sname", - track-by="place_id", - placeholder="Type to search", - open-direction="bottom", - :multiple="true", - :options="query.nominatim", - :searchable="true", - :loading="querying.place", - :internal-search="false", - :clear-on-select="false", - :options-limit="50", - :limit="10", - :max-height="600", - @search-change="debounceSearch.places" - ) - .row.text-center - div - label Notes - .input.text-dark(style="width: 100%") - textarea-autosize.text-small( - v-model="journey_data.main[idx].notes", - placeholder="Notes", - :min-height="30", - :max-height="350" - ) diff --git a/template/module/map.pug b/template/module/map.pug deleted file mode 100644 index 34f6e83..0000000 --- a/template/module/map.pug +++ /dev/null @@ -1,84 +0,0 @@ -l-map( - :zoom.sync="journey_data.main[idx].map.zoom", - :center.sync="journey_data.main[idx].map.center", - style="padding-top: 100%" -) - l-tile-layer( - url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", - attribution="© OpenStreetMap contributors" - ) - l-control-scale(position="topright", :imperial="false", :metric="true") - l-marker( - v-if="journey_data.main[idx].hotel", - :lat-lng="journey_data.main[idx].hotel.latlon" - ) - l-icon - div(v-html="generate_icon(journey_data.main[idx].hotel, 'darkblue')") - l-popup - h1.row.text-medium.text-center {{ journey_data.main[idx].hotel.sname }} - span.row.text-small.text-gray {{ journey_data.main[idx].hotel.display_name }} - span(v-if="journey_edit") - .row.input - textarea-autosize.col-12.col-sm-12.text-small( - placeholder="Notes", - v-model="journey_data.main[idx].hotel.notes", - :min-height="30", - :max-height="350" - ) - span.row.text-small.text-white(v-else) {{ journey_data.main[idx].hotel.notes }} - l-marker( - v-for="place in journey_data.main[idx].places.activities", - :lat-lng="place.latlon" - ) - l-icon - div( - v-if="place.step == journey_step_data.day", - v-html="generate_icon(place)" - ) - div( - v-else-if="place.step == -1 || place.step == undefined", - v-html="generate_icon(place, 'gray')" - ) - div(v-else-if="journey_edit", v-html="generate_icon(place, 'lightgray')") - div(v-else) - l-popup - h1.row.text-medium.text-center {{ place.sname }} - span.row.text-small.text-gray {{ place.display_name }} - span(v-if="journey_edit") - .row.input - textarea-autosize.col-12.col-sm-12.text-small( - placeholder="Notes", - v-model="place.notes", - :min-height="30", - :max-height="350" - ) - a.leaflet-popup-close-button.text-gray( - style="right: 0px; visibility: visible", - href="#rm", - v-on:click.prevent="place.step = -1" - ) - - a.leaflet-popup-close-button.text-gray( - style="right: 16px; visibility: visible", - href="#ad", - v-on:click.prevent="place.step = journey_step_data.day" - ) + - span.row.text-small.text-dark(v-else) {{ place.notes }} - - l-marker( - v-for="place in journey_data.main[idx].places.restaurants", - :lat-lng.sync="place.latlon" - ) - l-icon - div(v-html="generate_icon(place, 'cadetblue')") - l-popup - h1.row.text-medium.text-center {{ place.sname }} - span.row.text-small.text-gray {{ place.display_name }} - span(v-if="journey_edit") - .row.input - textarea-autosize.col-12.col-sm-12.text-small( - placeholder="Notes", - v-model="place.notes", - :min-height="30", - :max-height="350" - ) - span.row.text-small.text-dark(v-else) {{ place.notes }} diff --git a/template/module/nav.pug b/template/module/nav.pug deleted file mode 100644 index c7173f1..0000000 --- a/template/module/nav.pug +++ /dev/null @@ -1,38 +0,0 @@ -header.header - .header-inner.container - a.header-logo.text-dark(href="/") - img.header-logoImage( - src="/public/img/helcel.png", - alt="Helcel logo", - width="40" - ) - span.hide-small OTM - .input.input-invis.row - input.col-6.small(v-model="journey_data.name", type="text") - input.col-6.small( - disabled, - type="text", - :placeholder="total_date() + ' (' + total_days() + ')'" - ) - .row.header-nav.text-big(style="margin-bottom: 0") - .col-sm-2 - a(:href="'/short/' + journey_id") - i.fas.fa-file-contract - .col-sm-2 - a(:href="'/view/' + journey_id") - i.fas.fa-camera - .col-sm-2 - a(href="#main", v-on:click.prevent="first_step") - i.fas.fa-tools - .col-sm-1.text-small - a(href="#prevprev", v-on:click.prevent="prevprev_step") - i.fas.fa-angle-double-left - .col-sm-1 - a(href="#prev", v-on:click.prevent="prev_step") - i.fas.fa-angle-left - .col-sm-1 - a(href="#next", v-on:click.prevent="next_step") - i.fas.fa-angle-right - .col-sm-1.text-small - a(href="#nextnext", v-on:click.prevent="nextnext_step") - i.fas.fa-angle-double-right diff --git a/template/module/nav_pub.pug b/template/module/nav_pub.pug deleted file mode 100644 index 49af761..0000000 --- a/template/module/nav_pub.pug +++ /dev/null @@ -1,18 +0,0 @@ -header.header - .header-inner.container - a.header-logo.text-dark(href="/") - img.header-logoImage( - src="/public/img/helcel.png", - alt="Helcel logo", - width="40" - ) - span.hide-small HOTM - .input.input-invis - input.small(:value="journey_data.name", type="text", disabled="") - .row.header-nav.text-big(style="margin-bottom: 0") - .col-sm-3 - a(:href="'/short/' + journey_id") - i.fas.fa-file-contract - .col-sm-3 - a(:href="'/view/' + journey_id") - i.fas.fa-camera diff --git a/template/module/short_sec.pug b/template/module/short_sec.pug deleted file mode 100644 index 3bfe2bf..0000000 --- a/template/module/short_sec.pug +++ /dev/null @@ -1,43 +0,0 @@ -.container.section - .row.text-center - .input.col-sm-2 - input(disabled="", :value="item.title") - .input.col-sm-4 - input( - disabled="", - placeholder="No Dates", - :value="item.dateRange ? format_date(item.dateRange[0]) + ' - ' + format_date(item.dateRange[1]) : ''" - ) - .input.col-sm-2 - input(disabled="", placeholder="No Hotel", :value="item.hotel.sname") - .row.text-center - .input.col-sm-3(v-if="item.transit") - div(v-for="(item, idx) in item.transit") - input(disabled="", :value="item.map((v) => v.id).join(', ')") - .row.text-center - .input.col-sm-8(v-if="item.places && item.places.restaurants") - textarea-autosize.text-small( - placeholder="No Restaurants", - :value="item.places.restaurants.map((v) => v.sname + (v.notes ? '(' + v.notes + ')' : '')).join(', ')", - :min-height="30", - :max-height="350", - disabled="" - ) - .row.text-center - .input.col-sm-8(v-if="item.places && item.places.activities") - textarea-autosize.text-small( - placeholder="No Activities", - :value="item.places.activities.map((v) => v.sname + (v.notes ? '(' + v.notes + ')' : '')).join(', ')", - :min-height="30", - :max-height="350", - disabled="" - ) - .row.text-center - .input.col-sm-8(v-if="item.notes") - textarea-autosize.text-small( - placeholder="No Notes", - :value="item.notes", - :min-height="30", - :max-height="350", - disabled="" - ) diff --git a/template/module/view_step.pug b/template/module/view_step.pug deleted file mode 100644 index 6540d3e..0000000 --- a/template/module/view_step.pug +++ /dev/null @@ -1,19 +0,0 @@ -div(v-for="(e, idx) in journey_data.main", :key="idx") - .bg-dark.text-white(v-if="journey_step_data.section == idx") - .container.section - .aligner.text-center.text-white.text-huge(style="margin-bottom: 5px") - .aligner--itemTop.fleft - a(href="#prev", v-on:click.prevent="prev_step") - i.fas.fa-angle-left - span.container - span.small {{ journey_data.main[idx].title }} {{ journey_step_data.day }} - .text-big.text-gray {{ journey_data.main[idx].step_title[journey_step_data.day] }} - .aligner--itemEnd.fright - a(href="#next", v-on:click.prevent="next_step") - i.fas.fa-angle-right - .row - .col-12.col-sm-12 - include map.pug - .row - .col-12.col-sm-12 - .container diff --git a/template/short.pug b/template/short.pug deleted file mode 100644 index e06e6cb..0000000 --- a/template/short.pug +++ /dev/null @@ -1,10 +0,0 @@ -doctype html -include module/head.pug -main#app(v-cloak) - include module/nav_pub.pug - div( - v-for="(item, idx) in journey_data.main", - :class="idx % 2 === 0 ? 'bg-dark text-white' : ''" - ) - include module/short_sec.pug -include module/foot.pug diff --git a/template/view.pug b/template/view.pug deleted file mode 100644 index a80f3a6..0000000 --- a/template/view.pug +++ /dev/null @@ -1,6 +0,0 @@ -doctype html -include module/head.pug -main#app(v-cloak) - div(v-if="journey_data.main[journey_step_data.section] != undefined") - include module/view_step.pug -include module/foot.pug diff --git a/tsconfig-client.json b/tsconfig-client.json new file mode 100644 index 0000000..04b8e7b --- /dev/null +++ b/tsconfig-client.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "esnext", + "typeRoots": [ + "./node_modules/@types", + "./types/ext" + ], + "lib": [ + "esnext", + "DOM" + ], + "noEmit": true, // Disable emitting output (use esbuild to handle this) + "skipLibCheck": true, // Skip type checking of all declaration files (*.d.ts) + "strict": false, // Disable strict type checks if needed + "moduleResolution": "node", + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 6a54986..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - - "compilerOptions": { - "target": "esnext", - "typeRoots": ["./node_modules/@types", "./types/ext"], - "lib": ["esnext", "DOM"], - "noEmit": true, // Disable emitting output (use esbuild to handle this) - "skipLibCheck": true, // Skip type checking of all declaration files (*.d.ts) - "strict": false, // Disable strict type checks if needed - "moduleResolution": "node", - } -} diff --git a/yarn.lock b/yarn.lock index bfa7041..1ef3ec5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,1622 +1,3013 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/parser@^7.6.0", "@babel/parser@^7.9.6": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.9.tgz#d9e78bee6dc80f9efd8f2349dcfbbcdace280fd5" - integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== - dependencies: - "@babel/types" "^7.26.9" - -"@babel/types@^7.26.9", "@babel/types@^7.6.1", "@babel/types@^7.9.6": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.9.tgz#08b43dec79ee8e682c2ac631c010bdcac54a21ce" - integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@esbuild/aix-ppc64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz#499600c5e1757a524990d5d92601f0ac3ce87f64" - integrity sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ== - -"@esbuild/android-arm64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz#b9b8231561a1dfb94eb31f4ee056b92a985c324f" - integrity sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g== - -"@esbuild/android-arm@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.0.tgz#ca6e7888942505f13e88ac9f5f7d2a72f9facd2b" - integrity sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g== - -"@esbuild/android-x64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.0.tgz#e765ea753bac442dfc9cb53652ce8bd39d33e163" - integrity sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg== - -"@esbuild/darwin-arm64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz#fa394164b0d89d4fdc3a8a21989af70ef579fa2c" - integrity sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw== - -"@esbuild/darwin-x64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz#91979d98d30ba6e7d69b22c617cc82bdad60e47a" - integrity sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg== - -"@esbuild/freebsd-arm64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz#b97e97073310736b430a07b099d837084b85e9ce" - integrity sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w== - -"@esbuild/freebsd-x64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz#f3b694d0da61d9910ec7deff794d444cfbf3b6e7" - integrity sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A== - -"@esbuild/linux-arm64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz#f921f699f162f332036d5657cad9036f7a993f73" - integrity sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg== - -"@esbuild/linux-arm@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz#cc49305b3c6da317c900688995a4050e6cc91ca3" - integrity sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg== - -"@esbuild/linux-ia32@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz#3e0736fcfab16cff042dec806247e2c76e109e19" - integrity sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg== - -"@esbuild/linux-loong64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz#ea2bf730883cddb9dfb85124232b5a875b8020c7" - integrity sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw== - -"@esbuild/linux-mips64el@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz#4cababb14eede09248980a2d2d8b966464294ff1" - integrity sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ== - -"@esbuild/linux-ppc64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz#8860a4609914c065373a77242e985179658e1951" - integrity sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw== - -"@esbuild/linux-riscv64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz#baf26e20bb2d38cfb86ee282dff840c04f4ed987" - integrity sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA== - -"@esbuild/linux-s390x@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz#8323afc0d6cb1b6dc6e9fd21efd9e1542c3640a4" - integrity sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA== - -"@esbuild/linux-x64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz#08fcf60cb400ed2382e9f8e0f5590bac8810469a" - integrity sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw== - -"@esbuild/netbsd-arm64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz#935c6c74e20f7224918fbe2e6c6fe865b6c6ea5b" - integrity sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw== - -"@esbuild/netbsd-x64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz#414677cef66d16c5a4d210751eb2881bb9c1b62b" - integrity sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA== - -"@esbuild/openbsd-arm64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz#8fd55a4d08d25cdc572844f13c88d678c84d13f7" - integrity sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw== - -"@esbuild/openbsd-x64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz#0c48ddb1494bbc2d6bcbaa1429a7f465fa1dedde" - integrity sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg== - -"@esbuild/sunos-x64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz#86ff9075d77962b60dd26203d7352f92684c8c92" - integrity sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg== - -"@esbuild/win32-arm64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz#849c62327c3229467f5b5cd681bf50588442e96c" - integrity sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw== - -"@esbuild/win32-ia32@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz#f62eb480cd7cca088cb65bb46a6db25b725dc079" - integrity sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA== - -"@esbuild/win32-x64@0.25.0": - version "0.25.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz#c8e119a30a7c8d60b9d2e22d2073722dde3b710b" - integrity sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ== - -"@fastify/accept-negotiator@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-2.0.1.tgz#77afd6254ba77f6c22c6f35c4fb0c1b6d005199b" - integrity sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ== - -"@fastify/ajv-compiler@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-4.0.2.tgz#da05938cf852901bfb953738764f553b5449b80b" - integrity sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ== - dependencies: - ajv "^8.12.0" - ajv-formats "^3.0.1" - fast-uri "^3.0.0" - -"@fastify/error@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@fastify/error/-/error-4.0.0.tgz#7842d6161fbce78953638318be99033a0c2d5070" - integrity sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA== - -"@fastify/fast-json-stringify-compiler@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.2.tgz#aedd7729674531ef276a5b680bfaf9c711f3f85e" - integrity sha512-YdR7gqlLg1xZAQa+SX4sMNzQHY5pC54fu9oC5aYSUqBhyn6fkLkrdtKlpVdCNPlwuUuXA1PjFTEmvMF6ZVXVGw== - dependencies: - fast-json-stringify "^6.0.0" - -"@fastify/forwarded@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@fastify/forwarded/-/forwarded-3.0.0.tgz#0fc96cdbbb5a38ad453d2d5533a34f09b4949b37" - integrity sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA== - -"@fastify/leveldb@^6.0.0": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@fastify/leveldb/-/leveldb-6.0.2.tgz#e9be44525bac0ea6e52c44c703ebfe5ff14cc050" - integrity sha512-vFLkKMMEGDKP7X0F1Sg+hMy38NH1xM3nXqYgyka8YOoF2Ub2ZC9Ac0YiQBj1+bRO3C+wea4+0zPjizQ6ZRpvRQ== - dependencies: - encoding-down "^7.0.0" - fastify-plugin "^5.0.0" - leveldown "^6.0.0" - levelup "^5.0.0" - -"@fastify/merge-json-schemas@^0.2.0": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz#3aa30d2f0c81a8ac5995b6d94ed4eaa2c3055824" - integrity sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A== - dependencies: - dequal "^2.0.3" - -"@fastify/proxy-addr@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@fastify/proxy-addr/-/proxy-addr-5.0.0.tgz#e9d1c7a49b8380d9f92a879fdc623ac47ee27de3" - integrity sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA== - dependencies: - "@fastify/forwarded" "^3.0.0" - ipaddr.js "^2.1.0" - -"@fastify/send@^3.2.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@fastify/send/-/send-3.3.1.tgz#cb5759480eb4110b44d9af613d61b3f8b2933d8b" - integrity sha512-6pofeVwaHN+E/MAofCwDqkWUliE3i++jlD0VH/LOfU8TJlCkMUSgKvA9bawDdVXxjve7XrdYMyDmkiYaoGWEtA== - dependencies: - "@lukeed/ms" "^2.0.2" - escape-html "~1.0.3" - fast-decode-uri-component "^1.0.1" - http-errors "^2.0.0" - mime "^3" - -"@fastify/static@^8.0.0": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@fastify/static/-/static-8.1.1.tgz#406bfab6b9c5d9ccb0f6b41e66963d6775c11ead" - integrity sha512-TW9eyVHJLytZNpBlSIqd0bl1giJkEaRaPZG+5AT3L/OBKq9U8D7g/OYmc2NPQZnzPURGhMt3IAWuyVkvd2nOkQ== - dependencies: - "@fastify/accept-negotiator" "^2.0.0" - "@fastify/send" "^3.2.0" - content-disposition "^0.5.4" - fastify-plugin "^5.0.0" - fastq "^1.17.1" - glob "^11.0.0" - -"@fastify/view@^10.0.0": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@fastify/view/-/view-10.0.2.tgz#e661057ae927126d4582683732a13b615d64696a" - integrity sha512-tGjXFyDUMj5a+E8BBrQ2wpsVnpOfMq3cqy4WD8pnjWPE/HGNItBASUPoPUcX/QjPhxfuZZTYv2XdCmKXdcMZPw== - dependencies: - fastify-plugin "^5.0.0" - toad-cache "^3.7.0" - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@lukeed/ms@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@lukeed/ms/-/ms-2.0.2.tgz#07f09e59a74c52f4d88c6db5c1054e819538e2a8" - integrity sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA== - -"@prettier/plugin-pug@^3.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@prettier/plugin-pug/-/plugin-pug-3.2.1.tgz#4609131c8c468a22883795fe2c11945812600ddd" - integrity sha512-JvcW+44DtpnVsQFu++vBHl2fGVsuZC8iyxwutEUOt94thksdmXYQp1jFZWzaXckkwqLSgJHSyu19i1qvag5GJQ== - dependencies: - pug-lexer "^5.0.1" - -"@types/node@^22.13.5": - version "22.13.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.5.tgz#23add1d71acddab2c6a4d31db89c0f98d330b511" - integrity sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg== - dependencies: - undici-types "~6.20.0" - -abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -abstract-logging@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" - integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -ajv-formats@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" - integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== - dependencies: - ajv "^8.0.0" - -ajv@^8.0.0, ajv@^8.12.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -assert-never@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.4.0.tgz#b0d4988628c87f35eb94716cc54422a63927e175" - integrity sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -avvio@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/avvio/-/avvio-9.1.0.tgz#0ff80ed211682441d8aa39ff21a4b9d022109c44" - integrity sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw== - dependencies: - "@fastify/error" "^4.0.0" - fastq "^1.17.1" - -axios@^1.7.9: - version "1.8.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.1.tgz#7c118d2146e9ebac512b7d1128771cdd738d11e3" - integrity sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -babel-walk@3.0.0-canary-5: - version "3.0.0-canary-5" - resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" - integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== - dependencies: - "@babel/types" "^7.9.6" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bound@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" - integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== - dependencies: - call-bind-apply-helpers "^1.0.1" - get-intrinsic "^1.2.6" - -catering@^2.0.0, catering@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -character-parser@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" - integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== - dependencies: - is-regex "^1.0.3" - -chokidar@^3.5.2: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - 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" - optionalDependencies: - fsevents "~2.3.2" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -constantinople@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" - integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== - dependencies: - "@babel/parser" "^7.6.0" - "@babel/types" "^7.6.1" - -content-disposition@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -cookie@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610" - integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== - -cross-spawn@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^4: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -deferred-leveldown@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-7.0.0.tgz#39802715fda6ec06d0159a8b28bd1c7e2b1cf0bf" - integrity sha512-QKN8NtuS3BC6m0B8vAnBls44tX1WXAFATUsJlruyAYbZpysWV3siH6o/i3g9DCHauzodksO60bdj5NazNbjCmg== - dependencies: - abstract-leveldown "^7.2.0" - inherits "^2.0.3" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -doctypes@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" - integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encoding-down@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-7.1.0.tgz#8d55b5a20d50eb6f0edaf7233f6aee0ff562386a" - integrity sha512-ky47X5jP84ryk5EQmvedQzELwVJPjCgXDQZGeb9F6r4PdChByCGHTBrVcF3h8ynKVJ1wVbkxTsDC8zBROPypgQ== - dependencies: - abstract-leveldown "^7.2.0" - inherits "^2.0.3" - level-codec "^10.0.0" - level-errors "^3.0.0" - -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -esbuild@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.0.tgz#0de1787a77206c5a79eeb634a623d39b5006ce92" - integrity sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.25.0" - "@esbuild/android-arm" "0.25.0" - "@esbuild/android-arm64" "0.25.0" - "@esbuild/android-x64" "0.25.0" - "@esbuild/darwin-arm64" "0.25.0" - "@esbuild/darwin-x64" "0.25.0" - "@esbuild/freebsd-arm64" "0.25.0" - "@esbuild/freebsd-x64" "0.25.0" - "@esbuild/linux-arm" "0.25.0" - "@esbuild/linux-arm64" "0.25.0" - "@esbuild/linux-ia32" "0.25.0" - "@esbuild/linux-loong64" "0.25.0" - "@esbuild/linux-mips64el" "0.25.0" - "@esbuild/linux-ppc64" "0.25.0" - "@esbuild/linux-riscv64" "0.25.0" - "@esbuild/linux-s390x" "0.25.0" - "@esbuild/linux-x64" "0.25.0" - "@esbuild/netbsd-arm64" "0.25.0" - "@esbuild/netbsd-x64" "0.25.0" - "@esbuild/openbsd-arm64" "0.25.0" - "@esbuild/openbsd-x64" "0.25.0" - "@esbuild/sunos-x64" "0.25.0" - "@esbuild/win32-arm64" "0.25.0" - "@esbuild/win32-ia32" "0.25.0" - "@esbuild/win32-x64" "0.25.0" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -fast-decode-uri-component@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" - integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== - -fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stringify@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-6.0.1.tgz#82f1cb45fa96d0ca24b601f1738066976d6e2430" - integrity sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg== - dependencies: - "@fastify/merge-json-schemas" "^0.2.0" - ajv "^8.12.0" - ajv-formats "^3.0.1" - fast-uri "^3.0.0" - json-schema-ref-resolver "^2.0.0" - rfdc "^1.2.0" - -fast-querystring@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" - integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== - dependencies: - fast-decode-uri-component "^1.0.1" - -fast-redact@^3.1.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" - integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== - -fast-uri@^3.0.0, fast-uri@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" - integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== - -fastify-plugin@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-5.0.1.tgz#82d44e6fe34d1420bb5a4f7bee434d501e41939f" - integrity sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ== - -fastify@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/fastify/-/fastify-5.2.1.tgz#38381800eb26b7e27da72d9ee51c544f0c52ff39" - integrity sha512-rslrNBF67eg8/Gyn7P2URV8/6pz8kSAscFL4EThZJ8JBMaXacVdVE4hmUcnPNKERl5o/xTiBSLfdowBRhVF1WA== - dependencies: - "@fastify/ajv-compiler" "^4.0.0" - "@fastify/error" "^4.0.0" - "@fastify/fast-json-stringify-compiler" "^5.0.0" - "@fastify/proxy-addr" "^5.0.0" - abstract-logging "^2.0.1" - avvio "^9.0.0" - fast-json-stringify "^6.0.0" - find-my-way "^9.0.0" - light-my-request "^6.0.0" - pino "^9.0.0" - process-warning "^4.0.0" - rfdc "^1.3.1" - secure-json-parse "^3.0.1" - semver "^7.6.0" - toad-cache "^3.7.0" - -fastq@^1.17.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.0.tgz#a82c6b7c2bb4e44766d865f07997785fecfdcb89" - integrity sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA== - dependencies: - reusify "^1.0.4" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-my-way@^9.0.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-9.2.0.tgz#6f845aac6227adcb683134f60bd9e8c144af21da" - integrity sha512-d3uCir8Hmg7W1Ywp8nKf2lJJYU9Nwinvo+1D39Dn09nz65UKXIxUh7j7K8zeWhxqe1WrkS7FJyON/Q/3lPoc6w== - dependencies: - fast-deep-equal "^3.1.3" - fast-querystring "^1.0.0" - safe-regex2 "^4.0.0" - -follow-redirects@^1.15.6: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -foreground-child@^3.1.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" - integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== - dependencies: - cross-spawn "^7.0.6" - signal-exit "^4.0.1" - -form-data@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" - integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - mime-types "^2.1.12" - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-intrinsic@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.1.tgz#1c3aef9a59d680e611b53dcd24bb8639cef064d9" - integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^4.0.1" - minimatch "^10.0.0" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^2.0.0" - -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -http-errors@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - 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" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - -inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" - integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-core-module@^2.16.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - -is-expression@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" - integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== - dependencies: - acorn "^7.1.1" - object-assign "^4.1.1" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-promise@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.0.3: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" - integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - dependencies: - call-bound "^1.0.2" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -jackspeak@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.0.tgz#c489c079f2b636dc4cbe9b0312a13ff1282e561b" - integrity sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw== - dependencies: - "@isaacs/cliui" "^8.0.2" - -js-stringify@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" - integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== - -json-schema-ref-resolver@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-2.0.1.tgz#c92f16b452df069daac53e1984159e0f9af0598d" - integrity sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q== - dependencies: - dequal "^2.0.3" - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -jstransformer@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" - integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== - dependencies: - is-promise "^2.0.0" - promise "^7.0.1" - -level-codec@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-10.0.0.tgz#f9e892770532c6cdcc83529546730791b0c62c12" - integrity sha512-QW3VteVNAp6c/LuV6nDjg7XDXx9XHK4abmQarxZmlRSDyXYk20UdaJTSX6yzVvQ4i0JyWSB7jert0DsyD/kk6g== - dependencies: - buffer "^6.0.3" - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-errors@^3.0.0, level-errors@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-3.0.1.tgz#4bed48a33108cd83b0e39fdf9bbd84e96fbbef9f" - integrity sha512-tqTL2DxzPDzpwl0iV5+rBCv65HWbHp6eutluHNcVIftKZlQN//b6GEnZDM2CvGZvzGYMwyPtYppYnydBQd2SMQ== - -level-iterator-stream@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-5.0.0.tgz#85b3438e1b4c54ce5aa8c0eb973cfb628117df9e" - integrity sha512-wnb1+o+CVFUDdiSMR/ZymE2prPs3cjVLlXuDeSq9Zb8o032XrabGEXcTCsBxprAtseO3qvFeGzh6406z9sOTRA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - -leveldown@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.1.tgz#0f0e480fa88fd807abf94c33cb7e40966ea4b5ce" - integrity sha512-88c+E+Eizn4CkQOBHwqlCJaTNEjGpaEIikn1S+cINc5E9HEvJ77bqY4JY/HxT5u0caWqsc3P3DcFIKBI1vHt+A== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -levelup@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-5.1.1.tgz#9f99699f414ac084a3f8a28fc262a1f49cd7a52c" - integrity sha512-0mFCcHcEebOwsQuk00WJwjLI6oCjbBuEYdh/RaRqhjnyVlzqf41T1NnDtCedumZ56qyIh8euLFDqV1KfzTAVhg== - dependencies: - catering "^2.0.0" - deferred-leveldown "^7.0.0" - level-errors "^3.0.1" - level-iterator-stream "^5.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -light-my-request@^6.0.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-6.6.0.tgz#c9448772323f65f33720fb5979c7841f14060add" - integrity sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A== - dependencies: - cookie "^1.0.1" - process-warning "^4.0.0" - set-cookie-parser "^2.6.0" - -lru-cache@^11.0.0: - version "11.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" - integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@^3: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -minimatch@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" - integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -node-gyp-build@^4.3.0: - version "4.8.4" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" - integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== - -nodemon@^3.0.1: - version "3.1.9" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.9.tgz#df502cdc3b120e1c3c0c6e4152349019efa7387b" - integrity sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg== - 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" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -on-exit-leak-free@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" - integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== - -package-json-from-dist@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" - integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== - dependencies: - lru-cache "^11.0.0" - minipass "^7.1.2" - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pino-abstract-transport@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60" - integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== - dependencies: - split2 "^4.0.0" - -pino-std-serializers@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" - integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== - -pino@^9.0.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-9.6.0.tgz#6bc628159ba0cc81806d286718903b7fc6b13169" - integrity sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.1.1" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^2.0.0" - pino-std-serializers "^7.0.0" - process-warning "^4.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.2.0" - safe-stable-stringify "^2.3.1" - sonic-boom "^4.0.1" - thread-stream "^3.0.0" - -pretier@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pretier/-/pretier-0.0.1.tgz#7bfbb70fd340de3f7ad2dfdf84269922d24f3d5c" - integrity sha512-sx6A34i/SbtIbiNrwwPJ9gpGKXfezVFFsv5/7v+qwu5vcwp6RJftQ60LvRbV4LQngUnJVRyU23AsUG3t+zNHEA== - -prettier@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.2.tgz#d066c6053200da0234bf8fa1ef45168abed8b914" - integrity sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg== - -process-warning@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-4.0.1.tgz#5c1db66007c67c756e4e09eb170cdece15da32fb" - integrity sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q== - -promise@^7.0.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -pug-attrs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" - integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== - dependencies: - constantinople "^4.0.1" - js-stringify "^1.0.2" - pug-runtime "^3.0.0" - -pug-code-gen@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.3.tgz#58133178cb423fe1716aece1c1da392a75251520" - integrity sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw== - dependencies: - constantinople "^4.0.1" - doctypes "^1.1.0" - js-stringify "^1.0.2" - pug-attrs "^3.0.0" - pug-error "^2.1.0" - pug-runtime "^3.0.1" - void-elements "^3.1.0" - with "^7.0.0" - -pug-error@^2.0.0, pug-error@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.1.0.tgz#17ea37b587b6443d4b8f148374ec27b54b406e55" - integrity sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg== - -pug-filters@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" - integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== - dependencies: - constantinople "^4.0.1" - jstransformer "1.0.0" - pug-error "^2.0.0" - pug-walk "^2.0.0" - resolve "^1.15.1" - -pug-lexer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" - integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== - dependencies: - character-parser "^2.2.0" - is-expression "^4.0.0" - pug-error "^2.0.0" - -pug-linker@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" - integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== - dependencies: - pug-error "^2.0.0" - pug-walk "^2.0.0" - -pug-load@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" - integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== - dependencies: - object-assign "^4.1.1" - pug-walk "^2.0.0" - -pug-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" - integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== - dependencies: - pug-error "^2.0.0" - token-stream "1.0.0" - -pug-runtime@^3.0.0, pug-runtime@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" - integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== - -pug-strip-comments@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" - integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== - dependencies: - pug-error "^2.0.0" - -pug-walk@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" - integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== - -pug@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.3.tgz#e18324a314cd022883b1e0372b8af3a1a99f7597" - integrity sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g== - dependencies: - pug-code-gen "^3.0.3" - pug-filters "^4.0.0" - pug-lexer "^5.0.1" - pug-linker "^4.0.0" - pug-load "^3.0.0" - pug-parser "^6.0.0" - pug-runtime "^3.0.1" - pug-strip-comments "^2.0.0" - -queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -real-require@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve@^1.15.1: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -ret@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.5.0.tgz#30a4d38a7e704bd96dc5ffcbe7ce2a9274c41c95" - integrity sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.2.0, rfdc@^1.3.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - -safe-buffer@5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex2@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-4.0.1.tgz#b0a4b0216c1dd0256af987b7aea473e1c91543a8" - integrity sha512-goqsB+bSlOmVX+CiFX2PFc1OV88j5jvBqIM+DgqrucHnUguAUNtiNOs+aTadq2NqsLQ+TQ3UEVG3gtSFcdlkCg== - dependencies: - ret "~0.5.0" - -safe-stable-stringify@^2.3.1: - version "2.5.0" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" - integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== - -secure-json-parse@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-3.0.2.tgz#255b03bb0627ba5805f64f384b0a7691d8cb021b" - integrity sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w== - -semver@^7.5.3, semver@^7.6.0: - version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== - -set-cookie-parser@^2.6.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943" - integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - -sonic-boom@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d" - integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww== - dependencies: - atomic-sleep "^1.0.0" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -thread-stream@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" - integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== - dependencies: - real-require "^0.2.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toad-cache@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.7.0.tgz#b9b63304ea7c45ec34d91f1d2fa513517025c441" - integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -token-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" - integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== - -touch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" - integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== - -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -void-elements@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -with@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" - integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== - dependencies: - "@babel/parser" "^7.9.6" - "@babel/types" "^7.9.6" - assert-never "^1.2.1" - babel-walk "3.0.0-canary-5" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@asamuzakjp/css-color@npm:^2.8.2": + version: 2.8.3 + resolution: "@asamuzakjp/css-color@npm:2.8.3" + dependencies: + "@csstools/css-calc": "npm:^2.1.1" + "@csstools/css-color-parser": "npm:^3.0.7" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + lru-cache: "npm:^10.4.3" + checksum: 10c0/e108c92ee5de6d8510c9aaca8375c0aeab730dc9b6d4bd287aea2a0379cfbaa09f0814dcacb3e2ddc5c79d7deedf3f82ec8d1ce0effd4a8fac8415b1fe553798 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6": + version: 7.26.9 + resolution: "@babel/parser@npm:7.26.9" + dependencies: + "@babel/types": "npm:^7.26.9" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/4b9ef3c9a0d4c328e5e5544f50fe8932c36f8a2c851e7f14a85401487cd3da75cad72c2e1bcec1eac55599a6bbb2fdc091f274c4fcafa6bdd112d4915ff087fc + languageName: node + linkType: hard + +"@babel/types@npm:^7.26.9, @babel/types@npm:^7.6.1, @babel/types@npm:^7.9.6": + version: 7.26.9 + resolution: "@babel/types@npm:7.26.9" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/999c56269ba00e5c57aa711fbe7ff071cd6990bafd1b978341ea7572cc78919986e2aa6ee51dacf4b6a7a6fa63ba4eb3f1a03cf55eee31b896a56d068b895964 + languageName: node + linkType: hard + +"@csstools/color-helpers@npm:^5.0.2": + version: 5.0.2 + resolution: "@csstools/color-helpers@npm:5.0.2" + checksum: 10c0/bebaddb28b9eb58b0449edd5d0c0318fa88f3cb079602ee27e88c9118070d666dcc4e09a5aa936aba2fde6ba419922ade07b7b506af97dd7051abd08dfb2959b + languageName: node + linkType: hard + +"@csstools/css-calc@npm:^2.1.1, @csstools/css-calc@npm:^2.1.2": + version: 2.1.2 + resolution: "@csstools/css-calc@npm:2.1.2" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/34ced30553968ef5d5f9e00e3b90b48c47480cf130e282e99d57ec9b09f803aab8bc06325683e72a1518b5e7180a3da8b533f1b462062757c21989a53b482e1a + languageName: node + linkType: hard + +"@csstools/css-color-parser@npm:^3.0.7": + version: 3.0.8 + resolution: "@csstools/css-color-parser@npm:3.0.8" + dependencies: + "@csstools/color-helpers": "npm:^5.0.2" + "@csstools/css-calc": "npm:^2.1.2" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/90722c5a62ca94e9d578ddf59be604a76400b932bd3d4bd23cb1ae9b7ace8fcf83c06995d2b31f96f4afef24a7cefba79beb11ed7ee4999d7ecfec3869368359 + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-parser-algorithms@npm:3.0.4" + peerDependencies: + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-tokenizer@npm:3.0.3" + checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/aix-ppc64@npm:0.25.0" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/android-arm64@npm:0.25.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/android-arm@npm:0.25.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/android-x64@npm:0.25.0" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/darwin-arm64@npm:0.25.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/darwin-x64@npm:0.25.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/freebsd-arm64@npm:0.25.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/freebsd-x64@npm:0.25.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-arm64@npm:0.25.0" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-arm@npm:0.25.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-ia32@npm:0.25.0" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-loong64@npm:0.25.0" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-mips64el@npm:0.25.0" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-ppc64@npm:0.25.0" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-riscv64@npm:0.25.0" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-s390x@npm:0.25.0" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/linux-x64@npm:0.25.0" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/netbsd-arm64@npm:0.25.0" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/netbsd-x64@npm:0.25.0" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/openbsd-arm64@npm:0.25.0" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/openbsd-x64@npm:0.25.0" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/sunos-x64@npm:0.25.0" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/win32-arm64@npm:0.25.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/win32-ia32@npm:0.25.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.0": + version: 0.25.0 + resolution: "@esbuild/win32-x64@npm:0.25.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@fastify/accept-negotiator@npm:^2.0.0": + version: 2.0.1 + resolution: "@fastify/accept-negotiator@npm:2.0.1" + checksum: 10c0/b68386f8b3b69c73f79a54983bd86afc752c4373897ec1ad798356a325a69224ebd003c1aa47e11fc40b46f23bf2384ebb3907fe44214af806cc8ff6af913f18 + languageName: node + linkType: hard + +"@fastify/ajv-compiler@npm:^4.0.0": + version: 4.0.2 + resolution: "@fastify/ajv-compiler@npm:4.0.2" + dependencies: + ajv: "npm:^8.12.0" + ajv-formats: "npm:^3.0.1" + fast-uri: "npm:^3.0.0" + checksum: 10c0/ca048db219cc958fb1b962f5dfc141f29e067ecb28a8dbe782bbef80ae3c920021468009cad613f0ed68db410890bb09c773ba2f33cb13e055b48c9c338bd8fa + languageName: node + linkType: hard + +"@fastify/error@npm:^4.0.0": + version: 4.0.0 + resolution: "@fastify/error@npm:4.0.0" + checksum: 10c0/074b8a6c350c29a8fc8314298d9457fe0c1ba6e7f160e9ae6ba0e18853f1ec7427d768f966700cbf67a4694f3a9a593c6a23e42ce3ed62e40fecdf8026040d9a + languageName: node + linkType: hard + +"@fastify/fast-json-stringify-compiler@npm:^5.0.0": + version: 5.0.2 + resolution: "@fastify/fast-json-stringify-compiler@npm:5.0.2" + dependencies: + fast-json-stringify: "npm:^6.0.0" + checksum: 10c0/835f91cdb4911bbf50884ce60fa6937564e50f81cb134e81e251344ad7ec022ac500a54843e5167819a214828a369c996e68fbd5347965d336908b44904812e3 + languageName: node + linkType: hard + +"@fastify/forwarded@npm:^3.0.0": + version: 3.0.0 + resolution: "@fastify/forwarded@npm:3.0.0" + checksum: 10c0/bd139ee46c193ed9e04af2539f31fcb9e542b91917820f6cf401d5715c4c8bcccaae4a148e0ca14eeddee077ad8a3ab73e6f0f1ad769aff861fcef5f0a28e0d2 + languageName: node + linkType: hard + +"@fastify/leveldb@npm:^6.0.0": + version: 6.0.2 + resolution: "@fastify/leveldb@npm:6.0.2" + dependencies: + encoding-down: "npm:^7.0.0" + fastify-plugin: "npm:^5.0.0" + leveldown: "npm:^6.0.0" + levelup: "npm:^5.0.0" + checksum: 10c0/68bc12a6f89e27e99f1b7beb3728437d874a217ebaf841f0fdaffcb33d92c9f179c9716c7248ab444046867e2cae85dd45941d1bfa7b6c1f90f7287a66092c5d + languageName: node + linkType: hard + +"@fastify/merge-json-schemas@npm:^0.2.0": + version: 0.2.1 + resolution: "@fastify/merge-json-schemas@npm:0.2.1" + dependencies: + dequal: "npm:^2.0.3" + checksum: 10c0/dfa884a8f62d53f71de273fdcd0e501b213367767a7d8c522ae87ba6fb571b3eea85175d6e019036d7c0c5419be60305abe54899b9459f76ed5333358699efcb + languageName: node + linkType: hard + +"@fastify/proxy-addr@npm:^5.0.0": + version: 5.0.0 + resolution: "@fastify/proxy-addr@npm:5.0.0" + dependencies: + "@fastify/forwarded": "npm:^3.0.0" + ipaddr.js: "npm:^2.1.0" + checksum: 10c0/5a7d667480c3699015aa9bc12a47b6044106f412725d91a1b90f4a7845390c710486f05d322a895c633fb32a5ba1a17e598cb72e727337862034034443d59bcd + languageName: node + linkType: hard + +"@fastify/send@npm:^3.2.0": + version: 3.3.1 + resolution: "@fastify/send@npm:3.3.1" + dependencies: + "@lukeed/ms": "npm:^2.0.2" + escape-html: "npm:~1.0.3" + fast-decode-uri-component: "npm:^1.0.1" + http-errors: "npm:^2.0.0" + mime: "npm:^3" + checksum: 10c0/bd7b9538217ad9e7ec702b9bbad2c3b985370023b03159cfec884184c5b2035ca69b56dc951530727166f85c52e46b76043639e1b320c0803778091342f2174f + languageName: node + linkType: hard + +"@fastify/static@npm:^8.0.0": + version: 8.1.1 + resolution: "@fastify/static@npm:8.1.1" + dependencies: + "@fastify/accept-negotiator": "npm:^2.0.0" + "@fastify/send": "npm:^3.2.0" + content-disposition: "npm:^0.5.4" + fastify-plugin: "npm:^5.0.0" + fastq: "npm:^1.17.1" + glob: "npm:^11.0.0" + checksum: 10c0/ff6c1f508db308b323813b5bdddab898b0d0b92b481e1ffcc34ae43143e20a6d7c0645043a03c5c7663005277e2a9519f21adb3cf5f73d962379b0d0fb075e3b + languageName: node + linkType: hard + +"@fastify/view@npm:^10.0.0": + version: 10.0.2 + resolution: "@fastify/view@npm:10.0.2" + dependencies: + fastify-plugin: "npm:^5.0.0" + toad-cache: "npm:^3.7.0" + checksum: 10c0/6fc1e5c89ca5810057b3bf410eb1edf4439b971ed51feba8861d4372daa2d12792c9f47408f14c7f77b353543e417422d4caf8365a814eaa9b2b4d1cecf1b3c0 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@lukeed/ms@npm:^2.0.2": + version: 2.0.2 + resolution: "@lukeed/ms@npm:2.0.2" + checksum: 10c0/843b922717313bcde4943f478145d8bc13115b9b91d83bbaed53739b5644122984412310aed574792f4e6b492f2cbda178175f601856d310f67e14834c3f17a0 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@types/node@npm:^22.13.5": + version: 22.13.8 + resolution: "@types/node@npm:22.13.8" + dependencies: + undici-types: "npm:~6.20.0" + checksum: 10c0/bfc92b734a9dce6ac5daee0a52feccdf5dcb3804d895e4bc5384e2f4644612b8801725cd03c8c3c0888fb5eeb16b875877ac44b77641e0196dc1a837b1c2a366 + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.0 + resolution: "abbrev@npm:3.0.0" + checksum: 10c0/049704186396f571650eb7b22ed3627b77a5aedf98bb83caf2eac81ca2a3e25e795394b0464cfb2d6076df3db6a5312139eac5b6a126ca296ac53c5008069c28 + languageName: node + linkType: hard + +"abstract-leveldown@npm:^7.2.0": + version: 7.2.0 + resolution: "abstract-leveldown@npm:7.2.0" + dependencies: + buffer: "npm:^6.0.3" + catering: "npm:^2.0.0" + is-buffer: "npm:^2.0.5" + level-concat-iterator: "npm:^3.0.0" + level-supports: "npm:^2.0.1" + queue-microtask: "npm:^1.2.3" + checksum: 10c0/c81765642fc2100499fadc3254470a338ba7c0ba2e597b15cd13d91f333a54619b4d5c4137765e0835817142cd23e8eb7bf01b6a217e13c492f4872c164184dc + languageName: node + linkType: hard + +"abstract-logging@npm:^2.0.1": + version: 2.0.1 + resolution: "abstract-logging@npm:2.0.1" + checksum: 10c0/304879d9babcf6772260e5ddde632e6428e1f42f7a7a116d4689e97ad813a20e0ec2dd1e0a122f3617557f40091b9ca85735de4b48c17a2041268cb47b3f8ef1 + languageName: node + linkType: hard + +"acorn@npm:^7.1.1": + version: 7.4.1 + resolution: "acorn@npm:7.4.1" + bin: + acorn: bin/acorn + checksum: 10c0/bd0b2c2b0f334bbee48828ff897c12bd2eb5898d03bf556dcc8942022cec795ac5bb5b6b585e2de687db6231faf07e096b59a361231dd8c9344d5df5f7f0e526 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + +"ajv-formats@npm:^3.0.1": + version: 3.0.1 + resolution: "ajv-formats@npm:3.0.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/168d6bca1ea9f163b41c8147bae537e67bd963357a5488a1eaf3abe8baa8eec806d4e45f15b10767e6020679315c7e1e5e6803088dfb84efa2b4e9353b83dd0a + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.12.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"asap@npm:~2.0.3": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: 10c0/c6d5e39fe1f15e4b87677460bd66b66050cd14c772269cee6688824c1410a08ab20254bb6784f9afb75af9144a9f9a7692d49547f4d19d715aeb7c0318f3136d + languageName: node + linkType: hard + +"assert-never@npm:^1.2.1": + version: 1.4.0 + resolution: "assert-never@npm:1.4.0" + checksum: 10c0/494db08b89fb43d6231c9b4c48da22824f1912d88992bf0268e43b3dad0f64bd56d380addbb997d2dea7d859421d5e2904e8bd01243794f2bb5bfbc8d32d1fc6 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: 10c0/e329a6665512736a9bbb073e1761b4ec102f7926cce35037753146a9db9c8104f5044c1662e4a863576ce544fb8be27cd2be6bc8c1a40147d03f31eb1cfb6e8a + languageName: node + linkType: hard + +"avvio@npm:^9.0.0": + version: 9.1.0 + resolution: "avvio@npm:9.1.0" + dependencies: + "@fastify/error": "npm:^4.0.0" + fastq: "npm:^1.17.1" + checksum: 10c0/bdc294a7e8f38e1e21f9d338d97d7240025db54f1005fc419cfe0499a35edf2276ab1fe91135739faa3a9437358ec6912d5a56f23361b061880333cb4f1c7884 + languageName: node + linkType: hard + +"babel-walk@npm:3.0.0-canary-5": + version: 3.0.0-canary-5 + resolution: "babel-walk@npm:3.0.0-canary-5" + dependencies: + "@babel/types": "npm:^7.9.6" + checksum: 10c0/17b689874d15c37714cedf6797dd9321dcb998d8e0dda9a8fe8c8bbbf128bbdeb8935cf56e8630d6b67eae76d2a0bc1e470751e082c3b0e30b80d58beafb5e64 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2": + version: 1.0.3 + resolution: "call-bound@npm:1.0.3" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf + languageName: node + linkType: hard + +"catering@npm:^2.0.0, catering@npm:^2.1.0": + version: 2.1.1 + resolution: "catering@npm:2.1.1" + checksum: 10c0/a69f946f82cba85509abcb399759ed4c39d2cc9e33ba35674f242130c1b3c56673da3c3e85804db6898dfd966c395aa128ba484b31c7b906cc2faca6a581e133 + languageName: node + linkType: hard + +"character-parser@npm:^2.2.0": + version: 2.2.0 + resolution: "character-parser@npm:2.2.0" + dependencies: + is-regex: "npm:^1.0.3" + checksum: 10c0/5a8d3eff2c912a6878c84e2ebf9d42524e858aa7e1a1c7e8bb79ab54da109ad008fe9057a9d2b3230541d7ff858eda98983a2ae15db57ba01af2e989d29e932e + languageName: node + linkType: hard + +"chokidar@npm:^3.5.2": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"constantinople@npm:^4.0.1": + version: 4.0.1 + resolution: "constantinople@npm:4.0.1" + dependencies: + "@babel/parser": "npm:^7.6.0" + "@babel/types": "npm:^7.6.1" + checksum: 10c0/15129adef19b1af2c3ade8bd38f97c34781bf461472a30ab414384b28d072be83070c8d2175787c045ef7c222c415101ae609936e7903427796a0c0eca8449fd + languageName: node + linkType: hard + +"content-disposition@npm:^0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: "npm:5.2.1" + checksum: 10c0/bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb + languageName: node + linkType: hard + +"cookie@npm:^1.0.1": + version: 1.0.2 + resolution: "cookie@npm:1.0.2" + checksum: 10c0/fd25fe79e8fbcfcaf6aa61cd081c55d144eeeba755206c058682257cb38c4bd6795c6620de3f064c740695bb65b7949ebb1db7a95e4636efb8357a335ad3f54b + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"cssstyle@npm:^4.2.1": + version: 4.2.1 + resolution: "cssstyle@npm:4.2.1" + dependencies: + "@asamuzakjp/css-color": "npm:^2.8.2" + rrweb-cssom: "npm:^0.8.0" + checksum: 10c0/02ba8c47c0caaab57acadacb3eb6c0f5f009000f55d61f6563670e07d389b26edefeed497e6c1847fcd2e6bbe0b6974c2d4291f97fa0c6ec6add13a7fa926d84 + languageName: node + linkType: hard + +"data-urls@npm:^5.0.0": + version: 5.0.0 + resolution: "data-urls@npm:5.0.0" + dependencies: + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4, debug@npm:^4.3.4": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de + languageName: node + linkType: hard + +"decimal.js@npm:^10.4.3": + version: 10.5.0 + resolution: "decimal.js@npm:10.5.0" + checksum: 10c0/785c35279df32762143914668df35948920b6c1c259b933e0519a69b7003fc0a5ed2a766b1e1dda02574450c566b21738a45f15e274b47c2ac02072c0d1f3ac3 + languageName: node + linkType: hard + +"deferred-leveldown@npm:^7.0.0": + version: 7.0.0 + resolution: "deferred-leveldown@npm:7.0.0" + dependencies: + abstract-leveldown: "npm:^7.2.0" + inherits: "npm:^2.0.3" + checksum: 10c0/6c47b8b8728487a7397549b19e4c95bec2635a1ba9749ab683065602aeab83815da154c8f0e5fcf5ff367f57283e06918d013f5e9fa032dcced3f4239a9dc141 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + +"doctypes@npm:^1.1.0": + version: 1.1.0 + resolution: "doctypes@npm:1.1.0" + checksum: 10c0/b3f9d597ad8b9ac6aeba9d64df61f0098174f7570e3d34f7ee245ebc736c7bee122d9738a18e22010b98983fd9a340d63043d3841f02d8a7742a2d96d2c72610 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding-down@npm:^7.0.0": + version: 7.1.0 + resolution: "encoding-down@npm:7.1.0" + dependencies: + abstract-leveldown: "npm:^7.2.0" + inherits: "npm:^2.0.3" + level-codec: "npm:^10.0.0" + level-errors: "npm:^3.0.0" + checksum: 10c0/76288b04ea197765bfe587321699f6fbdb6fec3b5cdc102998d886a2c69b9ef3531b0de5730ae6ec3b8e47cbfd92632c652f913c7b69f43ed7f29f9444f1782a + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"entities@npm:^4.5.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"esbuild@npm:^0.25.0": + version: 0.25.0 + resolution: "esbuild@npm:0.25.0" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.0" + "@esbuild/android-arm": "npm:0.25.0" + "@esbuild/android-arm64": "npm:0.25.0" + "@esbuild/android-x64": "npm:0.25.0" + "@esbuild/darwin-arm64": "npm:0.25.0" + "@esbuild/darwin-x64": "npm:0.25.0" + "@esbuild/freebsd-arm64": "npm:0.25.0" + "@esbuild/freebsd-x64": "npm:0.25.0" + "@esbuild/linux-arm": "npm:0.25.0" + "@esbuild/linux-arm64": "npm:0.25.0" + "@esbuild/linux-ia32": "npm:0.25.0" + "@esbuild/linux-loong64": "npm:0.25.0" + "@esbuild/linux-mips64el": "npm:0.25.0" + "@esbuild/linux-ppc64": "npm:0.25.0" + "@esbuild/linux-riscv64": "npm:0.25.0" + "@esbuild/linux-s390x": "npm:0.25.0" + "@esbuild/linux-x64": "npm:0.25.0" + "@esbuild/netbsd-arm64": "npm:0.25.0" + "@esbuild/netbsd-x64": "npm:0.25.0" + "@esbuild/openbsd-arm64": "npm:0.25.0" + "@esbuild/openbsd-x64": "npm:0.25.0" + "@esbuild/sunos-x64": "npm:0.25.0" + "@esbuild/win32-arm64": "npm:0.25.0" + "@esbuild/win32-ia32": "npm:0.25.0" + "@esbuild/win32-x64": "npm:0.25.0" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/5767b72da46da3cfec51661647ec850ddbf8a8d0662771139f10ef0692a8831396a0004b2be7966cecdb08264fb16bdc16290dcecd92396fac5f12d722fa013d + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844 + languageName: node + linkType: hard + +"fast-decode-uri-component@npm:^1.0.1": + version: 1.0.1 + resolution: "fast-decode-uri-component@npm:1.0.1" + checksum: 10c0/039d50c2e99d64f999c3f2126c23fbf75a04a4117e218a149ca0b1d2aeb8c834b7b19d643b9d35d4eabce357189a6a94085f78cf48869e6e26cc59b036284bc3 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-json-stringify@npm:^6.0.0": + version: 6.0.1 + resolution: "fast-json-stringify@npm:6.0.1" + dependencies: + "@fastify/merge-json-schemas": "npm:^0.2.0" + ajv: "npm:^8.12.0" + ajv-formats: "npm:^3.0.1" + fast-uri: "npm:^3.0.0" + json-schema-ref-resolver: "npm:^2.0.0" + rfdc: "npm:^1.2.0" + checksum: 10c0/898aecd164707bced980fef61b0480dd80a47f87674d7643a75a60e5eca346018ba2552de200260030215d89f218d9cd7f342df14eec88ed44d45c81e4aa0eb4 + languageName: node + linkType: hard + +"fast-querystring@npm:^1.0.0": + version: 1.1.2 + resolution: "fast-querystring@npm:1.1.2" + dependencies: + fast-decode-uri-component: "npm:^1.0.1" + checksum: 10c0/e8223273a9b199722f760f5a047a77ad049a14bd444b821502cb8218f5925e3a5fffb56b64389bca73ab2ac6f1aa7aebbe4e203e5f6e53ff5978de97c0fde4e3 + languageName: node + linkType: hard + +"fast-redact@npm:^3.1.1": + version: 3.5.0 + resolution: "fast-redact@npm:3.5.0" + checksum: 10c0/7e2ce4aad6e7535e0775bf12bd3e4f2e53d8051d8b630e0fa9e67f68cb0b0e6070d2f7a94b1d0522ef07e32f7c7cda5755e2b677a6538f1e9070ca053c42343a + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.0, fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 10c0/74a513c2af0584448aee71ce56005185f81239eab7a2343110e5bad50c39ad4fb19c5a6f99783ead1cac7ccaf3461a6034fda89fffa2b30b6d99b9f21c2f9d29 + languageName: node + linkType: hard + +"fastify-plugin@npm:^5.0.0": + version: 5.0.1 + resolution: "fastify-plugin@npm:5.0.1" + checksum: 10c0/c5e5932e7b8c5713ff881adeade3e8ee8fc288e8249d79cd193a2a2438eef1ad58ae5814f12835acbf04025dbddf2628787cd845f3e550dee847f494a08f7c5b + languageName: node + linkType: hard + +"fastify@npm:^5.2.1": + version: 5.2.1 + resolution: "fastify@npm:5.2.1" + dependencies: + "@fastify/ajv-compiler": "npm:^4.0.0" + "@fastify/error": "npm:^4.0.0" + "@fastify/fast-json-stringify-compiler": "npm:^5.0.0" + "@fastify/proxy-addr": "npm:^5.0.0" + abstract-logging: "npm:^2.0.1" + avvio: "npm:^9.0.0" + fast-json-stringify: "npm:^6.0.0" + find-my-way: "npm:^9.0.0" + light-my-request: "npm:^6.0.0" + pino: "npm:^9.0.0" + process-warning: "npm:^4.0.0" + rfdc: "npm:^1.3.1" + secure-json-parse: "npm:^3.0.1" + semver: "npm:^7.6.0" + toad-cache: "npm:^3.7.0" + checksum: 10c0/00163bcac121e5fcb097dec0230d8e7918f0d5aa4be1ddce87f6571a13d31c9691d20def5dbd12df047bc3fc372cb0a72a392feecf3e2c958dc0931e52d262cb + languageName: node + linkType: hard + +"fastq@npm:^1.17.1": + version: 1.19.1 + resolution: "fastq@npm:1.19.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-my-way@npm:^9.0.0": + version: 9.2.0 + resolution: "find-my-way@npm:9.2.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-querystring: "npm:^1.0.0" + safe-regex2: "npm:^4.0.0" + checksum: 10c0/de869f044ea196493d3d8951e592e8155191cfa7ff56b49ae0aa3b7184e25a19e6931386a0b1ac0ba875648f54430b30c33610045bee0e2d0e5875b9b4fd13fb + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + +"form-data@npm:^4.0.1": + version: 4.0.2 + resolution: "form-data@npm:4.0.2" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + mime-types: "npm:^2.1.12" + checksum: 10c0/e534b0cf025c831a0929bf4b9bbe1a9a6b03e273a8161f9947286b9b13bf8fb279c6944aae0070c4c311100c6d6dbb815cd955dc217728caf73fad8dc5b8ee9c + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.6": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^11.0.0": + version: 11.0.1 + resolution: "glob@npm:11.0.1" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^4.0.1" + minimatch: "npm:^10.0.0" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^2.0.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/2b32588be52e9e90f914c7d8dec32f3144b81b84054b0f70e9adfebf37cd7014570489f2a79d21f7801b9a4bd4cca94f426966bfd00fb64a5b705cfe10da3a03 + languageName: node + linkType: hard + +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^4.0.0": + version: 4.0.0 + resolution: "html-encoding-sniffer@npm:4.0.0" + dependencies: + whatwg-encoding: "npm:^3.1.1" + checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-errors@npm:^2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore-by-default@npm:^1.0.1": + version: 1.0.1 + resolution: "ignore-by-default@npm:1.0.1" + checksum: 10c0/9ab6e70e80f7cc12735def7ecb5527cfa56ab4e1152cd64d294522827f2dcf1f6d85531241537dc3713544e88dd888f65cb3c49c7b2cddb9009087c75274e533 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.1.0": + version: 2.2.0 + resolution: "ipaddr.js@npm:2.2.0" + checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-buffer@npm:^2.0.5": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 10c0/e603f6fced83cf94c53399cff3bda1a9f08e391b872b64a73793b0928be3e5f047f2bcece230edb7632eaea2acdbfcb56c23b33d8a20c820023b230f1485679a + languageName: node + linkType: hard + +"is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + +"is-expression@npm:^4.0.0": + version: 4.0.0 + resolution: "is-expression@npm:4.0.0" + dependencies: + acorn: "npm:^7.1.1" + object-assign: "npm:^4.1.1" + checksum: 10c0/541831d39d3e7bfc8cecd966d6b0f3c0e6d9055342f17b634fb23e74f51ce90f1bfc3cf231c722fe003a61e8d4f0b9e07244fdaba57f4fc70a163c74006fd5a0 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: 10c0/b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9 + languageName: node + linkType: hard + +"is-promise@npm:^2.0.0": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 10c0/2dba959812380e45b3df0fb12e7cb4d4528c989c7abb03ececb1d1fd6ab1cbfee956ca9daa587b9db1d8ac3c1e5738cf217bdb3dfd99df8c691be4c00ae09069 + languageName: node + linkType: hard + +"is-regex@npm:^1.0.3": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jackspeak@npm:^4.0.1": + version: 4.1.0 + resolution: "jackspeak@npm:4.1.0" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + checksum: 10c0/08a6a24a366c90b83aef3ad6ec41dcaaa65428ffab8d80bc7172add0fbb8b134a34f415ad288b2a6fbd406526e9a62abdb40ed4f399fbe00cb45c44056d4dce0 + languageName: node + linkType: hard + +"js-stringify@npm:^1.0.2": + version: 1.0.2 + resolution: "js-stringify@npm:1.0.2" + checksum: 10c0/a450c04fde3a7e1c27f1c3c4300433f8d79322f9e3c2e76266843cef8c0b5a69b5f11b5f173212b2f15f2df09e068ef7ddf46ef775e2486f3006a6f4e912578d + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsdom@npm:^26.0.0": + version: 26.0.0 + resolution: "jsdom@npm:26.0.0" + dependencies: + cssstyle: "npm:^4.2.1" + data-urls: "npm:^5.0.0" + decimal.js: "npm:^10.4.3" + form-data: "npm:^4.0.1" + html-encoding-sniffer: "npm:^4.0.0" + http-proxy-agent: "npm:^7.0.2" + https-proxy-agent: "npm:^7.0.6" + is-potential-custom-element-name: "npm:^1.0.1" + nwsapi: "npm:^2.2.16" + parse5: "npm:^7.2.1" + rrweb-cssom: "npm:^0.8.0" + saxes: "npm:^6.0.0" + symbol-tree: "npm:^3.2.4" + tough-cookie: "npm:^5.0.0" + w3c-xmlserializer: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^3.1.1" + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.1.0" + ws: "npm:^8.18.0" + xml-name-validator: "npm:^5.0.0" + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 10c0/e48725ba4027edcfc9bca5799eaec72c6561ecffe3675a8ff87fe9c3541ca4ff9f82b4eff5b3d9c527302da0d859b2f60e9364347a5d42b77f5c76c436c569dc + languageName: node + linkType: hard + +"json-schema-ref-resolver@npm:^2.0.0": + version: 2.0.1 + resolution: "json-schema-ref-resolver@npm:2.0.1" + dependencies: + dequal: "npm:^2.0.3" + checksum: 10c0/3ea894d79dd176b4ef31f1a3b7b335447b854780f2bc49af2918de0502d3eabad1889232a7a72c37f1c7ca429acc2eaad940ca5fd25f8ead044d5fecb00e0378 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"jstransformer@npm:1.0.0": + version: 1.0.0 + resolution: "jstransformer@npm:1.0.0" + dependencies: + is-promise: "npm:^2.0.0" + promise: "npm:^7.0.1" + checksum: 10c0/11f9b4f368a55878dd7973154cd83b0adca27f974d21217728652530775b2bec281e92109de66f0c9e37c76af796d5b76b33f3e38363214a83d102d523a7285b + languageName: node + linkType: hard + +"level-codec@npm:^10.0.0": + version: 10.0.0 + resolution: "level-codec@npm:10.0.0" + dependencies: + buffer: "npm:^6.0.3" + checksum: 10c0/fbe1b86d419c4381cd5159025e37e86ff946b9ec39ca6196474eae6ca39e77128cf224fbae61a07293e41df8a4732da5664defe713d8830e0eccd27cfdb51d01 + languageName: node + linkType: hard + +"level-concat-iterator@npm:^3.0.0": + version: 3.1.0 + resolution: "level-concat-iterator@npm:3.1.0" + dependencies: + catering: "npm:^2.1.0" + checksum: 10c0/7bb1b8e991a179de2fecfd38d2c34544a139e1228cb730f3024ef11dcbd514cc89be30b02a2a81ef4e16b0c1553f604378f67302ea23868d98f055f9fa241ae4 + languageName: node + linkType: hard + +"level-errors@npm:^3.0.0, level-errors@npm:^3.0.1": + version: 3.0.1 + resolution: "level-errors@npm:3.0.1" + checksum: 10c0/105d39bacd450c491bf3e414efb63dd31e236aae0fec12d6c66c7b0564ac03e67b190b605f9cd6cb9b56f106a870402723b67cf1e899d20000b9527a2866aab8 + languageName: node + linkType: hard + +"level-iterator-stream@npm:^5.0.0": + version: 5.0.0 + resolution: "level-iterator-stream@npm:5.0.0" + dependencies: + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10c0/0c32c884789d8993b3d33106fd91aa596475b50f20f6333adefcdccfc9107278528e7262550e05ac369e53f7a9017061dc2a1fe20ccffb9e1f3c026acaa2d54a + languageName: node + linkType: hard + +"level-supports@npm:^2.0.1": + version: 2.1.0 + resolution: "level-supports@npm:2.1.0" + checksum: 10c0/60481dd403234c64e2c01ed2aafdc75250ddd49d770f75ebef3f92a2a5b2271bf774858bfd8c47cfae3955855f9ff9dd536683d6cffb7c085cd0e57245c4c039 + languageName: node + linkType: hard + +"leveldown@npm:^6.0.0": + version: 6.1.1 + resolution: "leveldown@npm:6.1.1" + dependencies: + abstract-leveldown: "npm:^7.2.0" + napi-macros: "npm:~2.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10c0/a637b19ca20525c9d947e91a1654bd0d3e94568130f1c82d2c0bf395fd8c9278a27050901db2079c285e0784f0ff30b76ee8cd77ca05cbd70dd8a635f8aea803 + languageName: node + linkType: hard + +"levelup@npm:^5.0.0": + version: 5.1.1 + resolution: "levelup@npm:5.1.1" + dependencies: + catering: "npm:^2.0.0" + deferred-leveldown: "npm:^7.0.0" + level-errors: "npm:^3.0.1" + level-iterator-stream: "npm:^5.0.0" + level-supports: "npm:^2.0.1" + queue-microtask: "npm:^1.2.3" + checksum: 10c0/d9c9a13f168b8a0e2d13873915219c63db8cbc0884e169c23d39826c575bf7fe255f9fb77df1b7ac74ea7d330c922331c88f6cb0ba7c75fbd351f73957cf349d + languageName: node + linkType: hard + +"light-my-request@npm:^6.0.0": + version: 6.6.0 + resolution: "light-my-request@npm:6.6.0" + dependencies: + cookie: "npm:^1.0.1" + process-warning: "npm:^4.0.0" + set-cookie-parser: "npm:^2.6.0" + checksum: 10c0/1440853cd3822ab83fbb1be4456099082dec8e9e3a4ea35c9d8d7d17a7ab98c83ad0a4c39a73a8c2b31b9ca70c57506e5b7a929495c149463ca0daca0d90dc6f + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.0": + version: 11.0.2 + resolution: "lru-cache@npm:11.0.2" + checksum: 10c0/c993b8e06ead0b24b969c1dbb5b301716aed66e320e9014a80012f5febe280b438f28ff50046b2c55ff404e889351ccb332ff91f8dd175a21f5eae80e3fb155f + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime@npm:^3": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: 10c0/402e792a8df1b2cc41cb77f0dcc46472b7944b7ec29cb5bbcd398624b6b97096728f1239766d3fdeb20551dd8d94738344c195a6ea10c4f906eb0356323b0531 + languageName: node + linkType: hard + +"minimatch@npm:^10.0.0": + version: 10.0.1 + resolution: "minimatch@npm:10.0.1" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/e6c29a81fe83e1877ad51348306be2e8aeca18c88fdee7a99df44322314279e15799e41d7cb274e4e8bb0b451a3bc622d6182e157dfa1717d6cda75e9cd8cd5d + languageName: node + linkType: hard + +"minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" + dependencies: + minipass: "npm:^7.0.4" + rimraf: "npm:^5.0.5" + checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"napi-macros@npm:~2.0.0": + version: 2.0.0 + resolution: "napi-macros@npm:2.0.0" + checksum: 10c0/583ef5084b43e49a12488cdcd4c5142f11e114e249b359161579b64f06776ed523c209d96e4ee2689e2e824c92445d0f529d817cc153f7cec549210296ec4be6 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.3.0": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/444e189907ece2081fe60e75368784f7782cfddb554b60123743dfb89509df89f1f29c03bbfa16b3a3e0be3f48799a4783f487da6203245fa5bed239ba7407e1 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.1.0 + resolution: "node-gyp@npm:11.1.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/c38977ce502f1ea41ba2b8721bd5b49bc3d5b3f813eabfac8414082faf0620ccb5211e15c4daecc23ed9f5e3e9cc4da00e575a0bcfc2a95a069294f2afa1e0cd + languageName: node + linkType: hard + +"nodemon@npm:^3.0.1": + version: 3.1.9 + resolution: "nodemon@npm:3.1.9" + dependencies: + chokidar: "npm:^3.5.2" + debug: "npm:^4" + ignore-by-default: "npm:^1.0.1" + minimatch: "npm:^3.1.2" + pstree.remy: "npm:^1.1.8" + semver: "npm:^7.5.3" + simple-update-notifier: "npm:^2.0.0" + supports-color: "npm:^5.5.0" + touch: "npm:^3.1.0" + undefsafe: "npm:^2.0.5" + bin: + nodemon: bin/nodemon.js + checksum: 10c0/dbd6fab40e6be18929ac02366bfdc2203c1688f45186d9468f6bdeb192f0666d044500dfb729d825526715196456e6a17509a13de019b058cbce428d72d04eb5 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.16": + version: 2.2.16 + resolution: "nwsapi@npm:2.2.16" + checksum: 10c0/0aa0637f4d51043d0183d994e08336bae996b03b42984381bf09ebdf3ff4909c018eda6b2a8aba0a08f3ea8303db8a0dad0608b38dc0bff15fd87017286ae21a + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^2.1.0": + version: 2.1.2 + resolution: "on-exit-leak-free@npm:2.1.2" + checksum: 10c0/faea2e1c9d696ecee919026c32be8d6a633a7ac1240b3b87e944a380e8a11dc9c95c4a1f8fb0568de7ab8db3823e790f12bda45296b1d111e341aad3922a0570 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"parse5@npm:^7.2.1": + version: 7.2.1 + resolution: "parse5@npm:7.2.1" + dependencies: + entities: "npm:^4.5.0" + checksum: 10c0/829d37a0c709215a887e410a7118d754f8e1afd7edb529db95bc7bbf8045fb0266a7b67801331d8e8d9d073ea75793624ec27ce9ff3b96862c3b9008f4d68e80 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-scurry@npm:^2.0.0": + version: 2.0.0 + resolution: "path-scurry@npm:2.0.0" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/3da4adedaa8e7ef8d6dc4f35a0ff8f05a9b4d8365f2b28047752b62d4c1ad73eec21e37b1579ef2d075920157856a3b52ae8309c480a6f1a8bbe06ff8e52b33c + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"pino-abstract-transport@npm:^2.0.0": + version: 2.0.0 + resolution: "pino-abstract-transport@npm:2.0.0" + dependencies: + split2: "npm:^4.0.0" + checksum: 10c0/02c05b8f2ffce0d7c774c8e588f61e8b77de8ccb5f8125afd4a7325c9ea0e6af7fb78168999657712ae843e4462bb70ac550dfd6284f930ee57f17f486f25a9f + languageName: node + linkType: hard + +"pino-std-serializers@npm:^7.0.0": + version: 7.0.0 + resolution: "pino-std-serializers@npm:7.0.0" + checksum: 10c0/73e694d542e8de94445a03a98396cf383306de41fd75ecc07085d57ed7a57896198508a0dec6eefad8d701044af21eb27253ccc352586a03cf0d4a0bd25b4133 + languageName: node + linkType: hard + +"pino@npm:^9.0.0": + version: 9.6.0 + resolution: "pino@npm:9.6.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.1.1" + on-exit-leak-free: "npm:^2.1.0" + pino-abstract-transport: "npm:^2.0.0" + pino-std-serializers: "npm:^7.0.0" + process-warning: "npm:^4.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.2.0" + safe-stable-stringify: "npm:^2.3.1" + sonic-boom: "npm:^4.0.1" + thread-stream: "npm:^3.0.0" + bin: + pino: bin.js + checksum: 10c0/bcd1e9d9b301bea13b95689ca9ad7105ae9451928fb6c0b67b3e58c5fe37cea1d40665f3d6641e3da00be0bbc17b89031e67abbc8ea6aac6164f399309fd78e7 + languageName: node + linkType: hard + +"prettier@npm:^3.5.2": + version: 3.5.2 + resolution: "prettier@npm:3.5.2" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/d7b597ed33f39c32ace675896ad187f06a3e48dc8a1e80051b5c5f0dae3586d53981704b8fda5ac3b080e6c2e0e197d239131b953702674f044351621ca5e1ac + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"process-warning@npm:^4.0.0": + version: 4.0.1 + resolution: "process-warning@npm:4.0.1" + checksum: 10c0/577a268b9fd5c3d9f6dbb4348220099391d830905642845d591e7ee8b1e45043d98b7b9826a3c1379bdd1686cdfe0f6cf349cb812affc5853b662e6a9896579e + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"promise@npm:^7.0.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: "npm:~2.0.3" + checksum: 10c0/742e5c0cc646af1f0746963b8776299701ad561ce2c70b49365d62c8db8ea3681b0a1bf0d4e2fe07910bf72f02d39e51e8e73dc8d7503c3501206ac908be107f + languageName: node + linkType: hard + +"pstree.remy@npm:^1.1.8": + version: 1.1.8 + resolution: "pstree.remy@npm:1.1.8" + checksum: 10c0/30f78c88ce6393cb3f7834216cb6e282eb83c92ccb227430d4590298ab2811bc4a4745f850a27c5178e79a8f3e316591de0fec87abc19da648c2b3c6eb766d14 + languageName: node + linkType: hard + +"pug-attrs@npm:^3.0.0": + version: 3.0.0 + resolution: "pug-attrs@npm:3.0.0" + dependencies: + constantinople: "npm:^4.0.1" + js-stringify: "npm:^1.0.2" + pug-runtime: "npm:^3.0.0" + checksum: 10c0/28178e91c05e8eb9130861c78dccc61eae3e1610931346065bd32ad0b08b023a8dcf2470c3b2409ba45a5098d6d7ed15687717e91cf77770c6381a18626e5194 + languageName: node + linkType: hard + +"pug-code-gen@npm:^3.0.3": + version: 3.0.3 + resolution: "pug-code-gen@npm:3.0.3" + dependencies: + constantinople: "npm:^4.0.1" + doctypes: "npm:^1.1.0" + js-stringify: "npm:^1.0.2" + pug-attrs: "npm:^3.0.0" + pug-error: "npm:^2.1.0" + pug-runtime: "npm:^3.0.1" + void-elements: "npm:^3.1.0" + with: "npm:^7.0.0" + checksum: 10c0/517a93930dbc80bc7fa5f60ff324229a07cc5ab70ed9d344ce105e2fe24de68db5121c8457a9ba99cdc8d48dd18779dd34956ebfcab009b3c1c6843a3cade109 + languageName: node + linkType: hard + +"pug-error@npm:^2.0.0, pug-error@npm:^2.1.0": + version: 2.1.0 + resolution: "pug-error@npm:2.1.0" + checksum: 10c0/bbce339b17fab9890de84975c0cd8723a847bf65f35653d3ebcf77018e8ad91529d56e978ab80f4c64c9f4f07ef9e56e7a9fda3be44249c344a93ba11fccff79 + languageName: node + linkType: hard + +"pug-filters@npm:^4.0.0": + version: 4.0.0 + resolution: "pug-filters@npm:4.0.0" + dependencies: + constantinople: "npm:^4.0.1" + jstransformer: "npm:1.0.0" + pug-error: "npm:^2.0.0" + pug-walk: "npm:^2.0.0" + resolve: "npm:^1.15.1" + checksum: 10c0/7ddd62f5eb97f5242858bd56d93ffed387fef3742210a53770c980020cf91a34384b84b7fc8f0de185b43dfa77de2c4d0f63f575a4c5b3887fdef4e64b8d559d + languageName: node + linkType: hard + +"pug-lexer@npm:^5.0.1": + version: 5.0.1 + resolution: "pug-lexer@npm:5.0.1" + dependencies: + character-parser: "npm:^2.2.0" + is-expression: "npm:^4.0.0" + pug-error: "npm:^2.0.0" + checksum: 10c0/24195a5681953ab91c6a3ccd80a643f760dddb65e2f266bf8ccba145018ba0271536efe1572de2c2224163eb00873c2f1df0ad7ea7aa8bcbf79a66b586ca8435 + languageName: node + linkType: hard + +"pug-linker@npm:^4.0.0": + version: 4.0.0 + resolution: "pug-linker@npm:4.0.0" + dependencies: + pug-error: "npm:^2.0.0" + pug-walk: "npm:^2.0.0" + checksum: 10c0/db754ff34cdd4ba9d9e2d9535cce2a74178f2172e848a5fa6381907cb5bfaa0d39d4cc3eb29893d35fc1c417e83ae3cfd434640ba7d3b635c63199104fae976c + languageName: node + linkType: hard + +"pug-load@npm:^3.0.0": + version: 3.0.0 + resolution: "pug-load@npm:3.0.0" + dependencies: + object-assign: "npm:^4.1.1" + pug-walk: "npm:^2.0.0" + checksum: 10c0/2a7659dfaf9872dd25d851f85e4c27fa447d907b1db3540030cd844614159ff181e067d8f2bedf90eb6b5b1ff03747253859ecbbb822e40f4834b15591d4e108 + languageName: node + linkType: hard + +"pug-parser@npm:^6.0.0": + version: 6.0.0 + resolution: "pug-parser@npm:6.0.0" + dependencies: + pug-error: "npm:^2.0.0" + token-stream: "npm:1.0.0" + checksum: 10c0/faa6cec43afdeb2705eb8c68dfdb2e65836238df8043ae55295ffb72450b8c7a990ea1be60adbde19f58988b9e1d18a84ea42453e2c4f104d0031f78fda737b2 + languageName: node + linkType: hard + +"pug-runtime@npm:^3.0.0, pug-runtime@npm:^3.0.1": + version: 3.0.1 + resolution: "pug-runtime@npm:3.0.1" + checksum: 10c0/0db8166d2e17695a6941d1de81dcb21c8a52921299b1e03bf6a0a3d2b0036b51cf98101b3937b731c745e8d3e0268cb0b728c02f61a80a25fcfaa15c594fb1be + languageName: node + linkType: hard + +"pug-strip-comments@npm:^2.0.0": + version: 2.0.0 + resolution: "pug-strip-comments@npm:2.0.0" + dependencies: + pug-error: "npm:^2.0.0" + checksum: 10c0/ca498adedaeba51dd836b20129bbd161e2d5a397a2baaa553b1e74e888caa2258dcd7326396fc6f8fed8c7b7f906cfebc4c386ccbee8888a27b2ca0d4d86d206 + languageName: node + linkType: hard + +"pug-walk@npm:^2.0.0": + version: 2.0.0 + resolution: "pug-walk@npm:2.0.0" + checksum: 10c0/005d63177bcf057f5a618b182f6d4600afb039200b07a381a0d89288a2b3126e763a0a6c40b758eab0731c8e63cad1bbcb46d96803b9ae9cfc879f6ef5a0f8f4 + languageName: node + linkType: hard + +"pug@npm:^3.0.2": + version: 3.0.3 + resolution: "pug@npm:3.0.3" + dependencies: + pug-code-gen: "npm:^3.0.3" + pug-filters: "npm:^4.0.0" + pug-lexer: "npm:^5.0.1" + pug-linker: "npm:^4.0.0" + pug-load: "npm:^3.0.0" + pug-parser: "npm:^6.0.0" + pug-runtime: "npm:^3.0.1" + pug-strip-comments: "npm:^2.0.0" + checksum: 10c0/bda53d3a6deea1d348cd5ab17427c77f3d74165510ad16f4fd182cc63618ad09388ecda317d17122ee890c8a68f9a54b96221fce7f44a332e463fdbb10a9d1e2 + languageName: node + linkType: hard + +"punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.3": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 10c0/fe5acc6f775b172ca5b4373df26f7e4fd347975578199e7d74b2ae4077f0af05baa27d231de1e80e8f72d88275ccc6028568a7a8c9ee5e7368ace0e18eff93a4 + languageName: node + linkType: hard + +"readable-stream@npm:^3.4.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"real-require@npm:^0.2.0": + version: 0.2.0 + resolution: "real-require@npm:0.2.0" + checksum: 10c0/23eea5623642f0477412ef8b91acd3969015a1501ed34992ada0e3af521d3c865bb2fe4cdbfec5fe4b505f6d1ef6a03e5c3652520837a8c3b53decff7e74b6a0 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"resolve@npm:^1.15.1": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.15.1#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 + languageName: node + linkType: hard + +"ret@npm:~0.5.0": + version: 0.5.0 + resolution: "ret@npm:0.5.0" + checksum: 10c0/220868b194f87bf1998e32e409086eec6b39e860c052bf267f8ad4d0131706a9773d45fd3f91acfb1a7c928fce002b694ab86fdba90bc8d4b8df68fa8645c5cc + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rfdc@npm:^1.2.0, rfdc@npm:^1.3.1": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 + languageName: node + linkType: hard + +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc + languageName: node + linkType: hard + +"rrweb-cssom@npm:^0.8.0": + version: 0.8.0 + resolution: "rrweb-cssom@npm:0.8.0" + checksum: 10c0/56f2bfd56733adb92c0b56e274c43f864b8dd48784d6fe946ef5ff8d438234015e59ad837fc2ad54714b6421384141c1add4eb569e72054e350d1f8a50b8ac7b + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-regex2@npm:^4.0.0": + version: 4.0.1 + resolution: "safe-regex2@npm:4.0.1" + dependencies: + ret: "npm:~0.5.0" + checksum: 10c0/fe6edc2c0fa9847b572d0f0fc2b1f487c36ae603fec65445ae38cfb40483afa85107d3b6ffe63cbe029fd06e6ccb5c5730415c1595a1011fa00bafa2b866a8f0 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.3.1": + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10c0/baea14971858cadd65df23894a40588ed791769db21bafb7fd7608397dbdce9c5aac60748abae9995e0fc37e15f2061980501e012cd48859740796bea2987f49 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: "npm:^2.2.0" + checksum: 10c0/3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74 + languageName: node + linkType: hard + +"secure-json-parse@npm:^3.0.1": + version: 3.0.2 + resolution: "secure-json-parse@npm:3.0.2" + checksum: 10c0/4c9c005e7fdd8528df35fcdec41dc4e8e15820ce52de19f8102da808f9400a9ed8c0a28971e3efe24b001ee1e60296af553f12bbaab81a152f702dd00af2092d + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.6.0": + version: 7.7.1 + resolution: "semver@npm:7.7.1" + bin: + semver: bin/semver.js + checksum: 10c0/fd603a6fb9c399c6054015433051bdbe7b99a940a8fb44b85c2b524c4004b023d7928d47cb22154f8d054ea7ee8597f586605e05b52047f048278e4ac56ae958 + languageName: node + linkType: hard + +"set-cookie-parser@npm:^2.6.0": + version: 2.7.1 + resolution: "set-cookie-parser@npm:2.7.1" + checksum: 10c0/060c198c4c92547ac15988256f445eae523f57f2ceefeccf52d30d75dedf6bff22b9c26f756bd44e8e560d44ff4ab2130b178bd2e52ef5571bf7be3bd7632d9a + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-update-notifier@npm:^2.0.0": + version: 2.0.0 + resolution: "simple-update-notifier@npm:2.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10c0/2a00bd03bfbcbf8a737c47ab230d7920f8bfb92d1159d421bdd194479f6d01ebc995d13fbe13d45dace23066a78a3dc6642999b4e3b38b847e6664191575b20c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.4 + resolution: "socks@npm:2.8.4" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/00c3271e233ccf1fb83a3dd2060b94cc37817e0f797a93c560b9a7a86c4a0ec2961fb31263bdd24a3c28945e24868b5f063cd98744171d9e942c513454b50ae5 + languageName: node + linkType: hard + +"sonic-boom@npm:^4.0.1": + version: 4.2.0 + resolution: "sonic-boom@npm:4.2.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 10c0/ae897e6c2cd6d3cb7cdcf608bc182393b19c61c9413a85ce33ffd25891485589f39bece0db1de24381d0a38fc03d08c9862ded0c60f184f1b852f51f97af9684 + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 10c0/b292beb8ce9215f8c642bb68be6249c5a4c7f332fc8ecadae7be5cbdf1ea95addc95f0459ef2e7ad9d45fd1064698a097e4eb211c83e772b49bc0ee423e91534 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"supports-color@npm:^5.5.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 10c0/dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"thread-stream@npm:^3.0.0": + version: 3.1.0 + resolution: "thread-stream@npm:3.1.0" + dependencies: + real-require: "npm:^0.2.0" + checksum: 10c0/c36118379940b77a6ef3e6f4d5dd31e97b8210c3f7b9a54eb8fe6358ab173f6d0acfaf69b9c3db024b948c0c5fd2a7df93e2e49151af02076b35ada3205ec9a6 + languageName: node + linkType: hard + +"tldts-core@npm:^6.1.82": + version: 6.1.82 + resolution: "tldts-core@npm:6.1.82" + checksum: 10c0/bdbefb17837d7d85b79a44824feafad3d12fbbfbe4f0a89d9618765b18e880d4c7ebe9e87258a2a0e85deec23adbcaaa5f4240129d8017f896b0cda0c32ae6e4 + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.82 + resolution: "tldts@npm:6.1.82" + dependencies: + tldts-core: "npm:^6.1.82" + bin: + tldts: bin/cli.js + checksum: 10c0/e01dd47de5a1e5ca7ffe33d9e18cfd608e93ef45cf1f80f3fced1cea192d07a840664ded894b590551ebcaaf8a583a68a4b23bc0645b5885508b57010a9316af + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"toad-cache@npm:^3.7.0": + version: 3.7.0 + resolution: "toad-cache@npm:3.7.0" + checksum: 10c0/7dae2782ee20b22c9798bb8b71dec7ec6a0091021d2ea9dd6e8afccab6b65b358fdba49a02209fac574499702e2c000660721516c87c2538d1b2c0ba03e8c0c3 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"token-stream@npm:1.0.0": + version: 1.0.0 + resolution: "token-stream@npm:1.0.0" + checksum: 10c0/c1924a89686fc035d579cbe856da12306571d5fe7408eeeebe80df7c25c5cc644b8ae102d5cbc0f085d0e105f391d1a48dc0e568520434c5b444ea6c7de2b822 + languageName: node + linkType: hard + +"touch@npm:^3.1.0": + version: 3.1.1 + resolution: "touch@npm:3.1.1" + bin: + nodetouch: bin/nodetouch.js + checksum: 10c0/d2e4d269a42c846a22a29065b9af0b263de58effc85a1764bb7a2e8fc4b47700e9e2fcbd7eb1f5bffbb7c73d860f93600cef282b93ddac8f0b62321cb498b36e + languageName: node + linkType: hard + +"tough-cookie@npm:^5.0.0": + version: 5.1.2 + resolution: "tough-cookie@npm:5.1.2" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/5f95023a47de0f30a902bba951664b359725597d8adeabc66a0b93a931c3af801e1e697dae4b8c21a012056c0ea88bd2bf4dfe66b2adcf8e2f42cd9796fe0626 + languageName: node + linkType: hard + +"tr46@npm:^5.0.0": + version: 5.0.0 + resolution: "tr46@npm:5.0.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10c0/1521b6e7bbc8adc825c4561480f9fe48eb2276c81335eed9fa610aa4c44a48a3221f78b10e5f18b875769eb3413e30efbf209ed556a17a42aa8d690df44b7bee + languageName: node + linkType: hard + +"undefsafe@npm:^2.0.5": + version: 2.0.5 + resolution: "undefsafe@npm:2.0.5" + checksum: 10c0/96c0466a5fbf395917974a921d5d4eee67bca4b30d3a31ce7e621e0228c479cf893e783a109af6e14329b52fe2f0cb4108665fad2b87b0018c0df6ac771261d5 + languageName: node + linkType: hard + +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf + languageName: node + linkType: hard + +"undici@npm:^7.3.0": + version: 7.4.0 + resolution: "undici@npm:7.4.0" + checksum: 10c0/0d8d8d627c87e72cf58148d257a79d019ce058b6761363ee5752103aa0ab57d132448fce4ef15171671ee138ef156a695ec1daeb72cd09ae408afa74dee070b5 + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"void-elements@npm:^3.1.0": + version: 3.1.0 + resolution: "void-elements@npm:3.1.0" + checksum: 10c0/0b8686f9f9aa44012e9bd5eabf287ae0cde409b9a2854c5a2335cb83920c957668ac5876e3f0d158dd424744ac411a7270e64128556b451ed3bec875ef18534d + languageName: node + linkType: hard + +"volp@workspace:.": + version: 0.0.0-use.local + resolution: "volp@workspace:." + dependencies: + "@fastify/leveldb": "npm:^6.0.0" + "@fastify/static": "npm:^8.0.0" + "@fastify/view": "npm:^10.0.0" + "@types/node": "npm:^22.13.5" + esbuild: "npm:^0.25.0" + fastify: "npm:^5.2.1" + jsdom: "npm:^26.0.0" + nodemon: "npm:^3.0.1" + prettier: "npm:^3.5.2" + pug: "npm:^3.0.2" + undici: "npm:^7.3.0" + languageName: unknown + linkType: soft + +"w3c-xmlserializer@npm:^5.0.0": + version: 5.0.0 + resolution: "w3c-xmlserializer@npm:5.0.0" + dependencies: + xml-name-validator: "npm:^5.0.0" + checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: 10c0/228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4 + languageName: node + linkType: hard + +"whatwg-encoding@npm:^3.1.1": + version: 3.1.1 + resolution: "whatwg-encoding@npm:3.1.1" + dependencies: + iconv-lite: "npm:0.6.3" + checksum: 10c0/273b5f441c2f7fda3368a496c3009edbaa5e43b71b09728f90425e7f487e5cef9eb2b846a31bd760dd8077739c26faf6b5ca43a5f24033172b003b72cf61a93e + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^4.0.0": + version: 4.0.0 + resolution: "whatwg-mimetype@npm:4.0.0" + checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df + languageName: node + linkType: hard + +"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.0": + version: 14.1.1 + resolution: "whatwg-url@npm:14.1.1" + dependencies: + tr46: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + checksum: 10c0/de1e9cc2f04cb000f232c839d4999384ba41b680ef8a89e7c61c9bc40354ba8593c775d068faaf0819f5866e4d6ca3e7b9b386e2123aa475bfd33da02316f476 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + +"with@npm:^7.0.0": + version: 7.0.2 + resolution: "with@npm:7.0.2" + dependencies: + "@babel/parser": "npm:^7.9.6" + "@babel/types": "npm:^7.9.6" + assert-never: "npm:^1.2.1" + babel-walk: "npm:3.0.0-canary-5" + checksum: 10c0/99289e49afc4b1776afae0ef85e84cfa775e8e07464d2b9853a31b0822347031d1cf77f287d25adc8c3f81e4fa68f4ee31526a9c95d4981ba08a1fe24dee111a + languageName: node + linkType: hard "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"ws@npm:^8.18.0": + version: 8.18.1 + resolution: "ws@npm:8.18.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/e498965d6938c63058c4310ffb6967f07d4fa06789d3364829028af380d299fe05762961742971c764973dce3d1f6a2633fe8b2d9410c9b52e534b4b882a99fa + languageName: node + linkType: hard + +"xml-name-validator@npm:^5.0.0": + version: 5.0.0 + resolution: "xml-name-validator@npm:5.0.0" + checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5 + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 10c0/b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard