diff --git a/.sajt/layouts/default.pug b/.sajt/layouts/default.pug deleted file mode 100644 index 01ece76..0000000 --- a/.sajt/layouts/default.pug +++ /dev/null @@ -1,23 +0,0 @@ -doctype html -html(lang="en") - head - meta(charset="utf-8") - meta(name="viewport" content="width=device-width, initial-scale=1") - title Artur Gurgul - #{title} - meta(name="author" content="Artur Gurgul") - meta(name="description" content="This is my notepad") - - link(rel="shortcut icon" href="/favicon.png") - link(rel="alternate" type="application/atom+xml" title="#{site.data.theme.name}" href="#{site.url}/atom.xml") - link(rel="stylesheet" href="/static/css/all.css") - link(rel="stylesheet" href="/static/css/hightlight.css") - body - .container - .sidebar - include sidebar.pug - .scroll - .content - h1.title= title - #post!= content - .footer - include footer.pug diff --git a/.sajt/layouts/footer.pug b/.sajt/layouts/footer.pug deleted file mode 100755 index b6f0594..0000000 --- a/.sajt/layouts/footer.pug +++ /dev/null @@ -1,2 +0,0 @@ -.disclaimer - p © Artur Gurgul, 2024 — Public Domain Licence diff --git a/.sajt/layouts/sidebar.pug b/.sajt/layouts/sidebar.pug deleted file mode 100755 index 3f3f644..0000000 --- a/.sajt/layouts/sidebar.pug +++ /dev/null @@ -1,10 +0,0 @@ -nav - h2(style="font-size: 20px; margin: 0px;") Hi. I'm - a(href="/") Artur Gurgul - h2(style="font-size: 15px; margin-top: -0.5em;") and this is my notepad. - hr.hr-text(data-content="Contents") - ul#blog-posts.posts - each page in pages.filter(it => it.hidden != true && it.title != undefined ) - li - span » - a(href=page.url, style=(false ? "font-weight: bold;" : ""))= page.title diff --git a/.sajt/media/config.yaml b/.sajt/media/config.yaml deleted file mode 100644 index 88f7d81..0000000 --- a/.sajt/media/config.yaml +++ /dev/null @@ -1,7 +0,0 @@ -site: - title: Artur Gurgul - {{article.title}} -remote: - type: ssh - user: debian - host: artur.gurgul.pro - path: /var/www/artur.gurgul.pro \ No newline at end of file diff --git a/.sajt/media/static/css/all.css b/.sajt/media/static/css/all.css deleted file mode 100755 index 6630bf3..0000000 --- a/.sajt/media/static/css/all.css +++ /dev/null @@ -1,672 +0,0 @@ - -@font-face { - font-family: OpenSans; - font-weight: italic; - src: url('/media/opensans/opensans-italic-variable_font_wdth,wght.ttf'); -} - -@font-face { - font-family: OpenSans; - font-weight: normal; - src: url('/media/opensans/opensans-regular-variable_font-wdth,wght.ttf'); -} - -* { - font-family: -apple-system, BlinkMacSystemFont, sans-serif; - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; - font-weight: 500; -} - -.title { - position: sticky; top:0; - background-color: white; -} - -html { - scroll-behavior: smooth; -} - -.container { - position: relative; - /* margin: 0 auto; */ - padding: 0; - display: flex; -} - -.sidebar { - width: 390px; - float: left; -} - -body, -.content, -.container { - box-sizing: border-box; -} - -body, -.container { - height: 100%; -} - -.content { - width: 800px; -} - -.sidebar { - box-sizing: border-box; - border-right: 1px solid #DDD; - height: 100%; - -} -.scroll { - height: 100%; - width: 100%; - overflow-y: scroll -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -menu, -nav, -section { - display: block; -} - -body { - line-height: 1; -} - -ol, -ul { - list-style: none; -} - -blockquote, -q { - quotes: none; -} - -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ''; - content: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -body { - background: #fff; - font: 14px/21px -apple-system, BlinkMacSystemFont, sans-serif; - color: #444; - -webkit-font-smoothing: antialiased; - -webkit-text-size-adjust: 100%; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - color: #181818; - font-family: -apple-system, BlinkMacSystemFont, sans-serif; - font-weight: normal; -} - -h1 a, -h2 a, -h3 a, -h4 a, -h5 a, -h6 a { - font-weight: inherit; -} - -h1 { - font-size: 46px; - line-height: 50px; - margin-bottom: 14px; -} - -h2 { - font-size: 35px; - line-height: 40px; - margin-bottom: 10px; -} - -h3 { - font-size: 28px; - line-height: 34px; - margin-bottom: 8px; -} - -h4 { - font-size: 21px; - line-height: 30px; - margin-bottom: 4px; -} - -h5 { - font-size: 17px; - line-height: 24px; -} - -h6 { - font-size: 14px; - line-height: 21px; -} - -.subheader { - color: #777; -} - -p { - margin: 0 0 20px 0; -} - -p img { - margin: 0; -} - -p.lead { - font-size: 21px; - line-height: 27px; - color: #777; -} - -em { - font-style: italic; -} - -strong { - font-weight: bold; - color: #333; -} - -small { - font-size: 80%; -} - -blockquote, -blockquote p { - font-size: 17px; - line-height: 24px; - color: #777; - font-style: italic; -} - -blockquote { - margin: 0px; - padding: 0px 20px 0 15px; - border-left: 2px solid #ddd; -} - -blockquote cite { - display: block; - font-size: 12px; - color: #555; -} - -blockquote cite:before { - content: "\2014 \0020"; -} - -blockquote cite a, -blockquote cite a:visited, -blockquote cite a:visited { - color: #0060ad; -} - -hr { - border: solid #ddd; - border-width: 1px 0 0; - clear: both; - margin: 10px 0 30px; - height: 0; -} - -a, -a:visited { - color: #333; - text-decoration: underline; - outline: 0; -} - -a:hover, -a:focus { - color: #000; -} - -p a, -p a:visited { - line-height: inherit; -} - -ul, -ol { - margin-bottom: 20px; -} - -ul { - list-style: none outside; -} - -ol { - list-style: decimal; -} - -ol, -ul.square, -ul.circle, -ul.disc { - margin-left: 30px; -} - -ul.square { - list-style: square outside; -} - -ul.circle { - list-style: circle outside; -} - -ul.disc { - list-style: disc outside; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin: 4px 0 5px 30px; - font-size: 90%; -} - -ul ul li, -ul ol li, -ol ol li, -ol ul li { - margin-bottom: 6px; -} - -li { - line-height: 18px; - margin-bottom: 12px; -} - -ul.large li { - line-height: 21px; -} - -li p { - line-height: 21px; -} - -img.scale-with-grid { - max-width: 100%; - height: auto; -} - -ul.tabs { - display: block; - margin: 0 0 20px 0; - padding: 0; - border-bottom: solid 1px #ddd; -} - -ul.tabs li { - display: block; - width: auto; - height: 30px; - padding: 0; - float: left; - margin-bottom: 0; -} - -ul.tabs li a { - display: block; - text-decoration: none; - width: auto; - height: 29px; - padding: 0px 20px; - line-height: 30px; - border: solid 1px #ddd; - border-width: 1px 1px 0 0; - margin: 0; - background: #f5f5f5; - font-size: 13px; -} - -ul.tabs li a.active { - background: #fff; - height: 30px; - position: relative; - top: -4px; - padding-top: 4px; - border-left-width: 1px; - margin: 0 0 0 -1px; - color: #111; -} - -ul.tabs-content { - margin: 0; - display: block; -} - -ul.tabs-content>li { - display: none; -} - -ul.tabs-content>li.active { - display: block; -} - -ul.tabs:before, -ul.tabs:after { - content: '\0020'; - display: block; - overflow: hidden; - visibility: hidden; - width: 0; - height: 0; -} - -ul.tabs:after { - clear: both; -} - -ul.tabs { - zoom: 1; -} - -label span, -legend span { - font-weight: normal; - font-size: 13px; - color: #444; -} - - -thead { - border-bottom: solid #0060ad; - font-weight: bold; - color: #0060ad; -} - -thead th { - padding-left: 20px; - padding-right: 20px; - padding-top: 5px; - padding-bottom: 0px; -} - -tbody td { - padding: 5px; -} - -table { - margin-left: auto; - margin-right: auto; -} - - - -html, -body { - height: 100%; -} - -body { - font-size: 16px; - background-color: white; - color: #222222; - line-height: 24px; - margin: 0; - - border-top: 7px solid #0060ad; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - color: #181818; - font-family: -apple-system, BlinkMacSystemFont, sans-serif; - font-weight: 600; -} - -h1.title { - font-weight: 800; -} - -h1 { - font-size: 32px; - line-height: 40px; -} - -h2 { - font-size: 24px; - line-height: 30px; -} - -h3 { - font-size: 21px; - line-height: 24px; - margin: 1em 0; -} - -ul { - margin: 1em 0; - list-style: disc; -} - -a { - color: #0060ad; - text-decoration: none; -} - -a:hover { - color: #0060ad; - text-decoration: underline; -} - -a:visited { - color: #0060ad; -} - -table { - font-size: inherit; - font: 100%; -} - -img { - display: block; - margin-left: auto; - margin-right: auto; -} - -.posts { - padding: 20px; - } - -ul.posts { - margin-top: 0; - list-style-type: none; - margin-bottom: 10px; -} - -ul.posts li { - line-height: 22px; - font-size: 16px; - margin-bottom: 0px; -} - -ul.posts span { - font-family: 'Lucida Console', 'Andale Mono', monospace; - color: #aaa; - padding-right: 5px; - font-size: 14px; -} - -.site .footer { - font-size: 80%; - color: #666; - border-top: 4px solid #eee; - overflow: hidden; -} - -nav h1, -nav h2 { - text-align: center; -} - -#post pre { - border: 0px solid #ddd; - background-color: #005fad06 !important; - padding: 0 .4em; - margin-bottom: 20px !important; - border-color: #005fad43 !important; -} - -#post ul, -#post ol { - margin-left: 1.35em; -} - -#post code { - border: 1px solid #ddd; - background-color: #eef; - font-size: 85%; - padding: 0 .2em; -} - - -#post pre code { - border: none; -} - -.sidebar { - padding-top: 25px; - font-family: -apple-system, BlinkMacSystemFont, sans-serif; -} - -.sidebar p { - font-weight: 200; -} - -.sidebar a { - font-weight: 600; -} - -text { - font: 500 12px/22px -apple-system, BlinkMacSystemFont, sans-serif; -} - -/* path, rect { - stroke: red; -} */ - -g { - font: 500 12px/22px -apple-system, BlinkMacSystemFont, sans-serif; -} -/* stroke-width="2" */ - -.content { - font: 400 16px/22px -apple-system, BlinkMacSystemFont, sans-serif; - - padding-left: 40px; - padding-top: 25px; - min-height: 400px; -} - -#home h2 { - color: #0060ad; -} - -#post pre { - background-color: white; - border-left: 12px solid #eee; - padding: 0 .8em; -} - -#post code { - background-color: transparent; -} - -#stalker { - float: inherit; -} - -.disclaimer { - color: #aaa; - font-weight: 700; - font-size: smaller; - text-align: center; - padding-top: 40px; - padding-bottom: 10px; -} - - -.highlight { - background-color: white; - color: #586e75; - font-weight: bold; -} - -.highlight .c { - color: #586e75 !important; - font-style: italic !important -} - -p:has(img) { - background-color: #005fad06; - border-left: 12px solid #005fad43; -} - -p > img { - display: block; - margin: 0 auto; - padding-top: 12px; - padding-bottom: 12px; -} - -p:has(svg) { - background-color: #005fad06; - border-left: 12px solid #005fad43; -} - -p > svg { - display: block; - margin: 0 auto; - padding-top: 12px; - padding-bottom: 12px; -} - -pre { - white-space: pre; - overflow: auto; -} - -code, -pre { - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; -} diff --git a/.sajt/media/static/css/hightlight.css b/.sajt/media/static/css/hightlight.css deleted file mode 100644 index d021397..0000000 --- a/.sajt/media/static/css/hightlight.css +++ /dev/null @@ -1,101 +0,0 @@ -/* - -XCode style (c) Angel Garcia - -*/ - -.hljs { - background: #fff; - color: black; -} - -/* Gray DOCTYPE selectors like WebKit */ -.xml .hljs-meta { - color: #c0c0c0; -} - -.hljs-comment, -.hljs-quote { - color: #007400; -} - -.hljs-tag, -.hljs-attribute, -.hljs-keyword, -.hljs-selector-tag, -.hljs-literal, -.hljs-name { - color: #aa0d91; -} - -.hljs-variable, -.hljs-template-variable { - color: #3F6E74; -} - -.hljs-code, -.hljs-string, -.hljs-meta .hljs-string { - color: #c41a16; -} - -.hljs-regexp, -.hljs-link { - color: #0E0EFF; -} - -.hljs-title, -.hljs-symbol, -.hljs-bullet, -.hljs-number { - color: #1c00cf; -} - -.hljs-section, -.hljs-meta { - color: #643820; -} - - -.hljs-title.class_, -.hljs-class .hljs-title, -.hljs-type, -.hljs-built_in, -.hljs-params { - color: #5c2699; -} - -.hljs-attr { - color: #836C28; -} - -.hljs-subst { - color: #000; -} - -.hljs-formula { - background-color: #eee; - font-style: italic; -} - -.hljs-addition { - background-color: #baeeba; -} - -.hljs-deletion { - background-color: #ffc8bd; -} - -.hljs-selector-id, -.hljs-selector-class { - color: #9b703f; -} - -.hljs-doctag, -.hljs-strong { - font-weight: bold; -} - -.hljs-emphasis { - font-style: italic; -} \ No newline at end of file diff --git a/empty/.sajt/layouts/default.pug b/empty/.sajt/layouts/default.pug index 01ece76..672d170 100644 --- a/empty/.sajt/layouts/default.pug +++ b/empty/.sajt/layouts/default.pug @@ -3,12 +3,12 @@ html(lang="en") head meta(charset="utf-8") meta(name="viewport" content="width=device-width, initial-scale=1") - title Artur Gurgul - #{title} + title Artur Gurgul - #{page.title} meta(name="author" content="Artur Gurgul") meta(name="description" content="This is my notepad") link(rel="shortcut icon" href="/favicon.png") - link(rel="alternate" type="application/atom+xml" title="#{site.data.theme.name}" href="#{site.url}/atom.xml") + link(rel="alternate" type="application/atom+xml" title=page.title href="#{site.url}/atom.xml") link(rel="stylesheet" href="/static/css/all.css") link(rel="stylesheet" href="/static/css/hightlight.css") body @@ -17,7 +17,7 @@ html(lang="en") include sidebar.pug .scroll .content - h1.title= title - #post!= content + h1.title= page.title + #post!= page.file.html .footer include footer.pug diff --git a/empty/.sajt/layouts/sidebar.pug b/empty/.sajt/layouts/sidebar.pug index 3f3f644..1efb8df 100755 --- a/empty/.sajt/layouts/sidebar.pug +++ b/empty/.sajt/layouts/sidebar.pug @@ -4,7 +4,7 @@ nav h2(style="font-size: 15px; margin-top: -0.5em;") and this is my notepad. hr.hr-text(data-content="Contents") ul#blog-posts.posts - each page in pages.filter(it => it.hidden != true && it.title != undefined ) + each page in context.pages li span » - a(href=page.url, style=(false ? "font-weight: bold;" : ""))= page.title + a(href=page.url, style=(page.isCurrent ? "font-weight: bold;" : ""))= page.title diff --git a/empty/.sajt/static/css/all.css b/empty/.sajt/static/css/all.css index 5353ba4..8c9a502 100755 --- a/empty/.sajt/static/css/all.css +++ b/empty/.sajt/static/css/all.css @@ -1,28 +1,5 @@ - -@font-face { - font-family: Montserrat; - /* declare weights giving two values to specify a range */ - font-weight: 400 800; - src: url(/static/fonts/Montserrat-VariableFont_wght.ttf); - } - - @font-face { - font-family: Montserrat; - /* declare weights giving two values to specify a range */ - font-weight: 400 800; - font-style: italic; - src: url(/static/fonts/Montserrat-Italic-VariableFont_wght.ttf); - } - - @font-face { - font-family: Proto; - /* declare weights giving two values to specify a range */ - font-weight: 400 800; - src: url(/static/fonts/0xProto-Regular.ttf); - } - * { - font-family: Montserrat, sans-serif; + font-family: -apple-system, BlinkMacSystemFont, sans-serif; margin: 0; padding: 0; border: 0; @@ -136,7 +113,7 @@ h4, h5, h6 { color: #181818; - font-family: Montserrat, sans-serif; + font-family: -apple-system, BlinkMacSystemFont, sans-serif; font-weight: normal; } @@ -460,7 +437,7 @@ h4, h5, h6 { color: #181818; - font-family: Montserrat, sans-serif; + font-family: -apple-system, BlinkMacSystemFont, sans-serif; font-weight: 600; } @@ -531,7 +508,7 @@ ul.posts li { } ul.posts span { - font-family: 'Proto', monospace; + font-family: monospace; color: #aaa; padding-right: 5px; font-size: 14px; @@ -576,7 +553,7 @@ nav h2 { .sidebar { padding-top: 25px; - font-family: Montserrat, sans-serif; + font-family: -apple-system, BlinkMacSystemFont, sans-serif; } .sidebar p { @@ -588,7 +565,7 @@ nav h2 { } text { - font: 500 12px/22px Montserrat, sans-serif; + font: 500 12px/22px -apple-system, BlinkMacSystemFont, sans-serif; } /* path, rect { @@ -596,12 +573,12 @@ text { } */ g { - font: 500 12px/22px Montserrat, sans-serif; + font: 500 12px/22px -apple-system, BlinkMacSystemFont, sans-serif; } /* stroke-width="2" */ .content { - font: 400 16px/22px Montserrat, sans-serif; + font: 400 16px/22px -apple-system, BlinkMacSystemFont, sans-serif; padding-left: 40px; padding-top: 25px; @@ -678,7 +655,7 @@ pre { code, pre { - font-family: 'Proto', monospace; + font-family: monospace; } .hljs { diff --git a/empty/.sajt/static/fonts/0xProto-Regular.ttf b/empty/.sajt/static/fonts/0xProto-Regular.ttf deleted file mode 100644 index 6d6576b..0000000 Binary files a/empty/.sajt/static/fonts/0xProto-Regular.ttf and /dev/null differ diff --git a/empty/.sajt/static/fonts/Montserrat-Italic-VariableFont_wght.ttf b/empty/.sajt/static/fonts/Montserrat-Italic-VariableFont_wght.ttf deleted file mode 100644 index 81cc326..0000000 Binary files a/empty/.sajt/static/fonts/Montserrat-Italic-VariableFont_wght.ttf and /dev/null differ diff --git a/empty/.sajt/static/fonts/Montserrat-VariableFont_wght.ttf b/empty/.sajt/static/fonts/Montserrat-VariableFont_wght.ttf deleted file mode 100644 index 797c4a5..0000000 Binary files a/empty/.sajt/static/fonts/Montserrat-VariableFont_wght.ttf and /dev/null differ diff --git a/empty/first-page.md b/empty/first-page.md deleted file mode 100644 index 0cf735e..0000000 --- a/empty/first-page.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: default -title: Content -hidden: true ---- - -# Content - -there is my awasome content \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 843865f..56dca22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,29 +9,26 @@ "version": "0.0.2", "license": "ISC", "dependencies": { - "chalk": "^5.3.0", - "commander": "^12.1.0", - "express": "^4.19.2", - "fs-extra": "^11.2.0", + "chalk": "^5.4.1", + "commander": "^14.0.0", + "express": "^5.1.0", + "fs-extra": "^11.3.0", "gray-matter": "^4.0.3", - "highlight.js": "^11.10.0", + "highlight.js": "^11.11.1", "js-yaml": "^4.1.0", - "marked": "^14.0.0", - "marked-highlight": "^2.1.4", - "pug": "^3.0.3", - "ssh2": "^1.15.0", - "ssh2-sftp-client": "^11.0.0" + "marked": "^15.0.12", + "marked-highlight": "^2.2.1", + "pug": "^3.0.3" }, "bin": { "sajt": "bin/sajt" }, "devDependencies": { - "@types/express": "^5.0.0", + "@types/express": "^5.0.2", "@types/js-yaml": "^4.0.9", - "@types/node": "^22.13.5", + "@types/node": "^22.15.30", "@types/pug": "^2.0.10", - "electron": "^33.0.1", - "typescript": "^5.7.3" + "typescript": "^5.8.3" } }, "node_modules/@babel/helper-string-parser": { @@ -80,89 +77,6 @@ "node": ">=6.9.0" } }, - "node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "global-agent": "^3.0.0" - } - }, - "node_modules/@electron/get/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@electron/get/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@electron/get/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -174,19 +88,6 @@ "@types/node": "*" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -198,15 +99,14 @@ } }, "node_modules/@types/express": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz", - "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.2.tgz", + "integrity": "sha512-BtjL3ZwbCQriyb0DGw+Rt12qAXPiBTPs815lsUvtt1Grk0vLRMZNMUZ741d5rjk+UQOxfDiBZ3dxpX00vSkK3g==", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", - "@types/qs": "*", "@types/serve-static": "*" } }, @@ -223,13 +123,6 @@ "@types/send": "*" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -244,16 +137,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -262,13 +145,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz", - "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==", + "version": "22.15.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.30.tgz", + "integrity": "sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/pug": { @@ -292,16 +175,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", @@ -325,25 +198,14 @@ "@types/send": "*" } }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" @@ -367,27 +229,12 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "license": "MIT" }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/assert-never": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", @@ -406,86 +253,24 @@ "node": ">= 10.0.0" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/boolean": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/buildcheck": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", - "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", - "optional": true, - "engines": { - "node": ">=10.0.0" + "node": ">=18" } }, "node_modules/bytes": { @@ -497,35 +282,6 @@ "node": ">= 0.8" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -576,41 +332,13 @@ "is-regex": "^1.0.3" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", "license": "MIT", "engines": { - "node": ">=18" - } - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "engines": [ - "node >= 6.0" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "node": ">=20" } }, "node_modules/constantinople": { @@ -624,9 +352,9 @@ } }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -654,30 +382,18 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/cpu-features": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", - "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "buildcheck": "~0.0.6", - "nan": "^2.19.0" - }, + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=6.6.0" } }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -691,83 +407,6 @@ } } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -777,24 +416,6 @@ "node": ">= 0.8" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -821,42 +442,6 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, - "node_modules/electron": { - "version": "33.4.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-33.4.1.tgz", - "integrity": "sha512-ICXI9hw3Ru3XwaZLZdwyARn85GpoF9n4BrrwkHJtsoi4rl3qA7IM/Qu5HlDhqnbH4XuPNmHwoJ8bGJqo0lJ4+A==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 12.20.55" - } - }, - "node_modules/electron/node_modules/@types/node": { - "version": "20.17.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz", - "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/electron/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -866,32 +451,6 @@ "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "license": "MIT" - }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -922,34 +481,12 @@ "node": ">= 0.4" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -973,66 +510,47 @@ } }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -1045,70 +563,23 @@ "node": ">=0.10.0" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1119,12 +590,12 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/fs-extra": { @@ -1187,73 +658,6 @@ "node": ">= 0.4" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", - "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -1266,32 +670,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -1341,20 +719,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -1403,13 +767,6 @@ "node": ">=12.0.0" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -1426,27 +783,13 @@ "node": ">= 0.8" } }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -1543,21 +886,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "license": "ISC", - "optional": true - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -1580,16 +908,6 @@ "promise": "^7.0.1" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -1599,20 +917,10 @@ "node": ">=0.10.0" } }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/marked": { - "version": "14.1.4", - "resolved": "https://registry.npmjs.org/marked/-/marked-14.1.4.tgz", - "integrity": "sha512-vkVZ8ONmUdPnjCKc5uTRvmkRbx4EAi2OkTOXmfTDhZz3OFqMNBM1oTTWwTr4HY4uAEojhzPf+Fy8F1DWa3Sndg==", + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -1630,20 +938,6 @@ "marked": ">=4 <16" } }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -1654,110 +948,62 @@ } }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/nan": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.1.tgz", - "integrity": "sha512-pfRR4ZcNTSm2ZFHaztuvbICf+hyiG6ecA06SfAxoPmuHjvMu0KUIae7Y8GyVkbBqeEIidsmXeYooWIX9+qjfRQ==", - "license": "MIT", - "optional": true - }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1779,17 +1025,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -1806,22 +1041,11 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1838,26 +1062,12 @@ "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "license": "MIT" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=16" } }, "node_modules/promise": { @@ -1869,19 +1079,6 @@ "asap": "~2.0.3" } }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -2019,24 +1216,13 @@ "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", "license": "MIT" }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -2045,19 +1231,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -2068,34 +1241,20 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -2116,54 +1275,28 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/router/node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -2203,102 +1336,41 @@ "node": ">=4" } }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 18" } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" } }, "node_modules/setprototypeof": { @@ -2379,49 +1451,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true - }, - "node_modules/ssh2": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz", - "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==", - "hasInstallScript": true, - "dependencies": { - "asn1": "^0.2.6", - "bcrypt-pbkdf": "^1.0.2" - }, - "engines": { - "node": ">=10.16.0" - }, - "optionalDependencies": { - "cpu-features": "~0.0.10", - "nan": "^2.20.0" - } - }, - "node_modules/ssh2-sftp-client": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/ssh2-sftp-client/-/ssh2-sftp-client-11.0.0.tgz", - "integrity": "sha512-lOjgNYtioYquhtgyHwPryFNhllkuENjvCKkUXo18w/Q4UpEffCnEUBfiOTlwFdKIhG1rhrOGnA6DeKPSF2CP6w==", - "license": "Apache-2.0", - "dependencies": { - "concat-stream": "^2.0.0", - "promise-retry": "^2.0.1", - "ssh2": "^1.15.0" - }, - "engines": { - "node": ">=18.20.4" - }, - "funding": { - "type": "individual", - "url": "https://square.link/u/4g7sPflL" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -2431,15 +1460,6 @@ "node": ">= 0.8" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -2449,19 +1469,6 @@ "node": ">=0.10.0" } }, - "node_modules/sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -2489,49 +1496,24 @@ "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", "license": "MIT" }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "license": "Unlicense" - }, - "node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "license": "MIT" - }, "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -2543,9 +1525,9 @@ } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -2567,21 +1549,6 @@ "node": ">= 0.8" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2619,19 +1586,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } } } } diff --git a/package.json b/package.json index 54cd821..6c77797 100644 --- a/package.json +++ b/package.json @@ -33,25 +33,22 @@ }, "homepage": "https://github.com/artur-gurgul-pro/sajt#readme", "dependencies": { - "chalk": "^5.3.0", - "commander": "^12.1.0", - "express": "^4.19.2", - "fs-extra": "^11.2.0", + "chalk": "^5.4.1", + "commander": "^14.0.0", + "express": "^5.1.0", + "fs-extra": "^11.3.0", "gray-matter": "^4.0.3", - "highlight.js": "^11.10.0", + "highlight.js": "^11.11.1", "js-yaml": "^4.1.0", - "marked": "^14.0.0", - "marked-highlight": "^2.1.4", - "pug": "^3.0.3", - "ssh2": "^1.15.0", - "ssh2-sftp-client": "^11.0.0" + "marked": "^15.0.12", + "marked-highlight": "^2.2.1", + "pug": "^3.0.3" }, "devDependencies": { - "@types/express": "^5.0.0", + "@types/express": "^5.0.2", "@types/js-yaml": "^4.0.9", - "@types/node": "^22.13.5", + "@types/node": "^22.15.30", "@types/pug": "^2.0.10", - "electron": "^33.0.1", - "typescript": "^5.7.3" + "typescript": "^5.8.3" } } diff --git a/src/project-config.ts b/src/config.ts similarity index 54% rename from src/project-config.ts rename to src/config.ts index 2a16661..0bdea57 100644 --- a/src/project-config.ts +++ b/src/config.ts @@ -1,28 +1,32 @@ import fs from 'fs' import path from 'path' import yaml from 'js-yaml' +import { fileURLToPath } from 'url' export default class ProjectConfig { - public config: any = {} + public config: any + + private __filename: string + private __dirname: string constructor() { - - } - - public load() { - this.config = { + this.config = { ... this.read(), buildDir: './.build', ignore: [".build", ".sajt"] } - this.config.remote.port = 22 - this.config.remote.privateKey = fs.readFileSync(path.resolve(process.env.HOME ?? "", '.ssh/id_rsa')) + this.__filename = fileURLToPath(import.meta.url) + this.__dirname = path.dirname(this.__filename) + this.config.defaultProjectPath = path.join(this.__dirname, '..', 'empty') } read(): any { const __dirname = process.cwd() const configPath = path.join(__dirname, '.sajt/config.yaml') + if (!fs.existsSync(configPath)) { + return {} + } const fileContents = fs.readFileSync(configPath, 'utf8') return yaml.load(fileContents) } diff --git a/src/index.ts b/src/index.ts index 8ee1d7c..704585f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,12 +1,8 @@ import { Command } from 'commander' -import chalk from 'chalk' -//import fs from 'fs-extra' -import path from 'path' import Project from './project.js' import { serve } from './serve.js' const program = new Command() - let project = new Project() program diff --git a/src/markdown.ts b/src/markdown.ts index a2e0540..489f603 100644 --- a/src/markdown.ts +++ b/src/markdown.ts @@ -1,3 +1,5 @@ +import Parser , {File} from "./renderer.js" + import hljs from 'highlight.js' import { marked } from 'marked' import { markedHighlight } from 'marked-highlight' @@ -13,15 +15,19 @@ marked.use(markedHighlight({ } })) -export function parseMD(file: string) { - const fileContents = fs.readFileSync(path.join("./", file), 'utf8') +export default class Markdown implements Parser { + name = "md" + + loadAsHTML(filePath: string): File { + const fileContents = fs.readFileSync(path.join("./", filePath), 'utf8') const { data: metadata, content: markdownContent } = matter(fileContents) - const htmlContent = marked(markdownContent) + const htmlContent = marked(markdownContent, {async: false}) return { - meta: metadata, - content: htmlContent + data: metadata, + html: htmlContent } + } } const renderer = new marked.Renderer() diff --git a/src/page.ts b/src/page.ts new file mode 100644 index 0000000..b43e73c --- /dev/null +++ b/src/page.ts @@ -0,0 +1,50 @@ +import Renderer , {File} from "./renderer.js" +import path from 'path' +import utils from './utils.js' + +export default class Page { + file: File + + /// /example/path + dir: string[] + + /// /example/path/file + path: string + + /// /example/path/file.html + finalPath: string + + /// file.html + fileName: string + + hidden: boolean + title: string + layout: string + + constructor(filePath: string, renderer: Renderer) { + this.file = renderer.loadAsHTML(filePath) + + if (this.file.data?.path != null && this.file.data?.path != undefined) { + this.path = path.join("/", this.file.data?.path) + } else { + const parsedPath = path.parse(filePath) + const basePath = path.join("/", parsedPath.dir, parsedPath.name) + this.path = basePath + } + + const parsedPath = path.parse(this.path) + parsedPath.ext = '.html' + parsedPath.base = `${parsedPath.name}${parsedPath.ext}` + this.finalPath = path.format(parsedPath) + + const dirArray = utils.pathToArray(this.finalPath) + this.fileName = dirArray.pop() || "" + dirArray.shift() + this.dir = dirArray + this.hidden = this.file.data?.hidden || false + + // TODO: if tilte do not exists search in markdown for # title + this.title = this.file.data.title + this.layout = this.file.data.layout || "default" + } +} \ No newline at end of file diff --git a/src/project.ts b/src/project.ts index a2b90fc..e96cd98 100644 --- a/src/project.ts +++ b/src/project.ts @@ -1,41 +1,83 @@ -import { fileURLToPath } from 'url' + import path from 'path' import { cp } from './utils.js' -import { build } from './site.js' -import ProjectConfig from './project-config.js' +import ProjectConfig from './config.js' +import fs from 'fs' +import pug from 'pug' + +import utils from "./utils.js" + +import Markdown from './markdown.js' +import Yaml from './yaml.js' +import Page from './page.js' + export default class Project { - public config = new ProjectConfig() // should be injected - private __filename: string - private __dirname: string - private DEFAULT_PROJECT_PATH: string + private config = new ProjectConfig() + pages: Page[] constructor() { - // Get the directory of the current file - this.__filename = fileURLToPath(import.meta.url) - this.__dirname = path.dirname(this.__filename) - - // Path relative to the script file's directory - this.DEFAULT_PROJECT_PATH = path.join(this.__dirname, '..', 'empty') + this.pages = this.loadPages() + console.log(this.pages.map(it=> {return {dir: it.dir, file: it.finalPath}})) } new() { - console.log("Initialize a new project") - console.log(this.DEFAULT_PROJECT_PATH) - cp(this.DEFAULT_PROJECT_PATH, ".") - - console.log(this.config) - this.config.load() - } - - existing() { - this.config.load() + cp(this.config.config.defaultProjectPath, ".") } build() { - this.config.load() - build(this.config.config) + + utils.removeDirectorySync(this.config.config.buildDir) + utils.cp("./.sajt/static", path.join(this.config.config.buildDir, "static")) + + for(const page of this.pages) { + this.compile(page) + } + } + + loadPages(): Page[] { + const mdParser = new Markdown() + const yamlParser = new Yaml() + + let listMD = utils.getAllFilesWithExtension('.',".md", this.config.config.ignore) + .map(path => new Page(path, mdParser)) + + let listYML = utils.getAllFilesWithExtension('.',".yml", this.config.config.ignore) + .map(path => new Page(path, yamlParser)) + + return listMD.concat(listYML) + } + + compile(page: Page) { + const output = path.join(this.config.config.buildDir, page.finalPath) + + const compiledFunction = pug.compileFile(`.sajt/layouts/${page.layout}.pug`) + + const data = { + page, + context: this.context(page) + } + + const dirname = path.dirname(output) + if (!fs.existsSync(dirname)) { + fs.mkdirSync(dirname, { recursive: true }) + } + + const html = compiledFunction(data) + fs.writeFileSync(output, html) + console.log(`> ${output}`) + } + + context(page: Page): any { + return { + pages: this.pages.map(it => { return { + title: it.title, + isCurrent: page == it, + url: it.finalPath, + isDir: false + }}) + } } } \ No newline at end of file diff --git a/src/renderer.ts b/src/renderer.ts new file mode 100644 index 0000000..19c04e2 --- /dev/null +++ b/src/renderer.ts @@ -0,0 +1,10 @@ + +export interface File { + get html(): string + get data(): { [key: string]: any } +} + +export default interface Renderer { + get name(): string + loadAsHTML(path: string): File +} \ No newline at end of file diff --git a/src/serve.ts b/src/serve.ts index 73e30d6..a06050c 100644 --- a/src/serve.ts +++ b/src/serve.ts @@ -1,15 +1,11 @@ import express from 'express' import { setWatcher } from './watch.js' -//import { webdavMiddleware } from "./webdav.js" const app = express() const PORT = process.env.PORT || 3000 export function serve() { app.use(express.static('./.build')) - - //app.use(webdavMiddleware) - setWatcher(url => { console.log(url) }) diff --git a/src/site.ts b/src/site.ts deleted file mode 100755 index d41651e..0000000 --- a/src/site.ts +++ /dev/null @@ -1,132 +0,0 @@ -import fs from 'fs' -import pug from 'pug' -import path from 'path' - -import { cp } from "./utils.js" -import { parseMarkdown } from './markdown.js' -import { getAllFilesWithExtension, pathToArray, parseYML } from './utils.js' -import { parseMD } from './markdown.js' - -function removeDirectorySync(directory: string) { - try { - fs.rmSync(directory, { recursive: true, force: true }) - console.log("Directory and its contents removed.") - } catch (err: any) { - console.error(`Error removing directory: ${err.message}`) - } -} - -function compile(template: string, content: any, output: string) { - if (template == null) { - console.error("Template is not defined, loading the default") - template = "default" - } - const compiledFunction = pug.compileFile(`.sajt/layouts/${template}.pug`); - const data = { - ...content, - site: {posts: []} - } - - const dirname = path.dirname(output) - if (!fs.existsSync(dirname)) { - fs.mkdirSync(dirname, { recursive: true }) - } - - const html = compiledFunction(data) - fs.writeFileSync(output, html) - console.log(`HTML has been rendered and saved to ${output}`); -} - -function compileData(template: string, content: object, output: string) { - const compiledFunction = pug.compileFile(`.sajt/layouts/${template}.pug`) - - const dirname = path.dirname(output) - if (!fs.existsSync(dirname)) { - fs.mkdirSync(dirname, { recursive: true }) - } - - const html = compiledFunction(content) - fs.writeFileSync(output, html) - console.log(`HTML has been rendered and saved to ${output}`); -} - -function readMetadata(ignore: string[]) { - let htmlExtension = "html" - - let listMD = getAllFilesWithExtension('.',".md", ignore) - .map(f => { return { - pathMD: f, - type: "md", - data: {} as any, - md: parseMD(f) - } as any }) - - let listYML = getAllFilesWithExtension('.',".yml", ignore) - .map(f => { return { - pathMD: f, - type: "yml", - data: parseYML(f), - md: {meta: {}} - } as any }) - - let list = listMD.concat(listYML) - - for(const site of list) { - if (site.md.meta?.path != null && site.md.meta?.path != undefined) { - site.path = path.join("/", site.md.meta.path) - } else { - const parsedPath = path.parse(site.pathMD) - const basePath = path.join("/", parsedPath.dir, parsedPath.name) - site.path = basePath - } - - // add proper extension - const parsedPath = path.parse(site.path) - parsedPath.ext = htmlExtension.startsWith('.') ? htmlExtension : `.${htmlExtension}` - parsedPath.base = `${parsedPath.name}${parsedPath.ext}` - site.path = path.format(parsedPath) - - // add dirs metadata - const dirArray = pathToArray(site.path) - site.fileName = dirArray.pop() - dirArray.shift() - site.dir = dirArray - site.meta = site.md.meta - site.hidden = site.data?.hidden || false - } - - return list -} - -export function build(config: any) { - removeDirectorySync(config.buildDir) - cp("./.sajt/static", path.join(config.buildDir, "static")) - - let data = readMetadata(config.ignore) - let pages = data.map(site => { - return { - title: site.meta.title, - url: site.path - } - }) - - for(const site of data) { - if (site.type == "md") { - compile(site.meta.layout, - { - content: site.md.content, - title: site.meta.title, - hidden: false, - pages - }, - path.join(config.buildDir, site.path)) - } else if (site.type == "yml") { - let data = {...site.data} - delete data.layout - parseMarkdown(data) - compileData(site.data.layout, - {data, pages, hidden: data.hidden}, - path.join(config.buildDir, site.path)) - } - } -} \ No newline at end of file diff --git a/src/ssh.ts b/src/ssh.ts deleted file mode 100644 index ffdf280..0000000 --- a/src/ssh.ts +++ /dev/null @@ -1,36 +0,0 @@ -/*const Client = require('ssh2-sftp-client') - -async function uploadDirectory(serverConfig, localDirPath) { - const sftp = new Client() - await sftp.connect(serverConfig) - try { - await upload(sftp, config, localDirPath, serverConfig.path) - } catch (err) { - console.error(`Error: ${err.message}`) - } finally { - await sftp.end() - console.log('Connection closed') - } -} - -async function upload(sftp, config, localPath, remotePath) { - - console.log('Connected to the server') - - const files = fs.readdirSync(localPath) - - for (const file of files) { - const localFilePath = path.join(localPath, file) - const remoteFilePath = `${remotePath}/${file}` - - if (fs.statSync(localFilePath).isDirectory()) { - await sftp.mkdir(remoteFilePath, true) - await upload(sftp, config, localFilePath, remoteFilePath) - } else { - const fileContent = fs.readFileSync(localFilePath) - await sftp.put(Buffer.from(fileContent), remoteFilePath) - console.log(`File transferred successfully: ${localFilePath}`) - } - } -} -*/ \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index b0109b4..7a0fc14 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,12 +1,7 @@ -import yaml from 'js-yaml' + import fs from 'fs' import path from 'path' -export function parseYML(file: string) { - const fileContents = fs.readFileSync(file, 'utf8') - return yaml.load(fileContents) -} - export function getAllFilesWithExtension(directory: string, extension: string, excludes: string[]): string[] { let results: string[] = [] function readDirectory(directory: string) { @@ -29,7 +24,6 @@ export function getAllFilesWithExtension(directory: string, extension: string, e return results } -// copyDirectory export function cp(source: string, destination: string) { fs.mkdirSync(destination, { recursive: true }) const items = fs.readdirSync(source) @@ -45,9 +39,23 @@ export function cp(source: string, destination: string) { }) } -export function pathToArray(filePath: string) { - // Normalize the file path to handle different OS path separators +function removeDirectorySync(directory: string) { + try { + fs.rmSync(directory, { recursive: true, force: true }) + console.log("Directory and its contents removed.") + } catch (err: any) { + console.error(`Error removing directory: ${err.message}`) + } +} + +export function pathToArray(filePath: string):string[] { const normalizedPath = path.normalize(filePath) - // Split the path into an array of directories return normalizedPath.split(path.sep) +} + +export default { + pathToArray, + cp, + getAllFilesWithExtension, + removeDirectorySync } \ No newline at end of file diff --git a/src/watch.ts b/src/watch.ts index fff33b5..233f8bb 100644 --- a/src/watch.ts +++ b/src/watch.ts @@ -2,34 +2,31 @@ import fs from 'fs' import path from 'path' export function setWatcher(callback: (url: string) => void) { -// Directory to watch -const directoryPath = './'; -// Ensure the directory exists +const directoryPath = './' if (!fs.existsSync(directoryPath)) { - fs.mkdirSync(directoryPath, { recursive: true }); + fs.mkdirSync(directoryPath, { recursive: true }) } -console.log(`Watching for changes in: ${directoryPath}`); -// Watch the directory for changes +console.log(`Watching for changes in: ${directoryPath}`) + fs.watch(directoryPath, (eventType, filename) => { if (filename) { - const fullPath = path.join(directoryPath, filename); - console.log(`File ${filename} has been ${eventType}`); - // Check if the file was added, changed, or deleted + const fullPath = path.join(directoryPath, filename) + console.log(`File ${filename} has been ${eventType}`) fs.stat(fullPath, (err, stats) => { if (err) { if (err.code === 'ENOENT') { - console.log(`File ${filename} was deleted.`); + console.log(`File ${filename} was deleted.`) } else { - console.error(`Error checking file status: ${err.message}`); + console.error(`Error checking file status: ${err.message}`) } } else { if (stats.isFile()) { - console.log(`File ${filename} exists with size: ${stats.size} bytes`); + console.log(`File ${filename} exists with size: ${stats.size} bytes`) } } - }); + }) } else { - console.log('Filename not provided, but change detected.'); + console.log('Filename not provided, but change detected.') } -}); +}) } \ No newline at end of file diff --git a/src/webdav.ts b/src/webdav.ts deleted file mode 100644 index 9015e46..0000000 --- a/src/webdav.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* -import { v2 as webdav } from 'webdav-server'; - -// 1. Create a user manager and add a user -const userManager = new webdav.SimpleUserManager() -const user = userManager.addUser('user', 'password', false) - -// 2. Create a privilege manager -const privilegeManager = new webdav.SimplePathPrivilegeManager() - -// 3. Configure the WebDAV server -const server = new webdav.WebDAVServer({ - // HTTP Digest authentication for better security - httpAuthentication: new webdav.HTTPDigestAuthentication(userManager, 'default-realm'), - privilegeManager -}) - -// 4. Set up a physical file system folder (e.g., `./data`) as the root -const publicFileSystem = new webdav.PhysicalFileSystem('./') - -server.setFileSystem('/', publicFileSystem, (success) => { - if (!success) { - console.error('Failed to set file system') - process.exit(1) - } - // Give the user all permissions on the root - privilegeManager.setRights(user, '/', ['all']) -}); - -export const webdavMiddleware = webdav.extensions.express("/", server) -*/ \ No newline at end of file diff --git a/src/yaml.ts b/src/yaml.ts new file mode 100644 index 0000000..c0bcc6f --- /dev/null +++ b/src/yaml.ts @@ -0,0 +1,20 @@ +import yaml from 'js-yaml' +import Renderer , {File} from "./renderer.js" +import fs from 'fs' + +export default class Yaml implements Renderer { + name = "yml" + + loadAsHTML(file: string): File { + const fileContents = fs.readFileSync(file, 'utf8') + + // let data = {...site.data} + // delete data.layout + // parseMarkdown(data) + + return { + data: yaml.load(fileContents) as { [key: string]: any }, + html: "" + } + } +} \ No newline at end of file diff --git a/types/config.d.ts b/types/config.d.ts index f928a45..f03ea3a 100644 --- a/types/config.d.ts +++ b/types/config.d.ts @@ -1,7 +1,7 @@ export default class ProjectConfig { config: any; + private __filename; + private __dirname; constructor(); - load(): void; - getConfig(): any; read(): any; } diff --git a/types/context.d.ts b/types/context.d.ts new file mode 100644 index 0000000..abf556a --- /dev/null +++ b/types/context.d.ts @@ -0,0 +1,2 @@ +export default interface Context { +} diff --git a/types/markdown.d.ts b/types/markdown.d.ts index 738f963..1a042aa 100644 --- a/types/markdown.d.ts +++ b/types/markdown.d.ts @@ -1,7 +1,6 @@ -export declare function parseMD(file: string): { - meta: { - [key: string]: any; - }; - content: string | Promise; -}; +import Parser, { File } from "./renderer.js"; +export default class Markdown implements Parser { + name: string; + loadAsHTML(filePath: string): File; +} export declare function parseMarkdown(obj: any): void; diff --git a/types/page.d.ts b/types/page.d.ts new file mode 100644 index 0000000..b560619 --- /dev/null +++ b/types/page.d.ts @@ -0,0 +1,12 @@ +import Renderer, { File } from "./renderer.js"; +export default class Page { + file: File; + dir: string[]; + path: string; + finalPath: string; + fileName: string; + hidden: boolean; + title: string; + layout: string; + constructor(filePath: string, renderer: Renderer); +} diff --git a/types/parser.d.ts b/types/parser.d.ts new file mode 100644 index 0000000..941b361 --- /dev/null +++ b/types/parser.d.ts @@ -0,0 +1,10 @@ +export interface File { + get html(): string; + get data(): { + [key: string]: any; + }; +} +export default interface Parser { + get name(): string; + parse(path: string): File; +} diff --git a/types/project.d.ts b/types/project.d.ts index 0652de8..8ad46a1 100644 --- a/types/project.d.ts +++ b/types/project.d.ts @@ -1,11 +1,11 @@ -import ProjectConfig from './project-config.js'; +import Page from './page.js'; export default class Project { - config: ProjectConfig; - private __filename; - private __dirname; - private DEFAULT_PROJECT_PATH; + private config; + pages: Page[]; constructor(); new(): void; - existing(): void; build(): void; + loadPages(): Page[]; + compile(page: Page): void; + context(page: Page): any; } diff --git a/types/renderer.d.ts b/types/renderer.d.ts new file mode 100644 index 0000000..cdfe669 --- /dev/null +++ b/types/renderer.d.ts @@ -0,0 +1,10 @@ +export interface File { + get html(): string; + get data(): { + [key: string]: any; + }; +} +export default interface Renderer { + get name(): string; + loadAsHTML(path: string): File; +} diff --git a/types/utils.d.ts b/types/utils.d.ts index 60cc189..e51c7fd 100644 --- a/types/utils.d.ts +++ b/types/utils.d.ts @@ -1,4 +1,11 @@ -export declare function parseYML(file: string): unknown; export declare function getAllFilesWithExtension(directory: string, extension: string, excludes: string[]): string[]; export declare function cp(source: string, destination: string): void; +declare function removeDirectorySync(directory: string): void; export declare function pathToArray(filePath: string): string[]; +declare const _default: { + pathToArray: typeof pathToArray; + cp: typeof cp; + getAllFilesWithExtension: typeof getAllFilesWithExtension; + removeDirectorySync: typeof removeDirectorySync; +}; +export default _default; diff --git a/types/yaml.d.ts b/types/yaml.d.ts new file mode 100644 index 0000000..1507daf --- /dev/null +++ b/types/yaml.d.ts @@ -0,0 +1,5 @@ +import Renderer, { File } from "./renderer.js"; +export default class Yaml implements Renderer { + name: string; + loadAsHTML(file: string): File; +}