diff --git a/.cache/mastodon.json b/.cache/mastodon.json new file mode 100644 index 0000000..768bb3e --- /dev/null +++ b/.cache/mastodon.json @@ -0,0 +1,89 @@ +{ + "lastFetched": "2026-07-05T22:01:02.267Z", + "posts": [ + { + "date": "2026-07-03T01:51:37.604Z", + "id": "116853538658966225", + "content": "

So about the #digitalcircus finale.

They made me cry tears I've been holding for long. The way this EP dealed with supressed emotions and coping with the pain of what's unchangeable, unfixable; communicated deeply with me. It's funny I cried laughing in realization of how warm and clever this goodbye was.

It's the best bittersweet ending I could ever wish for the show.

OH GOD the part they tell Jax is doing okay. You can't hit my heart harder than that 😭😭😭

", + "source_url": "https://mstdn.social/@tenkuma/116853538658966225", + "site": "Mastodon", + "media": [], + "emojis": [] + }, + { + "date": "2026-07-01T22:04:13.252Z", + "id": "116846982152346064", + "content": "

if I wanted shit there's a shit generator at chat.openai.com

", + "source_url": "https://mstdn.social/@tenkuma/116846982152346064", + "site": "Mastodon", + "media": [], + "emojis": [] + }, + { + "date": "2025-07-08T21:40:54.760Z", + "id": "114819783377460165", + "content": "

I love how ya'll humans give grades for vulnerabilities

@cR0w https://infosec.exchange/@cR0w/114819777669875206

", + "source_url": "https://mstdn.social/@tenkuma/114819783377460165", + "site": "Mastodon", + "media": [], + "emojis": [] + }, + { + "date": "2025-07-07T22:42:45.377Z", + "id": "114814364246016516", + "content": "

Another level of nostalgia playing Roblox on Linux with Sober! Plus wearing that Linux t-shirt just feels right. Good times...

#RobloxSober

", + "source_url": "https://mstdn.social/@tenkuma/114814364246016516", + "site": "Mastodon", + "media": [ + { + "image": "https://media.mstdn.social/media_attachments/files/114/814/350/913/893/408/original/a0c9e5a52e282587.png", + "alt": null, + "width": 640, + "height": 360, + "aspect": 1.7777777777777777 + } + ], + "emojis": [] + }, + { + "date": "2025-07-01T09:12:57.603Z", + "id": "114777206135368914", + "content": "

Meet Pete the cat :baba_baba:

He is as sleepy as I am.

", + "source_url": "https://mstdn.social/@tenkuma/114777206135368914", + "site": "Mastodon", + "media": [ + { + "image": "https://media.mstdn.social/media_attachments/files/114/777/200/647/969/908/original/203ba60ae84a96cb.jpg", + "alt": "Black and white cat lying in a sofa.", + "width": 554, + "height": 415, + "aspect": 1.3349397590361445 + } + ], + "emojis": [ + { + "shortcode": "baba_baba", + "url": "https://media.mstdn.social/custom_emojis/images/000/641/966/static/8d71b7179d1a7445.png" + } + ] + }, + { + "date": "2025-06-29T03:15:31.767Z", + "id": "114764476040214757", + "content": "

@cR0w this guy bio is just impeccable.

", + "source_url": "https://mstdn.social/@tenkuma/114764476040214757", + "site": "Mastodon", + "media": [], + "emojis": [] + }, + { + "date": "2025-06-10T21:32:12.812Z", + "id": "114661204480015822", + "content": "

Hello, world.

", + "source_url": "https://mstdn.social/@tenkuma/114661204480015822", + "site": "Mastodon", + "media": [], + "emojis": [] + } + ] +} \ No newline at end of file diff --git a/.eleventy.js b/.eleventy.js index ed81672..e272860 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -1,46 +1,101 @@ -const fs = require("fs"); -const path = require("path"); -const i18n = require('./_data/i18n.js'); +import fs from "fs"; +import path from "path"; -module.exports = function(eleventyConfig) { - eleventyConfig.addCollection("post", function(collectionApi) { - return collectionApi.getFilteredByGlob("./posts/*").sort((a, b) => b.date - a.date); +import syntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight"; +import safeLinks from "@sardine/eleventy-plugin-external-links"; +import pluginGitCommitDate from "eleventy-plugin-git-commit-date"; +import recentChanges from "eleventy-plugin-recent-changes"; +// import Webmentions from "eleventy-plugin-webmentions"; // configure later +import pluginInlineLinkFavicon from "eleventy-plugin-inline-link-favicon"; +import poison from "eleventy-plugin-poison"; +import mastoarchive from "eleventy-plugin-mastoarchive"; +// import purgeCssPlugin from "eleventy-plugin-purgecss"; +import pluginCleanUrls from "@inframanufaktur/eleventy-plugin-clean-urls"; +// import githubRepos from 'eleventy-plugin-github-repos'; +import readingTime from 'eleventy-plugin-reading-time'; + +// import i18n from "./_data/i18n.js"; + +const production = (process.env.GITHUB_ACTIONS || process.env.FORGEJO_ACTIONS || process.env.IS_PRODUCTION); +console.log("Production:", production ? "true" : "false"); + +export default function (eleventyConfig) { + eleventyConfig.setInputDirectory("site"); + + eleventyConfig.setQuietMode(true); + eleventyConfig.addPlugin(syntaxHighlight); + eleventyConfig.addPlugin(safeLinks); + eleventyConfig.addPlugin(pluginGitCommitDate); + eleventyConfig.addPlugin(recentChanges, { + commits: 10, }); - eleventyConfig.addCollection("misc", (api) => - api.getFilteredByTag("misc") - ); + eleventyConfig.addPlugin(pluginInlineLinkFavicon); + eleventyConfig.addPlugin(poison); + eleventyConfig.addPlugin(mastoarchive, { + host: "https://mstdn.social", + userId: "114661188739031987", + cacheLocation: ".cache/mastodon.json", + isProduction: production + }); + // eleventyConfig.addPlugin(purgeCssPlugin, { + // config: "./purgecss.config.cjs", + // quiet: false, + // }); + eleventyConfig.addPlugin(pluginCleanUrls); + // eleventyConfig.addPlugin(githubRepos, { userAccount: 'adrianvic' }); + eleventyConfig.addPlugin(readingTime); + + eleventyConfig.addWatchTarget("./site"); + + + eleventyConfig.addCollection("post", function (collectionApi) { + return collectionApi + .getFilteredByGlob("./site/posts/*") + .sort((a, b) => b.date - a.date); + }); + + eleventyConfig.addCollection("misc", (api) => api.getFilteredByTag("misc")); + eleventyConfig.addFilter("getTranslation", (page, lang) => { const dir = path.dirname(page.inputPath); const file = path.join(dir, `${lang}.json`); - + if (fs.existsSync(file)) { return JSON.parse(fs.readFileSync(file, "utf-8")); } - + return {}; }); + eleventyConfig.addCollection("88x31", () => { - return fs.readdirSync("static/images/88x31") - .map(file => ({ - url: `/static/images/88x31/${file}`, - fileSlug: file - })); + return fs + .readdirSync("static/images/88x31") + .map((file) => ({ + url: `/static/images/88x31/${file}`, + fileSlug: file, + })); }); eleventyConfig.addPassthroughCopy("static"); - eleventyConfig.addNunjucksFilter("alternateLanguages", function(collection, postId, currentLanguageKey) { - return collection.filter(post => - post.data.postId === postId && post.data.langKey !== currentLanguageKey - ) - .map(post => ({ - lang: post.data.langKey, - url: post.url, - title: post.data.title - })) - }); + eleventyConfig.addNunjucksFilter( + "alternateLanguages", + function (collection, postId, currentLanguageKey) { + return collection + .filter( + (post) => + post.data.postId === postId && + post.data.langKey !== currentLanguageKey + ) + .map((post) => ({ + lang: post.data.langKey, + url: post.url, + title: post.data.title, + })); + } + ); - eleventyConfig.addFilter("absoluteUrl", function(url) { + eleventyConfig.addFilter("absoluteUrl", function (url) { const base = "https://adrianvic.github.io"; const prefix = process.env.GITHUB_ACTIONS ? "" : "/tenkuma/web"; return base + prefix + url; @@ -52,24 +107,65 @@ module.exports = function(eleventyConfig) { year: "numeric", month: "numeric", day: "numeric", - timeZone: "America/Sao_Paulo" + timeZone: "America/Sao_Paulo", }); }); - eleventyConfig.addNunjucksFilter("smartTitle", function(str) { + eleventyConfig.addNunjucksFilter("smartTitle", function (str) { if (!str) return ""; - const smallWords = ["a","an","and","at","but","by","for","in","nor","of","on","or","so","the","to","up","yet", - "e","de","do","da","dos","das","a","o","um","uma","em","por","para","com","no","na","nos"]; - return str.toLowerCase().split(" ").map((word, i) => { - if (i === 0) return word.charAt(0).toUpperCase() + word.slice(1); - return smallWords.includes(word) ? word : word.charAt(0).toUpperCase() + word.slice(1); - }).join(" "); + const smallWords = [ + "a", + "an", + "and", + "at", + "but", + "by", + "for", + "in", + "nor", + "of", + "on", + "or", + "so", + "the", + "to", + "up", + "yet", + "e", + "de", + "do", + "da", + "dos", + "das", + "a", + "o", + "um", + "uma", + "em", + "por", + "para", + "com", + "no", + "na", + "nos", + ]; + + return str + .toLowerCase() + .split(" ") + .map((word, i) => { + if (i === 0) return word.charAt(0).toUpperCase() + word.slice(1); + return smallWords.includes(word) + ? word + : word.charAt(0).toUpperCase() + word.slice(1); + }) + .join(" "); }); return { pathPrefix: process.env.GITHUB_ACTIONS ? "" : "/tenkuma/web", dir: { - output: "docs" - } + output: "docs", + }, }; -}; +} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8d068a5..b7d21c1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,15 +3,15 @@ name: Build Eleventy on: push: paths-ignore: - - '/maintenance/**' - - '/README.md' + - 'maintenance/**' + - 'README.md' branches: - main workflow_dispatch: pull_request: paths-ignore: - - '/maintenance/**' - - '/README.md' + - 'maintenance/**' + - 'README.md' permissions: contents: write @@ -26,6 +26,8 @@ jobs: steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 diff --git a/_includes/header.njk b/_includes/header.njk deleted file mode 100644 index 704f163..0000000 --- a/_includes/header.njk +++ /dev/null @@ -1,28 +0,0 @@ -
-
-

{{ title or "Adrian Victor" }}

- {{ subtitle or "Fanasy is not a crime, find your castle in the sky." }} - -
-
-
- - -
-
\ No newline at end of file diff --git a/_includes/post.11tydata.js b/_includes/post.11tydata.js deleted file mode 100644 index c45c03e..0000000 --- a/_includes/post.11tydata.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - langKey: data => data.lang -}; \ No newline at end of file diff --git a/index.njk b/index.njk deleted file mode 100644 index 75defb4..0000000 --- a/index.njk +++ /dev/null @@ -1,208 +0,0 @@ ---- -pagination: - data: i18n - size: 1 - alias: langKey -permalink: "/{{ langKey }}/index.html" -layout: base.njk ---- -{% from "macros.njk" import i88x31 with context %} -{% from "macros.njk" import videoCard with context %} -{% from "macros.njk" import projectCard %} - -
-
- -
- - - - -
-
-

{{ i18n[langKey].kaoMain | safe }}

-

{{ i18n[langKey].kaoLink | safe }}

-
-
-

{{ i18n[langKey].welcome | smartTitle }}

-

{{ i18n[langKey].homeWelcomeParagraph | safe }}

- -
- {{ i88x31("tenkuma.gif") }} - {{ i88x31("anybrowser6.gif") }} - {{ i88x31("ai.gif") }} - {{ i88x31("WEBP.gif") }} - {{ i88x31("rainbowrain.gif") }} - {{ i88x31("blasphemy.gif") }} - {{ i88x31("css3.gif") }} - {{ i88x31("best_viewed_with_open_eyes.gif") }} - {{ i88x31("gnu-linux.gif") }} -
-
- -
- -

{{ i18n[langKey].aboutMe | smartTitle }}

-

{{ i18n[langKey].homeAboutMeParagraph | safe }}

-

{{ i18n[langKey].homeAboutMeParagraphTwo | safe }}

- -

{{ i18n[langKey].socialsAndContact | smartTitle }}

-

{{ i18n[langKey].homeSocialsAndContactParagraph | safe }}

-

{{ i18n[langKey].homeSocialsAndContactParagraphTwo | safe }}

- -

Webrings

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

{{ i18n[langKey].myMusic | smartTitle }}

-

{{ i18n[langKey].homeMyMusicParagraph | safe }}

-

{{ i18n[langKey].homeMyMusicParagraphTwo | safe }}

- -
- {{ i88x31("rave.gif") }} - {{ i88x31("happymix.gif") }} -
-
- -
- -
- {{ - videoCard( - i18n["global"].homeSongLink, - i18n["global"].homeSongTitle, - i18n["global"].homeSongImage, - i18n["global"].homeSongWebsite, - i18n["global"].homeSongDuration, - i18n["global"].homeSongAccent - ) - }} -
-
- -
-
-

{{ i18n[langKey].myVideos | smartTitle }}

-

{{ i18n[langKey].homeMyVideoParagraph | safe }}

-
- -
- - {{ - videoCard( - i18n["global"].homeVideoLink, - i18n[langKey].homeVideoTitle, - i18n["global"].homeVideoImage, - i18n["global"].homeVideoWebsite, - i18n["global"].homeVideoDuration - ) - }} -
- -
-
-

{{ i18n[langKey].mySoftware | smartTitle }}

-

{{ i18n[langKey].homeMySoftwareParagraph | safe }}

-
- -
- -
- {{ - projectCard( - "Jamfish", - i18n[langKey].jamfishProjectDesctiption, - "https://github.com/adrianvic/jamfish", - '/static/images/jamfish-wide.png', - "Jamfish" - ) - }} - - {{ - projectCard( - "ItemEconomy", - i18n[langKey].itemeconomyProjectDesctiption, - "https://github.com/adrianvic/ItemEconomy", - '/static/images/itemeconomy2-wide.png', - "ItemEconomy" - ) - }} - - {{ - projectCard( - "Eye of Nemesis", - i18n[langKey].eyeofnemesisProjectDesctiption, - "https://github.com/adrianvic/NemesisEye", - '/static/images/eye_of_nemesis.png', - "Eye of Nemesis" - ) - }} - - {{ - projectCard( - "PestoWiki", - i18n[langKey].pestoProjectDesctiption, - "https://github.com/Margarina-not-butter/PestoWiki", - '/static/images/pestowikifullwhite.png', - "PestoWiki" - ) - }} -
-
-
\ No newline at end of file diff --git a/maintenance/edit-i18n.js b/maintenance/edit-i18n.js deleted file mode 100644 index 216820b..0000000 --- a/maintenance/edit-i18n.js +++ /dev/null @@ -1,191 +0,0 @@ -// Coded entirely by ChatGPT -// :( - -const express = require("express"); -const fs = require("fs"); -const parser = require("@babel/parser"); -const traverse = require("@babel/traverse").default; -const generate = require("@babel/generator").default; -const t = require("@babel/types"); - -const app = express(); -app.use(express.json()); - -const FILE = "../_data/i18n.js"; - -function loadAST() { - const code = fs.readFileSync(FILE, "utf8"); - return parser.parse(code, { sourceType: "module" }); -} - -function extract(ast) { - const out = {}; - - traverse(ast, { - AssignmentExpression(path) { - if ( - path.node.left.object?.name === "module" && - path.node.left.property?.name === "exports" - ) { - path.node.right.properties.forEach(langProp => { - const lang = langProp.key.name || langProp.key.value; - out[lang] = {}; - - langProp.value.properties.forEach(p => { - const key = p.key.name || p.key.value; - out[lang][key] = p.value.extra?.raw || generate(p.value).code; - }); - }); - } - } - }); - - return out; -} - -function write(ast, newData) { - traverse(ast, { - AssignmentExpression(path) { - if ( - path.node.left.object?.name === "module" && - path.node.left.property?.name === "exports" - ) { - path.node.right.properties.forEach(langProp => { - const lang = langProp.key.name || langProp.key.value; - - const existingKeys = new Set( - langProp.value.properties.map(p => p.key.name || p.key.value) - ); - - // update existing - langProp.value.properties.forEach(p => { - const key = p.key.name || p.key.value; - - if (key in (newData[lang] || {})) { - p.value = parser.parseExpression(newData[lang][key]); - } - }); - - // add new keys - Object.keys(newData[lang] || {}).forEach(key => { - if (!existingKeys.has(key)) { - langProp.value.properties.push( - t.objectProperty( - t.identifier(key), - parser.parseExpression(newData[lang][key]) - ) - ); - } - }); - }); - } - } - }); - - const output = generate(ast, { retainLines: true }).code; - fs.writeFileSync(FILE, output); -} - -app.get("/data", (req, res) => { - const ast = loadAST(); - res.json(extract(ast)); -}); - -app.post("/save", (req, res) => { - const ast = loadAST(); - write(ast, req.body); - res.send("ok"); -}); - -app.get("/", (req, res) => { - res.send(` - - - -

i18n Editor

-
- - - - - - - `); - }); - - app.listen(3000,()=>console.log('http://localhost:3000')); - \ No newline at end of file diff --git a/misc/about/index.njk b/misc/about/index.njk deleted file mode 100644 index fce4ced..0000000 --- a/misc/about/index.njk +++ /dev/null @@ -1,34 +0,0 @@ ---- -layout: base.njk -pagination: - data: languages - size: 1 - alias: langKey -tags: misc -backgroundOpacity: "0.3" -background: "bear3.jpg" ---- -
-

{{ t.pageTitle }}

-

{{ t.introText1 }} {{ t.introRepoLinkText }} {{ t.introText2 }} {{ t.introLicenseLinkText }}.

-

{{ t.privacyText1 }} () {{ t.privacyText2 }} () {{ t.privacyText3 }}

- -

{{ t.attributionsHeading }}

-
-
{{ t.bgImageLabel }}
-
{{ t.bgImageCredit }}
-
{{ t.badges88x31Label }}
-
88x31.nl
-
{{ t.neocitiesCommunity }}
-
{{ t.clickSoundLabel }}
-
lilypids @ Myinstants
-
- -

{{ t.thanksHeading }}

-
-
Eleventy (11ty)
-
{{ t.eleventyDesc }}
-
GitHub Pages
-
{{ t.githubPagesDesc }}
-
-
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index affb8b5..ce1b23f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,33 +8,35 @@ "name": "adrianvictor-new", "version": "1.0.0", "license": "ISC", - "devDependencies": { - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.2", - "@babel/traverse": "^7.29.0", - "eleventy-plugin-citations": "^0.1.10", - "express": "^5.2.1", - "readline-sync": "^1.4.10" + "dependencies": { + "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2", + "@inframanufaktur/eleventy-plugin-clean-urls": "^1.0.2", + "@sardine/eleventy-plugin-external-links": "^1.4.0", + "eleventy-plugin-git-commit-date": "^1.0.2", + "eleventy-plugin-github-repos": "^0.1.8", + "eleventy-plugin-inline-link-favicon": "^1.1.0", + "eleventy-plugin-mastoarchive": "^0.2.0", + "eleventy-plugin-poison": "^1.0.1", + "eleventy-plugin-purgecss": "^0.6.0", + "eleventy-plugin-reading-time": "^0.0.1", + "eleventy-plugin-recent-changes": "^1.0.1", + "eleventy-plugin-webmentions": "^2.1.0" } }, "node_modules/@11ty/dependency-tree": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-4.0.0.tgz", - "integrity": "sha512-PTOnwM8Xt+GdJmwRKg4pZ8EKAgGoK7pedZBfNSOChXu8MYk2FdEsxdJYecX4t62owpGw3xK60q9TQv/5JI59jw==", - "dev": true, + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree/-/dependency-tree-4.0.2.tgz", + "integrity": "sha512-RTF6VTZHatYf7fSZBUN3RKwiUeJh5dhWV61gDPrHhQF2/gzruAkYz8yXuvGLx3w3ZBKreGrR+MfYpSVkdbdbLA==", "license": "MIT", - "peer": true, "dependencies": { "@11ty/eleventy-utils": "^2.0.1" } }, "node_modules/@11ty/dependency-tree-esm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@11ty/dependency-tree-esm/-/dependency-tree-esm-2.0.2.tgz", - "integrity": "sha512-kSTmXneksQLBhwsfqjxiSi9ecRKENXmRtT5RG95rFoWSI8kkwLcGlYpoXsPkCD9uQwSU1rmDzXBDnqUJlWaIyw==", - "dev": true, + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@11ty/dependency-tree-esm/-/dependency-tree-esm-2.0.4.tgz", + "integrity": "sha512-MYKC0Ac77ILr1HnRJalzKDlb9Z8To3kXQCltx299pUXXUFtJ1RIONtULlknknqW8cLe19DLVgmxVCtjEFm7h0A==", "license": "MIT", - "peer": true, "dependencies": { "@11ty/eleventy-utils": "^2.0.7", "acorn": "^8.15.0", @@ -43,46 +45,44 @@ } }, "node_modules/@11ty/eleventy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.1.2.tgz", - "integrity": "sha512-IcsDlbXnBf8cHzbM1YBv3JcTyLB35EK88QexmVyFdVJVgUU6bh9g687rpxryJirHzo06PuwnYaEEdVZQfIgRGg==", - "dev": true, + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@11ty/eleventy/-/eleventy-3.1.6.tgz", + "integrity": "sha512-ZlSiR1PLdS2lv7TelBgWAhcvMiLNZkPBlLEb+lh7kGYZ+Mk0bo9qcYgVsewvw9W7Em0RH3wd01h5fAstNDh0zA==", "license": "MIT", - "peer": true, "dependencies": { - "@11ty/dependency-tree": "^4.0.0", - "@11ty/dependency-tree-esm": "^2.0.0", + "@11ty/dependency-tree": "^4.0.2", + "@11ty/dependency-tree-esm": "^2.0.4", "@11ty/eleventy-dev-server": "^2.0.8", - "@11ty/eleventy-plugin-bundle": "^3.0.6", + "@11ty/eleventy-plugin-bundle": "^3.0.7", "@11ty/eleventy-utils": "^2.0.7", "@11ty/lodash-custom": "^4.17.21", - "@11ty/posthtml-urls": "^1.0.1", - "@11ty/recursive-copy": "^4.0.2", + "@11ty/posthtml-urls": "^1.0.3", + "@11ty/recursive-copy": "^4.0.4", "@sindresorhus/slugify": "^2.2.1", "bcp-47-normalize": "^2.3.0", "chokidar": "^3.6.0", - "debug": "^4.4.1", + "debug": "^4.4.3", "dependency-graph": "^1.0.0", "entities": "^6.0.1", "filesize": "^10.1.6", "gray-matter": "^4.0.3", "iso-639-1": "^3.1.5", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "kleur": "^4.1.5", - "liquidjs": "^10.21.1", - "luxon": "^3.6.1", - "markdown-it": "^14.1.0", + "liquidjs": "^10.27.0", + "luxon": "^3.7.2", + "markdown-it": "^14.2.0", "minimist": "^1.2.8", - "moo": "^0.5.2", + "moo": "0.5.2", "node-retrieve-globals": "^6.0.1", "nunjucks": "^3.2.4", - "picomatch": "^4.0.2", + "picomatch": "^4.0.4", "please-upgrade-node": "^3.2.0", - "posthtml": "^0.16.6", + "posthtml": "^0.16.7", "posthtml-match-helper": "^2.0.3", - "semver": "^7.7.2", - "slugify": "^1.6.6", - "tinyglobby": "^0.2.14" + "semver": "^7.8.1", + "slugify": "^1.6.9", + "tinyglobby": "^0.2.16" }, "bin": { "eleventy": "cmd.cjs" @@ -99,9 +99,7 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/@11ty/eleventy-dev-server/-/eleventy-dev-server-2.0.8.tgz", "integrity": "sha512-15oC5M1DQlCaOMUq4limKRYmWiGecDaGwryr7fTE/oM9Ix8siqMvWi+I8VjsfrGr+iViDvWcH/TVI6D12d93mA==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@11ty/eleventy-utils": "^2.0.1", "chokidar": "^3.6.0", @@ -127,13 +125,31 @@ "url": "https://opencollective.com/11ty" } }, + "node_modules/@11ty/eleventy-fetch": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-fetch/-/eleventy-fetch-5.1.3.tgz", + "integrity": "sha512-4HS6QB/mVWTVlE6kjCKPkjkC1Z0YOqizJaHR05zK+E7a2b4EUC3T+wLktIy7wEl76ZoarkY45EKLmTw1XuR8fQ==", + "license": "MIT", + "dependencies": { + "@11ty/eleventy-utils": "^2.0.7", + "@rgrove/parse-xml": "^4.2.1", + "debug": "^4.4.3", + "flatted": "^3.4.2", + "p-queue": "6.6.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, "node_modules/@11ty/eleventy-plugin-bundle": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-bundle/-/eleventy-plugin-bundle-3.0.7.tgz", "integrity": "sha512-QK1tRFBhQdZASnYU8GMzpTdsMMFLVAkuU0gVVILqNyp09xJJZb81kAS3AFrNrwBCsgLxTdWHJ8N64+OTTsoKkA==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@11ty/eleventy-utils": "^2.0.2", "debug": "^4.4.0", @@ -147,13 +163,24 @@ "url": "https://opencollective.com/11ty" } }, + "node_modules/@11ty/eleventy-plugin-syntaxhighlight": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@11ty/eleventy-plugin-syntaxhighlight/-/eleventy-plugin-syntaxhighlight-5.0.2.tgz", + "integrity": "sha512-T6xVVRDJuHlrFMHbUiZkHjj5o1IlLzZW+1IL9eUsyXFU7rY2ztcYhZew/64vmceFFpQwzuSfxQOXxTJYmKkQ+A==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.30.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/11ty" + } + }, "node_modules/@11ty/eleventy-utils": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@11ty/eleventy-utils/-/eleventy-utils-2.0.7.tgz", "integrity": "sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -162,13 +189,35 @@ "url": "https://opencollective.com/11ty" } }, + "node_modules/@11ty/eleventy/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@11ty/eleventy/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@11ty/lodash-custom": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@11ty/lodash-custom/-/lodash-custom-4.17.21.tgz", "integrity": "sha512-Mqt6im1xpb1Ykn3nbcCovWXK3ggywRJa+IXIdoz4wIIK+cvozADH63lexcuPpGS/gJ6/m2JxyyXDyupkMr5DHw==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=14" }, @@ -178,12 +227,10 @@ } }, "node_modules/@11ty/posthtml-urls": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.1.tgz", - "integrity": "sha512-6EFN/yYSxC/OzYXpq4gXDyDMlX/W+2MgCvvoxf11X1z76bqkqFJ8eep5RiBWfGT5j0323a1pwpelcJJdR46MCw==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@11ty/posthtml-urls/-/posthtml-urls-1.0.3.tgz", + "integrity": "sha512-1YvhnkaNlFnnJic1rBMWmTC2adbuy+JQiBfl1Hecr1Wjjik1pQZmGyk/eC9zKX/FQv52s2Nht1Gi/UwhYqrBeg==", "license": "MIT", - "peer": true, "dependencies": { "evaluate-value": "^2.0.0", "http-equiv-refresh": "^2.0.1", @@ -195,207 +242,209 @@ } }, "node_modules/@11ty/recursive-copy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@11ty/recursive-copy/-/recursive-copy-4.0.2.tgz", - "integrity": "sha512-174nFXxL/6KcYbLYpra+q3nDbfKxLxRTNVY1atq2M1pYYiPfHse++3IFNl8mjPFsd7y2qQjxLORzIjHMjL3NDQ==", - "dev": true, + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@11ty/recursive-copy/-/recursive-copy-4.0.4.tgz", + "integrity": "sha512-oI7m8pa7/IAU/3lqRU9vjBbs20iKFo7x+1K9kT3aVira6scc1X9MjBdgLCHzLJeJ7iB6wydioA+kr9/qPnvmlQ==", "license": "ISC", - "peer": true, "dependencies": { "errno": "^1.0.0", "junk": "^3.1.0", - "maximatch": "^0.1.0", + "minimatch": "^3.1.5", "slash": "^3.0.0" }, "engines": { "node": ">=18" } }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", - "dev": true, + "node_modules/@inframanufaktur/clean-urls": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@inframanufaktur/clean-urls/-/clean-urls-1.0.1.tgz", + "integrity": "sha512-WCYk+lp0Cu+jts6C3myAuzEwZov7ZjYMNkXjk3RhIU3I5wXrrZQNAn7Si7376MEpTGWEBsVU4rlwW4UU6SKTWA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inframanufaktur/eleventy-plugin-clean-urls/-/eleventy-plugin-clean-urls-1.0.2.tgz", + "integrity": "sha512-pdSXyzShC7x0rO0ujjqA7Zeq9n6lLXVYFCAf+Wm9lpAJ0gY0eDMbYqkrqs8GaWwkNAhhpXu/yJUFxiTWdET3Xg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "@inframanufaktur/clean-urls": "^1.0.1", + "linkedom": "^0.14.4" + } + }, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls/node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", - "dev": true, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls/node_modules/linkedom": { + "version": "0.14.26", + "resolved": "https://registry.npmjs.org/linkedom/-/linkedom-0.14.26.tgz", + "integrity": "sha512-mK6TrydfFA7phrnp+1j57ycBwFI5bGSW6YXlw9acHoqF+mP/y+FooEYYyniOt5Ot57FSKB3iwmnuQ1UUyNLm5A==", + "license": "ISC", + "dependencies": { + "css-select": "^5.1.0", + "cssom": "^0.5.0", + "html-escaper": "^3.0.3", + "htmlparser2": "^8.0.1", + "uhyphen": "^0.2.0" + } + }, + "node_modules/@inframanufaktur/eleventy-plugin-clean-urls/node_modules/uhyphen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.2.0.tgz", + "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==", + "license": "ISC" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 8" } }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", - "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", - "dev": true, + "node_modules/@rgrove/parse-xml": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rgrove/parse-xml/-/parse-xml-4.2.1.tgz", + "integrity": "sha512-ZOkOIicFSf5qXbC+8ps5hA+nEhCxsUDpm2U1xp1BACoUZyMkGXEQjsWLD30K77r1fzOTaqEZS85++fmzwCIOJQ==", + "license": "ISC", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@sardine/eleventy-plugin-external-links": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@sardine/eleventy-plugin-external-links/-/eleventy-plugin-external-links-1.4.0.tgz", + "integrity": "sha512-K9WDFQwLMSBo6bjqNmH3kZSdXKTAb0MYHK3Tmm8IChsprF1XHl574U4pxgouTwJNjzlxqPKI/JYbY2okg0tiaQ==", "license": "MIT", "dependencies": { - "core-js-pure": "^3.43.0" + "linkedom": "^0.13.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "node": ">= 12" } }, "node_modules/@sindresorhus/slugify": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@sindresorhus/transliterate": "^1.0.0", "escape-string-regexp": "^5.0.0" @@ -407,13 +456,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@sindresorhus/transliterate": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "escape-string-regexp": "^5.0.0" }, @@ -424,35 +483,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tweetback/canonical": { + "version": "2.0.48", + "resolved": "https://registry.npmjs.org/@tweetback/canonical/-/canonical-2.0.48.tgz", + "integrity": "sha512-wOg/a/zl6rXqJyUpGyOjtWEmZQPOwU88HDeoovE8UebCAvFRMzQaEyEGnY0jq9jEoYcFsAj3teoUy8pOR0HJ7A==", + "license": "MIT" + }, "node_modules/a-sync-waterfall": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz", "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } + "license": "MIT" }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -461,12 +520,10 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", "license": "MIT", - "peer": true, "dependencies": { "acorn": "^8.11.0" }, @@ -478,9 +535,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "license": "ISC", - "peer": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -489,98 +544,29 @@ "node": ">= 8" } }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0", - "peer": true - }, - "node_modules/array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.10.0" - } + "license": "Python-2.0" }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/bcp-47": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz", - "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==", - "dev": true, + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.1.tgz", + "integrity": "sha512-KLw+H/gd2p4zly1X7Yh/qziuyae5/w/QFnvTng9eZL5fvszL7Whl3MBoWF8yxL7ksUjBfOD+OxkytiqbBpG+Fw==", "license": "MIT", - "peer": true, "dependencies": { "is-alphabetical": "^2.0.0", "is-alphanumerical": "^2.0.0", @@ -595,9 +581,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz", "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==", - "dev": true, "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -607,9 +591,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz", "integrity": "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "bcp-47": "^2.0.0", "bcp-47-match": "^2.0.0" @@ -619,25 +601,11 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/biblatex-csl-converter": { - "version": "2.1.0", - "resolved": "git+ssh://git@github.com/h-tex/biblatex-csl-converter.git#223b6d2ba3219cdcd85e23205353dda83d922537", - "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "xregexp": "^5.1.0" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" }, @@ -645,38 +613,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.3", - "http-errors": "^2.0.0", - "iconv-lite": "^0.7.0", - "on-finished": "^2.4.1", - "qs": "^6.14.1", - "raw-body": "^3.0.1", - "type-is": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", "license": "MIT", - "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -686,9 +633,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -696,54 +641,194 @@ "node": ">=8" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.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", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" + "node": ">= 6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -763,93 +848,104 @@ "fsevents": "~2.3.2" } }, - "node_modules/citeproc": { - "version": "2.4.63", - "resolved": "https://registry.npmjs.org/citeproc/-/citeproc-2.4.63.tgz", - "integrity": "sha512-68F95Bp4UbgZU/DBUGQn0qV3HDZLCdI9+Bb2ByrTaNJDL5VEm9LqaiNaxljsvoaExSLEXe1/r6n2Z06SCzW3/Q==", - "dev": true, - "license": "CPAL-1.0 OR AGPL-1.0" + "node_modules/circular": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/circular/-/circular-1.0.5.tgz", + "integrity": "sha512-n4Sspha+wxUl5zeA3JYp1zFCjsLz2VfXIe2gRKNQBrIX+7iPdGcCGZOF8W8IULtllZ/aejXtySfdFFt1wy/3JQ==" + }, + "node_modules/cli-logger": { + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/cli-logger/-/cli-logger-0.5.40.tgz", + "integrity": "sha512-piXVCa0TLm/+A7xdVEhw7t4OSrsmJaZIekWcoGrVMY1bHtLJTXgiNzgHlKT0EVHQ14sCKWorQJazU7UWgZhXOQ==", + "dependencies": { + "circular": "^1.0.5", + "cli-util": "~1.1.27" + } + }, + "node_modules/cli-regexp": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/cli-regexp/-/cli-regexp-0.1.2.tgz", + "integrity": "sha512-L++cAQ5g0Nu6aV56B3uaR+c7jEGSAa4WApY1ZN7XiD8niJ5jRfXE/qvMwgz3uZBG0rft4hJS75Vpz2F3mSm4Mg==" + }, + "node_modules/cli-util": { + "version": "1.1.27", + "resolved": "https://registry.npmjs.org/cli-util/-/cli-util-1.1.27.tgz", + "integrity": "sha512-Z6+zI0kIrqf9Oi+PmUm8J9AELp8bTf2vCLYseudYtdOPNJvzpNiExO95aHIm477IbPdu/8SE9Wvc/M1kJl4Anw==", + "dependencies": { + "cli-regexp": "~0.1.0" + } }, "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "license": "MIT", - "peer": true, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/core-js-pure": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.46.0.tgz", - "integrity": "sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", + "node": ">= 6" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/fb55" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -863,11 +959,19 @@ } } }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -877,9 +981,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-1.0.0.tgz", "integrity": "sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=4" } @@ -888,9 +990,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -900,38 +1000,23 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } ], - "license": "BSD-2-Clause", - "peer": true + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "domelementtype": "^2.2.0" }, @@ -946,9 +1031,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -958,65 +1041,102 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, "license": "MIT" }, - "node_modules/eleventy-plugin-citations": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/eleventy-plugin-citations/-/eleventy-plugin-citations-0.1.10.tgz", - "integrity": "sha512-Tq50yD8+74wkZDUkOV9rRXBzSU9wxYPFKWsMPjiISmQFbk1aR7jcVyw8zJDPdeH3EPbAvQj4x8ZXfGOVrFsZXQ==", - "dev": true, + "node_modules/eleventy-plugin-git-commit-date": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/eleventy-plugin-git-commit-date/-/eleventy-plugin-git-commit-date-1.0.2.tgz", + "integrity": "sha512-//pN28Y64D6AKBRKsOdG2hYG8WSIrOzf5JBmTO3RjHj0F1n/neFfJ0Jc1YorRIGX38iDfi2Bu6SHQRidWJRcxQ==", + "license": "MIT" + }, + "node_modules/eleventy-plugin-github-repos": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eleventy-plugin-github-repos/-/eleventy-plugin-github-repos-0.1.8.tgz", + "integrity": "sha512-Bhhqj8NLRTWDxD6Ydy9wu5PCz96Ulyqd7SYqdKXPbYhjzwKhX0895Xdz+I+LaQ+bCTpVnxgF2ngT6O5iFvCVsQ==", "license": "MIT", "dependencies": { - "biblatex-csl-converter": "github:h-tex/biblatex-csl-converter", - "citeproc": "^2.4.63", - "locale-en-us": "^0.0.2", - "style-vancouver": "^0.0.2" - }, - "peerDependencies": { - "@11ty/eleventy": "^3.0.0-beta.1", - "nunjucks": "^3" + "@11ty/eleventy": "^3.1.2", + "@11ty/eleventy-fetch": "^5.1.1", + "cli-logger": "^0.5.40" + } + }, + "node_modules/eleventy-plugin-inline-link-favicon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eleventy-plugin-inline-link-favicon/-/eleventy-plugin-inline-link-favicon-1.1.0.tgz", + "integrity": "sha512-ZhzQ9WYwhrHBGHv1fBwK1y2QYYJt8jX4oUL3jB82AWCv03WpiMBK77OIJcGBo7XQdo4gIm6oPQZ8tG/150ApeA==", + "license": "MIT" + }, + "node_modules/eleventy-plugin-mastoarchive": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eleventy-plugin-mastoarchive/-/eleventy-plugin-mastoarchive-0.2.0.tgz", + "integrity": "sha512-NYSx9yQxTcaA2mn1GVA3tfArqJoAI5YhOKU/GFCAEhRZv26GPmRGtlD7jAqPVIS68wEpUDlgh9WacHOPEWDY7w==", + "license": "ISC", + "dependencies": { + "lodash": "^4.17.21", + "node-fetch": "^2.6.9" + } + }, + "node_modules/eleventy-plugin-poison": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eleventy-plugin-poison/-/eleventy-plugin-poison-1.0.1.tgz", + "integrity": "sha512-mjfed3IZvPRJCGtjWUnjOsNREKptikeIeXNwXlIv20l/YqSq01MtFZKMcFvmwFs1d/3CVQAjrLuXg/eJQeXRvg==", + "license": "MIT" + }, + "node_modules/eleventy-plugin-purgecss": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/eleventy-plugin-purgecss/-/eleventy-plugin-purgecss-0.6.0.tgz", + "integrity": "sha512-PZLqSTn8hAwa1YA8qy1ybNvtbbwZfz3SDQlRS2IghD56PFRC+QuetbqOeHmhA7IIFAFYYUDKYpGh0iEt9Ent1A==", + "license": "MIT", + "dependencies": { + "purgecss": "^8.0.0" + } + }, + "node_modules/eleventy-plugin-reading-time": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eleventy-plugin-reading-time/-/eleventy-plugin-reading-time-0.0.1.tgz", + "integrity": "sha512-6MRHwrWMYm/u9lJK4/mnyS+6SyQxJSQcTfa1DqQS9fpQRPsZ9mdO9rZ/6DAhZpX2/cXxrbc6qxgcv6Qj90im1g==", + "license": "MIT" + }, + "node_modules/eleventy-plugin-recent-changes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/eleventy-plugin-recent-changes/-/eleventy-plugin-recent-changes-1.0.1.tgz", + "integrity": "sha512-lFP9Zyyy/o+HglF2aI9neLfskjKLaD/MAD6RQHNfdi7D0HAZcUo5GIRO932G7R9VTDKpJeJIAUx2PMDJQqbzIQ==", + "license": "ISC", + "dependencies": { + "gitlog": "^4.0.4" + } + }, + "node_modules/eleventy-plugin-webmentions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eleventy-plugin-webmentions/-/eleventy-plugin-webmentions-2.1.0.tgz", + "integrity": "sha512-zoLTF/xw1KkU6xU3eMH+DFF+RaCtF7VImyJS3MQ1vRHQ7siBSb/bF7gv7ldSwk0eMxtj5ABVhalUf6dt+2wiVg==", + "license": "MIT", + "dependencies": { + "@tweetback/canonical": "^2.0.27", + "html-entities": "^2.3.3", + "node-fetch": "^2.6.6", + "sanitize-html": "^2.7.0", + "truncate-html": "^1.0.4" } }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.12" - }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -1025,9 +1145,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/errno/-/errno-1.0.0.tgz", "integrity": "sha512-3zV5mFS1E8/1bPxt/B0xxzI1snsg3uSCIh6Zo1qKg6iMw93hzPANk9oBFzSFBFrwuVoQuE3rLoouAUfwOAj1wQ==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "prr": "~1.0.1" }, @@ -1035,55 +1153,19 @@ "errno": "cli.js" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "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==", - "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", - "peer": true, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1093,9 +1175,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/esm-import-transformer/-/esm-import-transformer-3.0.5.tgz", "integrity": "sha512-1GKLvfuMnnpI75l8c6sHoz0L3Z872xL5akGuBudgqTDPv4Vy6f2Ec7jEMKTxlqWl/3kSvNbHELeimJtnqgYniw==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "acorn": "^8.15.0" } @@ -1104,9 +1184,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "license": "BSD-2-Clause", - "peer": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1119,7 +1197,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -1129,86 +1206,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/evaluate-value/-/evaluate-value-2.0.0.tgz", "integrity": "sha512-VonfiuDJc0z4sOO7W0Pd130VLsXN6vmBWZlrog1mCb/o7o/Nl5Lr25+Kj/nkCCAhG+zqeeGjxhkK9oHpkgTHhQ==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 8" } }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.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": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "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": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "is-extendable": "^0.1.0" }, @@ -1216,32 +1229,36 @@ "node": ">=0.10.0" } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", - "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" } }, "node_modules/filesize": { "version": "10.1.6", "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", - "dev": true, "license": "BSD-3-Clause", - "peer": true, "engines": { "node": ">= 10.4.0" } @@ -1250,9 +1267,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1261,19 +1276,17 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "license": "MIT", - "peer": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -1284,9 +1297,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ms": "2.0.0" } @@ -1295,25 +1306,18 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "license": "ISC" }, "node_modules/fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -1323,74 +1327,34 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ "darwin" ], - "peer": true, "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", + "node_modules/gitlog": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/gitlog/-/gitlog-4.0.8.tgz", + "integrity": "sha512-FcTLP7Rc0H1vWXD+J/aj5JS1uiCEBblcYXlcacRAT73N26OMYFFzrBXYmDozmWlV2K7zwK5PrH16/nuRNhqSlQ==", + "license": "BSD-3-Clause", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "debug": "^4.1.1", + "tslib": "^2.5.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "node": ">= 10.x" } }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", - "peer": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -1398,26 +1362,11 @@ "node": ">= 6" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", @@ -1432,20 +1381,16 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "license": "MIT", - "peer": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1454,37 +1399,32 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" }, - "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } + "node_modules/html-escaper": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", + "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==", + "license": "MIT" }, "node_modules/htmlparser2": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -1493,7 +1433,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.2", @@ -1505,9 +1444,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=0.12" }, @@ -1519,9 +1456,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-equiv-refresh/-/http-equiv-refresh-2.0.1.tgz", "integrity": "sha512-XJpDL/MLkV3dKwLzHwr2dY05dYNfBNlyPu4STQ8WvKCFdc6vC5tPXuq28of663+gHVg03C+16pHHs/+FmmDjcw==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 6" } @@ -1530,7 +1465,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, "license": "MIT", "dependencies": { "depd": "~2.0.0", @@ -1547,57 +1481,17 @@ "url": "https://opencollective.com/express" } }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "dev": true, "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1607,9 +1501,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" @@ -1623,9 +1515,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -1637,9 +1527,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "dev": true, "license": "MIT", - "peer": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1649,9 +1537,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -1660,9 +1546,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -1671,9 +1555,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -1685,53 +1567,50 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", - "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.12.0" } }, - "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==", - "dev": true, - "license": "MIT" + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/iso-639-1": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.5.tgz", - "integrity": "sha512-gXkz5+KN7HrG0Q5UGqSMO2qB9AsbEeyLP54kF1YrMsIxmu+g4BdB7rflReZTSTZGpfj8wywu6pfPBCylPIzGQA==", - "dev": true, + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.6.tgz", + "integrity": "sha512-ZFar/L4ngX7wZh2QX+Fiftmuf0igWJsrJtfizrovWifF1gAWkfmRa5Z1m0LQZbm0hKCHRDYhLRSLFrSqNe4EJA==", "license": "MIT", - "peer": true, "engines": { "node": ">=6.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", - "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -1739,26 +1618,11 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/junk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -1767,9 +1631,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -1778,31 +1640,57 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6" } }, + "node_modules/launder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/launder/-/launder-1.7.1.tgz", + "integrity": "sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==", + "license": "MIT", + "dependencies": { + "dayjs": "^1.11.7" + } + }, + "node_modules/linkedom": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/linkedom/-/linkedom-0.13.7.tgz", + "integrity": "sha512-We9cyPHV/exsrC43KXtItjqSTxwrK9pLpOnG6TLzqXrmqwe/wqd3Gi6eAAU4YCqfTgy79R8g75hY2fS7723XUg==", + "license": "ISC", + "dependencies": { + "css-select": "^4.2.1", + "cssom": "^0.5.0", + "html-escaper": "^3.0.3", + "htmlparser2": "^7.2.0", + "uhyphen": "^0.1.0" + } + }, "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz", + "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], "license": "MIT", - "peer": true, "dependencies": { "uc.micro": "^2.0.0" } }, "node_modules/liquidjs": { - "version": "10.24.0", - "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.24.0.tgz", - "integrity": "sha512-TAUNAdgwaAXjjcUFuYVJm9kOVH7zc0mTKxsG9t9Lu4qdWjB2BEblyVIYpjWcmJLMGgiYqnGNJjpNMHx0gp/46A==", - "dev": true, + "version": "10.27.1", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.27.1.tgz", + "integrity": "sha512-ylE+1q2kSef1UxAyxqbyuWM3FRWS1v48JK1Y3CoW3bD6TSNXZh0+GsVnihujEpKyR+Jejx2aRAFfC3AHm9rElg==", "license": "MIT", - "peer": true, "dependencies": { "commander": "^10.0.0" }, @@ -1818,43 +1706,55 @@ "url": "https://opencollective.com/liquidjs" } }, + "node_modules/liquidjs/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/list-to-array": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/list-to-array/-/list-to-array-1.1.0.tgz", "integrity": "sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, - "node_modules/locale-en-us": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/locale-en-us/-/locale-en-us-0.0.2.tgz", - "integrity": "sha512-I02W/LK36C1IDloiFY4ZvK7kIs4C92vCHVEI01rIrJPzzlqcn1NnUxn5d1oiq0pe6JwuzpWwSCYnV0o1WAQP9g==", - "dev": true, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/luxon": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" } }, "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "dev": true, + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.0.tgz", + "integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/markdown-it" + } + ], "license": "MIT", - "peer": true, "dependencies": { "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", + "entities": "^4.5.0", + "linkify-it": "^5.0.2", "mdurl": "^2.0.0", "punycode.js": "^2.3.1", "uc.micro": "^2.1.0" @@ -1867,9 +1767,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=0.12" }, @@ -1877,71 +1775,39 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/maximatch": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", - "integrity": "sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "dev": true, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 8" } }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "dev": true, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.6" } }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, "license": "MIT", - "peer": true, "bin": { "mime": "cli.js" }, @@ -1953,32 +1819,32 @@ "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "license": "ISC", - "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1990,20 +1856,16 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "peer": true, + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -2012,42 +1874,63 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/morphdom": { - "version": "2.7.7", - "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.7.tgz", - "integrity": "sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==", - "dev": true, - "license": "MIT", - "peer": true + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/morphdom/-/morphdom-2.7.8.tgz", + "integrity": "sha512-D/fR4xgGUyVRbdMGU6Nejea1RFzYxYtyurG4Fbv2Fi/daKlWKuXGLOdXtl+3eIwL110cI2hz1ZojGICjjFLgTg==", + "license": "MIT" }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/node-retrieve-globals": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/node-retrieve-globals/-/node-retrieve-globals-6.0.1.tgz", "integrity": "sha512-j0DeFuZ/Wg3VlklfbxUgZF/mdHMTEiEipBb3q0SpMMbHaV3AVfoUQF8UGxh1s/yjqO0TgRZd4Pi/x2yRqoQ4Eg==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "acorn": "^8.14.1", "acorn-walk": "^8.3.4", @@ -2058,20 +1941,28 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nunjucks": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz", "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==", - "dev": true, "license": "BSD-2-Clause", - "peer": true, "dependencies": { "a-sync-waterfall": "^1.0.0", "asap": "^2.0.3", @@ -2096,31 +1987,15 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 6" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -2129,61 +2004,123 @@ "node": ">= 0.8" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", "dependencies": { - "wrappy": "1" + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/parse-srcset": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", - "dev": true, + "license": "MIT" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", - "peer": true + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", - "peer": true, "engines": { - "node": ">=12" + "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -2193,20 +2130,57 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "semver-compare": "^1.0.0" } }, + "node_modules/postcss": { + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/posthtml": { "version": "0.16.7", "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.7.tgz", "integrity": "sha512-7Hc+IvlQ7hlaIfQFZnxlRl0jnpWq2qwibORBhQYIb0QbNtuicc5ZxvKkVT71HJ4Py1wSZ/3VR1r8LfkCtoCzhw==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "posthtml-parser": "^0.11.0", "posthtml-render": "^3.0.0" @@ -2219,9 +2193,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/posthtml-match-helper/-/posthtml-match-helper-2.0.3.tgz", "integrity": "sha512-p9oJgTdMF2dyd7WE54QI1LvpBIkNkbSiiECKezNnDVYhGhD1AaOnAkw0Uh0y5TW+OHO8iBdSqnd8Wkpb6iUqmw==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" }, @@ -2233,9 +2205,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "htmlparser2": "^7.1.1" }, @@ -2247,9 +2217,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "is-json": "^2.0.1" }, @@ -2257,88 +2225,83 @@ "node": ">=12" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, + "node_modules/prismjs": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, "engines": { - "node": ">= 0.10" + "node": ">=6" } }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/punycode.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=6" } }, - "node_modules/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/purgecss": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-8.0.0.tgz", + "integrity": "sha512-QFJyps9y5oHeXnNA3Ql1EaAqWBivNwQn19Pw1lt9RxfB+4e+bIyqCyuombk79D6Fxe+lPXggVfI1WtRGEBwgbQ==", + "license": "MIT", "dependencies": { - "side-channel": "^1.1.0" + "commander": "^12.1.0", + "fast-glob": "^3.3.2", + "postcss": "^8.4.47", + "postcss-selector-parser": "^7.0.0" }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "purgecss": "bin/purgecss.js" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" }, - "engines": { - "node": ">= 0.10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -2346,61 +2309,145 @@ "node": ">=8.10.0" } }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/readline-sync": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", - "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", - "dev": true, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { - "node": ">= 0.8.0" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "dev": true, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "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" + "queue-microtask": "^1.2.2" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" + "node_modules/sanitize-html": { + "version": "2.17.5", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.5.tgz", + "integrity": "sha512-ZmU1joGRrvoyctKIiuwUxqR6moLoU2Wk+2bMccN6f7UwhAmwYDvWziqPxRDDN2Qip62NqnIrVrT9akbL6Wretg==", + "license": "MIT", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^10.1.0", + "is-plain-object": "^5.0.0", + "launder": "^1.7.1", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/sanitize-html/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" @@ -2410,12 +2457,10 @@ } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -2427,44 +2472,25 @@ "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", - "peer": true + "license": "MIT" }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", - "dev": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", + "debug": "^4.4.3", "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", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" + "statuses": "^2.0.2" }, "engines": { "node": ">= 18" @@ -2478,122 +2504,46 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, "license": "ISC" }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } }, "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", - "dev": true, + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.9.tgz", + "integrity": "sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==", "license": "MIT", - "peer": true, "engines": { "node": ">=8.0.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/ssri": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/ssri/-/ssri-11.0.0.tgz", "integrity": "sha512-aZpUoMN/Jj2MqA4vMCeiKGnc/8SuSyHbGSBdgFbZxP8OJGF/lFkIuElzPxsN0q8TQQ+prw3P4EDfB3TBHHgfXw==", - "dev": true, "license": "ISC", - "peer": true, "dependencies": { "minipass": "^7.0.3" }, @@ -2602,10 +2552,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -2615,30 +2564,19 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/style-vancouver": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/style-vancouver/-/style-vancouver-0.0.2.tgz", - "integrity": "sha512-6DYqSJSRPdPYPZB64LAKjhX6IBpbI8G2QJg0qsgGE6vLMvWG/8tTpuzdIsZPDMPBMnF2jt/1WBqbDZR4VaA2KQ==", - "dev": true, - "license": "MIT" - }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "license": "MIT", - "peer": true, "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -2647,13 +2585,40 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "is-number": "^7.0.0" }, @@ -2665,40 +2630,48 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.6" } }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", - "dev": true, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/truncate-html": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/truncate-html/-/truncate-html-1.2.2.tgz", + "integrity": "sha512-0pogasqkxhCj8PWqxLPTYqtC66ruVXzOS6uNcOCI7yxS1Bf2HMqeXUty5mlbv0UjjlCuExBpPN4vEAFV6imsug==", "license": "MIT", "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 0.6" + "cheerio": "1.0.0-rc.12" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" + }, + "node_modules/uhyphen": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.1.0.tgz", + "integrity": "sha512-o0QVGuFg24FK765Qdd5kk0zU/U4dEsCtN/GSiwNI9i8xsSVtjIAOdTaVhLwZ1nrbWxFVMxNDDl+9fednsOMsBw==", + "license": "ISC" }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -2708,34 +2681,35 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, + "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/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "dev": true, + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "license": "MIT", - "peer": true, "engines": { "node": ">=10.0.0" }, @@ -2751,16 +2725,6 @@ "optional": true } } - }, - "node_modules/xregexp": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.2.tgz", - "integrity": "sha512-6hGgEMCGhqCTFEJbqmWrNIPqfpdirdGWkqshu7fFZddmTSfgv5Sn9D2SaKloR79s5VUiUlpwzg3CM3G6D3VIlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime-corejs3": "^7.26.9" - } } } } diff --git a/package.json b/package.json index f7e92bf..5d966b9 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,25 @@ "scripts": { "build": "npx @11ty/eleventy", "serve": "npx @11ty/eleventy --serve", + "production": "IS_PRODUCTION=true npx @11ty/eleventy --serve", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", - "type": "commonjs" + "type": "module", + "dependencies": { + "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2", + "@inframanufaktur/eleventy-plugin-clean-urls": "^1.0.2", + "@sardine/eleventy-plugin-external-links": "^1.4.0", + "eleventy-plugin-git-commit-date": "^1.0.2", + "eleventy-plugin-github-repos": "^0.1.8", + "eleventy-plugin-inline-link-favicon": "^1.1.0", + "eleventy-plugin-mastoarchive": "^0.2.0", + "eleventy-plugin-poison": "^1.0.1", + "eleventy-plugin-purgecss": "^0.6.0", + "eleventy-plugin-reading-time": "^0.0.1", + "eleventy-plugin-recent-changes": "^1.0.1", + "eleventy-plugin-webmentions": "^2.1.0" + } } diff --git a/purgecss.config.cjs b/purgecss.config.cjs new file mode 100644 index 0000000..93b780c --- /dev/null +++ b/purgecss.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + // Content files referencing CSS classes + content: ["./docs/**/*.html"], + + // CSS files to be purged in-place + css: ["./docs/**/*.css"], +}; \ No newline at end of file diff --git a/school/telnet-en.html b/school/telnet-en.html deleted file mode 100644 index 2bf225b..0000000 --- a/school/telnet-en.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -postTitle: "Telnet" -layout: post.njk -date: 2025-08-27 -background: redes.jpg -authors: Adrian Victor & Arthur Borges -langKey: en ---- - -

What the protocol is, its function and history

-

Telnet (from TELecommunication NETwork) is a TCP/IP stack network protocol that allows remote text-mode communication between computers. Its main function is to provide an interactive session where a user can access and control another device as if they were on a local terminal.

-

Created in 1969, Telnet was one of the first protocols developed for ARPANET (the network that gave rise to the Internet) and became fundamental for system and device administration in the 1970s, 1980s, and 1990s. Over time, it fell out of use due to lack of security, being replaced by more modern alternatives such as SSH (Secure Shell).

-

Implementation

-

Default port: 23/TCP.
-Works at the application layer of the OSI model.
-Format: Based on ASCII character exchange, without encryption.
-RFC: Defined by RFC 854 (1983).
-Architecture: Follows the client-server model

-

How it works

-

In practice, Telnet works relatively simply. The process starts when the client establishes a TCP connection to the server via port 23. Then a remote terminal session is initiated and the user must provide credentials such as username and password. After authentication, commands typed on the client are transmitted in plain text to the server, which processes them and returns the corresponding output. The session remains active as long as the user wants, normally ending with commands like exit or logout

-

Use cases

-

For many years, Telnet was widely used for remote access to Unix, Linux, and Windows servers, especially older versions of these systems. It also became common in network device administration, such as routers and switches, until SSH became the standard. Additionally, mainframes and some legacy devices still use Telnet today. Another practical application is in educational environments and network diagnostics, where it is used to test open ports and check service connectivity, such as running “telnet server.com 80” to see if a web server port is operational.

-

Encryption: the inherent problem

-

Telnet has no native encryption, which makes it extremely vulnerable. To solve this problem, more secure alternatives were developed. The main one is SSH (Secure Shell), created in the 1990s as a direct Telnet replacement. SSH offers the same functionality while ensuring data protection through strong authentication and full traffic encryption. Another, less common approach is using SSL/TLS to tunnel Telnet sessions, but in practice this is rarely used.

-

Advantages and disadvantages

-

Telnet’s advantages include simplicity, low resource usage, and compatibility with various older systems, which facilitated its adoption over the years. However, these benefits are outweighed by its disadvantages. The main one is the lack of encryption, exposing all transmitted data—including passwords—in plain text. This makes it vulnerable to attacks such as sniffing, which captures network packets, and hijacking, which takes over active sessions. For this reason, Telnet is considered obsolete and unsafe for use on open networks like the Internet.

-

Relation to other protocols

-

Telnet is part of the TCP/IP protocol family and uses TCP to ensure reliable communication. Like other protocols in this stack, such as HTTP, FTP, and SMTP, it relies on stable connections to perform its functions, but its distinguishing feature has always been terminal-mode interactivity. Due to security flaws, it was replaced by its natural successor, SSH, which retained Telnet’s conceptual base but added robust protection layers.

-

Functional example

-

Below is a Telnet connection simulator written in JavaScript.

-
-

Loading...

-
-
-
-
-
-
-
-
-
-

Server

- - -
-
-

Client

- -
- - -
-
-
\ No newline at end of file diff --git a/_data/i18n.js b/site/_data/i18n.cjs similarity index 74% rename from _data/i18n.js rename to site/_data/i18n.cjs index 348a8cc..c304022 100644 --- a/_data/i18n.js +++ b/site/_data/i18n.cjs @@ -19,7 +19,8 @@ const globalValues = { homeSongImage: "/songs/velkommen.jpg", homeSongWebsite: "Bandcamp", homeSongDuration: "5:39", - homeSongAccent: "#482948" + homeSongAccent: "#482948", + }; module.exports = { @@ -38,9 +39,9 @@ module.exports = { myVideos: "my videos", mySoftware: "my software", homeAboutMeParagraph: ` - My name is Adrian Victor, but I go by tenkuma on-line. I'm in high school's last year, also studying computing. My hobbies are music and music production, programming, selfhosting, Linux, and a lot more. + My name is Adrian Victor, but I go by tenkuma on-line. I'm in high school's last year, also studying computing. My hobbies are music, music production, programming, selfhosting, Linux, and a lot more. `, - homeAboutMeParagraphTwo: `Tenkuma, or 天くま in japanese, means celestial bear and was given by a friend of mine that I lost contact a long time ago. Sakata is gone, but the name stayed and turned into an integral part of my digital self.`, + homeAboutMeParagraphTwo: `The name tenkuma, or 天くま in japanese, means celestial bear and was given by a friend of mine that I lost contact a long time ago. Sakata is gone, but the name stayed and turned into an integral part of my digital self.`, homeSocialsAndContactParagraph: ` I'm publicly available at Mastodon (${globalValues.mastodon.username}), GitHub (${globalValues.github.username}), @@ -79,8 +80,42 @@ module.exports = { permissionIssue: "Permission issue", permissionIssueNotificationContent: "Unable to continue playing background music, please enable audio autoplay for this website.", notificationDefaultHint: "Click to dismiss", - kaoMain: "The Android OS is great danger. You're about to lose sovereignty over your phone because of Google's monopoly.", - kaoLink: "Learn what you can do at Keep Android Open ->" + kaoMain: "You're about to lose sovereignty over your phone because of Google's monopoly. Fight back before is too late!", + kaoLink: "Learn what you can do at Keep Android Open", + webringDescription: "What are webrings?", + breakcoreWebring: "This site is a member of the breakcore webring.", + wrongosWebring: "This site is a member of the Wrongos webring.", + previousSite: "previous site", + nextSite: "next site", + random: "random", + showMore: "Show more", + showLess: "Show less", + previous: "previous", + next: "next", + about: "about", + thisWebsiteDoesNotTrackYou: "This website does not track you.", + mrnandoChannel: "Mr. Nando's channel", + liked: "liked", + changes: "changes", + readingTime: "Reading time", + mastodonPageDescription: "This is an archive of all my Mastodon posts.", + addMe: "Add me", + socialContentNotRated: "Social content is not rated and may mention topics not appropriate for all ages.", + clickHereToContinue: "Click here to continue", + windsArtAlt: "First Winds album artwork", + velkommenArtAlt: "Velkommen song artwork", + pgArtAlt: "Frugal APE song artwork", + bearAlt: "Background image. White bear swimming in water that reverberates around it.", + gearsAlt: "Gears", + soundOffAlt: "Audio disabled", + soundOnAlt: "Audio enabled", + volumeSliderAlt: "Volume", + backgroundCheckAlt: "Background image", + sfxCheckboxAlt: "Sound effects", + videoArtworkAlt: "Video artwork", + songSelectAlt: "Song selector", + guestbookWarning: "Load guestbook widget? You're subject to Chattable's terms of service.", + dontAskAgain: "Don't ask again" }, pt: { language: "português", @@ -136,7 +171,41 @@ module.exports = { permissionIssue: "Problema de permissão", permissionIssueNotificationContent: "Não foi possivel continuar tocando a música de fundo, por favor habilite reprodução automática de áudio para esse website.", notificationDefaultHint: "Clique para ignorar", - kaoMain: "O Android está em grande perigo. Você está prestes a perder controle do seu celular em favor do monopólio da Google.", - kaoLink: "Veja o que você pode fazer em Keep Android Open ->" + kaoMain: "Você está prestes a perder controle do seu celular em favor do monopólio da Google. Lute contra antes que seja tarde!", + kaoLink: "Veja o que você pode fazer em Keep Android Open", + webringDescription: "O que são webrings?", + breakcoreWebring: "Esse website faz parte do webring breakcore.", + wrongosWebring: "Esse website faz parte do webring Wrongos.", + previousSite: "site anterior", + nextSite: "próximo site", + random: "aleatório", + showMore: "Ver mais", + showLess: "Ver menos", + previous: "anterior", + next: "próximo", + about: "sobre", + thisWebsiteDoesNotTrackYou: "Esse website não rastreia você.", + mrnandoChannel: "Canal do Mr. Nando", + liked: "curtiu", + changes: "mudanças", + readingTime: "Tempo de leitura", + mastodonPageDescription: "Essa página lista todas as minhas postagens do Mastodon.", + addMe: "Me adicionar", + socialContentNotRated: "Conteúdo das redes sociais não é monitorado e pode conter tópicos não apropriados para todas as idades.", + clickHereToContinue: "Clique aqui para continuar", + windsArtAlt: "Capa do album First Winds", + velkommenArtAlt: "Capa da música Velkommen", + pgArtAlt: "Capa da música Frugal APE", + bearAlt: "Imagem de fundo. Urso branco nadando na água que reverbera ao seu redor.", + gearsAlt: "Engrenagens", + soundOffAlt: "Áudio desligado", + soundOnAlt: "Áudio ligado", + volumeSliderAlt: "Volume", + backgroundCheckAlt: "Imagem de fundo", + sfxCheckboxAlt: "Efeitos sonoros", + videoArtworkAlt: "Capa do vídeo", + songSelectAlt: "Seletor de música", + guestbookWarning: "Carregar o guestbook? Você estará sujeito aos termos de uso do Chattable.", + dontAskAgain: "Não pergunte novamente" } }; \ No newline at end of file diff --git a/_data/languages.js b/site/_data/languages.cjs similarity index 100% rename from _data/languages.js rename to site/_data/languages.cjs diff --git a/_includes/base.njk b/site/_includes/base.njk similarity index 94% rename from _includes/base.njk rename to site/_includes/base.njk index 8dda116..27cee06 100644 --- a/_includes/base.njk +++ b/site/_includes/base.njk @@ -13,20 +13,17 @@ Adrian Victor{% if pageTitle or postTitle %} - {{ pageTitle or postTitle }}{% endif %} - - + - - @@ -34,24 +31,30 @@ + {% poison %} + + +
- + {{ i18n[langKey].bearAlt }} + {% include "header.njk" %} +
{{ content | safe }}
diff --git a/site/_includes/header.njk b/site/_includes/header.njk new file mode 100644 index 0000000..cfb261a --- /dev/null +++ b/site/_includes/header.njk @@ -0,0 +1,27 @@ +
+
+
+

{{ title or "Adrian Victor" }}

+

{{ subtitle or "Fanasy is not a crime, find your castle in the sky." }}

+
+
+
+ + +
+
+ {# test #} +
+ \ No newline at end of file diff --git a/site/_includes/iframe.njk b/site/_includes/iframe.njk new file mode 100644 index 0000000..9bf32a4 --- /dev/null +++ b/site/_includes/iframe.njk @@ -0,0 +1,35 @@ + + + + + + + Adrian Victor{% if pageTitle or postTitle %} - {{ pageTitle or postTitle }}{% endif %} + + + + + + + + + + + + + + + + + {{ content | safe }} + + \ No newline at end of file diff --git a/_includes/macros.njk b/site/_includes/macros.njk similarity index 66% rename from _includes/macros.njk rename to site/_includes/macros.njk index eaeec1b..72dee07 100644 --- a/_includes/macros.njk +++ b/site/_includes/macros.njk @@ -1,17 +1,23 @@ -{% macro i88x31(link) %} +{% macro i88x31(link, alt=link, interactive=true) %} = {% endmacro %} -{% macro videoCard(videoLink, videoTitle, videoImage, videoWebsite, videoDuration, videoAccent) %} +{% macro videoCard(videoLink, videoTitle, videoImage, videoWebsite, videoDuration, videoAccent, imageAlt = i18n[langKey].videoArtworkAlt) %}
- + {{ imageAlt }}
-

{{ projectDescription }}

+

{{ projectDescription | safe }}

+
+
+{% endmacro %} + +{% macro webring(opts) %} +
+

{{ opts.text }}

+
+ {% for link in opts.links %} + {{ link | safe }} + {% endfor %}
{% endmacro %} \ No newline at end of file diff --git a/_includes/post.njk b/site/_includes/post.njk similarity index 92% rename from _includes/post.njk rename to site/_includes/post.njk index 2f68554..217cd1c 100644 --- a/_includes/post.njk +++ b/site/_includes/post.njk @@ -1,6 +1,7 @@ --- layout: base.njk title: Adrian Victor:Blog +headerLink: blog --- {% set altLanguages = collections.post | alternateLanguages(postId, langKey) %} {% from "macros.njk" import videoCard with context %} @@ -9,6 +10,7 @@ title: Adrian Victor:Blog

{{ postTitle }}

+

{{ i18n[langKey].readingTime }}: {{ content | readingTime }}

{{ authors or "Adrian Victor" }} - {{ date | postDate }}{% if lastModified | postDate !== date | postDate %} ({{ i18n[langKey].lastEditedIn }} {{ lastModified | postDate }}){% endif %}

{% if altLanguages.length > 0 %} {{ i18n[langKey].availableInOtherLanguages }}: diff --git a/site/_includes/text.njk b/site/_includes/text.njk new file mode 100644 index 0000000..212390e --- /dev/null +++ b/site/_includes/text.njk @@ -0,0 +1,6 @@ +--- +layout: base.njk +--- +
+ {{ content | safe }} +
\ No newline at end of file diff --git a/site/_includes/widgets/chattable.html b/site/_includes/widgets/chattable.html new file mode 100644 index 0000000..c778445 --- /dev/null +++ b/site/_includes/widgets/chattable.html @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/site/_includes/widgets/droidring.html b/site/_includes/widgets/droidring.html new file mode 100644 index 0000000..b97f080 --- /dev/null +++ b/site/_includes/widgets/droidring.html @@ -0,0 +1,44 @@ +
+
+ Droidring
+ +
+ + + +
+ +
+
\ No newline at end of file diff --git a/site/_includes/widgets/internetometer-aside.html b/site/_includes/widgets/internetometer-aside.html new file mode 100644 index 0000000..a11c75e --- /dev/null +++ b/site/_includes/widgets/internetometer-aside.html @@ -0,0 +1,7 @@ +
+
+

{{ i18n[langKey].liked | smartTitle }}?

+
+
+ Internetometer +
\ No newline at end of file diff --git a/blog.njk b/site/blog.njk similarity index 84% rename from blog.njk rename to site/blog.njk index bc9c94b..678d0ea 100644 --- a/blog.njk +++ b/site/blog.njk @@ -6,6 +6,7 @@ pagination: permalink: "/{{ langKey }}/blog/index.html" layout: base.njk title: Adrian Victor:Blog +headerLink: blog ---
@@ -14,10 +15,8 @@ title: Adrian Victor:Blog {% for post in collections.post %} {% if post.data.langKey == langKey %}
  • -

    - {{ post.data.postTitle }}
    + {{ post.data.postTitle }}
    {{ post.data.date | postDate }}{% if post.data.lastModified | postDate !== post.data.date | postDate %} ({{ i18n[langKey].lastEditedIn }} {{ post.data.lastModified | postDate}}){% endif %} -

  • {% endif %} {% endfor %} diff --git a/site/iframe/guestbook.njk b/site/iframe/guestbook.njk new file mode 100644 index 0000000..bc79278 --- /dev/null +++ b/site/iframe/guestbook.njk @@ -0,0 +1,28 @@ +--- +pagination: + data: i18n + size: 1 + alias: langKey +permalink: "/{{ langKey }}/iframe/guestbook/index.html" +layout: iframe.njk +title: Adrian Victor:Guestbook +headerLink: social +--- + +
    +

    {{ i18n[langKey].guestbookWarning | safe }}

    + +
    +
    \ No newline at end of file diff --git a/site/index.njk b/site/index.njk new file mode 100644 index 0000000..b5f41d1 --- /dev/null +++ b/site/index.njk @@ -0,0 +1,314 @@ +--- +pagination: + data: i18n + size: 1 + alias: langKey +permalink: "/{{ langKey }}/index.html" +layout: base.njk +headerLink: home +--- +{% from "macros.njk" import i88x31 with context %} +{% from "macros.njk" import videoCard with context %} +{% from "macros.njk" import projectCard %} +{% from "macros.njk" import webring %} + + +
    + + + + +
    + + + +
    + +
    +

    {{ i18n[langKey].kaoMain | safe }}

    +

    {{ i18n[langKey].kaoLink | safe }} →

    +
    + +
    +

    {{ i18n[langKey].welcome | smartTitle }}

    +

    {{ i18n[langKey].homeWelcomeParagraph | safe }}

    + +
    + {{ i88x31("tenkuma.gif") }} + {{ i88x31("anybrowser6.gif") }} + {{ i88x31("ai.gif") }} + {{ i88x31("WEBP.gif") }} + {{ i88x31("rainbowrain.gif") }} + {{ i88x31("blasphemy.gif") }} + {{ i88x31("wrongos.gif") }} + {{ i88x31("best_viewed_with_open_eyes.gif") }} + {{ i88x31("gnu-linux.gif") }} +
    +
    + +
    + +

    {{ i18n[langKey].aboutMe | smartTitle }}

    +

    {{ i18n[langKey].homeAboutMeParagraph | safe }}

    +

    {{ i18n[langKey].homeAboutMeParagraphTwo | safe }}

    + +

    {{ i18n[langKey].socialsAndContact | smartTitle }}

    +

    {{ i18n[langKey].homeSocialsAndContactParagraph | safe }}

    +

    {{ i18n[langKey].homeSocialsAndContactParagraphTwo | safe }}

    +
    + + +
    +
    +

    {{ i18n[langKey].myMusic | smartTitle }}

    +

    {{ i18n[langKey].homeMyMusicParagraph | safe }}

    +

    {{ i18n[langKey].homeMyMusicParagraphTwo | safe }}

    + +
    + {{ i88x31("rave.gif") }} + {{ i88x31("happymix.gif") }} +
    +
    + +
    + +
    + {{ + videoCard( + i18n["global"].homeSongLink, + i18n["global"].homeSongTitle, + i18n["global"].homeSongImage, + i18n["global"].homeSongWebsite, + i18n["global"].homeSongDuration, + i18n["global"].homeSongAccent, + i18n[langKey].velkommenArtAlt + ) + }} +
    +
    + + +
    +
    +

    {{ i18n[langKey].myVideos | smartTitle }}

    +

    {{ i18n[langKey].homeMyVideoParagraph | safe }}

    +
    + +
    + + {{ + videoCard( + i18n["global"].homeVideoLink, + i18n[langKey].homeVideoTitle, + i18n["global"].homeVideoImage, + i18n["global"].homeVideoWebsite, + i18n["global"].homeVideoDuration + ) + }} +
    + + +
    +
    +

    {{ i18n[langKey].mySoftware | smartTitle }}

    +

    {{ i18n[langKey].homeMySoftwareParagraph | safe }}

    +
    + +
    + +
    + {{ + projectCard( + "Jamfish", + i18n[langKey].jamfishProjectDesctiption, + "https://github.com/adrianvic/jamfish", + '/static/images/jamfish-wide.png', + "Jamfish" + ) + }} + + {{ + projectCard( + "ItemEconomy", + i18n[langKey].itemeconomyProjectDesctiption, + "https://github.com/adrianvic/ItemEconomy", + '/static/images/itemeconomy2-wide.png', + "ItemEconomy" + ) + }} + + {{ + projectCard( + "Eye of Nemesis", + i18n[langKey].eyeofnemesisProjectDesctiption, + "https://github.com/adrianvic/NemesisEye", + '/static/images/eye_of_nemesis.png', + "Eye of Nemesis" + ) + }} + + {{ + projectCard( + "PestoWiki", + i18n[langKey].pestoProjectDesctiption, + "https://github.com/Margarina-not-butter/PestoWiki", + '/static/images/pestowikifullwhite.png', + "PestoWiki" + ) + }} +
    +
    +
    + + + \ No newline at end of file diff --git a/languages.njk b/site/languages.njk similarity index 100% rename from languages.njk rename to site/languages.njk diff --git a/misc.njk b/site/misc.njk similarity index 95% rename from misc.njk rename to site/misc.njk index 241f059..ae82248 100644 --- a/misc.njk +++ b/site/misc.njk @@ -6,13 +6,14 @@ pagination: permalink: "/{{ langKey }}/misc/index.html" layout: base.njk title: Adrian Victor:Misc +headerLink: misc ---

    {{ i18n[langKey].miscellaneous }}

      -
      +
      {% for page in collections.misc %} {% set t = page | getTranslation(langKey) %} diff --git a/misc/88x31/en.json b/site/misc/88x31/en.json similarity index 100% rename from misc/88x31/en.json rename to site/misc/88x31/en.json diff --git a/misc/88x31/index.njk b/site/misc/88x31/index.njk similarity index 84% rename from misc/88x31/index.njk rename to site/misc/88x31/index.njk index 144be82..62e3492 100644 --- a/misc/88x31/index.njk +++ b/site/misc/88x31/index.njk @@ -19,6 +19,9 @@ tags: misc

      {{ t.me }}

      {{ i88x31("tenkuma.gif") }} + {{ i88x31("tenkuma2.gif") }} + {{ i88x31("tenkuma-splash.gif") }} + {{ i88x31("mrnandokk.gif") }}

      {{ t.others }}

      diff --git a/misc/88x31/pt.json b/site/misc/88x31/pt.json similarity index 100% rename from misc/88x31/pt.json rename to site/misc/88x31/pt.json diff --git a/misc/about/en.json b/site/misc/about/en.json similarity index 82% rename from misc/about/en.json rename to site/misc/about/en.json index 97056e1..b427774 100644 --- a/misc/about/en.json +++ b/site/misc/about/en.json @@ -16,5 +16,8 @@ "clickSoundLabel": "Click sound effect", "thanksHeading": "Thanks", "eleventyDesc": "Static website generator, used in this website.", - "githubPagesDesc": "For web hosting." + "githubPagesDesc": "For web hosting.", + "recentChangesPluginDesc": "Plugin for listing recent commits.", + "inlineFaviconPluginDesc": "Support for inline link icons.", + "poisonPluginDesc": "Hidden AI poisoning inside page source." } \ No newline at end of file diff --git a/site/misc/about/index.njk b/site/misc/about/index.njk new file mode 100644 index 0000000..204edbc --- /dev/null +++ b/site/misc/about/index.njk @@ -0,0 +1,56 @@ +--- +layout: base.njk +pagination: + data: languages + size: 1 + alias: langKey +tags: misc +backgroundOpacity: "0.28" +background: "bear3.jpg" +--- +
      +

      {{ t.pageTitle }}

      +

      {{ t.introText1 }} {{ t.introRepoLinkText }} {{ t.introText2 }} {{ t.introLicenseLinkText }}.

      +

      {{ t.privacyText1 }} () {{ t.privacyText2 }} () {{ t.privacyText3 }}

      + +

      {{ t.attributionsHeading }}

      +
      +
      {{ t.bgImageLabel }}
      +
      {{ t.bgImageCredit }}
      +
      {{ t.badges88x31Label }}
      +
      88x31.nl
      +
      dabamos.de
      +
      {{ t.neocitiesCommunity }}
      +
      88x31 generator
      +
      {{ t.clickSoundLabel }}
      +
      lilypids @ Myinstants
      +
      + +

      {{ t.thanksHeading }}

      +
      +
      Eleventy (11ty)
      +
      {{ t.eleventyDesc }}
      +
      GitHub Pages
      +
      {{ t.githubPagesDesc }}
      +
      eleventy-plugin-recent-changes {{ i18n[langKey].by }} workeffortwaste
      +
      {{ t.recentChangesPluginDesc }}
      +
      eleventy-plugin-inline-link-favicon {{ i18n[langKey].by }} bmuenzenmeyer
      +
      {{ t.inlineFaviconPluginDesc }}
      +
      eleventy-plugin-poison {{ i18n[langKey].by }} gingerchew
      +
      {{ t.poisonPluginDesc }}
      +
      +
      + \ No newline at end of file diff --git a/misc/about/pt.json b/site/misc/about/pt.json similarity index 82% rename from misc/about/pt.json rename to site/misc/about/pt.json index b8abc8d..867c07d 100644 --- a/misc/about/pt.json +++ b/site/misc/about/pt.json @@ -16,5 +16,8 @@ "clickSoundLabel": "Efeito sonoro de clique", "thanksHeading": "Agradecimentos", "eleventyDesc": "Gerador de sites estáticos, usado neste website.", - "githubPagesDesc": "Pela hospedagem do website." + "githubPagesDesc": "Pela hospedagem do website.", + "recentChangesPluginDesc": "Plugin para listagem de commits recentes.", + "inlineFaviconPluginDesc": "Suporte para icones em links.", + "poisonPluginDesc": "Envenenamento de IA dentro do código fonte das páginas." } \ No newline at end of file diff --git a/misc/bookmarks/common.json b/site/misc/bookmarks/common.json similarity index 88% rename from misc/bookmarks/common.json rename to site/misc/bookmarks/common.json index 3f085ae..77b67d6 100644 --- a/misc/bookmarks/common.json +++ b/site/misc/bookmarks/common.json @@ -124,6 +124,18 @@ } ] }, + "services": { + "links": [ + { + "name": "Disroot", + "link": "https://disroot.org/", + "description": { + "en": "Privacy respecting e-mail, Nextcloud storage, XMPP server, encrypted file sharing and other cool services.", + "pt": "E-mail que respeita sua privacidade, armazenamento Nextcloud, servidor XMPP, compartilhamento de arquivos criptografados e outros serviços legais." + } + } + ] + }, "piracy": { "88x31": ["piracy.png"], "links": [ @@ -151,6 +163,14 @@ "pt": "Baixe musica diretamente de Qobuz, Tidal, Soundcloud, Deezer, Amazon Music, e Yandex Music em alta qualidade de graça.", "en": "Download music directly from Amazon Music, Soundcloud, Qobuz, Deezer and Tidal for free." } + }, + { + "name": "Orpheus", + "link": "https://orpheus.network/", + "description": { + "pt": "Tracker de músicas por convite, tem algumas músicas mais difíceis de achar.", + "en": "Invitation only music tracker, has a lot of hard to find songs." + } } ] } diff --git a/misc/bookmarks/en.json b/site/misc/bookmarks/en.json similarity index 87% rename from misc/bookmarks/en.json rename to site/misc/bookmarks/en.json index b7ae767..6b0cc31 100644 --- a/misc/bookmarks/en.json +++ b/site/misc/bookmarks/en.json @@ -7,5 +7,6 @@ "games": "Games", "tools": "Tools", "music": "Music", - "piracy": "Piracy" + "piracy": "Piracy", + "services": "Services" } \ No newline at end of file diff --git a/misc/bookmarks/index.njk b/site/misc/bookmarks/index.njk similarity index 94% rename from misc/bookmarks/index.njk rename to site/misc/bookmarks/index.njk index ec34a11..343695b 100644 --- a/misc/bookmarks/index.njk +++ b/site/misc/bookmarks/index.njk @@ -30,7 +30,7 @@ backgroundOpacity: .2
      {% for link in section.links %}
      -
      {{ link.name }}
      +
      {% ai link.link %}{{ link.name }}{% endai %}

      {{ link.description[langKey] }} diff --git a/misc/bookmarks/pt.json b/site/misc/bookmarks/pt.json similarity index 87% rename from misc/bookmarks/pt.json rename to site/misc/bookmarks/pt.json index 450bcb3..acff116 100644 --- a/misc/bookmarks/pt.json +++ b/site/misc/bookmarks/pt.json @@ -7,5 +7,6 @@ "games": "Jogos", "tools": "Ferramentas", "music": "Música", - "piracy": "Pirataria" + "piracy": "Pirataria", + "services": "Serviços" } \ No newline at end of file diff --git a/site/misc/hotlinking/en.json b/site/misc/hotlinking/en.json new file mode 100644 index 0000000..f3a17ac --- /dev/null +++ b/site/misc/hotlinking/en.json @@ -0,0 +1,5 @@ +{ + "pageTitle": "Hotlinking me", + "pageDescription": "Instructions and resources for other cool netizens linking me in their page.", + "intro": "You're here probably because you want to link me in your page, that's cooool! To help you I've compiled some resources and snippets that carry some of my visual identity. Of course you're free to modify, reupload or even not use these." +} \ No newline at end of file diff --git a/site/misc/hotlinking/index.njk b/site/misc/hotlinking/index.njk new file mode 100644 index 0000000..2d34e6e --- /dev/null +++ b/site/misc/hotlinking/index.njk @@ -0,0 +1,45 @@ +--- +layout: text.njk +pagination: + data: languages + size: 1 + alias: langKey +--- +{% from "macros.njk" import i88x31 with context %} + +
      +
      +

      {{ t.pageTitle }}

      +

      {{ t.intro }}

      +
      +
      +

      88x31

      + {{ i88x31("tenkuma.gif") }} + {% highlight "html" %} + + {% endhighlight %} + {{ i88x31("tenkuma2.gif") }} + {% highlight "html" %} + + {% endhighlight %} + {{ i88x31("tenkuma-splash.gif") }} + {% highlight "html" %} + + {% endhighlight %} + +

      HTML

      + +
      +

      tenkuma

      + Computer cursor arrow line drawing +
      +
      + {% highlight "html" %} + +
      +

      tenkuma

      + Computer cursor arrow line drawing +
      +
      + {% endhighlight %} +
      \ No newline at end of file diff --git a/site/misc/hotlinking/pt.json b/site/misc/hotlinking/pt.json new file mode 100644 index 0000000..b0a9dc1 --- /dev/null +++ b/site/misc/hotlinking/pt.json @@ -0,0 +1,5 @@ +{ + "pageTitle": "Me linkando", + "pageDescription": "Instruções e recursos para outros internautas legais me colocarem nas suas páginas.", + "intro": "Você provavelmente veio aqui porque quer me linkar na sua página, que legaaaaal! Para te ajudar eu juntei uns recursos que carregam um pouco da minha identidade visual. Claro que você pode modificar, salvar ou nem usar eles." +} \ No newline at end of file diff --git a/site/misc/kumaos/en.json b/site/misc/kumaos/en.json new file mode 100644 index 0000000..5405e32 --- /dev/null +++ b/site/misc/kumaos/en.json @@ -0,0 +1,3 @@ +{ + "pageDescription": "Operating system written in JS." +} \ No newline at end of file diff --git a/site/misc/kumaos/index.njk b/site/misc/kumaos/index.njk new file mode 100644 index 0000000..07bcd46 --- /dev/null +++ b/site/misc/kumaos/index.njk @@ -0,0 +1,34 @@ +--- +pageTitle: kumaOS +pagination: + data: languages + size: 1 + alias: langKey +--- + + + + + + Document + + + + + +
      +

      kumaOS

      +

      demo - not for production

      +
      + + + \ No newline at end of file diff --git a/site/misc/kumaos/pt.json b/site/misc/kumaos/pt.json new file mode 100644 index 0000000..0f23f42 --- /dev/null +++ b/site/misc/kumaos/pt.json @@ -0,0 +1,3 @@ +{ + "pageDescription": "Sistema operacional em JS." +} \ No newline at end of file diff --git a/misc/misc.11tydata.js b/site/misc/misc.11tydata.cjs similarity index 95% rename from misc/misc.11tydata.js rename to site/misc/misc.11tydata.cjs index dec5ff3..ecd6f5f 100644 --- a/misc/misc.11tydata.js +++ b/site/misc/misc.11tydata.cjs @@ -27,5 +27,6 @@ module.exports = { permalink: data => { return `/${data.langKey}/misc/${data.page.fileSlug}/`; }, - tags: "misc" + tags: "misc", + headerLink: "misc" }; diff --git a/site/misc/webresources/en.json b/site/misc/webresources/en.json new file mode 100644 index 0000000..d402f37 --- /dev/null +++ b/site/misc/webresources/en.json @@ -0,0 +1,8 @@ +{ + "pageTitle": "Web assets", + "pageDescription": "My library of assets/scripts for websites.", + "intro": "This page's dedicated to showcasing some stuff I made for websites that may also be useful to you. Everything's on public domain unless otherwise stated, and atributtion is very appreciated ;-)", + "tumblrAdapt": "A script that detects if the URL attribute tumblr is true and adapts the website design to dodge Tumblr menu, useful if you point your blog HTML to your website (doable with iframe). It also sanitizes external links adding target=\"_blank\" (opens in a new tab) and preserves the tumblr attribute in each link.", + "click": "Script that plays a custom sound when you click the page or hover a link. The code checks disablesfx on localstorage, if it's true the sound does not play. Localstorage is checked when playing the audio, so it's possible to enable/disable it without reloading the page.", + "ccd": "Triggered when the user types the famous Konami Code inside the page and redirects to another page. The script name is an abbreviation of Konami Code, but with a C instead of K to be less obvious. It's pretty easy to modify it do other stuff." +} \ No newline at end of file diff --git a/site/misc/webresources/index.njk b/site/misc/webresources/index.njk new file mode 100644 index 0000000..db2c74e --- /dev/null +++ b/site/misc/webresources/index.njk @@ -0,0 +1,123 @@ +--- +layout: text.njk +pagination: + data: languages + size: 1 + alias: langKey +--- +{% from "macros.njk" import i88x31 with context %} + +
      +
      +

      {{ t.pageTitle }}

      +

      {{ t.intro }}

      +
      +
      + + + +

      tumblr-adapt.js

      +

      {{ t.tumblrAdapt | safe }}

      + {% highlight 'js'%}const isTumblr = new URLSearchParams(location.search).get("tumblr") == "true"; // add ?tumblr=true to the tumblr iframe src attribute + +function adaptToTumblrLayout() { + const header = document.querySelector('header'); // change to anything that would return your header + header.classList.add("tumblr"); // your CSS must handle the rest + + // will calc the size of the header and save as a CSS variable called --header-height + const setHeaderOffset = () => { + const height = header.offsetHeight + "px"; + document.documentElement.style.setProperty('--header-height', height); + }; + + // do this once and when the page resizes + setHeaderOffset(); + window.addEventListener('resize', setHeaderOffset); + + // sanitizing links so they don't open in your tumblr iframe + // also making sure all links carry the tumblr property! + document.querySelectorAll("a").forEach(link => { + if (new URL(link.href).host !== location.host) { + link.target = "_blank"; + } + const u = new URL(link.href); + u.searchParams.set("tumblr", "true"); + link.href = u.toString(); + }); +} + +if (isTumblr) adaptToTumblrLayout(); + +/* + By tenkuma ^^ + https://adrianvic.github.io + For those thumblrs that change the blog HTML for an iframe poiting to your personal website! +*/{% endhighlight %} + +

      click.js

      +

      {{ t.click | safe }}

      + +{% highlight 'js' %}// these must be URLs pointing to your audio! +const click = new Audio(`https://adrianvic.github.io/static/audio/click.ogg`); +const hover = new Audio(`https://adrianvic.github.io/static/audio/hover.ogg`); +click.preload = "auto"; +hover.preload = "auto"; + +// adjust volume below +click.volume = 0.5; +hover.volume = 0.5; + + +document.body.addEventListener("click", () => { + // set disablesfx in the local storage to true to + // disable sound effects + if (localStorage.getItem("disablesfx") == 'true') return; + + click.currentTime = 0; + click.play().catch(() => {}); +}); + +document.querySelectorAll('a').forEach(link => { + link.addEventListener("mouseenter", () => { + if (localStorage.getItem("disablesfx") == 'true') return; + hover.currentTime = 0; + hover.play().catch(() => {}); + }) +}) + +/* + By tenkuma ^^ + https://adrianvic.github.io + For those thumblrs that change the blog HTML for an iframe poiting to your personal website! +*/{% endhighlight %} + +

      ccd.js

      +

      {{ t.ccd }}

      + +{% highlight 'js' %}const konamiCode = ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'KeyB', 'KeyA']; +let keyIndex = 0; + +document.addEventListener('keydown', function(event) { + if (event.code === konamiCode[keyIndex]) { + keyIndex++; + if (keyIndex === konamiCode.length) { + // change this to your link! + window.location.href = `https://adrianvic.github.io/static/toyourdreams.txt` + keyIndex = 0; + } + } else { + keyIndex = 0; + } +}); + +/* + By tenkuma ^^ + https://adrianvic.github.io + For those thumblrs that change the blog HTML for an iframe poiting to your personal website! +*/{% endhighlight %} +
      \ No newline at end of file diff --git a/site/misc/webresources/pt.json b/site/misc/webresources/pt.json new file mode 100644 index 0000000..9c2d577 --- /dev/null +++ b/site/misc/webresources/pt.json @@ -0,0 +1,8 @@ +{ + "pageTitle": "Recursos web", + "pageDescription": "Meu acervo de assets/scripts para websites.", + "intro": "Essa página é dedicada para reunir algumas coisas que eu fiz para websites que podem ser úteis para você também. Tudo daqui está em domínio público, a não ser que esteja escrito o contrário, mas deixar os créditos seria legal ;-)", + "tumblrAdapt": "Um script que detecta se o atributo de URL tumblr é true e adapta o design do site para desviar do menu do Tumblr, caso você coloque seu site como blog do Tumblr (dá para fazer com iframe). Ele também limpa os links adicionando target=\"_blank\" (abre em outra janela) para links externos e preserva o atributo tumblr em todos.", + "click": "Script que toca um som customizado quando você clica ou coloca o cursor em cima de um link. O código verifica o valor de disablesfx no localstorage, se ele for true o som não toca. O localstorage é verificado toda vez que o som toca, então dá para habilitar/desabilitar sem recarregar a página.", + "ccd": "Acionado quando o usuário digita o famoso Konami Code dentro da página e redireciona para outra página. O nome é a abreviação de Konami Code, mas com C ao invés de K para ficar menos óbvio. É bem fácil modificar ele para fazer outra coisa." +} \ No newline at end of file diff --git a/site/playground.njk b/site/playground.njk new file mode 100644 index 0000000..3cdadba --- /dev/null +++ b/site/playground.njk @@ -0,0 +1,89 @@ +--- +layout: text.njk +--- +{% from "macros.njk" import i88x31 with context %} +{% from "macros.njk" import webring %} +{% from "macros.njk" import projectCard %} +{% from "macros.njk" import videoCard with context %} + +
      +

      Playground

      +

      This is a test page showcasing different elements from the website. By the way, this box is a page header box, which is a regular box without margin followed by a separator.

      +
      + +
      + +

      Text

      +

      Flowers are red, they can also be blue. Just like links. I'm not much of a poet... Anyways, did I get the link contrast right this time? And the paragraph spacing?

      +

      Bolinho de Chuva

      +

      Did you know here in Brazil we have a dessert literally called Bolinho de Chuva (lit. "rain cake")? It's basically fried dough with sugar, the best ones have banana inside. The tradition is to make them when it's raining, I have a lot of childhood memories of eating this and thinking of this now makes me realize it may be one of the reasons I like rain so much. Don't get me wrong, I hate being in the rain, I swear I can feel each drop puncturing me like a needle. What I like is to stay home and listen to the gentle song of falling droplets.

      +

      I was eating one when I wrote this.

      + +

      Alert box

      +
      +

      This is a alert box.

      +
      + +

      Code block

      +

      Uses Eleventy highlight plugin, Prism CSS by RunDevelopment slightly edited to fit the website design language.

      +{% highlight "js" %} +function myFunction() { + return true; +} +{% endhighlight %} + +

      88x31 interactive images

      +

      88x31 are looking too small on modern monitors, so you can now click on them to expand.

      +{{ i88x31("tenkuma.gif") }} +{{ i88x31("anybrowser6.gif") }} +{{ i88x31("ai.gif") }} +{{ i88x31("WEBP.gif") }} + +

      Webring widget

      +

      Generic webring widget with custom background, link color and links.

      +{{ webring({ + text: "Breakcore Webring", + links: [ + "First", + "Second", + "Third" + ], + image: "/static/images/metro-flowers.jpg" +}) }} + +

      Project card

      +

      These are used in the homepage to list my repos.

      +{{ + projectCard( + "Example project", + "I'm probably not entering heaven for this terrible picture I made of my Minecraft skin. Now I cannot delete it from the website files because it's being used here. I even had the balls to call it me.png.", + ('/static/images/me.png' | url ), + '/static/images/me.png', + "PestoWiki" + ) +}} + +

      Video card

      +

      The image, website and video duration are hardcoded so you don't ping any server to pull it (and it works without JS). Of course none of that is relevant to you, this site source is a mess so you don't have to deal with privacy invasive bullshit, I'm just stating that to fill space after the title, spacing is strange with no text here.

      +
      + {{ + videoCard( + i18n["global"].homeVideoLink, + "I don't know the video title, it's pulling from the global string table.", + i18n["global"].homeVideoImage, + i18n["global"].homeVideoWebsite, + i18n["global"].homeVideoDuration + ) + }} +
      + +

      Recent commits

      +

      Thanks to workeffortwaste's eleventy-plugin-recent-changes <3

      +
        + {%- for commit in collections.recentChanges %} +
      • {{ commit.subject }}
      • + {%- endfor %} +
      + +

      Link with favicon

      +

      Here's a link to {% ai "https://github.com/adrianivc" %}my github page{% endai %}. Thanks to bmuenzenmeyer's eleventy-plugin-inline-link-favicon <3

      \ No newline at end of file diff --git a/posts/android-developer-verification.html b/site/posts/android-developer-verification.html similarity index 100% rename from posts/android-developer-verification.html rename to site/posts/android-developer-verification.html diff --git a/posts/instalando-fl-studio-no-linux.html b/site/posts/instalando-fl-studio-no-linux.html similarity index 100% rename from posts/instalando-fl-studio-no-linux.html rename to site/posts/instalando-fl-studio-no-linux.html diff --git a/posts/installing-fl-studio-on-linux.html b/site/posts/installing-fl-studio-on-linux.html similarity index 100% rename from posts/installing-fl-studio-on-linux.html rename to site/posts/installing-fl-studio-on-linux.html diff --git a/posts/posts.11tydata.js b/site/posts/posts.11tydata.cjs similarity index 91% rename from posts/posts.11tydata.js rename to site/posts/posts.11tydata.cjs index 9b619b7..6dd7a73 100644 --- a/posts/posts.11tydata.js +++ b/site/posts/posts.11tydata.cjs @@ -1,5 +1,6 @@ let data = { layout: "_includes/post.njk", + headerLink: "blog", eleventyComputed: { lastModified: function(data) { const fs = require('fs'); diff --git a/posts/verificacao-de-desenvolvedor-no-android.html b/site/posts/verificacao-de-desenvolvedor-no-android.html similarity index 100% rename from posts/verificacao-de-desenvolvedor-no-android.html rename to site/posts/verificacao-de-desenvolvedor-no-android.html diff --git a/school/api-rodrigoribeiro.html b/site/school/api-rodrigoribeiro.html similarity index 100% rename from school/api-rodrigoribeiro.html rename to site/school/api-rodrigoribeiro.html diff --git a/school/guia-ifc-novatos.html b/site/school/guia-ifc-novatos.html similarity index 100% rename from school/guia-ifc-novatos.html rename to site/school/guia-ifc-novatos.html diff --git a/school/school.json b/site/school/school.json similarity index 100% rename from school/school.json rename to site/school/school.json diff --git a/school/telnet-pt.html b/site/school/telnet-pt.html similarity index 100% rename from school/telnet-pt.html rename to site/school/telnet-pt.html diff --git a/site.webmanifest.njk b/site/site.webmanifest.njk similarity index 100% rename from site.webmanifest.njk rename to site/site.webmanifest.njk diff --git a/site/social.njk b/site/social.njk new file mode 100644 index 0000000..8cd1d6f --- /dev/null +++ b/site/social.njk @@ -0,0 +1,50 @@ +--- +pagination: + data: i18n + size: 1 + alias: langKey +permalink: "/{{ langKey }}/social/index.html" +layout: base.njk +title: Adrian Victor:Social +headerLink: social +--- + + + +
      +
      +

      {{ i18n[langKey].socialContentNotRated }}

      +
      +

      {{ i18n[langKey].mastodonPageDescription }}

      +
        + {% for post in mastodon.posts %} +
        +
        +
        + {{ post.content | safe }} + {% if post.media %} +
        +
        + {% for media in post.media %} + + {% endfor %} +
        +
        + {% endif %} +
        + +
        + {% endfor %} +
      +
      \ No newline at end of file diff --git a/static/images/88x31/1.gif b/static/images/88x31/1.gif new file mode 100644 index 0000000..2a28216 Binary files /dev/null and b/static/images/88x31/1.gif differ diff --git a/static/images/88x31/88x31-micro-button.gif b/static/images/88x31/88x31-micro-button.gif new file mode 100644 index 0000000..08b2af2 Binary files /dev/null and b/static/images/88x31/88x31-micro-button.gif differ diff --git a/static/images/88x31/9larpfinal.png b/static/images/88x31/9larpfinal.png new file mode 100644 index 0000000..29758ed Binary files /dev/null and b/static/images/88x31/9larpfinal.png differ diff --git a/static/images/88x31/C4YSB2.gif b/static/images/88x31/C4YSB2.gif new file mode 100644 index 0000000..12b9479 Binary files /dev/null and b/static/images/88x31/C4YSB2.gif differ diff --git a/static/images/88x31/FCbw.gif b/static/images/88x31/FCbw.gif new file mode 100644 index 0000000..8efaa19 Binary files /dev/null and b/static/images/88x31/FCbw.gif differ diff --git a/static/images/88x31/abs.gif b/static/images/88x31/abs.gif new file mode 100644 index 0000000..073c1a0 Binary files /dev/null and b/static/images/88x31/abs.gif differ diff --git a/static/images/88x31/agplv3-88x31.gif b/static/images/88x31/agplv3-88x31.gif new file mode 100644 index 0000000..d2f65d4 Binary files /dev/null and b/static/images/88x31/agplv3-88x31.gif differ diff --git a/static/images/88x31/altavista.gif b/static/images/88x31/altavista.gif new file mode 100644 index 0000000..ccfc5cf Binary files /dev/null and b/static/images/88x31/altavista.gif differ diff --git a/static/images/88x31/appak.png b/static/images/88x31/appak.png new file mode 100644 index 0000000..1ad660d Binary files /dev/null and b/static/images/88x31/appak.png differ diff --git a/static/images/88x31/archlinux.gif b/static/images/88x31/archlinux.gif new file mode 100644 index 0000000..6fcc440 Binary files /dev/null and b/static/images/88x31/archlinux.gif differ diff --git a/static/images/88x31/atabook.gif b/static/images/88x31/atabook.gif new file mode 100644 index 0000000..69494b9 Binary files /dev/null and b/static/images/88x31/atabook.gif differ diff --git a/static/images/88x31/banner2.gif b/static/images/88x31/banner2.gif new file mode 100644 index 0000000..7728776 Binary files /dev/null and b/static/images/88x31/banner2.gif differ diff --git a/static/images/88x31/banporn.gif b/static/images/88x31/banporn.gif new file mode 100644 index 0000000..427b8bc Binary files /dev/null and b/static/images/88x31/banporn.gif differ diff --git a/static/images/88x31/blink-0.gif b/static/images/88x31/blink-0.gif new file mode 100644 index 0000000..2acde1c Binary files /dev/null and b/static/images/88x31/blink-0.gif differ diff --git a/static/images/88x31/blinkie.gif b/static/images/88x31/blinkie.gif new file mode 100644 index 0000000..6dfd3ed Binary files /dev/null and b/static/images/88x31/blinkie.gif differ diff --git a/static/images/88x31/breakcore.gif b/static/images/88x31/breakcore.gif new file mode 100644 index 0000000..adfab70 Binary files /dev/null and b/static/images/88x31/breakcore.gif differ diff --git a/static/images/88x31/brigif.gif b/static/images/88x31/brigif.gif new file mode 100644 index 0000000..d49edf5 Binary files /dev/null and b/static/images/88x31/brigif.gif differ diff --git a/static/images/88x31/buttonaban.gif b/static/images/88x31/buttonaban.gif new file mode 100644 index 0000000..5ba23de Binary files /dev/null and b/static/images/88x31/buttonaban.gif differ diff --git a/static/images/88x31/cab.gif b/static/images/88x31/cab.gif new file mode 100644 index 0000000..a62e0f6 Binary files /dev/null and b/static/images/88x31/cab.gif differ diff --git a/static/images/88x31/cannelle.gif b/static/images/88x31/cannelle.gif new file mode 100644 index 0000000..04f30ad Binary files /dev/null and b/static/images/88x31/cannelle.gif differ diff --git a/static/images/88x31/cd_rom.gif b/static/images/88x31/cd_rom.gif new file mode 100644 index 0000000..de381bc Binary files /dev/null and b/static/images/88x31/cd_rom.gif differ diff --git a/static/images/88x31/code88x31_1.gif b/static/images/88x31/code88x31_1.gif new file mode 100644 index 0000000..c60cf11 Binary files /dev/null and b/static/images/88x31/code88x31_1.gif differ diff --git a/static/images/88x31/cogs.gif b/static/images/88x31/cogs.gif new file mode 100644 index 0000000..d3f68eb Binary files /dev/null and b/static/images/88x31/cogs.gif differ diff --git a/static/images/88x31/coke.gif b/static/images/88x31/coke.gif new file mode 100644 index 0000000..b2fb382 Binary files /dev/null and b/static/images/88x31/coke.gif differ diff --git a/static/images/88x31/coreboot.gif b/static/images/88x31/coreboot.gif new file mode 100644 index 0000000..6458ac2 Binary files /dev/null and b/static/images/88x31/coreboot.gif differ diff --git a/static/images/88x31/crypto_is_a_scam.webp b/static/images/88x31/crypto_is_a_scam.webp new file mode 100644 index 0000000..e5f49b1 Binary files /dev/null and b/static/images/88x31/crypto_is_a_scam.webp differ diff --git a/static/images/88x31/defcon1.gif b/static/images/88x31/defcon1.gif new file mode 100644 index 0000000..7d2b51b Binary files /dev/null and b/static/images/88x31/defcon1.gif differ diff --git a/static/images/88x31/demozoo.gif b/static/images/88x31/demozoo.gif new file mode 100644 index 0000000..1bde656 Binary files /dev/null and b/static/images/88x31/demozoo.gif differ diff --git a/static/images/88x31/destinysoulmates.gif b/static/images/88x31/destinysoulmates.gif new file mode 100644 index 0000000..6942d3b Binary files /dev/null and b/static/images/88x31/destinysoulmates.gif differ diff --git a/static/images/88x31/digimon_terminal.gif b/static/images/88x31/digimon_terminal.gif new file mode 100644 index 0000000..a90ec5a Binary files /dev/null and b/static/images/88x31/digimon_terminal.gif differ diff --git a/static/images/88x31/disaster.gif b/static/images/88x31/disaster.gif new file mode 100644 index 0000000..a9e8538 Binary files /dev/null and b/static/images/88x31/disaster.gif differ diff --git a/static/images/88x31/disccontent.gif b/static/images/88x31/disccontent.gif new file mode 100644 index 0000000..ad20126 Binary files /dev/null and b/static/images/88x31/disccontent.gif differ diff --git a/static/images/88x31/discord-no-way.gif b/static/images/88x31/discord-no-way.gif new file mode 100644 index 0000000..4ee8d64 Binary files /dev/null and b/static/images/88x31/discord-no-way.gif differ diff --git a/static/images/88x31/discord.gif b/static/images/88x31/discord.gif new file mode 100644 index 0000000..8b8b457 Binary files /dev/null and b/static/images/88x31/discord.gif differ diff --git a/static/images/88x31/discord3.gif b/static/images/88x31/discord3.gif new file mode 100644 index 0000000..631df88 Binary files /dev/null and b/static/images/88x31/discord3.gif differ diff --git a/static/images/88x31/discordserver.gif b/static/images/88x31/discordserver.gif new file mode 100644 index 0000000..dbf288c Binary files /dev/null and b/static/images/88x31/discordserver.gif differ diff --git a/static/images/88x31/divx_logo2.gif b/static/images/88x31/divx_logo2.gif new file mode 100644 index 0000000..a92b8a5 Binary files /dev/null and b/static/images/88x31/divx_logo2.gif differ diff --git a/static/images/88x31/dkbutton2.gif b/static/images/88x31/dkbutton2.gif new file mode 100644 index 0000000..6e21c1c Binary files /dev/null and b/static/images/88x31/dkbutton2.gif differ diff --git a/static/images/88x31/doc-cd-icon.gif b/static/images/88x31/doc-cd-icon.gif new file mode 100644 index 0000000..9e6c1c8 Binary files /dev/null and b/static/images/88x31/doc-cd-icon.gif differ diff --git a/static/images/88x31/dokuwiki.gif b/static/images/88x31/dokuwiki.gif new file mode 100644 index 0000000..5600ad3 Binary files /dev/null and b/static/images/88x31/dokuwiki.gif differ diff --git a/static/images/88x31/donate.gif b/static/images/88x31/donate.gif new file mode 100644 index 0000000..f81ce06 Binary files /dev/null and b/static/images/88x31/donate.gif differ diff --git a/static/images/88x31/donate2.gif b/static/images/88x31/donate2.gif new file mode 100644 index 0000000..b14b9d7 Binary files /dev/null and b/static/images/88x31/donate2.gif differ diff --git a/static/images/88x31/dontbephonechump.gif b/static/images/88x31/dontbephonechump.gif new file mode 100644 index 0000000..67e5420 Binary files /dev/null and b/static/images/88x31/dontbephonechump.gif differ diff --git a/static/images/88x31/dontklick.gif b/static/images/88x31/dontklick.gif new file mode 100644 index 0000000..b99fc12 Binary files /dev/null and b/static/images/88x31/dontklick.gif differ diff --git a/static/images/88x31/dos.gif b/static/images/88x31/dos.gif new file mode 100644 index 0000000..93a00b0 Binary files /dev/null and b/static/images/88x31/dos.gif differ diff --git a/static/images/88x31/dream_coloured.gif b/static/images/88x31/dream_coloured.gif new file mode 100644 index 0000000..d26718c Binary files /dev/null and b/static/images/88x31/dream_coloured.gif differ diff --git a/static/images/88x31/drpepper.gif b/static/images/88x31/drpepper.gif new file mode 100644 index 0000000..dff6eaa Binary files /dev/null and b/static/images/88x31/drpepper.gif differ diff --git a/static/images/88x31/email-icon.gif b/static/images/88x31/email-icon.gif new file mode 100644 index 0000000..2139e09 Binary files /dev/null and b/static/images/88x31/email-icon.gif differ diff --git a/static/images/88x31/evangelion.gif b/static/images/88x31/evangelion.gif new file mode 100644 index 0000000..6c9932d Binary files /dev/null and b/static/images/88x31/evangelion.gif differ diff --git a/static/images/88x31/evilnet.gif b/static/images/88x31/evilnet.gif new file mode 100644 index 0000000..c23fa9e Binary files /dev/null and b/static/images/88x31/evilnet.gif differ diff --git a/static/images/88x31/falink.gif b/static/images/88x31/falink.gif new file mode 100644 index 0000000..bd19b33 Binary files /dev/null and b/static/images/88x31/falink.gif differ diff --git a/static/images/88x31/fb_button.gif b/static/images/88x31/fb_button.gif new file mode 100644 index 0000000..475f24e Binary files /dev/null and b/static/images/88x31/fb_button.gif differ diff --git a/static/images/88x31/fckfb.gif b/static/images/88x31/fckfb.gif new file mode 100644 index 0000000..97abe49 Binary files /dev/null and b/static/images/88x31/fckfb.gif differ diff --git a/static/images/88x31/fckgoogle.gif b/static/images/88x31/fckgoogle.gif new file mode 100644 index 0000000..ed15649 Binary files /dev/null and b/static/images/88x31/fckgoogle.gif differ diff --git a/static/images/88x31/fckingwww.gif b/static/images/88x31/fckingwww.gif new file mode 100644 index 0000000..8a07bc4 Binary files /dev/null and b/static/images/88x31/fckingwww.gif differ diff --git a/static/images/88x31/fediverse.gif b/static/images/88x31/fediverse.gif new file mode 100644 index 0000000..6ad64ff Binary files /dev/null and b/static/images/88x31/fediverse.gif differ diff --git a/static/images/88x31/fedora.gif b/static/images/88x31/fedora.gif new file mode 100644 index 0000000..5953e46 Binary files /dev/null and b/static/images/88x31/fedora.gif differ diff --git a/static/images/88x31/fedora2.gif b/static/images/88x31/fedora2.gif new file mode 100644 index 0000000..0581d69 Binary files /dev/null and b/static/images/88x31/fedora2.gif differ diff --git a/static/images/88x31/ffrediscover.gif b/static/images/88x31/ffrediscover.gif new file mode 100644 index 0000000..432edc4 Binary files /dev/null and b/static/images/88x31/ffrediscover.gif differ diff --git a/static/images/88x31/fftake.gif b/static/images/88x31/fftake.gif new file mode 100644 index 0000000..7a86d07 Binary files /dev/null and b/static/images/88x31/fftake.gif differ diff --git a/static/images/88x31/fic005.gif b/static/images/88x31/fic005.gif new file mode 100644 index 0000000..4988165 Binary files /dev/null and b/static/images/88x31/fic005.gif differ diff --git a/static/images/88x31/fic009.gif b/static/images/88x31/fic009.gif new file mode 100644 index 0000000..647ff7f Binary files /dev/null and b/static/images/88x31/fic009.gif differ diff --git a/static/images/88x31/filetransit.gif b/static/images/88x31/filetransit.gif new file mode 100644 index 0000000..f6e7f12 Binary files /dev/null and b/static/images/88x31/filetransit.gif differ diff --git a/static/images/88x31/fpobutton.gif b/static/images/88x31/fpobutton.gif new file mode 100644 index 0000000..c4252c7 Binary files /dev/null and b/static/images/88x31/fpobutton.gif differ diff --git a/static/images/88x31/get_da.gif b/static/images/88x31/get_da.gif new file mode 100644 index 0000000..dae4e03 Binary files /dev/null and b/static/images/88x31/get_da.gif differ diff --git a/static/images/88x31/google_25wht.gif b/static/images/88x31/google_25wht.gif new file mode 100644 index 0000000..28f6fdc Binary files /dev/null and b/static/images/88x31/google_25wht.gif differ diff --git a/static/images/88x31/google_stand.gif b/static/images/88x31/google_stand.gif new file mode 100644 index 0000000..08ffd8b Binary files /dev/null and b/static/images/88x31/google_stand.gif differ diff --git a/static/images/88x31/hotgraphics.gif b/static/images/88x31/hotgraphics.gif new file mode 100644 index 0000000..2ea566c Binary files /dev/null and b/static/images/88x31/hotgraphics.gif differ diff --git a/static/images/88x31/hotmail2.gif b/static/images/88x31/hotmail2.gif new file mode 100644 index 0000000..f723b79 Binary files /dev/null and b/static/images/88x31/hotmail2.gif differ diff --git a/static/images/88x31/ipv6.gif b/static/images/88x31/ipv6.gif new file mode 100644 index 0000000..3c17939 Binary files /dev/null and b/static/images/88x31/ipv6.gif differ diff --git a/static/images/88x31/latex.gif b/static/images/88x31/latex.gif new file mode 100644 index 0000000..ac68f8d Binary files /dev/null and b/static/images/88x31/latex.gif differ diff --git a/static/images/88x31/ldp-link.gif b/static/images/88x31/ldp-link.gif new file mode 100644 index 0000000..940cac2 Binary files /dev/null and b/static/images/88x31/ldp-link.gif differ diff --git a/static/images/88x31/maaagic.png b/static/images/88x31/maaagic.png new file mode 100644 index 0000000..2bd177c Binary files /dev/null and b/static/images/88x31/maaagic.png differ diff --git a/static/images/88x31/macos.gif b/static/images/88x31/macos.gif new file mode 100644 index 0000000..52d3f72 Binary files /dev/null and b/static/images/88x31/macos.gif differ diff --git a/static/images/88x31/macos_mov.gif b/static/images/88x31/macos_mov.gif new file mode 100644 index 0000000..48e82c4 Binary files /dev/null and b/static/images/88x31/macos_mov.gif differ diff --git a/static/images/88x31/masto.gif b/static/images/88x31/masto.gif new file mode 100644 index 0000000..8597dab Binary files /dev/null and b/static/images/88x31/masto.gif differ diff --git a/static/images/88x31/microsoft_frontpage.gif b/static/images/88x31/microsoft_frontpage.gif new file mode 100644 index 0000000..18f28de Binary files /dev/null and b/static/images/88x31/microsoft_frontpage.gif differ diff --git a/static/images/88x31/minecraft.gif b/static/images/88x31/minecraft.gif new file mode 100644 index 0000000..a149b45 Binary files /dev/null and b/static/images/88x31/minecraft.gif differ diff --git a/static/images/88x31/mrnandokk.gif b/static/images/88x31/mrnandokk.gif new file mode 100644 index 0000000..86c1698 Binary files /dev/null and b/static/images/88x31/mrnandokk.gif differ diff --git a/static/images/88x31/nft-nofuckingthanks.gif b/static/images/88x31/nft-nofuckingthanks.gif new file mode 100644 index 0000000..ecbd158 Binary files /dev/null and b/static/images/88x31/nft-nofuckingthanks.gif differ diff --git a/static/images/88x31/nintendo-hh-gba.png b/static/images/88x31/nintendo-hh-gba.png new file mode 100644 index 0000000..a35cb92 Binary files /dev/null and b/static/images/88x31/nintendo-hh-gba.png differ diff --git a/static/images/88x31/noanime.gif b/static/images/88x31/noanime.gif new file mode 100644 index 0000000..c05bebf Binary files /dev/null and b/static/images/88x31/noanime.gif differ diff --git a/static/images/88x31/nobelief.gif b/static/images/88x31/nobelief.gif new file mode 100644 index 0000000..2f0e1f9 Binary files /dev/null and b/static/images/88x31/nobelief.gif differ diff --git a/static/images/88x31/nocookie.gif b/static/images/88x31/nocookie.gif new file mode 100644 index 0000000..c0dd092 Binary files /dev/null and b/static/images/88x31/nocookie.gif differ diff --git a/static/images/88x31/noodle.gif b/static/images/88x31/noodle.gif new file mode 100644 index 0000000..882fa97 Binary files /dev/null and b/static/images/88x31/noodle.gif differ diff --git a/static/images/88x31/now.gif b/static/images/88x31/now.gif new file mode 100644 index 0000000..1247e08 Binary files /dev/null and b/static/images/88x31/now.gif differ diff --git a/static/images/88x31/nvidia.gif b/static/images/88x31/nvidia.gif new file mode 100644 index 0000000..81d5921 Binary files /dev/null and b/static/images/88x31/nvidia.gif differ diff --git a/static/images/88x31/oldos.png b/static/images/88x31/oldos.png new file mode 100644 index 0000000..4651c73 Binary files /dev/null and b/static/images/88x31/oldos.png differ diff --git a/static/images/88x31/penguin.gif b/static/images/88x31/penguin.gif new file mode 100644 index 0000000..97e71e0 Binary files /dev/null and b/static/images/88x31/penguin.gif differ diff --git a/static/images/88x31/pictochat.gif b/static/images/88x31/pictochat.gif new file mode 100644 index 0000000..91d9cb3 Binary files /dev/null and b/static/images/88x31/pictochat.gif differ diff --git a/static/images/88x31/psbutton.gif b/static/images/88x31/psbutton.gif new file mode 100644 index 0000000..a4d8c38 Binary files /dev/null and b/static/images/88x31/psbutton.gif differ diff --git a/static/images/88x31/pyurk.gif b/static/images/88x31/pyurk.gif new file mode 100644 index 0000000..ee34f99 Binary files /dev/null and b/static/images/88x31/pyurk.gif differ diff --git a/static/images/88x31/spacehey.png b/static/images/88x31/spacehey.png new file mode 100644 index 0000000..915b97d Binary files /dev/null and b/static/images/88x31/spacehey.png differ diff --git a/static/images/88x31/speech.gif b/static/images/88x31/speech.gif new file mode 100644 index 0000000..f1fa905 Binary files /dev/null and b/static/images/88x31/speech.gif differ diff --git a/static/images/88x31/statuscafe.png b/static/images/88x31/statuscafe.png new file mode 100644 index 0000000..c94631b Binary files /dev/null and b/static/images/88x31/statuscafe.png differ diff --git a/static/images/88x31/tenkuma-splash.gif b/static/images/88x31/tenkuma-splash.gif new file mode 100644 index 0000000..f4befbd Binary files /dev/null and b/static/images/88x31/tenkuma-splash.gif differ diff --git a/static/images/88x31/tenkuma2.gif b/static/images/88x31/tenkuma2.gif new file mode 100644 index 0000000..ed1e0a7 Binary files /dev/null and b/static/images/88x31/tenkuma2.gif differ diff --git a/static/images/88x31/vilogo.gif b/static/images/88x31/vilogo.gif new file mode 100644 index 0000000..98289d7 Binary files /dev/null and b/static/images/88x31/vilogo.gif differ diff --git a/static/images/88x31/vim.gif b/static/images/88x31/vim.gif new file mode 100644 index 0000000..84baf9a Binary files /dev/null and b/static/images/88x31/vim.gif differ diff --git a/static/images/88x31/volta.gif b/static/images/88x31/volta.gif new file mode 100644 index 0000000..2616771 Binary files /dev/null and b/static/images/88x31/volta.gif differ diff --git a/static/images/88x31/wbbhosting.gif b/static/images/88x31/wbbhosting.gif new file mode 100644 index 0000000..b72e71e Binary files /dev/null and b/static/images/88x31/wbbhosting.gif differ diff --git a/static/images/88x31/web3.gif b/static/images/88x31/web3.gif new file mode 100644 index 0000000..4f5a2f1 Binary files /dev/null and b/static/images/88x31/web3.gif differ diff --git a/static/images/88x31/wrongcode.gif b/static/images/88x31/wrongcode.gif new file mode 100644 index 0000000..61e4a24 Binary files /dev/null and b/static/images/88x31/wrongcode.gif differ diff --git a/static/images/88x31/wrongos.gif b/static/images/88x31/wrongos.gif new file mode 100644 index 0000000..d9b2dad Binary files /dev/null and b/static/images/88x31/wrongos.gif differ diff --git a/static/images/backgrounds/marika-nisekoi.png b/static/images/backgrounds/marika-nisekoi.png new file mode 100644 index 0000000..f9a1fa4 Binary files /dev/null and b/static/images/backgrounds/marika-nisekoi.png differ diff --git a/static/images/bliss-dark.jpg b/static/images/bliss-dark.jpg new file mode 100644 index 0000000..442d1a2 Binary files /dev/null and b/static/images/bliss-dark.jpg differ diff --git a/static/images/grunge.png b/static/images/grunge.png new file mode 100644 index 0000000..21cfecf Binary files /dev/null and b/static/images/grunge.png differ diff --git a/static/images/metro-flowers-original.jpg b/static/images/metro-flowers-original.jpg new file mode 100644 index 0000000..d3b8bff Binary files /dev/null and b/static/images/metro-flowers-original.jpg differ diff --git a/static/images/metro-flowers.jpg b/static/images/metro-flowers.jpg new file mode 100644 index 0000000..ded254a Binary files /dev/null and b/static/images/metro-flowers.jpg differ diff --git a/static/images/profile.jpg b/static/images/profile.jpg new file mode 100644 index 0000000..09f44f3 Binary files /dev/null and b/static/images/profile.jpg differ diff --git a/static/images/thumbnails/goodbye.png b/static/images/thumbnails/goodbye.png new file mode 100644 index 0000000..4338749 Binary files /dev/null and b/static/images/thumbnails/goodbye.png differ diff --git a/static/kumos/apps/apps.mjs b/static/kumos/apps/apps.mjs new file mode 100644 index 0000000..37e81b5 --- /dev/null +++ b/static/kumos/apps/apps.mjs @@ -0,0 +1,29 @@ +import { Application, Window, promoteWindow, registerApplication, getScreenRoot, getApplications } from "../kernel.mjs"; + +const app = new Application('apps', (p) => { + const w = new Window(p); + w.setTitle("App list"); + w.content.style.padding = "1rem"; + + const list = document.createElement("ul"); + getApplications().forEach(app => { + const item = document.createElement("li"); + const link = document.createElement("a"); + link.innerText = app.name; + link.addEventListener('click', () => app.bootstrap()); + item.appendChild(link); + list.appendChild(item); + }) + + w.content.appendChild(list); + + w.close.addEventListener('click', () => { + p.detach(); + w.destroy(); + }); + + getScreenRoot().appendChild(w.window); + promoteWindow(w); +}) + +export default app; \ No newline at end of file diff --git a/static/kumos/apps/browser.mjs b/static/kumos/apps/browser.mjs new file mode 100644 index 0000000..08997d6 --- /dev/null +++ b/static/kumos/apps/browser.mjs @@ -0,0 +1,32 @@ +import { Application, Window, promoteWindow, registerApplication, getScreenRoot } from "../kernel.mjs"; + +const app = new Application('browser', (p) => { + const w = new Window(p); + w.setTitle("Web browser"); + const iframe = document.createElement("iframe"); + iframe.src = "https://adrianvic.github.io"; + iframe.style.height = "100%"; + const searchBar = document.createElement("div"); + searchBar.style.display = "flex"; + const search = document.createElement("input"); + search.style.width = "100%"; + const searchButton = document.createElement("button"); + searchBar.appendChild(search); + searchBar.appendChild(searchButton); + search.type = "text"; + iframe.addEventListener('load', () => search.value = iframe.src); + searchButton.innerText = "go"; + searchButton.addEventListener('click', () => iframe.src = search.value); + w.content.appendChild(searchBar); + w.content.appendChild(iframe); + + getScreenRoot().appendChild(w.window); + promoteWindow(w); + + w.close.addEventListener('click', () => { + p.detach(); + w.destroy(); + }) +}) + +export default app; \ No newline at end of file diff --git a/static/kumos/apps/guestbook.mjs b/static/kumos/apps/guestbook.mjs new file mode 100644 index 0000000..cd547a8 --- /dev/null +++ b/static/kumos/apps/guestbook.mjs @@ -0,0 +1,38 @@ +import { Application, Window, promoteWindow, registerApplication, getScreenRoot, getProcList } from "../kernel.mjs"; +import { notify } from "../system/shell.mjs"; + +function draw(p) { + const w = new Window(p); + w.setTitle("Guestbook"); + w.content.innerHTML = ` + + + + ` + + getScreenRoot().appendChild(w.window); + promoteWindow(w); + + w.close.addEventListener('click', () => { + p.detach(); + w.destroy(); + }) +} + +function main(p) { + let running = false; + getProcList().forEach(proc => { + if (proc.name == 'guestbook' && proc != p) { + notify("Guestbook", "Guestbook is already running!") + p.detach(); + running = true; + } + }) + + if (!running) { + draw(p); + } +} + +const app = new Application('guestbook', main); +export default app; \ No newline at end of file diff --git a/static/kumos/apps/pkg.mjs b/static/kumos/apps/pkg.mjs new file mode 100644 index 0000000..064718f --- /dev/null +++ b/static/kumos/apps/pkg.mjs @@ -0,0 +1,5 @@ +import "./apps.mjs"; +import "./browser.mjs"; +import "./guestbook.mjs"; +import "./taskmanager.mjs"; +import "./shell.mjs"; \ No newline at end of file diff --git a/static/kumos/apps/shell.mjs b/static/kumos/apps/shell.mjs new file mode 100644 index 0000000..2be512c --- /dev/null +++ b/static/kumos/apps/shell.mjs @@ -0,0 +1,61 @@ +import { Application, Window, getScreenRoot, bus, promoteWindow } from "../kernel.mjs"; + +function draw(p) { + const w = new Window(p); + w.setTitle("Shell"); + w.content.style.display = "flex"; + w.content.style.flexDirection = "column"; + + const textarea = document.createElement("textarea"); + textarea.style.width = "100%"; + textarea.style.height = "100%"; + bus.addEventListener("system-console", (e) => { + textarea.value += e.detail + .map(arg => typeof arg === "object" ? JSON.stringify(arg) : String(arg)) + .join(" ") + + "\n"; + }) + + const div = document.createElement("div"); + div.style.width = "100%"; + div.style.display = "flex"; + + const input = document.createElement("input"); + input.style.width = "100%"; + + const button = document.createElement("button"); + button.textContent = "go"; + button.addEventListener('click', () => { + eval(input.value); + }); + + div.appendChild(input); + div.appendChild(button); + + w.content.appendChild(textarea); + w.content.appendChild(div); + getScreenRoot().appendChild(w.window); + w.maximize(); + + function title(title) { + w.setTitle(title); + } + + function exit() { + p.detach(); + w.destroy(); + } + + w.close.addEventListener('click', () => { + exit(); + }) + + promoteWindow(w); +} + +function main(p) { + draw(p); +} + +const app = new Application('shell', main); +export default app; \ No newline at end of file diff --git a/static/kumos/apps/taskmanager.mjs b/static/kumos/apps/taskmanager.mjs new file mode 100644 index 0000000..3d643c7 --- /dev/null +++ b/static/kumos/apps/taskmanager.mjs @@ -0,0 +1,34 @@ +import { Application, Window, promoteWindow, getScreenRoot, getProcList } from "../kernel.mjs"; + +const app = new Application('task', (p) => { + function update() { + w.content.innerHTML = ``; + const list = document.createElement("ul"); + getProcList().forEach(proc => { + const item = document.createElement("li"); + const link = document.createElement("a"); + link.innerText = `${proc.pid} -> ${proc.parent.length === 0 ? `` : proc.parent} ${proc.name}`; + item.appendChild(link); + list.appendChild(item); + }) + + w.content.appendChild(list); + } + + const w = new Window(); + w.setTitle("Task Manager"); + w.content.style.padding = "1rem"; + + const task = setInterval(update, 100); + + w.close.addEventListener('click', () => { + clearInterval(task); + p.detach(); + w.destroy(); + }); + + getScreenRoot().appendChild(w.window); + promoteWindow(w); +}) + +export default app; \ No newline at end of file diff --git a/static/kumos/kernel.mjs b/static/kumos/kernel.mjs new file mode 100644 index 0000000..c726f55 --- /dev/null +++ b/static/kumos/kernel.mjs @@ -0,0 +1,180 @@ +const language = "en"; +const procList = []; +const applications = []; +const screenRoot = document.querySelector('body'); +screenRoot.classList.add("kumosroot"); + +export const bus = new EventTarget(); + +class SecurityError extends Error { + constructor(message) { + super(message); + this.name = "SercurityError" + } +}; + +export class Process { + constructor(name, fn, parent = []) { + this.pid = procList.length == 0 ? 0 : procList[procList.length - 1].pid + 1; + this.name = name; + this.parent = parent; + procList.push(this); + fn(this); + } + + detach() { + procList.splice(procList.indexOf(this), 1); + } + + child(name, fn) { + return new Process(name, fn, [...this.parent, this.pid]); + } + + isPrivileged() { + return this.parent.indexOf(0) !== -1 || this.pid == 0; + } +} + +export class Application { + constructor(name, fn) { + this.fn = fn; + this.name = name; + registerApplication(this); + } + + bootstrap() { + new Process(this.name, this.fn); + } +} + +export class Window { + constructor(p) { + this.process = p; + + // Window + const w = document.createElement("div"); + w.classList.add("window"); + this.window = w; + + // Header + const h = document.createElement("div"); + h.classList.add("windowHeader"); + this.header = h; + + // Title + const title = document.createElement("p"); + title.classList.add("windowHeaderTitle"); + this.title = title; + + // Buttons container + const container = document.createElement("div"); + container.classList.add("buttonContainer"); + + // Close button + const close = document.createElement("button"); + close.classList.add("windowHeaderButton"); + close.classList.add("close"); + this.close = close; + + // Maximize button + const maximize = document.createElement("button"); + maximize.classList.add("windowHeaderButton"); + maximize.classList.add("maximize"); + this.maximizeButton = maximize; + maximize.addEventListener("click", () => { this.maximize() }); + + // Content + const c = document.createElement("div"); + c.classList.add("windowContent"); + this.content = c; + + // Building + container.appendChild(maximize); + container.appendChild(close); + h.appendChild(title); + h.appendChild(container); + w.appendChild(h); + w.appendChild(c); + + this.state = "floating"; + } + + setTitle(title) { + this.title.innerText = title; + } + + destroy() { + this.window.remove(); + } + + maximize() { + this.window.classList.toggle("maximized"); + } +} + +export function promoteWindow(window) { + const header = window.header; + const elmnt = window.window; + + header.style.cursor = 'move'; + + header.onmousedown = (e) => { + e.preventDefault(); + + let pos3 = e.clientX; + let pos4 = e.clientY; + + const startTop = elmnt.offsetTop; + const startLeft = elmnt.offsetLeft; + + document.onmouseup = closeDragElement; + document.onmousemove = elementDrag; + + function elementDrag(e) { + e.preventDefault(); + const pos1 = pos3 - e.clientX; + const pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + + elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; + elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; + } + + function closeDragElement() { + document.onmouseup = null; + document.onmousemove = null; + } + }; +} + +export function getScreenRoot() { + return screenRoot; +} + +export function getApplications() { + return applications; +} + +export function registerApplication(application) { + applications.push(application); +} + +export function getLanguage() { + return language; +} + +export function getProcList() { + return procList; +} + +["log","warn", "error", "info"].forEach(method => { + const original = console[method]; + + console[method] = (...args) => { + original(...args); + bus.dispatchEvent(new CustomEvent("system-console", { + detail: args + })); + }; +}) \ No newline at end of file diff --git a/static/kumos/kumos.css b/static/kumos/kumos.css new file mode 100644 index 0000000..557f15e --- /dev/null +++ b/static/kumos/kumos.css @@ -0,0 +1,138 @@ +.kumosroot { + --theme-color: #4c6d6e; + --theme-color-lighter: #84b9bb; + --theme-color-variation: #568b8d; + position: relative; + width: 100vw; + height: 100vh; + margin: 0; + padding: 0; + box-sizing: border-box; + overflow: hidden; + color: white; + background-color: black; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + + * { + box-sizing: border-box; + padding: 0; + margin: 0; + } + + .window { + position: absolute; + z-index: 9; + width: 300px; + height: 300px; + display: flex; + flex-direction: column; + resize: both; + overflow: hidden; + } + + .window.maximized { + left: 0; + top: 0; + right: 0; + bottom: 0; + width: auto; + height: auto; + } + + .windowHeader { + padding: 10px; + cursor: move; + z-index: 10; + background-color: rgba(255, 255, 255, 0.6); + color: #000000; + flex: 0 0 auto; + } + + .windowHeader .buttonContainer { + display: flex; + gap: .4em; + } + + .windowContent { + width: 100%; + height: 100%; + flex: 1 1 auto; + border: 0; + } + + .windowContent { + overflow: hidden; + display: flex; + flex-direction: column; + background-color: black; + } + + .windowHeader { + display: flex; + } + + .windowHeaderTitle { + margin: 0px; + margin-right: auto; + } + + .kumosBar { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + background-color: var(--theme-color); + padding: .4em; + display: flex; + gap: 1em; + } + + .kumosBar * { + height: 100%; + } + + .windowHeaderButton { + height: 1em; + width: 1em; + padding: 0; + box-sizing: border-box; + border: none; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1em; + line-height: 1; + cursor: pointer; + } + + .windowHeaderButton.close::before { + content: "×"; + } + + .windowHeaderButton.close { + background-color: rgba(255, 0, 0, 0.6); + color: white; + } + + .windowHeaderButton.maximize::before { + content: "□"; + } + + .windowHeaderButton.maximize { + background-color: rgba(255, 255, 0, 0.6); + color: black; + } + + button, input, textarea { + padding: .2em; + border: none; + } + + textarea { + resize: none; + } + + li { + margin-inline-start: 1em; + } +} \ No newline at end of file diff --git a/static/kumos/system/init.mjs b/static/kumos/system/init.mjs new file mode 100644 index 0000000..69543a8 --- /dev/null +++ b/static/kumos/system/init.mjs @@ -0,0 +1,10 @@ +import "../apps/pkg.mjs"; +import { Process } from "../kernel.mjs"; +import interactiveLogin from "./targets/interactive-login.mjs"; + +function init(p) { + console.log("Welcome to KumOS!"); + interactiveLogin(p); +} + +new Process("init", init); \ No newline at end of file diff --git a/static/kumos/system/login.mjs b/static/kumos/system/login.mjs new file mode 100644 index 0000000..327bf85 --- /dev/null +++ b/static/kumos/system/login.mjs @@ -0,0 +1,43 @@ +import { Process, Window, getScreenRoot, promoteWindow } from "../kernel.mjs"; +import createShell from "./shell.mjs"; + +export default function init(p) { + function login(password) { + if (password == "demo") { + p.detach(); + new Process("shell", createShell); + w.destroy(); + } else { + console.log("Invalid password.") + } + } + + console.log("Please log in with login(password)!"); + window.login = login; + const w = new Window(p); + w.setTitle("Login"); + w.window.style.height = "fit-content"; + w.window.style.width = "fit-content"; + w.window.style.resize = "none"; + + const loginForm = document.createElement("div"); + loginForm.style.display = "flex"; + + const passwordInput = document.createElement("input"); + passwordInput.type = "password"; + passwordInput.placeholder = "Password is 'demo'"; + + const loginButton = document.createElement("button"); + loginButton.innerText = "login"; + loginButton.addEventListener('click', () => { + login(passwordInput.value); + }) + + loginForm.appendChild(passwordInput); + loginForm.appendChild(loginButton); + w.content.appendChild(loginForm); + + w.close.remove(); + getScreenRoot().appendChild(w.window); + promoteWindow(w); +} \ No newline at end of file diff --git a/static/kumos/system/shell.mjs b/static/kumos/system/shell.mjs new file mode 100644 index 0000000..973c343 --- /dev/null +++ b/static/kumos/system/shell.mjs @@ -0,0 +1,33 @@ +import { getScreenRoot, getApplications, Process } from "../kernel.mjs"; +import { showNotification } from "../../scripts/notification.js"; + +export function notify(title, text, time) { + showNotification(title, text, time); +} + +function runApp(name) { + let launched = false; + getApplications().forEach(app => { + if (app.name == name) { + app.bootstrap(); + launched = true; + } + }) + if (!launched) alert("Not found."); +} + +export default function createShell(p) { + const bar = document.createElement('div'); + bar.classList.add("kumosBar"); + + const run = document.createElement('input'); + const runButton = document.createElement('button'); + run.type = "text"; + runButton.innerText = "Run"; + runButton.id = "kumosBarRunButton" + runButton.addEventListener('click', () => runApp(run.value)); + bar.appendChild(run); + bar.appendChild(runButton); + + getScreenRoot().appendChild(bar); +} \ No newline at end of file diff --git a/static/kumos/system/targets/interactive-login.mjs b/static/kumos/system/targets/interactive-login.mjs new file mode 100644 index 0000000..fb75178 --- /dev/null +++ b/static/kumos/system/targets/interactive-login.mjs @@ -0,0 +1,5 @@ +import login from "../login.mjs"; + +export default (p) => { + p.child("login", login); +} \ No newline at end of file diff --git a/static/main.css b/static/main.css index 73efdd7..6943df9 100644 --- a/static/main.css +++ b/static/main.css @@ -1,9 +1,14 @@ +/* + Adrian Victor's website stylesheet + Don't kill me, I'm just a messenger that grew up using Windows Phone... +*/ + /* Raw elements */ :root { --theme-color: #4c6d6e; --theme-color-lighter: #84b9bb; - --theme-color-variation: #22e6ed; + --theme-color-variation: #568b8d; } * { @@ -21,16 +26,21 @@ body { a { transition: 0.2s; - color: lightgray; + color: var(--theme-color-variation); text-decoration: none; } a:hover { - color: var(--theme-color-lighter); + color: lightgray; + + /* I greatly dislike the look of text-decoration: underline but setting this on hover + is harmonic with the clicking sound effect (it clicks better) */ + text-decoration: underline; } li { list-style-type: none; + margin-bottom: .4em; } dt::before { @@ -54,13 +64,29 @@ select { header { display: flex; + flex-direction: column; border-bottom: thick solid rgba(255, 255, 255, 0.1); - width: 100%; box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(0, 0, 0, 0.3); - background-color: rgba(0, 0, 0, 0.15); } -header div { +header .headerContent { + width: 100%; + background-color: rgba(0, 0, 0, 0.15); + display: flex; +} + +header.tumblr { + position: fixed; + left: 0; + right: 0; + bottom: 0; + z-index: 9; + border-top: thick solid rgba(255, 255, 255, 0.1); + border-bottom: none; + background-color: rgb(0,0,0,0.8); +} + +header #headerTitle, header #linksHelper { padding: 1rem; } @@ -90,6 +116,12 @@ main { margin-bottom: 2em; } +#boxChain { + display: flex; + flex-direction: column; + gap: 2em; +} + h1, h2, h3 { @@ -120,6 +152,9 @@ blockquote { } hr { + /* DON'T ASK ME HOW THIS LOOKS SO GOOD + the browser is probably doing weird stuff + to hrs */ border-bottom: thick solid rgba(255, 255, 255, 0.1); box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(0, 0, 0, 0.3); /* margin: .5em 0; */ @@ -134,12 +169,21 @@ h2 { textarea, input, button { - border: medium solid var(--theme-color-lighter); - background-color: black; + transition: .2s; + border: medium solid rgba(255, 255, 255, 0.6); + background-color: rgba(0, 0, 0, 0.2); color: white; padding: 0.6em; } +button:hover { + border-color: white; +} + +img { + max-width: 100%; +} + hs { border-bottom: thin solid white; } @@ -210,12 +254,28 @@ aside.metromenu #content { gap: 1em; } +footer a { + font-size: small; +} + /* Global classes and IDs */ +.visually-hidden { + display: none; +} + .nomargin { margin: 0; } +.noDecoration, .noDecoration:hover { + text-decoration: none; +} + +.noPadding { + padding: 0!important; +} + .end-text { text-align: end; } @@ -228,6 +288,30 @@ aside.metromenu #content { height: 1em; } +.fullWidth { + width: 100%; +} + +.singleLine { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + line-clamp: 1; + -webkit-box-orient: vertical; +} + +.doubleLine { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; +} + +.textColored { + color: white; +} + .notificationBox { transition: transform 1s cubic-bezier(0.19, 1, 0.22, 1); width: fit-content; @@ -264,12 +348,28 @@ li.inlineList { margin-bottom: 0; } -.kaoBox { +.box.alert { border-color: rgba(255, 0, 0, 0.1); - background-color: rgba(255, 0, 0, 0.1); + background-color: rgba(100, 0, 0, 0.3); +} + +.box.alert a { + color: lightcoral; +} + +.box.alert a:hover { + color: lightgray; +} + +.kaoBox { margin-bottom: 1em; } +.negativeMargin { + /* to make a text container merge to a hr below it */ + margin-bottom: -.2em; +} + .pageHeaderBox { border-bottom: 0; } @@ -277,7 +377,7 @@ li.inlineList { .headerSquare, #defaultSquare { transition: 0.4s; - border: medium solid white; + border: thick solid rgba(255, 255, 255, 0.2); height: 3vw; overflow: hidden; width: 6vw; @@ -304,6 +404,7 @@ li.inlineList { height: 6vw; box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.4), 0px -4px 10px rgba(0, 0, 0, 0.4); background-color: rgba(0, 0, 0, 0.3); + border-color: white; } .youtubeCardHolderHelper { @@ -527,6 +628,11 @@ div.hs.selected { opacity: 0 !important; } +article { + max-width: 70%; + margin: auto; +} + .blogpostYoutubeVideo { user-select: none; box-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(0, 0, 0, 0.3); @@ -620,6 +726,7 @@ div.hs.selected { height: 1.4em; margin-top: auto; opacity: 0.6; + margin: auto; } #music:hover { @@ -628,6 +735,7 @@ div.hs.selected { #everythingHelper { position: relative; + margin-bottom: var(--header-height, 0); } #everythingHelper .bg { @@ -651,9 +759,68 @@ div.hs.selected { #mainHelper { padding-top: 3rem; - max-width: 50vw; + max-width: 70vw; margin: auto; display: flex; + gap: 2em; +} + +#mainHelper > aside { + max-width: 20%; + min-width: 20%; +} + +#mainHelper aside { + display: flex; + flex-direction: column; + gap: 1em; +} + +.webringGeneric { + background-color: black; + padding: .4em; + background-position-x: 0; + background-size: cover; +} + +.webringGeneric p { + margin: 0; +} + +.webringButtons { + display: flex; + gap: .4em; +} + +.wrongoLink { + color: #D5E7B5; +} + +#breakcoreWebring { + background-position-x: 0; + background-size: cover; +} + +#breakcoreWebring p { + margin: 20px; +} + +#breakcoreWebring a { + border: thick solid rgba(255, 255, 255, 0.1); + border-bottom: 0; +} + +#breakcoreWebring a:first-child, #breakcoreWebring a:last-child { + border-left: 0; + border-right: 0; +} + +#webring-Wrongos-widget p { + border-top-right-radius: 10px; +} + +#webring-Wrongos-widget a:first-child { + border-bottom-left-radius: 10px; } #headerSubtitle { @@ -732,8 +899,6 @@ header div:first-child { transition: 0.4s; width: fit-content; height: fit-content; - margin-right: 3vw; - margin-bottom: 3rem; gap: 10px; } @@ -749,6 +914,51 @@ header div:first-child { display: flex; } +#homeAside { + margin-bottom: 2em; +} + +#homeWebrings { + display: flex; + flex-direction: column; + gap: 1em; + height: fit-content; +} + +#homeWebrings.less { + max-height: 30em; + overflow: hidden; + --mask: linear-gradient(to bottom, + rgba(0,0,0, 1) 0, rgba(0,0,0, 1) 85%, + rgba(0,0,0, 0) 95%, rgba(0,0,0, 0) 0 + ) 100% 50% / 100% 100% repeat-x; + -webkit-mask: var(--mask); + mask: var(--mask); +} + +#homeBlog p { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + line-clamp: 1; + -webkit-box-orient: vertical; +} + +#homeBlog a { + color: white; +} + +.hotlinks88x31 { + display: grid; + width: fit-content; + margin: auto; + grid-template-columns: 1fr 1fr 1fr; +} + +.internetometerAside img { + max-width: 100%; +} + #telnetSimulation { display: flex; width: 100%; @@ -804,10 +1014,11 @@ header div:first-child { #languageList li a { transition: 1s; + color: white; } .languagesHighlightedLink { - color: var(--theme-color-variation); + color: var(--theme-color-variation)!important; } #songDrawer { @@ -843,6 +1054,10 @@ header div:first-child { opacity: 1; } +.postLink { + color: white; +} + #postHeader * { margin-bottom: 0; } @@ -851,6 +1066,11 @@ header div:first-child { margin-bottom: 1em; } +#miscList dt { + color: var(--theme-color-lighter); + font-weight: bolder; +} + /* Page: misc/favorites */ .favoritesTextBox { @@ -892,6 +1112,94 @@ header div:first-child { margin-top: .2em; } +.mastodonPost { + margin-bottom: 1em; + display: flex; + flex-direction: column; +} + +.mastodonPostContent { + padding: 1em; +} + +.mastodonPostContent, .mastodonLink { + background-color: rgba(0, 0, 0, 0.2); +} + +.mastodonPost p { + margin-bottom: .2em; +} + +.mastodonLink { + width: fit-content; + padding: .4em; + opacity: .8; + margin-left: auto; +} + +.mastodonMedia { + max-height: 5em; + border: medium solid rgba(0, 0, 0, 0.2); +} + +.mastodonMediaBox { + margin-top: 1em; +} + +.mastodonMediaBox div { + display: flex; + overflow: scroll; +} + +.mastodonMediaBox img { + transition: .2s; + opacity: .6; +} + +.mastodonMediaBox img:hover { + opacity: 1; +} + +#socialAside img { + border: thick solid rgba(255, 255, 255, 0.1); + border-top: none; +} + +.fire, .fireHover:hover { + animation: fire-animation 1s ease-in-out infinite alternate; + -moz-animation: fire-animation 1s ease-in-out infinite alternate; + -webkit-animation: fire-animation 1s ease-in-out infinite alternate; + -o-animation: fire-animation 1s ease-in-out infinite alternate; +} + +.burn { + animation: fire-animation .65s ease-in-out infinite alternate; + -moz-animation: fire-animation .65s ease-in-out infinite alternate; + -webkit-animation: fire-animation .65s ease-in-out infinite alternate; + -o-animation: fire-animation .65s ease-in-out infinite alternate; +} + +.blurred { + filter: blur(4px); + user-select: none; + pointer-events: none; +} + +#socialPosts { + transition: .4s; +} + +#chattable { + background-color: black; + border: medium solid rgb(255, 255, 255, 0.2); + width: 100%; +} + +.iframe { + padding: 1rem; + font-size: medium; +} + /* Animations */ @keyframes ellipsis-loader { @@ -925,23 +1233,109 @@ header div:first-child { to { opacity: 0; } } +@keyframes fire-animation +{ +0% {text-shadow: 0 0 20px #fefcc9, + 10px -10px 30px #feec85, + -20px -20px 40px #ffae34, + 20px -40px 50px #ec760c, + -20px -60px 60px #cd4606, + 0 -80px 70px #973716, + 10px -90px 80px #451b0e;} +100% {text-shadow: 0 0 20px #fefcc9, + 10px -10px 30px #fefcc9, + -20px -20px 40px #feec85, + 22px -42px 60px #ffae34, + -22px -58px 50px #ec760c, + 0 -82px 80px #cd4606, + 10px -90px 80px #973716;} +} + +@-moz-keyframes fire-animation +{ +0% {text-shadow: 0 0 20px #fefcc9, + 10px -10px 30px #feec85, + -20px -20px 40px #ffae34, + 20px -40px 50px #ec760c, + -20px -60px 60px #cd4606, + 0 -80px 70px #973716, + 10px -90px 80px #451b0e;} +100% {text-shadow: 0 0 20px #fefcc9, + 10px -10px 30px #fefcc9, + -20px -20px 40px #feec85, + 22px -42px 60px #ffae34, + -22px -58px 50px #ec760c, + 0 -82px 80px #cd4606, + 10px -90px 80px #973716;} +} + +@-webkit-keyframes fire-animation +{ +0% {text-shadow: 0 0 20px #fefcc9, + 10px -10px 30px #feec85, + -20px -20px 40px #ffae34, + 20px -40px 50px #ec760c, + -20px -60px 60px #cd4606, + 0 -80px 70px #973716, + 10px -90px 80px #451b0e;} +100% {text-shadow: 0 0 20px #fefcc9, + 10px -10px 30px #fefcc9, + -20px -20px 40px #feec85, + 22px -42px 60px #ffae34, + -22px -58px 50px #ec760c, + 0 -82px 80px #cd4606, + 10px -90px 80px #973716;} +} + +@-o-keyframes fire-animation +{ +0% {text-shadow: 0 0 20px #fefcc9, + 10px -10px 30px #feec85, + -20px -20px 40px #ffae34, + 20px -40px 50px #ec760c, + -20px -60px 60px #cd4606, + 0 -80px 70px #973716, + 10px -90px 80px #451b0e;} +100% {text-shadow: 0 0 20px #fefcc9, + 10px -10px 30px #fefcc9, + -20px -20px 40px #feec85, + 22px -42px 60px #ffae34, + -22px -58px 50px #ec760c, + 0 -82px 80px #cd4606, + 10px -90px 80px #973716;} +} + /* Media queries */ +@media screen and (max-width: 1400px) { + #mainHelper { + max-width: 90vw; + } +} + @media screen and (max-width: 1280px) { body { font-size: 2vh; } - header { - padding-top: 1.4rem; + article { + max-width: 100%; + margin: auto; + } + + .headerContent { + padding-top: 1rem; text-align: center; flex-direction: column; } header ul { margin: auto; - margin-bottom: 1.4rem; + margin-bottom: 1rem; } - main { max-width: 90vw; } + main { + max-width: 90vw; + margin-bottom: 0px; + } main h1 { font-size: 3vh; } @@ -959,6 +1353,18 @@ header div:first-child { max-width: 90vw; } + #mainHelper > aside { + max-width: unset; + } + + #socialAside img { + max-width: 50%; + } + + #socialAside h1 { + text-align: end; + } + #homeSquares { flex-direction: row; align-content: center; diff --git a/static/prism.css b/static/prism.css new file mode 100644 index 0000000..07a0c79 --- /dev/null +++ b/static/prism.css @@ -0,0 +1,140 @@ +/** + * Coy without shadows + * Based on Tim Shedor's Coy theme for prism.js + * Author: RunDevelopment + */ + +code[class*="language-"], +pre[class*="language-"] { + color: white; + background: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + overflow-x: auto; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + position: relative; + border-left: 10px solid rgba(255, 255, 255, 0.2); + background-color: rgba(0, 0, 0, 0.6); + background-image: linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%); + background-size: 3em 3em; + background-origin: content-box; + background-attachment: local; + margin: .5em 0; + padding: 0 1em; +} + +pre[class*="language-"] > code { + display: block; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + position: relative; + padding: .2em; + border-radius: 0.3em; + color: #c92c2c; + border: 1px solid rgba(0, 0, 0, 0.1); + display: inline; + white-space: normal; + background-color: #fdfdfd; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #7D8B99; +} + +.token.punctuation { + color: #5F6364; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.function-name, +.token.constant, +.token.symbol, +.token.deleted { + color: #c92c2c; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.function, +.token.builtin, +.token.inserted { + color: #2f9c0a; +} + +.token.operator, +.token.entity, +.token.url, +.token.variable { + color: red; + background: rgba(255, 255, 255, 0.1); +} + +.token.atrule, +.token.attr-value, +.token.keyword, +.token.class-name { + color: #1990b8; +} + +.token.regex, +.token.important { + color: #e90; +} + +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: rgba(255, 255, 255, 0.5); +} + +.token.important { + font-weight: normal; +} + +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.namespace { + opacity: .7; +} \ No newline at end of file diff --git a/static/scripts/88x31.js b/static/scripts/88x31.js index 32e37d1..9ba53b1 100644 --- a/static/scripts/88x31.js +++ b/static/scripts/88x31.js @@ -1,4 +1,4 @@ -const images = document.querySelectorAll(".i88x31"); +const images = document.querySelectorAll(".i88x31i"); images.forEach(image => { image.addEventListener("click", () => { diff --git a/static/scripts/home.js b/static/scripts/home.js index f570539..9afa929 100644 --- a/static/scripts/home.js +++ b/static/scripts/home.js @@ -48,4 +48,12 @@ function updateSquare() { div = getSquareDivByID(square.id); selectedSquareDiv = div.id; div.classList.toggle("selected"); -} \ No newline at end of file +} + +const homeWebrings = document.getElementById("homeWebrings"); +const homeWebringsShowMore = document.getElementById("homeWebringsShowMore"); + +homeWebringsShowMore.addEventListener("click", () => { + homeWebrings.classList.toggle("less"); + homeWebringsShowMore.textContent = homeWebrings.classList.contains("less") ? headeri18n.showMore : headeri18n.showLess; +}); \ No newline at end of file diff --git a/static/scripts/music.js b/static/scripts/music.js index c8d0f6e..6fb787e 100644 --- a/static/scripts/music.js +++ b/static/scripts/music.js @@ -4,18 +4,18 @@ const body = document.querySelector("body"); const musicdiv = document.getElementById("music"); musicdiv.innerHTML = ` - - - +${headeri18n.gearsAlt} +${headeri18n.soundOnAlt} + ` const linksHelper = document.getElementById("linksHelper"); linksHelper.insertBefore(document.createElement("hs"), document.getElementById("headerLinks")); const songs = [ - { file: "Velkommen.mp3", name: 'Velkommen', artwork: "velkommen.jpg" }, - { file: "PG2.mp3", name: 'Frugal APE', artwork: "pg.jpg" }, - { file: "dreamscape.mp3", name: 'Dreamscape', artwork: "winds.png" }, - { file: "skychat.mp3", name: 'Skychat', artwork: "winds.png" } + { file: "Velkommen.mp3", name: 'Velkommen', artwork: "velkommen.jpg", alt: headeri18n.velkommenArtAlt }, + { file: "PG2.mp3", name: 'Frugal APE', artwork: "pg.jpg" , alt: headeri18n.pgArtAlt }, + { file: "dreamscape.mp3", name: 'Dreamscape', artwork: "winds.png" , alt: headeri18n.windsArtAlt }, + { file: "skychat.mp3", name: 'Skychat', artwork: "winds.png" , alt: headeri18n.windsArtAlt } ]; // Options page @@ -43,15 +43,15 @@ optionsAside.classList.add("metromenu");

      Volume

      - +

      ${headeri18n.hideBackground}

      - +

      ${headeri18n.disableSoundEffects}

      - +
      ` @@ -99,6 +99,7 @@ songs.forEach(song => { songElement.classList.add("drawerSong"); songElement.dataset.song = song.file; const songImage = document.createElement("img"); + songImage.alt = song.alt; songImage.src = `${rootPrefix}static/images/songs/${song.artwork}`; songElement.appendChild(songImage); songElement.addEventListener('click', () => { @@ -177,6 +178,7 @@ function play() { });; localStorage.setItem("audioPlaying", "true") toggleIMG.src = `${rootPrefix}static/images/sound-on.png` + toggleIMG.alt = headeri18n.soundOnAlt; console.log(`[Music Player] playing ${audioSelect.value}`) } @@ -184,6 +186,7 @@ function stop() { audio.pause(); localStorage.setItem("audioPlaying", "false") toggleIMG.src = `${rootPrefix}static/images/sound-off.png` + toggleIMG.alt = headeri18n.soundOffAlt; } function setVolume(volume) { diff --git a/static/scripts/notification.js b/static/scripts/notification.js index a05b793..e91ccc4 100644 --- a/static/scripts/notification.js +++ b/static/scripts/notification.js @@ -3,7 +3,7 @@ import { registerElementHint } from "./tips.js"; const notificationBox = document.createElement('div'); notificationBox.classList.add('notificationBox'); -export async function showNotification(title, subtitle, time, hint) { +export async function showNotification(title, subtitle, time = 5000, hint) { if (!hint) { hint = headeri18n.notificationDefaultHint; } diff --git a/static/scripts/social.js b/static/scripts/social.js new file mode 100644 index 0000000..165564b --- /dev/null +++ b/static/scripts/social.js @@ -0,0 +1,13 @@ +const socialPosts = document.querySelector('#socialPosts'); +const socialAlert = document.querySelector('#socialAlert'); + +socialPosts.classList.add('blurred'); + +const continueButton = document.createElement('button'); +continueButton.innerText = clickHereToContinueLocalized; +continueButton.addEventListener('click', () => { + socialPosts.classList.remove('blurred'); + socialAlert.remove(); +}) + +socialAlert.appendChild(continueButton); \ No newline at end of file diff --git a/static/scripts/tips.js b/static/scripts/tips.js index 7e72b43..cad5831 100644 --- a/static/scripts/tips.js +++ b/static/scripts/tips.js @@ -1,16 +1,19 @@ const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); const body = document.querySelector('body'); -const elements = document.querySelectorAll('[data-tip]'); const hint = document.querySelector("#headerSubtitle"); -const hintPanelDefaultText = hint.innerHTML; +const hintPanelDefaultText = hint ? hint.innerHTML : null; let fixedHint; let currentObserver; -elements.forEach(el => { - registerElementHint(el); -}) +if (hint) { + const elements = document.querySelectorAll('[data-tip]'); + elements.forEach(el => { + registerElementHint(el); + }); +} function cleanup() { + if (!hint) return; hint.innerHTML = hintPanelDefaultText; hint.classList.remove('fixed'); if (fixedHint) { diff --git a/static/scripts/tumblr-adapt.js b/static/scripts/tumblr-adapt.js new file mode 100644 index 0000000..c3ae48e --- /dev/null +++ b/static/scripts/tumblr-adapt.js @@ -0,0 +1,34 @@ +/* + By tenkuma ^^ + For those thumblrs that change the blog HTML for an iframe poiting to your personal website! +*/ + +const isTumblr = new URLSearchParams(location.search).get("tumblr") == "true"; // add ?tumblr=true to the tumblr iframe src attribute + +function adaptToTumblrLayout() { + const header = document.querySelector('header'); // change to anything that would return your header + header.classList.add("tumblr"); // your CSS must handle the rest + + // will calc the size of the header and save as a CSS variable called --header-height + const setHeaderOffset = () => { + const height = header.offsetHeight + "px"; + document.documentElement.style.setProperty('--header-height', height); + }; + + // do this once and when the page resizes + setHeaderOffset(); + window.addEventListener('resize', setHeaderOffset); + + // sanitizing links so they don't open in your tumblr iframe + // also making sure all links carry the tumblr property! + document.querySelectorAll("a").forEach(link => { + if (new URL(link.href).host !== location.host) { + link.target = "_blank"; + } + const u = new URL(link.href); + u.searchParams.set("tumblr", "true"); + link.href = u.toString(); + }); +} + +if (isTumblr) adaptToTumblrLayout();