posts setup

This commit is contained in:
taskylizard 2023-12-31 06:57:10 +00:00
parent 8f457fa166
commit 5ae23bea33
No known key found for this signature in database
GPG Key ID: 1820131ED1A24120
14 changed files with 528 additions and 229 deletions

View File

@ -9,7 +9,7 @@ import { renderAsync } from "@resvg/resvg-js";
const __dirname = dirname(fileURLToPath(import.meta.url));
const __fonts = resolve(__dirname, "../fonts");
export async function generateImages(config: SiteConfig) {
export async function generateImages(config: SiteConfig): Promise<void> {
const pages = await createContentLoader("**/*.md", { excerpt: true }).load();
const template = await readFile(resolve(__dirname, "./Template.vue"), "utf-8");
@ -57,7 +57,12 @@ interface GenerateImagesOptions {
fonts: SatoriOptions["fonts"];
}
async function generateImage({ page, template, outDir, fonts }: GenerateImagesOptions) {
async function generateImage({
page,
template,
outDir,
fonts,
}: GenerateImagesOptions): Promise<void> {
const { frontmatter, url } = page;
const options: SatoriOptions = {

39
.vitepress/rss.ts Normal file
View File

@ -0,0 +1,39 @@
import path from "path";
import { writeFileSync } from "fs";
import { Feed } from "feed";
import { createContentLoader, type SiteConfig } from "vitepress";
import { meta } from "./constants";
export async function genFeed(config: SiteConfig) {
const feed = new Feed({
title: "FMHY • Monthy Posts",
description: meta.description,
id: meta.hostname,
link: meta.hostname,
language: "en",
image: "https://github.com/fmhy.png",
copyright: "",
});
const posts = await createContentLoader("posts/**/*.md", {
excerpt: true,
render: true,
}).load();
posts.sort(
(a, b) => +new Date(b.frontmatter.date as string) - +new Date(a.frontmatter.date as string),
);
for (const { url, excerpt, frontmatter, html } of posts) {
feed.addItem({
title: frontmatter.title,
id: `${meta.hostname}${url}`,
link: `${meta.hostname}${url.split("/posts")[1]}`,
description: excerpt,
content: html,
date: frontmatter.date,
});
}
writeFileSync(path.join(config.outDir, "feed.rss"), feed.rss2());
}

View File

@ -1,9 +1,9 @@
<script setup lang="ts">
import DefaultTheme from "vitepress/theme";
import Sidebar from "./components/SidebarCard.vue";
import Announcement from "./components/Announcement.vue";
import { useData } from "vitepress";
import { nextTick, provide } from "vue";
import Sidebar from "./components/SidebarCard.vue";
import Announcement from "./components/Announcement.vue";
const { isDark } = useData();

View File

@ -0,0 +1,27 @@
<script setup lang="ts">
import { useData } from "vitepress";
import Authors from "./components/Authors.vue";
const props = defineProps<{
authors: string[];
}>();
const formatDate = (raw: string): string => {
const date = new Date(raw);
return date.toLocaleDateString("en-US", {
month: "short",
day: "numeric",
});
};
const { frontmatter } = useData();
</script>
<template>
<h3>
{{ frontmatter.title }}
</h3>
<span>{{ frontmatter.description }} {{ formatDate(frontmatter.date) }}</span>
<Authors :authors="props.authors" />
</template>

View File

@ -0,0 +1,37 @@
<!-- eslint-disable vue/require-v-for-key -->
<script setup lang="ts">
import { data as posts } from "./posts.data";
const formatDate = (raw: string): string => {
const date = new Date(raw);
return date.toLocaleDateString("en-US", {
month: "short",
day: "numeric",
});
};
</script>
<template>
<div>
<section>
<h1 class="flex items-center gap-2">Posts</h1>
<p>Everything from Monthly Updates to fmhy updates.</p>
</section>
<template v-for="year in Object.keys(posts).reverse()" :key="year">
<h2>{{ year }}</h2>
<ul>
<li v-for="post of posts[year]" :key="post.url">
<article>
<a :href="post.url" class="border-none">{{ post.title }}</a> -
<dl class="m-0 inline">
<dt class="sr-only">Published on</dt>
<dd class="m-0 inline">
<time :datetime="post.date" class="font-bold">{{ formatDate(post.date) }}</time>
</dd>
</dl>
</article>
</li>
</ul>
</template>
</div>
</template>

View File

@ -0,0 +1,43 @@
<script setup lang="ts">
import { computed } from "vue";
const props = defineProps<{
authors: string[];
}>();
interface Author {
name: string;
github: string;
}
const data = [
{
name: "nbats",
github: "https://github.com/nbats",
},
{
name: "Kai",
github: "https://github.com/Kai-FMHY",
},
{
name: "taskylizard",
github: "https://github.com/taskylizard",
},
{
name: "zinklog",
github: "https://github.com/zinklog2",
},
] satisfies Author[];
const authors = computed(() => data.filter((author) => props.authors.includes(author.name)));
</script>
<template>
<div class="flex flex-wrap gap-4 pt-2">
<div v-for="(c, index) of authors" class="flex gap-2 items-center">
<img :src="`${c.github}.png`" class="w-8 h-8 rounded-full" />
<a :href="c.github">{{ c.name }}</a>
<span v-if="index < authors.length - 1"> </span>
</div>
</div>
</template>

View File

@ -1,6 +1,7 @@
import { type Theme } from "vitepress";
import DefaultTheme from "vitepress/theme";
import Layout from "./Layout.vue";
import Post from "./PostLayout.vue";
import { loadProgress } from "./composables/nprogress";
import "./style.css";
import "uno.css";
@ -8,7 +9,8 @@ import "uno.css";
export default {
extends: DefaultTheme,
Layout,
enhanceApp({ router }) {
enhanceApp({ router, app }) {
app.component("Post", Post);
loadProgress(router);
},
} satisfies Theme;

View File

@ -0,0 +1,30 @@
import { createContentLoader, type ContentData } from "vitepress";
import { groupBy } from "../utils";
interface Post {
title: string;
url: string;
date: string;
}
type Dictionary = ReturnType<typeof transformRawPosts>;
declare const data: Dictionary;
export { data };
function transformRawPosts(rawPosts: ContentData[]): Record<string, Post[]> {
const posts: Post[] = rawPosts
.map(({ url, frontmatter }) => ({
title: frontmatter.title,
url,
date: (frontmatter.date as Date).toISOString().slice(0, 10),
}))
.sort((a, b) => b.date.localeCompare(a.date));
return groupBy(posts, (post) => post.date.slice(0, 4));
}
export default createContentLoader("posts/*.md", {
includeSrc: true,
transform: (raw) => transformRawPosts(raw),
});

9
.vitepress/utils.ts Normal file
View File

@ -0,0 +1,9 @@
export function groupBy<T, K extends keyof any>(arr: T[], key: (i: T) => K): Record<K, T[]> {
return arr.reduce(
(groups, item) => {
(groups[key(item)] ||= []).push(item);
return groups;
},
{} as Record<K, T[]>,
);
}

View File

@ -1,11 +1,11 @@
---
title: "Welcome"
title: Welcome
layout: home
description: The largest collection of free stuff on the internet!
hero:
name: "FMHY"
text: "freemediaheckyeah"
name: FMHY
text: freemediaheckyeah
tagline: The largest collection of free stuff on the internet!
prelink:
title: ❄️ Monthly Updates [Dec]
@ -17,6 +17,9 @@ hero:
- theme: brand
text: Browse Collection
link: /adblockvpnguide
- theme: brand
text: Posts
link: /posts
- theme: alt
text: Discord
link: https://discord.gg/Stz6y6NgNg

View File

@ -18,13 +18,15 @@
"dependencies": {
"@headlessui/vue": "^1.7.16",
"@resvg/resvg-js": "^2.6.0",
"feed": "^4.2.2",
"fs-extra": "^11.2.0",
"itty-fetcher": "^0.9.4",
"nitro-cors": "^0.7.0",
"nitropack": "latest",
"nprogress": "^0.2.0",
"pathe": "^1.1.1",
"unocss": "^0.57.1",
"vitepress": "npm:@taskylizard/vitepress@1.0.3",
"vitepress": "npm:@taskylizard/vitepress@1.0.4",
"vue": "^3.3.7",
"x-satori": "^0.1.5",
"zod": "^3.22.4"
@ -33,6 +35,7 @@
"@iconify-json/carbon": "^1.1.21",
"@iconify-json/twemoji": "^1.1.12",
"@taskylizard/eslint-config": "^1.0.5",
"@types/fs-extra": "^11.0.4",
"@types/node": "^20.8.9",
"@types/nprogress": "^0.2.3",
"eslint": "^8.53.0",

View File

@ -11,6 +11,12 @@ dependencies:
'@resvg/resvg-js':
specifier: ^2.6.0
version: 2.6.0
feed:
specifier: ^4.2.2
version: 4.2.2
fs-extra:
specifier: ^11.2.0
version: 11.2.0
itty-fetcher:
specifier: ^0.9.4
version: 0.9.4
@ -30,8 +36,8 @@ dependencies:
specifier: ^0.57.1
version: 0.57.1(postcss@8.4.32)(vite@4.5.1)
vitepress:
specifier: npm:@taskylizard/vitepress@1.0.2
version: /@taskylizard/vitepress@1.0.2(@algolia/client-search@4.22.0)(@types/node@20.8.9)(nprogress@0.2.0)(postcss@8.4.32)(search-insights@2.13.0)(typescript@5.3.3)
specifier: latest
version: 1.0.0-rc.34(@types/node@20.8.9)(nprogress@0.2.0)(postcss@8.4.32)(search-insights@2.13.0)(typescript@5.3.3)
vue:
specifier: ^3.3.7
version: 3.3.7(typescript@5.3.3)
@ -52,6 +58,9 @@ devDependencies:
'@taskylizard/eslint-config':
specifier: ^1.0.5
version: 1.0.5(eslint-plugin-import@2.29.1)(eslint@8.53.0)(prettier@3.1.1)(typescript@5.3.3)
'@types/fs-extra':
specifier: ^11.0.4
version: 11.0.4
'@types/node':
specifier: ^20.8.9
version: 20.8.9
@ -72,47 +81,51 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0)(search-insights@2.13.0):
/@algolia/autocomplete-core@1.9.3(algoliasearch@4.20.0)(search-insights@2.13.0):
resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==}
dependencies:
'@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0)(search-insights@2.13.0)
'@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0)
'@algolia/autocomplete-plugin-algolia-insights': 1.9.3(algoliasearch@4.20.0)(search-insights@2.13.0)
'@algolia/autocomplete-shared': 1.9.3(algoliasearch@4.20.0)
transitivePeerDependencies:
- '@algolia/client-search'
- algoliasearch
- search-insights
dev: false
/@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0)(search-insights@2.13.0):
/@algolia/autocomplete-plugin-algolia-insights@1.9.3(algoliasearch@4.20.0)(search-insights@2.13.0):
resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==}
peerDependencies:
search-insights: '>= 1 < 3'
dependencies:
'@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0)
'@algolia/autocomplete-shared': 1.9.3(algoliasearch@4.20.0)
search-insights: 2.13.0
transitivePeerDependencies:
- '@algolia/client-search'
- algoliasearch
dev: false
/@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0):
/@algolia/autocomplete-preset-algolia@1.9.3(algoliasearch@4.20.0):
resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==}
peerDependencies:
'@algolia/client-search': '>= 4.9.1 < 6'
algoliasearch: '>= 4.9.1 < 6'
peerDependenciesMeta:
'@algolia/client-search':
optional: true
dependencies:
'@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0)
'@algolia/client-search': 4.22.0
'@algolia/autocomplete-shared': 1.9.3(algoliasearch@4.20.0)
algoliasearch: 4.20.0
dev: false
/@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0):
/@algolia/autocomplete-shared@1.9.3(algoliasearch@4.20.0):
resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==}
peerDependencies:
'@algolia/client-search': '>= 4.9.1 < 6'
algoliasearch: '>= 4.9.1 < 6'
peerDependenciesMeta:
'@algolia/client-search':
optional: true
dependencies:
'@algolia/client-search': 4.22.0
algoliasearch: 4.20.0
dev: false
@ -126,10 +139,6 @@ packages:
resolution: {integrity: sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==}
dev: false
/@algolia/cache-common@4.22.0:
resolution: {integrity: sha512-TPwUMlIGPN16eW67qamNQUmxNiGHg/WBqWcrOoCddhqNTqGDPVqmgfaM85LPbt24t3r1z0zEz/tdsmuq3Q6oaA==}
dev: false
/@algolia/cache-in-memory@4.20.0:
resolution: {integrity: sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==}
dependencies:
@ -160,13 +169,6 @@ packages:
'@algolia/transporter': 4.20.0
dev: false
/@algolia/client-common@4.22.0:
resolution: {integrity: sha512-BlbkF4qXVWuwTmYxVWvqtatCR3lzXwxx628p1wj1Q7QP2+LsTmGt1DiUYRuy9jG7iMsnlExby6kRMOOlbhv2Ag==}
dependencies:
'@algolia/requester-common': 4.22.0
'@algolia/transporter': 4.22.0
dev: false
/@algolia/client-personalization@4.20.0:
resolution: {integrity: sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==}
dependencies:
@ -183,22 +185,10 @@ packages:
'@algolia/transporter': 4.20.0
dev: false
/@algolia/client-search@4.22.0:
resolution: {integrity: sha512-bn4qQiIdRPBGCwsNuuqB8rdHhGKKWIij9OqidM1UkQxnSG8yzxHdb7CujM30pvp5EnV7jTqDZRbxacbjYVW20Q==}
dependencies:
'@algolia/client-common': 4.22.0
'@algolia/requester-common': 4.22.0
'@algolia/transporter': 4.22.0
dev: false
/@algolia/logger-common@4.20.0:
resolution: {integrity: sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==}
dev: false
/@algolia/logger-common@4.22.0:
resolution: {integrity: sha512-HMUQTID0ucxNCXs5d1eBJ5q/HuKg8rFVE/vOiLaM4Abfeq1YnTtGV3+rFEhOPWhRQxNDd+YHa4q864IMc0zHpQ==}
dev: false
/@algolia/logger-console@4.20.0:
resolution: {integrity: sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==}
dependencies:
@ -215,10 +205,6 @@ packages:
resolution: {integrity: sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==}
dev: false
/@algolia/requester-common@4.22.0:
resolution: {integrity: sha512-Y9cEH/cKjIIZgzvI1aI0ARdtR/xRrOR13g5psCxkdhpgRN0Vcorx+zePhmAa4jdQNqexpxtkUdcKYugBzMZJgQ==}
dev: false
/@algolia/requester-node-http@4.20.0:
resolution: {integrity: sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==}
dependencies:
@ -233,14 +219,6 @@ packages:
'@algolia/requester-common': 4.20.0
dev: false
/@algolia/transporter@4.22.0:
resolution: {integrity: sha512-ieO1k8x2o77GNvOoC+vAkFKppydQSVfbjM3YrSjLmgywiBejPTvU1R1nEvG59JIIUvtSLrZsLGPkd6vL14zopA==}
dependencies:
'@algolia/cache-common': 4.22.0
'@algolia/logger-common': 4.22.0
'@algolia/requester-common': 4.22.0
dev: false
/@ampproject/remapping@2.2.1:
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
engines: {node: '>=6.0.0'}
@ -475,10 +453,10 @@ packages:
resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==}
dev: false
/@docsearch/js@3.5.2(@algolia/client-search@4.22.0)(search-insights@2.13.0):
/@docsearch/js@3.5.2(search-insights@2.13.0):
resolution: {integrity: sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==}
dependencies:
'@docsearch/react': 3.5.2(@algolia/client-search@4.22.0)(search-insights@2.13.0)
'@docsearch/react': 3.5.2(search-insights@2.13.0)
preact: 10.18.1
transitivePeerDependencies:
- '@algolia/client-search'
@ -488,7 +466,7 @@ packages:
- search-insights
dev: false
/@docsearch/react@3.5.2(@algolia/client-search@4.22.0)(search-insights@2.13.0):
/@docsearch/react@3.5.2(search-insights@2.13.0):
resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==}
peerDependencies:
'@types/react': '>= 16.8.0 < 19.0.0'
@ -505,8 +483,8 @@ packages:
search-insights:
optional: true
dependencies:
'@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0)(search-insights@2.13.0)
'@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.20.0)
'@algolia/autocomplete-core': 1.9.3(algoliasearch@4.20.0)(search-insights@2.13.0)
'@algolia/autocomplete-preset-algolia': 1.9.3(algoliasearch@4.20.0)
'@docsearch/css': 3.5.2
algoliasearch: 4.20.0
search-insights: 2.13.0
@ -1745,62 +1723,6 @@ packages:
- supports-color
dev: true
/@taskylizard/vitepress@1.0.2(@algolia/client-search@4.22.0)(@types/node@20.8.9)(nprogress@0.2.0)(postcss@8.4.32)(search-insights@2.13.0)(typescript@5.3.3):
resolution: {integrity: sha512-u5QZDff8VRDV7LP8U9/IDDbMNrCn524uD4jr77wj7LGHs2KT5B6psZUGsEs54FEfdNT+8P1Fh+0hNjGU4jAarg==}
hasBin: true
peerDependencies:
markdown-it-mathjax3: ^4.3.2
postcss: ^8.4.32
peerDependenciesMeta:
markdown-it-mathjax3:
optional: true
postcss:
optional: true
dependencies:
'@docsearch/css': 3.5.2
'@docsearch/js': 3.5.2(@algolia/client-search@4.22.0)(search-insights@2.13.0)
'@types/markdown-it': 13.0.7
'@vitejs/plugin-vue': 4.5.2(vite@5.0.10)(vue@3.3.13)
'@vue/devtools-api': 6.5.1
'@vueuse/core': 10.7.0(vue@3.3.13)
'@vueuse/integrations': 10.7.0(focus-trap@7.5.4)(nprogress@0.2.0)(vue@3.3.13)
focus-trap: 7.5.4
mark.js: 8.11.1
minisearch: 6.3.0
mrmime: 1.0.1
postcss: 8.4.32
shikiji: 0.9.10
shikiji-transformers: 0.9.10
vite: 5.0.10(@types/node@20.8.9)
vue: 3.3.13(typescript@5.3.3)
transitivePeerDependencies:
- '@algolia/client-search'
- '@types/node'
- '@types/react'
- '@vue/composition-api'
- async-validator
- axios
- change-case
- drauu
- fuse.js
- idb-keyval
- jwt-decode
- less
- lightningcss
- nprogress
- qrcode
- react
- react-dom
- sass
- search-insights
- sortablejs
- stylus
- sugarss
- terser
- typescript
- universal-cookie
dev: false
/@types/eslint@8.44.7:
resolution: {integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==}
dependencies:
@ -1811,6 +1733,13 @@ packages:
/@types/estree@1.0.3:
resolution: {integrity: sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==}
/@types/fs-extra@11.0.4:
resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
dependencies:
'@types/jsonfile': 6.1.4
'@types/node': 20.8.9
dev: true
/@types/http-proxy@1.17.13:
resolution: {integrity: sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw==}
dependencies:
@ -1825,6 +1754,12 @@ packages:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
dev: true
/@types/jsonfile@6.1.4:
resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
dependencies:
'@types/node': 20.8.9
dev: true
/@types/linkify-it@3.0.4:
resolution: {integrity: sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==}
dev: false
@ -2301,24 +2236,15 @@ packages:
- supports-color
dev: false
/@vitejs/plugin-vue@4.5.2(vite@5.0.10)(vue@3.3.13):
resolution: {integrity: sha512-UGR3DlzLi/SaVBPX0cnSyE37vqxU3O6chn8l0HJNzQzDia6/Au2A4xKv+iIJW8w2daf80G7TYHhi1pAUjdZ0bQ==}
engines: {node: ^14.18.0 || >=16.0.0}
/@vitejs/plugin-vue@5.0.2(vite@5.0.10)(vue@3.4.3):
resolution: {integrity: sha512-kEjJHrLb5ePBvjD0SPZwJlw1QTRcjjCA9sB5VyfonoXVBxTS7TMnqL6EkLt1Eu61RDeiuZ/WN9Hf6PxXhPI2uA==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^4.0.0 || ^5.0.0
vite: ^5.0.0
vue: ^3.2.25
dependencies:
vite: 5.0.10(@types/node@20.8.9)
vue: 3.3.13(typescript@5.3.3)
dev: false
/@vue/compiler-core@3.3.13:
resolution: {integrity: sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A==}
dependencies:
'@babel/parser': 7.23.6
'@vue/shared': 3.3.13
estree-walker: 2.0.2
source-map-js: 1.0.2
vue: 3.4.3(typescript@5.3.3)
dev: false
/@vue/compiler-core@3.3.7:
@ -2330,11 +2256,14 @@ packages:
source-map-js: 1.0.2
dev: false
/@vue/compiler-dom@3.3.13:
resolution: {integrity: sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw==}
/@vue/compiler-core@3.4.3:
resolution: {integrity: sha512-u8jzgFg0EDtSrb/hG53Wwh1bAOQFtc1ZCegBpA/glyvTlgHl+tq13o1zvRfLbegYUw/E4mSTGOiCnAJ9SJ+lsg==}
dependencies:
'@vue/compiler-core': 3.3.13
'@vue/shared': 3.3.13
'@babel/parser': 7.23.6
'@vue/shared': 3.4.3
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.0.2
dev: false
/@vue/compiler-dom@3.3.7:
@ -2344,19 +2273,11 @@ packages:
'@vue/shared': 3.3.7
dev: false
/@vue/compiler-sfc@3.3.13:
resolution: {integrity: sha512-DQVmHEy/EKIgggvnGRLx21hSqnr1smUS9Aq8tfxiiot8UR0/pXKHN9k78/qQ7etyQTFj5em5nruODON7dBeumw==}
/@vue/compiler-dom@3.4.3:
resolution: {integrity: sha512-oGF1E9/htI6JWj/lTJgr6UgxNCtNHbM6xKVreBWeZL9QhRGABRVoWGAzxmtBfSOd+w0Zi5BY0Es/tlJrN6WgEg==}
dependencies:
'@babel/parser': 7.23.6
'@vue/compiler-core': 3.3.13
'@vue/compiler-dom': 3.3.13
'@vue/compiler-ssr': 3.3.13
'@vue/reactivity-transform': 3.3.13
'@vue/shared': 3.3.13
estree-walker: 2.0.2
magic-string: 0.30.5
postcss: 8.4.32
source-map-js: 1.0.2
'@vue/compiler-core': 3.4.3
'@vue/shared': 3.4.3
dev: false
/@vue/compiler-sfc@3.3.7:
@ -2374,11 +2295,18 @@ packages:
source-map-js: 1.0.2
dev: false
/@vue/compiler-ssr@3.3.13:
resolution: {integrity: sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw==}
/@vue/compiler-sfc@3.4.3:
resolution: {integrity: sha512-NuJqb5is9I4uzv316VRUDYgIlPZCG8D+ARt5P4t5UDShIHKL25J3TGZAUryY/Aiy0DsY7srJnZL5ryB6DD63Zw==}
dependencies:
'@vue/compiler-dom': 3.3.13
'@vue/shared': 3.3.13
'@babel/parser': 7.23.6
'@vue/compiler-core': 3.4.3
'@vue/compiler-dom': 3.4.3
'@vue/compiler-ssr': 3.4.3
'@vue/shared': 3.4.3
estree-walker: 2.0.2
magic-string: 0.30.5
postcss: 8.4.32
source-map-js: 1.0.2
dev: false
/@vue/compiler-ssr@3.3.7:
@ -2388,18 +2316,15 @@ packages:
'@vue/shared': 3.3.7
dev: false
/@vue/devtools-api@6.5.1:
resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
/@vue/compiler-ssr@3.4.3:
resolution: {integrity: sha512-wnYQtMBkeFSxgSSQbYGQeXPhQacQiog2c6AlvMldQH6DB+gSXK/0F6DVXAJfEiuBSgBhUc8dwrrG5JQcqwalsA==}
dependencies:
'@vue/compiler-dom': 3.4.3
'@vue/shared': 3.4.3
dev: false
/@vue/reactivity-transform@3.3.13:
resolution: {integrity: sha512-oWnydGH0bBauhXvh5KXUy61xr9gKaMbtsMHk40IK9M4gMuKPJ342tKFarY0eQ6jef8906m35q37wwA8DMZOm5Q==}
dependencies:
'@babel/parser': 7.23.6
'@vue/compiler-core': 3.3.13
'@vue/shared': 3.3.13
estree-walker: 2.0.2
magic-string: 0.30.5
/@vue/devtools-api@6.5.1:
resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
dev: false
/@vue/reactivity-transform@3.3.7:
@ -2412,23 +2337,16 @@ packages:
magic-string: 0.30.5
dev: false
/@vue/reactivity@3.3.13:
resolution: {integrity: sha512-fjzCxceMahHhi4AxUBzQqqVhuA21RJ0COaWTbIBl1PruGW1CeY97louZzLi4smpYx+CHfFPPU/CS8NybbGvPKQ==}
dependencies:
'@vue/shared': 3.3.13
dev: false
/@vue/reactivity@3.3.7:
resolution: {integrity: sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==}
dependencies:
'@vue/shared': 3.3.7
dev: false
/@vue/runtime-core@3.3.13:
resolution: {integrity: sha512-1TzA5TvGuh2zUwMJgdfvrBABWZ7y8kBwBhm7BXk8rvdx2SsgcGfz2ruv2GzuGZNvL1aKnK8CQMV/jFOrxNQUMA==}
/@vue/reactivity@3.4.3:
resolution: {integrity: sha512-q5f9HLDU+5aBKizXHAx0w4whkIANs1Muiq9R5YXm0HtorSlflqv9u/ohaMxuuhHWCji4xqpQ1eL04WvmAmGnFg==}
dependencies:
'@vue/reactivity': 3.3.13
'@vue/shared': 3.3.13
'@vue/shared': 3.4.3
dev: false
/@vue/runtime-core@3.3.7:
@ -2438,12 +2356,11 @@ packages:
'@vue/shared': 3.3.7
dev: false
/@vue/runtime-dom@3.3.13:
resolution: {integrity: sha512-JJkpE8R/hJKXqVTgUoODwS5wqKtOsmJPEqmp90PDVGygtJ4C0PtOkcEYXwhiVEmef6xeXcIlrT3Yo5aQ4qkHhQ==}
/@vue/runtime-core@3.4.3:
resolution: {integrity: sha512-C1r6QhB1qY7D591RCSFhMULyzL9CuyrGc+3PpB0h7dU4Qqw6GNyo4BNFjHZVvsWncrUlKX3DIKg0Y7rNNr06NQ==}
dependencies:
'@vue/runtime-core': 3.3.13
'@vue/shared': 3.3.13
csstype: 3.1.3
'@vue/reactivity': 3.4.3
'@vue/shared': 3.4.3
dev: false
/@vue/runtime-dom@3.3.7:
@ -2454,14 +2371,12 @@ packages:
csstype: 3.1.2
dev: false
/@vue/server-renderer@3.3.13(vue@3.3.13):
resolution: {integrity: sha512-vSnN+nuf6iSqTL3Qgx/9A+BT+0Zf/VJOgF5uMZrKjYPs38GMYyAU1coDyBNHauehXDaP+zl73VhwWv0vBRBHcg==}
peerDependencies:
vue: 3.3.13
/@vue/runtime-dom@3.4.3:
resolution: {integrity: sha512-wrsprg7An5Ec+EhPngWdPuzkp0BEUxAKaQtN9dPU/iZctPyD9aaXmVtehPJerdQxQale6gEnhpnfywNw3zOv2A==}
dependencies:
'@vue/compiler-ssr': 3.3.13
'@vue/shared': 3.3.13
vue: 3.3.13(typescript@5.3.3)
'@vue/runtime-core': 3.4.3
'@vue/shared': 3.4.3
csstype: 3.1.3
dev: false
/@vue/server-renderer@3.3.7(vue@3.3.7):
@ -2474,28 +2389,38 @@ packages:
vue: 3.3.7(typescript@5.3.3)
dev: false
/@vue/shared@3.3.13:
resolution: {integrity: sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA==}
/@vue/server-renderer@3.4.3(vue@3.4.3):
resolution: {integrity: sha512-BUxt8oVGMKKsqSkM1uU3d3Houyfy4WAc2SpSQRebNd+XJGATVkW/rO129jkyL+kpB/2VRKzE63zwf5RtJ3XuZw==}
peerDependencies:
vue: 3.4.3
dependencies:
'@vue/compiler-ssr': 3.4.3
'@vue/shared': 3.4.3
vue: 3.4.3(typescript@5.3.3)
dev: false
/@vue/shared@3.3.7:
resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==}
dev: false
/@vueuse/core@10.7.0(vue@3.3.13):
resolution: {integrity: sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==}
/@vue/shared@3.4.3:
resolution: {integrity: sha512-rIwlkkP1n4uKrRzivAKPZIEkHiuwY5mmhMJ2nZKCBLz8lTUlE73rQh4n1OnnMurXt1vcUNyH4ZPfdh8QweTjpQ==}
dev: false
/@vueuse/core@10.7.1(vue@3.4.3):
resolution: {integrity: sha512-74mWHlaesJSWGp1ihg76vAnfVq9NTv1YT0SYhAQ6zwFNdBkkP+CKKJmVOEHcdSnLXCXYiL5e7MaewblfiYLP7g==}
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.7.0
'@vueuse/shared': 10.7.0(vue@3.3.13)
vue-demi: 0.14.6(vue@3.3.13)
'@vueuse/metadata': 10.7.1
'@vueuse/shared': 10.7.1(vue@3.4.3)
vue-demi: 0.14.6(vue@3.4.3)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: false
/@vueuse/integrations@10.7.0(focus-trap@7.5.4)(nprogress@0.2.0)(vue@3.3.13):
resolution: {integrity: sha512-rxiMYgS+91n93qXpHZF9NbHhppWY6IJyVTDxt4acyChL0zZVx7P8FAAfpF1qVK8e4wfjerhpEiMJ0IZ1GWUZ2A==}
/@vueuse/integrations@10.7.1(focus-trap@7.5.4)(nprogress@0.2.0)(vue@3.4.3):
resolution: {integrity: sha512-cKo5LEeKVHdBRBtMTOrDPdR0YNtrmN9IBfdcnY2P3m5LHVrsD0xiHUtAH1WKjHQRIErZG6rJUa6GA4tWZt89Og==}
peerDependencies:
async-validator: '*'
axios: '*'
@ -2535,24 +2460,24 @@ packages:
universal-cookie:
optional: true
dependencies:
'@vueuse/core': 10.7.0(vue@3.3.13)
'@vueuse/shared': 10.7.0(vue@3.3.13)
'@vueuse/core': 10.7.1(vue@3.4.3)
'@vueuse/shared': 10.7.1(vue@3.4.3)
focus-trap: 7.5.4
nprogress: 0.2.0
vue-demi: 0.14.6(vue@3.3.13)
vue-demi: 0.14.6(vue@3.4.3)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: false
/@vueuse/metadata@10.7.0:
resolution: {integrity: sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==}
/@vueuse/metadata@10.7.1:
resolution: {integrity: sha512-jX8MbX5UX067DYVsbtrmKn6eG6KMcXxLRLlurGkZku5ZYT3vxgBjui2zajvUZ18QLIjrgBkFRsu7CqTAg18QFw==}
dev: false
/@vueuse/shared@10.7.0(vue@3.3.13):
resolution: {integrity: sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==}
/@vueuse/shared@10.7.1(vue@3.4.3):
resolution: {integrity: sha512-v0jbRR31LSgRY/C5i5X279A/WQjD6/JsMzGa+eqt658oJ75IvQXAeONmwvEMrvJQKnRElq/frzBR7fhmWY5uLw==}
dependencies:
vue-demi: 0.14.6(vue@3.3.13)
vue-demi: 0.14.6(vue@3.4.3)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@ -3485,6 +3410,11 @@ packages:
tapable: 2.2.1
dev: true
/entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
dev: false
/error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
@ -4331,6 +4261,13 @@ packages:
dependencies:
reusify: 1.0.4
/feed@4.2.2:
resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==}
engines: {node: '>=0.4.0'}
dependencies:
xml-js: 1.6.11
dev: false
/fflate@0.7.4:
resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==}
dev: false
@ -4422,8 +4359,8 @@ packages:
engines: {node: '>= 0.6'}
dev: false
/fs-extra@11.1.1:
resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
/fs-extra@11.2.0:
resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
engines: {node: '>=14.14'}
dependencies:
graceful-fs: 4.2.11
@ -5533,6 +5470,11 @@ packages:
engines: {node: '>=10'}
dev: false
/mrmime@2.0.0:
resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
engines: {node: '>=10'}
dev: false
/ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
dev: false
@ -5610,7 +5552,7 @@ packages:
esbuild: 0.19.5
escape-string-regexp: 5.0.0
etag: 1.8.1
fs-extra: 11.1.1
fs-extra: 11.2.0
globby: 13.2.2
gzip-size: 7.0.0
h3: 1.8.2
@ -6424,6 +6366,10 @@ packages:
yoga-wasm-web: 0.3.3
dev: false
/sax@1.3.0:
resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
dev: false
/scule@1.0.0:
resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==}
dev: false
@ -6529,20 +6475,20 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
/shikiji-core@0.9.10:
resolution: {integrity: sha512-s+aC66Fh343wpm7VyQTg+htdHM/tUb8R+yxdAdUpCtKkRWbSBIpqQ3xTSNjbCTnGv10xsT164SW0r1VV1N6ToA==}
/shikiji-core@0.9.15:
resolution: {integrity: sha512-7hqIcUKS15OMs/61Qp2GvO1fSajBB36bDqi8vexIg5kp80V6v6SGtBrlq+nLlo7erMG2d1kvIuTIq1bwKI6fEg==}
dev: false
/shikiji-transformers@0.9.10:
resolution: {integrity: sha512-qK/7dudmgdwUHHKrFGTsuSrOrvAj+uKPeyipc+TuDRGtCwSwnviQRW/zI1YFkQdwVjz3s2FM+T2kQ6mvPWZWvQ==}
/shikiji-transformers@0.9.15:
resolution: {integrity: sha512-k0sQ6tX26/cdb8QV9CCwwr7QjRp6/AVP9C0oNIXNld3of+xCrpf74kD74piybG6vMfzBoHGsz/s60RVBJOUaYQ==}
dependencies:
shikiji: 0.9.10
shikiji: 0.9.15
dev: false
/shikiji@0.9.10:
resolution: {integrity: sha512-tqnoSWWb7NailWJ/72Bgi8Z5O+ul71SJ5EhXbfHprZg67RGwck5eVyv5Uv4pso06ZuzNpUabRTyyFKHN/Ea9Mw==}
/shikiji@0.9.15:
resolution: {integrity: sha512-+inN4cN+nY7b0uCPOiqFHAk+cn2DEdM3AIQgPhAV7QKqhww/o7OGS5xvLh3SNnjke9C/HispALqGOQGYHVq7KQ==}
dependencies:
shikiji-core: 0.9.10
shikiji-core: 0.9.15
dev: false
/side-channel@1.0.4:
@ -7320,7 +7266,64 @@ packages:
fsevents: 2.3.3
dev: false
/vue-demi@0.14.6(vue@3.3.13):
/vitepress@1.0.0-rc.34(@types/node@20.8.9)(nprogress@0.2.0)(postcss@8.4.32)(search-insights@2.13.0)(typescript@5.3.3):
resolution: {integrity: sha512-TUbTiSdAZFni2XlHlpx61KikgkQ5uG4Wtmw2R0SXhIOG6qGqzDJczAFjkMc4i45I9c3KyatwOYe8oEfCnzVYwQ==}
hasBin: true
peerDependencies:
markdown-it-mathjax3: ^4.3.2
postcss: ^8.4.32
peerDependenciesMeta:
markdown-it-mathjax3:
optional: true
postcss:
optional: true
dependencies:
'@docsearch/css': 3.5.2
'@docsearch/js': 3.5.2(search-insights@2.13.0)
'@types/markdown-it': 13.0.7
'@vitejs/plugin-vue': 5.0.2(vite@5.0.10)(vue@3.4.3)
'@vue/devtools-api': 6.5.1
'@vueuse/core': 10.7.1(vue@3.4.3)
'@vueuse/integrations': 10.7.1(focus-trap@7.5.4)(nprogress@0.2.0)(vue@3.4.3)
focus-trap: 7.5.4
mark.js: 8.11.1
minisearch: 6.3.0
mrmime: 2.0.0
postcss: 8.4.32
shikiji: 0.9.15
shikiji-core: 0.9.15
shikiji-transformers: 0.9.15
vite: 5.0.10(@types/node@20.8.9)
vue: 3.4.3(typescript@5.3.3)
transitivePeerDependencies:
- '@algolia/client-search'
- '@types/node'
- '@types/react'
- '@vue/composition-api'
- async-validator
- axios
- change-case
- drauu
- fuse.js
- idb-keyval
- jwt-decode
- less
- lightningcss
- nprogress
- qrcode
- react
- react-dom
- sass
- search-insights
- sortablejs
- stylus
- sugarss
- terser
- typescript
- universal-cookie
dev: false
/vue-demi@0.14.6(vue@3.4.3):
resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
engines: {node: '>=12'}
hasBin: true
@ -7332,7 +7335,7 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
vue: 3.3.13(typescript@5.3.3)
vue: 3.4.3(typescript@5.3.3)
dev: false
/vue-eslint-parser@9.3.2(eslint@8.53.0):
@ -7353,22 +7356,6 @@ packages:
- supports-color
dev: true
/vue@3.3.13(typescript@5.3.3):
resolution: {integrity: sha512-LDnUpQvDgsfc0u/YgtAgTMXJlJQqjkxW1PVcOnJA5cshPleULDjHi7U45pl2VJYazSSvLH8UKcid/kzH8I0a0Q==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@vue/compiler-dom': 3.3.13
'@vue/compiler-sfc': 3.3.13
'@vue/runtime-dom': 3.3.13
'@vue/server-renderer': 3.3.13(vue@3.3.13)
'@vue/shared': 3.3.13
typescript: 5.3.3
dev: false
/vue@3.3.7(typescript@5.3.3):
resolution: {integrity: sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==}
peerDependencies:
@ -7385,6 +7372,22 @@ packages:
typescript: 5.3.3
dev: false
/vue@3.4.3(typescript@5.3.3):
resolution: {integrity: sha512-GjN+culMAGv/mUbkIv8zMKItno8npcj5gWlXkSxf1SPTQf8eJ4A+YfHIvQFyL1IfuJcMl3soA7SmN1fRxbf/wA==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@vue/compiler-dom': 3.4.3
'@vue/compiler-sfc': 3.4.3
'@vue/runtime-dom': 3.4.3
'@vue/server-renderer': 3.4.3(vue@3.4.3)
'@vue/shared': 3.4.3
typescript: 5.3.3
dev: false
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
dev: false
@ -7492,6 +7495,13 @@ packages:
- supports-color
dev: false
/xml-js@1.6.11:
resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==}
hasBin: true
dependencies:
sax: 1.3.0
dev: false
/xml-name-validator@4.0.0:
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
engines: {node: '>=12'}

12
posts.md Normal file
View File

@ -0,0 +1,12 @@
---
sidebar: false
editLink: false
outline: false
next: false
---
<script setup>
import Index from './.vitepress/theme/Posts.vue'
</script>
<Index/>

79
posts/dec-2023.md Normal file
View File

@ -0,0 +1,79 @@
---
title: Monthly Updates / Discussion [Dec 2023 ❄️] 250k members!!
description: Thank you all for 250K members! ♡
date: 2023-12-01
next: false
---
<Post authors="['nbats', 'taskylizard']" />
***
**Wiki Updates**
- Separated Tool sections into their own pages: [System Tools](https://fmhy.net/system-tools), [File Tools](https://fmhy.net/file-tools), [Internet Tools](https://fmhy.net/internet-tools), [Text Tools](https://fmhy.net/text-tools), [Video Tools](https://fmhy.net/video-tools) and [Audio Tools](https://fmhy.net/audio-tools).
- Separated Health into subsections: [Mental](https://fmhy.net/miscguide#mental-health), [Physical](https://fmhy.net/miscguide#physical-health), [Nutritional](https://fmhy.net/miscguide#nutritional-health), [Sexual](https://fmhy.net/miscguide#sexual-health) and [Detoxing](https://fmhy.net/miscguide#detoxing).
- Added a section for [Open-Source Games](https://fmhy.net/gamingpiracyguide#open-source-games) in Gaming.
- Added a section for [Animation Tools](https://fmhy.net/video-tools#animation-tools) in Video Tools.
- Added a section for [Academic Papers](https://fmhy.net/readingpiracyguide#academic-papers) in Educational Reading.
- Added sections for [Illustrations](https://fmhy.net/img-tools#illustrations) and [Textures / Patterns](https://fmhy.net/storage#textures-patterns) in Images.
- Added sections in Linux for [Video](https://fmhy.net/linuxguide#linux-video), [Audio](https://fmhy.net/linuxguide#linux-audio), [Images](https://fmhy.net/linuxguide#linux-images) and [File Tools](https://fmhy.net/linuxguide#file-tools).
- Made a ["safe for work"](https://rentry.org/piracy) version of our index with no NSFW link listed.
- Added a [collapsible list](https://i.imgur.com/wnOXvKG.png) of all the Tool sections to our sites sidebar.
***
**Stars Added** ⭐
- Starred [Streamflix](https://fmhy.net/videopiracyguide#multi-server) in Streaming Sites. Nice UI, fast 1080p, ran by members of our community.
- Starred [watch.lonelil](https://fmhy.net/videopiracyguide#multi-server) in Streaming Sites. Nice UI, fast 4K + 1080p, live tv.
- Starred [Game Bounty](https://fmhy.net/gamingpiracyguide#download-games) in Game Download. Fast hosts, pre-installs, clean uploads, ran by members of our community.
- Starred [AbandonwareGames](https://fmhy.net/storage#abandonware-games) in Abandonware Games. Nice site with a big library of oldschool games.
- Starred [Heroic Games Launcher](https://fmhy.net/gamingpiracyguide#steam-epic) in Steam / Epic. Open-source Epic Games launcher.
- Starred [TG Archive](https://fmhy.net/downloadpiracyguide#download-directories) in Download Directories. Telegram file archive + search tool.
- Starred [BleachBit](https://fmhy.net/system-tools#system-debloating) in system debloating. Popular system file cleaning tool.
- Starred [YT-DLP-GUI](https://fmhy.net/video-tools#youtube-download) in YouTube Download. Nice GUI for YT-DL with single click installer.
- Starred [EverythingToolbar](https://fmhy.net/system-tools#system-tweaks) in System Tweaks. Adds lots of features to Windows toolbar.
- Starred [DeepL](https://fmhy.net/text-tools#translators) in Translators. People feel this gives some of the best results.
- Starred [Magpie](https://fmhy.net/gamingpiracyguide#optimization-tools) in Gaming Optimization. Enable AMD FSR on any game or device.
- Starred [TrollStore](https://fmhy.net/android-iosguide#ios-apps) in iOS Apps. Permanently install non-appstore iOS apps w/o pc, paid dev account or being jailbroken.
- Starred [SmartTube](https://fmhy.net/videopiracyguide#smart-tv-firestick) in Smart TV / Firestick. Ad-free YouTube app. Previously called SmartTubeNext.
***
**Things Removed**
- Removed both AppsTorrent and nMac as they're listed as unsafe by [MacSerialJunkie](https://i.imgur.com/De9u5Ox.png).
- Removed both LocalCDN and Decentraleyes as they're redundant with with [Total Cookie Protection](https://blog.privacyguides.org/2021/12/01/firefox-privacy-2021-update/#localcdn-and-decentraleyes) enabled.
- Removed NovaAI as they've [decided to shutdown](https://www.reddit.com/r/Piracy/comments/17pzrzj/nova_oss_the_api_that_provided_free_gpt4_and/).
- Replaced all CurseForge links with Modrinth as people feel CurseForge [doesn't cooperate](https://youtu.be/Vhdwz5apiQQ?si=xgzkQFa1S7hZNa5-) with their user-base well.
- Unstarred 12ft.io as it can no longer bypass non-javascript based paywalls.
- Removed FileListing as they've shutdown their servers.
- Removed GreaseMonkey as it hasn't been updated in 3 years + has a possible history of tracking users.
***