diff --git a/.vitepress/hooks/opengraph.ts b/.vitepress/hooks/opengraph.ts index 9e10b900a..3ce54d47f 100644 --- a/.vitepress/hooks/opengraph.ts +++ b/.vitepress/hooks/opengraph.ts @@ -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 { 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 { const { frontmatter, url } = page; const options: SatoriOptions = { diff --git a/.vitepress/rss.ts b/.vitepress/rss.ts new file mode 100644 index 000000000..d013d7011 --- /dev/null +++ b/.vitepress/rss.ts @@ -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()); +} diff --git a/.vitepress/theme/Layout.vue b/.vitepress/theme/Layout.vue index ed1359982..e855ff916 100644 --- a/.vitepress/theme/Layout.vue +++ b/.vitepress/theme/Layout.vue @@ -1,9 +1,9 @@ + + diff --git a/.vitepress/theme/Posts.vue b/.vitepress/theme/Posts.vue new file mode 100644 index 000000000..f1c915d5c --- /dev/null +++ b/.vitepress/theme/Posts.vue @@ -0,0 +1,37 @@ + + + + diff --git a/.vitepress/theme/components/Authors.vue b/.vitepress/theme/components/Authors.vue new file mode 100644 index 000000000..f50f25424 --- /dev/null +++ b/.vitepress/theme/components/Authors.vue @@ -0,0 +1,43 @@ + + + diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index b0c8eac14..72b810a01 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -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; diff --git a/.vitepress/theme/posts.data.ts b/.vitepress/theme/posts.data.ts new file mode 100644 index 000000000..b70818c3c --- /dev/null +++ b/.vitepress/theme/posts.data.ts @@ -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; + +declare const data: Dictionary; +export { data }; + +function transformRawPosts(rawPosts: ContentData[]): Record { + 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), +}); diff --git a/.vitepress/utils.ts b/.vitepress/utils.ts new file mode 100644 index 000000000..6d13d9416 --- /dev/null +++ b/.vitepress/utils.ts @@ -0,0 +1,9 @@ +export function groupBy(arr: T[], key: (i: T) => K): Record { + return arr.reduce( + (groups, item) => { + (groups[key(item)] ||= []).push(item); + return groups; + }, + {} as Record, + ); +} diff --git a/index.md b/index.md index 9b94d67db..c0389c024 100644 --- a/index.md +++ b/index.md @@ -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 diff --git a/package.json b/package.json index 1bb397f09..4b0cf577f 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec23f417a..c5f6f8b33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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'} diff --git a/posts.md b/posts.md new file mode 100644 index 000000000..38c89e35d --- /dev/null +++ b/posts.md @@ -0,0 +1,12 @@ +--- +sidebar: false +editLink: false +outline: false +next: false +--- + + + + diff --git a/posts/dec-2023.md b/posts/dec-2023.md new file mode 100644 index 000000000..475e898c3 --- /dev/null +++ b/posts/dec-2023.md @@ -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 +--- + + +*** + +**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. + +***