diff --git a/README.md b/README.md index d3b72de24..176027537 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Omorphia -*The Modrinth component library, in Svelte* +_The Modrinth component library, in Svelte_ --- @@ -8,6 +8,8 @@ Learn more at [omorphia.modrinth.com.](https://omorphia.modrinth.com) +Requires Node v16.5+. + ## Developing The library lives in the `src/package` folder, and the documentation lives in the `src/routes` folder. @@ -29,4 +31,4 @@ To build the documentation site, run: ```bash pnpm build -``` \ No newline at end of file +``` diff --git a/package.json b/package.json index dd82d5ad6..deabc2011 100644 --- a/package.json +++ b/package.json @@ -1,82 +1,87 @@ { - "name": "omorphia", - "version": "0.0.19", - "description": "A beautiful Svelte component & style library", - "scripts": { - "dev": "svelte-kit dev", - "build": "svelte-kit build", - "package": "svelte-kit package", - "preview": "svelte-kit preview", - "prepare": "svelte-kit sync", - "generate": "node scripts/generate.cjs", - "generate:watch": "nodemon --watch app --watch libs app/server.js", - "check": "svelte-check --tsconfig ./tsconfig.json", - "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .", - "format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ." - }, - "devDependencies": { - "@sveltejs/adapter-static": "^1.0.0-next.29", - "@sveltejs/kit": "next", - "@typescript-eslint/eslint-plugin": "^5.10.1", - "@typescript-eslint/parser": "^5.10.1", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-svelte3": "^3.2.1", - "mdsvex": "^0.10.5", - "mdsvexamples": "^0.3.0", - "nodemon": "^2.0.15", - "sveld": "^0.13.4", - "svelte": "^3.48.0", - "svelte-check": "^2.2.6", - "svelte-preprocess": "^4.10.1", - "svelte2tsx": "^0.5.5", - "tslib": "^2.3.1", - "typescript": "~4.6.2" - }, - "type": "module", - "svelte": "index.js", - "repository": { - "type": "git", - "url": "https://github.com/modrinth/omorphia.git" - }, - "keywords": [ - "UI", - "framework", - "components", - "library" - ], - "license": "MIT", - "bugs": { - "url": "https://github.com/modrinth/omorphia/issues" - }, - "homepage": "https://omorphia.modrinth.com", - "dependencies": { - "@iconify-json/carbon": "^1.1.1", - "@iconify-json/fa-regular": "^1.1.1", - "@iconify-json/heroicons-outline": "^1.1.1", - "@iconify-json/heroicons-solid": "^1.1.1", - "@iconify-json/lucide": "^1.1.7", - "@poppanator/sveltekit-svg": "^0.3.1", - "autoprefixer": "^10.4.2", - "cssnano": "^5.1.1", - "highlight.js": "^11.5.0", - "insane": "^2.6.2", - "marked": "^4.0.12", - "postcss": "^8.4.8", - "postcss-easy-import": "^4.0.0", - "postcss-extend-rule": "^4.0.0", - "postcss-import": "^14.0.2", - "postcss-import-ext-glob": "^2.0.1", - "postcss-load-config": "^3.1.4", - "postcss-nested": "^5.0.6", - "postcss-preset-env": "^7.4.2", - "postcss-pxtorem": "^6.0.0", - "postcss-strip-inline-comments": "^0.1.5", - "sanitize.css": "^13.0.0", - "svelte-tiny-virtual-list": "^2.0.1", - "svelte-use-click-outside": "^1.0.0", - "throttle-debounce": "^3.0.1", - "unplugin-icons": "^0.13.3" - } + "name": "omorphia", + "version": "0.0.19", + "description": "A beautiful Svelte component & style library", + "scripts": { + "dev": "svelte-kit dev", + "build": "svelte-kit build", + "package": "svelte-kit package", + "preview": "svelte-kit preview", + "prepare": "svelte-kit sync", + "generate": "node scripts/generate.cjs", + "generate:watch": "nodemon --watch app --watch libs app/server.js", + "check": "svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .", + "format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. ." + }, + "devDependencies": { + "@sveltejs/adapter-static": "^1.0.0-next.29", + "@sveltejs/kit": "next", + "@typescript-eslint/eslint-plugin": "^5.10.1", + "@typescript-eslint/parser": "^5.10.1", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-svelte3": "^3.2.1", + "mdsvex": "^0.10.5", + "mdsvexamples": "^0.3.0", + "nodemon": "^2.0.15", + "prettier": "^2.6.2", + "sveld": "^0.13.4", + "svelte": "^3.48.0", + "svelte-check": "^2.2.6", + "svelte-preprocess": "^4.10.1", + "svelte2tsx": "^0.5.5", + "tslib": "^2.3.1", + "typescript": "~4.6.2" + }, + "type": "module", + "svelte": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/modrinth/omorphia.git" + }, + "keywords": [ + "UI", + "framework", + "components", + "library" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/modrinth/omorphia/issues" + }, + "homepage": "https://omorphia.modrinth.com", + "dependencies": { + "@iconify-json/carbon": "^1.1.1", + "@iconify-json/fa-regular": "^1.1.1", + "@iconify-json/heroicons-outline": "^1.1.1", + "@iconify-json/heroicons-solid": "^1.1.1", + "@iconify-json/lucide": "^1.1.7", + "@poppanator/sveltekit-svg": "^0.3.1", + "autoprefixer": "^10.4.2", + "cli-progress": "^3.11.1", + "cssnano": "^5.1.1", + "fast-average-color-node": "^2.2.0", + "highlight.js": "^11.5.0", + "insane": "^2.6.2", + "jimp": "^0.16.1", + "marked": "^4.0.12", + "postcss": "^8.4.8", + "postcss-easy-import": "^4.0.0", + "postcss-extend-rule": "^4.0.0", + "postcss-import": "^14.0.2", + "postcss-import-ext-glob": "^2.0.1", + "postcss-load-config": "^3.1.4", + "postcss-nested": "^5.0.6", + "postcss-preset-env": "^7.4.2", + "postcss-pxtorem": "^6.0.0", + "postcss-strip-inline-comments": "^0.1.5", + "sanitize.css": "^13.0.0", + "svelte-tiny-virtual-list": "^2.0.1", + "svelte-use-click-outside": "^1.0.0", + "throttle-debounce": "^3.0.1", + "undici": "^5.2.0", + "unplugin-icons": "^0.13.3" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a1654851b..3764c7980 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,12 +12,15 @@ specifiers: '@typescript-eslint/eslint-plugin': ^5.10.1 '@typescript-eslint/parser': ^5.10.1 autoprefixer: ^10.4.2 + cli-progress: ^3.11.1 cssnano: ^5.1.1 eslint: ^7.32.0 eslint-config-prettier: ^8.3.0 eslint-plugin-svelte3: ^3.2.1 + fast-average-color-node: ^2.2.0 highlight.js: ^11.5.0 insane: ^2.6.2 + jimp: ^0.16.1 marked: ^4.0.12 mdsvex: ^0.10.5 mdsvexamples: ^0.3.0 @@ -32,6 +35,7 @@ specifiers: postcss-preset-env: ^7.4.2 postcss-pxtorem: ^6.0.0 postcss-strip-inline-comments: ^0.1.5 + prettier: ^2.6.2 sanitize.css: ^13.0.0 sveld: ^0.13.4 svelte: ^3.48.0 @@ -43,6 +47,7 @@ specifiers: throttle-debounce: ^3.0.1 tslib: ^2.3.1 typescript: ~4.6.2 + undici: ^5.2.0 unplugin-icons: ^0.13.3 dependencies: @@ -53,9 +58,12 @@ dependencies: '@iconify-json/lucide': 1.1.7 '@poppanator/sveltekit-svg': 0.3.1_svelte@3.48.0 autoprefixer: 10.4.2_postcss@8.4.8 + cli-progress: 3.11.1 cssnano: 5.1.1_postcss@8.4.8 + fast-average-color-node: 2.2.0 highlight.js: 11.5.0 insane: 2.6.2 + jimp: 0.16.1 marked: 4.0.12 postcss: 8.4.8 postcss-easy-import: 4.0.0_postcss@8.4.8 @@ -71,11 +79,12 @@ dependencies: svelte-tiny-virtual-list: 2.0.1 svelte-use-click-outside: 1.0.0 throttle-debounce: 3.0.1 + undici: 5.2.0 unplugin-icons: 0.13.3 devDependencies: '@sveltejs/adapter-static': 1.0.0-next.29 - '@sveltejs/kit': 1.0.0-next.326_svelte@3.48.0 + '@sveltejs/kit': 1.0.0-next.336_svelte@3.48.0 '@typescript-eslint/eslint-plugin': 5.14.0_e3f5f4efe2bd492e36eb6c1c619dfc98 '@typescript-eslint/parser': 5.14.0_eslint@7.32.0+typescript@4.6.2 eslint: 7.32.0 @@ -84,6 +93,7 @@ devDependencies: mdsvex: 0.10.5_svelte@3.48.0 mdsvexamples: 0.3.0 nodemon: 2.0.15 + prettier: 2.6.2 sveld: 0.13.4_4db7643ceec6f88f007a3dfc606d2828 svelte: 3.48.0 svelte-check: 2.4.5_d3ea40bd46a6dc733b9b800bd83057b3 @@ -131,6 +141,13 @@ packages: js-tokens: 4.0.0 dev: true + /@babel/runtime/7.17.9: + resolution: {integrity: sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: false + /@csstools/postcss-color-function/1.0.3_postcss@8.4.8: resolution: {integrity: sha512-J26I69pT2B3MYiLY/uzCGKVJyMYVg9TCpXkWsRlt+Yfq+nELUEm72QXIMYXs4xA9cJA4Oqs2EylrfokKl3mJEQ==} engines: {node: ^12 || ^14 || >=16} @@ -286,13 +303,388 @@ packages: '@antfu/install-pkg': 0.1.0 '@antfu/utils': 0.3.0 '@iconify/types': 1.0.12 - debug: 4.3.3 + debug: 4.3.4 kolorist: 1.5.1 local-pkg: 0.4.1 transitivePeerDependencies: - supports-color dev: false + /@jimp/bmp/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + bmp-js: 0.1.0 + dev: false + + /@jimp/core/0.16.1: + resolution: {integrity: sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==} + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/utils': 0.16.1 + any-base: 1.1.0 + buffer: 5.7.1 + exif-parser: 0.1.12 + file-type: 9.0.0 + load-bmfont: 1.4.1 + mkdirp: 0.5.5 + phin: 2.9.3 + pixelmatch: 4.0.2 + tinycolor2: 1.4.2 + dev: false + + /@jimp/custom/0.16.1: + resolution: {integrity: sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==} + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/core': 0.16.1 + dev: false + + /@jimp/gif/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + gifwrap: 0.9.4 + omggif: 1.0.10 + dev: false + + /@jimp/jpeg/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + jpeg-js: 0.4.2 + dev: false + + /@jimp/plugin-blit/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-blur/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-circle/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-color/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + tinycolor2: 1.4.2 + dev: false + + /@jimp/plugin-contain/0.16.1_38e919e7cde018834207f15ee7b0ce6a: + resolution: {integrity: sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-blit': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-resize': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-scale': 0.16.1_c382371bb4f60ea2fd211a04ed8ab1e2 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-cover/0.16.1_3d13feed36f5fd86198de47b78b25314: + resolution: {integrity: sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + '@jimp/plugin-scale': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-crop': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-resize': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-scale': 0.16.1_c382371bb4f60ea2fd211a04ed8ab1e2 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-crop/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-displace/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-dither/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-fisheye/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-flip/0.16.1_205f1d9ec51496ff93f52ac5618c3660: + resolution: {integrity: sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-rotate': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-rotate': 0.16.1_37f4bc9bbdbf41c03b931ee8408b3361 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-gaussian/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-invert/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-mask/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-normalize/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-print/0.16.1_5191b610a3eb861d3baa10a735e89ecc: + resolution: {integrity: sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-blit': 0.16.1_@jimp+custom@0.16.1 + '@jimp/utils': 0.16.1 + load-bmfont: 1.4.1 + dev: false + + /@jimp/plugin-resize/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-rotate/0.16.1_37f4bc9bbdbf41c03b931ee8408b3361: + resolution: {integrity: sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blit': '>=0.3.5' + '@jimp/plugin-crop': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-blit': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-crop': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-resize': 0.16.1_@jimp+custom@0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-scale/0.16.1_c382371bb4f60ea2fd211a04ed8ab1e2: + resolution: {integrity: sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-resize': 0.16.1_@jimp+custom@0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-shadow/0.16.1_82540ab48d5f83680494f34d0dac907f: + resolution: {integrity: sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-blur': '>=0.3.5' + '@jimp/plugin-resize': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-blur': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-resize': 0.16.1_@jimp+custom@0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugin-threshold/0.16.1_ec0c83f3603149a8780f87045f821922: + resolution: {integrity: sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + '@jimp/plugin-color': '>=0.8.0' + '@jimp/plugin-resize': '>=0.8.0' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-color': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-resize': 0.16.1_@jimp+custom@0.16.1 + '@jimp/utils': 0.16.1 + dev: false + + /@jimp/plugins/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugin-blit': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-blur': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-circle': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-color': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-contain': 0.16.1_38e919e7cde018834207f15ee7b0ce6a + '@jimp/plugin-cover': 0.16.1_3d13feed36f5fd86198de47b78b25314 + '@jimp/plugin-crop': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-displace': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-dither': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-fisheye': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-flip': 0.16.1_205f1d9ec51496ff93f52ac5618c3660 + '@jimp/plugin-gaussian': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-invert': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-mask': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-normalize': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-print': 0.16.1_5191b610a3eb861d3baa10a735e89ecc + '@jimp/plugin-resize': 0.16.1_@jimp+custom@0.16.1 + '@jimp/plugin-rotate': 0.16.1_37f4bc9bbdbf41c03b931ee8408b3361 + '@jimp/plugin-scale': 0.16.1_c382371bb4f60ea2fd211a04ed8ab1e2 + '@jimp/plugin-shadow': 0.16.1_82540ab48d5f83680494f34d0dac907f + '@jimp/plugin-threshold': 0.16.1_ec0c83f3603149a8780f87045f821922 + timm: 1.7.1 + dev: false + + /@jimp/png/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/utils': 0.16.1 + pngjs: 3.4.0 + dev: false + + /@jimp/tiff/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + utif: 2.0.1 + dev: false + + /@jimp/types/0.16.1_@jimp+custom@0.16.1: + resolution: {integrity: sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==} + peerDependencies: + '@jimp/custom': '>=0.3.5' + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/bmp': 0.16.1_@jimp+custom@0.16.1 + '@jimp/custom': 0.16.1 + '@jimp/gif': 0.16.1_@jimp+custom@0.16.1 + '@jimp/jpeg': 0.16.1_@jimp+custom@0.16.1 + '@jimp/png': 0.16.1_@jimp+custom@0.16.1 + '@jimp/tiff': 0.16.1_@jimp+custom@0.16.1 + timm: 1.7.1 + dev: false + + /@jimp/utils/0.16.1: + resolution: {integrity: sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==} + dependencies: + '@babel/runtime': 7.17.9 + regenerator-runtime: 0.13.9 + dev: false + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -347,8 +739,8 @@ packages: rollup: 2.70.0 dev: true - /@rollup/pluginutils/4.2.0: - resolution: {integrity: sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA==} + /@rollup/pluginutils/4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} dependencies: estree-walker: 2.0.2 @@ -366,14 +758,14 @@ packages: tiny-glob: 0.2.9 dev: true - /@sveltejs/kit/1.0.0-next.326_svelte@3.48.0: - resolution: {integrity: sha512-prJqmXZ2H1wmFfnMw7wDujfbkcA8vuubuqUkpVVmXhfh2+SEzQscPTNwxoE5EJxb5sywtLWEvYx3hv1gPS4Lvg==} - engines: {node: '>=14.13'} + /@sveltejs/kit/1.0.0-next.336_svelte@3.48.0: + resolution: {integrity: sha512-DfERqclfwI8Gdx8/p5qIU3vwEOQfWqC8+BXR12bNykbXFM1k8koDplRDpmGzcsXyhslf83j+RmchnkifbNLjsw==} + engines: {node: '>=16'} hasBin: true peerDependencies: svelte: ^3.44.0 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.39_svelte@3.48.0+vite@2.9.1 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.44_svelte@3.48.0+vite@2.9.1 chokidar: 3.5.3 sade: 1.8.1 svelte: 3.48.0 @@ -386,23 +778,24 @@ packages: - supports-color dev: true - /@sveltejs/vite-plugin-svelte/1.0.0-next.39_svelte@3.48.0+vite@2.9.1: - resolution: {integrity: sha512-gnvvcAW2LK+KnUn8lKb2ypcXKwSp2K57mem5C4VNKfjxdRpM6+XwNavWwVf6otnDhz3qPYl/TKKW6/dRr6eeAw==} + /@sveltejs/vite-plugin-svelte/1.0.0-next.44_svelte@3.48.0+vite@2.9.1: + resolution: {integrity: sha512-n+sssEWbzykPS447FmnNyU5GxEhrBPDVd0lxNZnxRGz9P6651LjjwAnISKr3CKgT9v8IybP8VD0n2i5XzbqExg==} engines: {node: ^14.13.1 || >= 16} peerDependencies: diff-match-patch: ^1.0.5 svelte: ^3.44.0 - vite: ^2.7.0 + vite: ^2.9.0 peerDependenciesMeta: diff-match-patch: optional: true dependencies: - '@rollup/pluginutils': 4.2.0 - debug: 4.3.3 + '@rollup/pluginutils': 4.2.1 + debug: 4.3.4 + deepmerge: 4.2.2 kleur: 4.1.4 - magic-string: 0.25.9 + magic-string: 0.26.2 svelte: 3.48.0 - svelte-hmr: 0.14.10_svelte@3.48.0 + svelte-hmr: 0.14.11_svelte@3.48.0 vite: 2.9.1 transitivePeerDependencies: - supports-color @@ -428,10 +821,18 @@ packages: resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} dev: true + /@types/node/16.9.1: + resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} + dev: false + /@types/node/17.0.21: resolution: {integrity: sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==} dev: true + /@types/offscreencanvas/2019.6.4: + resolution: {integrity: sha512-u8SAgdZ8ROtkTF+mfZGOscl0or6BSj9A4g37e6nvxDc+YB/oDut0wHkK2PBBiC2bNR8TS0CPV+1gAk4fNisr1Q==} + dev: false + /@types/pug/2.0.6: resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==} dev: true @@ -655,7 +1056,6 @@ packages: /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-styles/2.2.1: resolution: {integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=} @@ -676,6 +1076,10 @@ packages: color-convert: 2.0.1 dev: true + /any-base/1.1.0: + resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==} + dev: false + /anymatch/3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} @@ -684,6 +1088,17 @@ packages: picomatch: 2.3.1 dev: true + /aproba/1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + dev: false + + /are-we-there-yet/1.1.7: + resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} + dependencies: + delegates: 1.0.0 + readable-stream: 2.3.7 + dev: false + /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -752,11 +1167,27 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: false + + /bmp-js/0.1.0: + resolution: {integrity: sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==} + dev: false + /boolbase/1.0.0: resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} dev: false @@ -803,6 +1234,18 @@ packages: resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} dev: true + /buffer-equal/0.0.1: + resolution: {integrity: sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=} + engines: {node: '>=0.4.0'} + dev: false + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /builtin-modules/3.2.0: resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==} engines: {node: '>=6'} @@ -887,6 +1330,10 @@ packages: fsevents: 2.3.2 dev: true + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: false + /ci-info/2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true @@ -896,12 +1343,24 @@ packages: engines: {node: '>=6'} dev: true + /cli-progress/3.11.1: + resolution: {integrity: sha512-TTMA2LHrYaZeNMcgZGO10oYqj9hvd03pltNtVbu4ddeyDTHlYV7gWxsFiuvaQlgwMBFCv1TukcjiODWFlb16tQ==} + engines: {node: '>=4'} + dependencies: + string-width: 4.2.3 + dev: false + /clone-response/1.0.2: resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} dependencies: mimic-response: 1.0.1 dev: true + /code-point-at/1.1.0: + resolution: {integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=} + engines: {node: '>=0.10.0'} + dev: false + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -913,7 +1372,6 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name/1.1.3: resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} @@ -921,7 +1379,21 @@ packages: /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + + /color-string/1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color/4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false /colord/2.9.2: resolution: {integrity: sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==} @@ -952,6 +1424,14 @@ packages: xdg-basedir: 4.0.0 dev: true + /console-control-strings/1.1.0: + resolution: {integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=} + dev: false + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1123,6 +1603,17 @@ packages: dependencies: ms: 2.1.2 + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /decompress-response/3.3.0: resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} engines: {node: '>=4'} @@ -1130,6 +1621,13 @@ packages: mimic-response: 1.0.1 dev: true + /decompress-response/6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + /dedent-js/1.0.1: resolution: {integrity: sha1-vuX7fJ5yfYXf+iRZDRDsGrElUwU=} dev: true @@ -1137,7 +1635,6 @@ packages: /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - dev: true /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1152,11 +1649,20 @@ packages: resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} dev: true + /delegates/1.0.0: + resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=} + dev: false + /detect-indent/6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} dev: true + /detect-libc/2.0.1: + resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} + engines: {node: '>=8'} + dev: false + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1179,6 +1685,10 @@ packages: entities: 2.2.0 dev: false + /dom-walk/0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dev: false + /domelementtype/2.2.0: resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} dev: false @@ -1215,13 +1725,11 @@ packages: /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true /end-of-stream/1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 - dev: true /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} @@ -1645,6 +2153,33 @@ packages: strip-final-newline: 2.0.0 dev: false + /exif-parser/0.1.12: + resolution: {integrity: sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=} + dev: false + + /expand-template/2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: false + + /fast-average-color-node/2.2.0: + resolution: {integrity: sha512-vow8Xy3O7PMjoduWwlgOrF2B9zPfb8S5EGUubz3Amide9p46ExxnTJ9ot98H+0RzO+n26Zh5ikgoZ6vwzoCP2A==} + engines: {node: '>= 12'} + dependencies: + fast-average-color: 7.1.0 + node-fetch: 2.6.7 + sharp: 0.30.4 + transitivePeerDependencies: + - encoding + dev: false + + /fast-average-color/7.1.0: + resolution: {integrity: sha512-eTc18sdbr2P2xZFMhvWmo+T7MJ403k4jSiapTMoOcvkptu7SWOU+TzN4tFL4B9sIKUSXA63Xu7Mpc4fmncDZ+Q==} + engines: {node: '>= 12'} + dependencies: + '@types/offscreencanvas': 2019.6.4 + dev: false + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -1683,6 +2218,11 @@ packages: flat-cache: 3.0.4 dev: true + /file-type/9.0.0: + resolution: {integrity: sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==} + engines: {node: '>=6'} + dev: false + /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -1713,6 +2253,10 @@ packages: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: false + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: false + /fs-extra/9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -1741,6 +2285,19 @@ packages: resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} dev: true + /gauge/2.7.4: + resolution: {integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=} + dependencies: + aproba: 1.2.0 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 1.0.2 + strip-ansi: 3.0.1 + wide-align: 1.1.5 + dev: false + /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} @@ -1760,6 +2317,17 @@ packages: engines: {node: '>=10'} dev: false + /gifwrap/0.9.4: + resolution: {integrity: sha512-MDMwbhASQuVeD4JKd1fKgNgCRL3fGqMM4WaqpNhWO0JiMOAjbQdumbs4BbBZEy9/M00EHEjKN3HieVhCUlwjeQ==} + dependencies: + image-q: 4.0.0 + omggif: 1.0.10 + dev: false + + /github-from-package/0.0.0: + resolution: {integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=} + dev: false + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -1783,6 +2351,13 @@ packages: ini: 2.0.0 dev: true + /global/4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + dependencies: + min-document: 2.19.0 + process: 0.11.10 + dev: false + /globals/13.12.1: resolution: {integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==} engines: {node: '>=8'} @@ -1864,6 +2439,10 @@ packages: engines: {node: '>=8'} dev: true + /has-unicode/2.0.1: + resolution: {integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=} + dev: false + /has-yarn/2.1.0: resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} engines: {node: '>=8'} @@ -1894,6 +2473,10 @@ packages: engines: {node: '>=10.17.0'} dev: false + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + /ignore-by-default/1.0.1: resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=} dev: true @@ -1908,6 +2491,12 @@ packages: engines: {node: '>= 4'} dev: true + /image-q/4.0.0: + resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} + dependencies: + '@types/node': 16.9.1 + dev: false + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -1937,7 +2526,6 @@ packages: /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true /ini/2.0.0: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} @@ -1951,6 +2539,10 @@ packages: he: 0.5.0 dev: false + /is-arrayish/0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -1974,10 +2566,20 @@ packages: resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} engines: {node: '>=0.10.0'} + /is-fullwidth-code-point/1.0.0: + resolution: {integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: false + /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true + + /is-function/1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + dev: false /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -2029,9 +2631,27 @@ packages: resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} dev: true + /isarray/1.0.0: + resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} + dev: false + /isexe/2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + /jimp/0.16.1: + resolution: {integrity: sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==} + dependencies: + '@babel/runtime': 7.17.9 + '@jimp/custom': 0.16.1 + '@jimp/plugins': 0.16.1_@jimp+custom@0.16.1 + '@jimp/types': 0.16.1_@jimp+custom@0.16.1 + regenerator-runtime: 0.13.9 + dev: false + + /jpeg-js/0.4.2: + resolution: {integrity: sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==} + dev: false + /js-base64/2.6.4: resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} dev: false @@ -2112,6 +2732,19 @@ packages: engines: {node: '>=10'} dev: false + /load-bmfont/1.4.1: + resolution: {integrity: sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==} + dependencies: + buffer-equal: 0.0.1 + mime: 1.6.0 + parse-bmfont-ascii: 1.0.6 + parse-bmfont-binary: 1.0.6 + parse-bmfont-xml: 1.1.4 + phin: 2.9.3 + xhr: 2.6.0 + xtend: 4.0.2 + dev: false + /local-pkg/0.4.1: resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} engines: {node: '>=14'} @@ -2165,7 +2798,6 @@ packages: engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /magic-string/0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} @@ -2173,6 +2805,13 @@ packages: sourcemap-codec: 1.4.8 dev: true + /magic-string/0.26.2: + resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==} + engines: {node: '>=12'} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -2238,6 +2877,12 @@ packages: braces: 3.0.2 picomatch: 2.3.1 + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -2248,6 +2893,17 @@ packages: engines: {node: '>=4'} dev: true + /mimic-response/3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false + + /min-document/2.19.0: + resolution: {integrity: sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=} + dependencies: + dom-walk: 0.1.2 + dev: false + /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -2260,14 +2916,16 @@ packages: /minimist/1.2.5: resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} - dev: true + + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: false /mkdirp/0.5.5: resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} hasBin: true dependencies: minimist: 1.2.5 - dev: true /mri/1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} @@ -2282,6 +2940,10 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /napi-build-utils/1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: false + /natural-compare/1.4.0: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true @@ -2293,6 +2955,29 @@ packages: tslib: 2.3.1 dev: true + /node-abi/3.15.0: + resolution: {integrity: sha512-Ic6z/j6I9RLm4ov7npo1I48UQr2BEyFCqh6p7S1dhEx9jPO0GPGq/e2Rb7x7DroQrmiVMz/Bw1vJm9sPAl2nxA==} + engines: {node: '>=10'} + dependencies: + semver: 7.3.7 + dev: false + + /node-addon-api/4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + dev: false + + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + /node-releases/2.0.2: resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} dev: false @@ -2349,17 +3034,35 @@ packages: path-key: 3.1.1 dev: false + /npmlog/4.1.2: + resolution: {integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==} + dependencies: + are-we-there-yet: 1.1.7 + console-control-strings: 1.1.0 + gauge: 2.7.4 + set-blocking: 2.0.0 + dev: false + /nth-check/2.0.1: resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} dependencies: boolbase: 1.0.0 dev: false + /number-is-nan/1.0.1: + resolution: {integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=} + engines: {node: '>=0.10.0'} + dev: false + /object-assign/4.1.1: resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} engines: {node: '>=0.10.0'} dev: false + /omggif/1.0.10: + resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + dev: false + /once/1.4.0: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: @@ -2413,6 +3116,10 @@ packages: semver: 6.3.0 dev: true + /pako/1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: false + /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2420,6 +3127,25 @@ packages: callsites: 3.1.0 dev: true + /parse-bmfont-ascii/1.0.6: + resolution: {integrity: sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=} + dev: false + + /parse-bmfont-binary/1.0.6: + resolution: {integrity: sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=} + dev: false + + /parse-bmfont-xml/1.1.4: + resolution: {integrity: sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==} + dependencies: + xml-parse-from-string: 1.0.1 + xml2js: 0.4.23 + dev: false + + /parse-headers/2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + dev: false + /pascal-case/3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: @@ -2448,6 +3174,10 @@ packages: engines: {node: '>=8'} dev: true + /phin/2.9.3: + resolution: {integrity: sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==} + dev: false + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -2477,6 +3207,18 @@ packages: engines: {node: '>=0.10.0'} dev: false + /pixelmatch/4.0.2: + resolution: {integrity: sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=} + hasBin: true + dependencies: + pngjs: 3.4.0 + dev: false + + /pngjs/3.4.0: + resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} + engines: {node: '>=4.0.0'} + dev: false + /postcss-attribute-case-insensitive/5.0.0_postcss@8.4.8: resolution: {integrity: sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==} peerDependencies: @@ -3191,6 +3933,26 @@ packages: source-map-js: 1.0.2 dev: false + /prebuild-install/7.1.0: + resolution: {integrity: sha512-CNcMgI1xBypOyGqjp3wOc8AAo1nMhZS3Cwd3iHIxOdAUbb+YxdNuM4Z5iIrZ8RLvOsf3F3bl7b7xGq6DjQoNYA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + detect-libc: 2.0.1 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.5 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.15.0 + npmlog: 4.1.2 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3201,8 +3963,8 @@ packages: engines: {node: '>=4'} dev: true - /prettier/2.6.1: - resolution: {integrity: sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A==} + /prettier/2.6.2: + resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -3220,6 +3982,15 @@ packages: engines: {node: '>=6'} dev: true + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /process/0.11.10: + resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} + engines: {node: '>= 0.6.0'} + dev: false + /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -3234,7 +4005,6 @@ packages: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} @@ -3259,7 +4029,6 @@ packages: ini: 1.3.8 minimist: 1.2.5 strip-json-comments: 2.0.1 - dev: true /read-cache/1.0.0: resolution: {integrity: sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=} @@ -3267,6 +4036,27 @@ packages: pify: 2.3.0 dev: false + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3274,6 +4064,10 @@ packages: picomatch: 2.3.1 dev: true + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + dev: false + /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} @@ -3378,6 +4172,14 @@ packages: mri: 1.2.0 dev: true + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + /sander/0.5.1: resolution: {integrity: sha1-dB4kXiMfB8r7b98PEzrfohalAq0=} dependencies: @@ -3391,6 +4193,10 @@ packages: resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} dev: false + /sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: false + /semver-diff/3.1.1: resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} engines: {node: '>=8'} @@ -3416,6 +4222,33 @@ packages: lru-cache: 6.0.0 dev: true + /semver/7.3.7: + resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + + /set-blocking/2.0.0: + resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} + dev: false + + /sharp/0.30.4: + resolution: {integrity: sha512-3Onig53Y6lji4NIZo69s14mERXXY/GV++6CzOYx/Rd8bnTwbhFbL09WZd7Ag/CCnA0WxFID8tkY0QReyfL6v0Q==} + engines: {node: '>=12.13.0'} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.1 + node-addon-api: 4.3.0 + prebuild-install: 7.1.0 + semver: 7.3.7 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3429,6 +4262,24 @@ packages: /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /simple-concat/1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: false + + /simple-get/4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + + /simple-swizzle/0.2.2: + resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} + dependencies: + is-arrayish: 0.3.2 + dev: false + /slash/3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -3484,6 +4335,15 @@ packages: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} dev: false + /string-width/1.0.2: + resolution: {integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: false + /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -3491,7 +4351,18 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false /strip-ansi/3.0.1: resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=} @@ -3505,7 +4376,6 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} @@ -3522,7 +4392,6 @@ packages: /strip-json-comments/2.0.1: resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} engines: {node: '>=0.10.0'} - dev: true /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -3579,7 +4448,7 @@ packages: comment-parser: 0.7.6 fast-glob: 3.2.11 fs-extra: 9.1.0 - prettier: 2.6.1 + prettier: 2.6.2 rollup: 2.70.0 rollup-plugin-svelte: 7.1.0_rollup@2.70.0+svelte@3.48.0 svelte: 3.48.0 @@ -3627,8 +4496,8 @@ packages: - sugarss dev: true - /svelte-hmr/0.14.10_svelte@3.48.0: - resolution: {integrity: sha512-VffsN0fT4cTJ7b4apf9VDIrgsbLFaJzPypcAuy4NcHx2PKKayfwLwabaYPWdHK5lJ/uQ/HBrkEsWHzo64NU6mQ==} + /svelte-hmr/0.14.11_svelte@3.48.0: + resolution: {integrity: sha512-R9CVfX6DXxW1Kn45Jtmx+yUe+sPhrbYSUp7TkzbW0jI5fVPn6lsNG9NEs5dFg5qRhFNAoVdRw5qQDLALNKhwbQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: '>=3.19.0' @@ -3739,6 +4608,26 @@ packages: strip-ansi: 6.0.1 dev: true + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: false + /text-table/0.2.0: resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true @@ -3748,6 +4637,10 @@ packages: engines: {node: '>=10'} dev: false + /timm/1.7.1: + resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} + dev: false + /timsort/0.3.0: resolution: {integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=} dev: false @@ -3759,6 +4652,10 @@ packages: globrex: 0.1.2 dev: true + /tinycolor2/1.4.2: + resolution: {integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==} + dev: false + /to-readable-stream/1.0.0: resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} engines: {node: '>=6'} @@ -3777,6 +4674,10 @@ packages: nopt: 1.0.10 dev: true + /tr46/0.0.3: + resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} + dev: false + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true @@ -3795,6 +4696,12 @@ packages: typescript: 4.6.2 dev: true + /tunnel-agent/0.6.0: + resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=} + dependencies: + safe-buffer: 5.2.1 + dev: false + /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -3823,6 +4730,11 @@ packages: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} dev: true + /undici/5.2.0: + resolution: {integrity: sha512-XY6+NS3WH9b3TKOHeNz2CjR+qrVz/k4fO9g3etPpLozRvULoQmZ1+dk9JbIz40ehn27xzFk4jYVU2MU3Nle62A==} + engines: {node: '>=12.18'} + dev: false + /unique-string/2.0.0: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} @@ -3972,6 +4884,12 @@ packages: prepend-http: 2.0.0 dev: true + /utif/2.0.1: + resolution: {integrity: sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==} + dependencies: + pako: 1.0.11 + dev: false + /util-deprecate/1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} dev: false @@ -4011,6 +4929,10 @@ packages: fsevents: 2.3.2 dev: true + /webidl-conversions/3.0.1: + resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} + dev: false + /webpack-sources/3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} @@ -4019,6 +4941,13 @@ packages: /webpack-virtual-modules/0.4.3: resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==} + /whatwg-url/5.0.0: + resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4026,6 +4955,12 @@ packages: dependencies: isexe: 2.0.0 + /wide-align/1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + dev: false + /widest-line/3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -4064,9 +4999,39 @@ packages: engines: {node: '>=8'} dev: true + /xhr/2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + dev: false + + /xml-parse-from-string/1.0.1: + resolution: {integrity: sha1-qQKekp09vN7RafPG4oI42VpdWig=} + dev: false + + /xml2js/0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.2.4 + xmlbuilder: 11.0.1 + dev: false + + /xmlbuilder/11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + dev: false + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} diff --git a/src/package/config/svelte.config.js b/src/package/config/svelte.config.js index e70104f6c..99c2b6124 100644 --- a/src/package/config/svelte.config.js +++ b/src/package/config/svelte.config.js @@ -3,14 +3,14 @@ import Icons from 'unplugin-icons/vite'; import svelteSvg from '@poppanator/sveltekit-svg'; export const preprocess = sveltePreprocess({ - postcss: true, -}) + postcss: true, +}); export const plugins = [ - svelteSvg(), - Icons({ - compiler: 'svelte', - defaultClass: 'icon', - scale: 1, - }), -] \ No newline at end of file + svelteSvg(), + Icons({ + compiler: 'svelte', + defaultClass: 'icon', + scale: 1, + }), +]; diff --git a/src/package/plugins/generator/index.ts b/src/package/plugins/generator/index.ts new file mode 100644 index 000000000..dc20c92ba --- /dev/null +++ b/src/package/plugins/generator/index.ts @@ -0,0 +1,71 @@ +import { promises as fs } from 'fs'; +import { landingPage } from './outputs/landingPage.js'; +import { projectColors } from './outputs/projectColors.js'; +import { gameVersions } from './outputs/gameVersions.js'; +import { tags } from './outputs/tags.js'; + +const API_URL = 'https://api.modrinth.com/v2/'; //TODO Remove +process.env.VITE_API_URL || process.env?.NODE_ENV === 'development' + ? 'https://staging-api.modrinth.com/v2/' + : 'https://api.modrinth.com/v2/'; + +// Time to live: 7 days +const TTL = 7 * 24 * 60 * 60 * 1000; + +export default function Generator(options: PluginOptions) { + return { + name: 'rollup-plugin-omorphia-generator', + async buildStart() { + let state: State = {}; + + try { + state = JSON.parse(await fs.readFile('./generated/state.json', 'utf8')); + } catch { + // File doesn't exist, create folder + await fs.mkdir('./generated', { recursive: true }); + + await fs.writeFile( + './generated/state.json', + JSON.stringify( + { + options, + }, + null, + 2 + ) + ); + } + + // Don't generate if the last generation was less than TTL and the options are the same + if ( + state?.lastGenerated && + new Date(state.lastGenerated).getTime() + TTL > new Date().getTime() && + JSON.stringify(state.options) === JSON.stringify(options) + ) { + return; + } + + if (options.landingPage) await landingPage(API_URL); + if (options.projectColors) await projectColors(API_URL); + if (options.gameVersions) await gameVersions(API_URL); + if (options.tags) await tags(API_URL); + + // Write new state + state.lastGenerated = new Date().toISOString(); + state.options = options; + await fs.writeFile('./generated/state.json', JSON.stringify(state, null, 2)); + }, + }; +} + +export interface PluginOptions { + projectColors: boolean; + landingPage: boolean; + gameVersions: boolean; + tags: boolean; +} + +interface State { + lastGenerated?: string; + options?: PluginOptions; +} diff --git a/src/package/plugins/generator/outputs/gameVersions.ts b/src/package/plugins/generator/outputs/gameVersions.ts new file mode 100644 index 000000000..5c2eeb44f --- /dev/null +++ b/src/package/plugins/generator/outputs/gameVersions.ts @@ -0,0 +1,24 @@ +import { fetch } from 'undici'; +import { promises as fs } from 'fs'; +import cliProgress from 'cli-progress'; + +export async function gameVersions(API_URL: string) { + const progressBar = new cliProgress.SingleBar({ + format: 'Generating game versions | {bar} | {percentage}%', + barCompleteChar: '\u2588', + barIncompleteChar: '\u2591', + hideCursor: true, + }); + + progressBar.start(2, 0); + + const gameVersions = await (await fetch(API_URL + 'tag/game_version')).json(); + + progressBar.increment(); + + // Write JSON file + await fs.writeFile('./generated/gameVersions.json', JSON.stringify(gameVersions)); + progressBar.increment(); + + progressBar.stop(); +} diff --git a/src/package/plugins/generator/outputs/landingPage.ts b/src/package/plugins/generator/outputs/landingPage.ts new file mode 100644 index 000000000..7e51e029e --- /dev/null +++ b/src/package/plugins/generator/outputs/landingPage.ts @@ -0,0 +1,44 @@ +import { fetch } from 'undici'; +import { promises as fs } from 'fs'; +import sharp from 'sharp'; +import FastAverageColor from 'fast-average-color'; +import cliProgress from 'cli-progress'; + +export async function landingPage(API_URL: string) { + const progressBar = new cliProgress.SingleBar({ + format: 'Generating landing page | {bar} | {percentage}% || {value}/{total} mods', + barCompleteChar: '\u2588', + barIncompleteChar: '\u2591', + hideCursor: true, + }); + + progressBar.start(100, 0); + + // Fetch top 100 mods + const response = (await ( + await fetch(API_URL + 'search?limit=100&facets=[["project_type:mod"]]') + ).json()) as Record; + + // Simplified array with the format: ['id', 'slug', 'icon_extension'] + const compressed = response.hits + .filter((project) => project.icon_url) + .map((project) => { + progressBar.increment(); + return [ + project.project_id, + project.slug || '', + project.icon_url.match(/\.[0-9a-z]+$/i)[0].substring(1), + ]; + }); + + // Write JSON file + await fs.writeFile( + './generated/landingPage.json', + JSON.stringify({ + mods: compressed, + random: Math.random(), + }) + ); + + progressBar.stop(); +} diff --git a/src/package/plugins/generator/outputs/projectColors.ts b/src/package/plugins/generator/outputs/projectColors.ts new file mode 100644 index 000000000..a1a622c8d --- /dev/null +++ b/src/package/plugins/generator/outputs/projectColors.ts @@ -0,0 +1,106 @@ +import { fetch } from 'undici'; +import { promises as fs, createWriteStream } from 'fs'; +import cliProgress from 'cli-progress'; +import Jimp from 'jimp'; +import { getAverageColor } from 'fast-average-color-node'; + +// Note: This function has issues and will occasionally fail with some project icons. It averages at a 99.4% success rate. Most issues are from ECONNRESET errors & Jimp not being able to handle webp & svg images. +export async function projectColors(API_URL: string) { + const progressBar = new cliProgress.SingleBar({ + format: 'Generating project colors | {bar} | {percentage}% || {value}/{total} projects', + barCompleteChar: '\u2588', + barIncompleteChar: '\u2591', + hideCursor: true, + }); + + // Get total number of projects + const projectCount = ( + (await (await fetch(API_URL + 'search?limit=0')).json()) as Record + ).total_hits; + + progressBar.start(projectCount, 0); + + const writeStream = createWriteStream('./generated/projects.json'); + + writeStream.write('{'); + + // Used to form the JSON string (so that the first doesn't have a comma prefix) + let first = true; + + let completed = 0; + + // Number of pages through search to fetch + const requestCount = Math.ceil(projectCount / 100); + await Promise.allSettled( + Array.from({ length: requestCount }, async (_, index) => { + const response = await fetch(API_URL + `search?limit=100&offset=${index * 100}`); + if (!response.ok) { + throw new Error(`Failed to fetch projects: ${response.statusText}`); + } + + // Get project hits & use map to get rid of extra data + const hits = ((await response.json()) as Record).hits.map((project) => ({ + project_id: project.project_id, + slug: project.slug, + title: project.title, + icon_url: project.icon_url, + })); + + // Try parsing the icon of each project + await Promise.allSettled( + hits.map(async (project) => { + if ( + project.icon_url && + // Jimp doesn't support webp or svg + !project.icon_url.endsWith('.webp') && + !project.icon_url.endsWith('.svg') + ) { + try { + const image = await Jimp.read( + project.icon_url.replace('cdn', 'cdn-raw') // Skip redirect to raw CDN + ); + + // Resize image before getting average color (faster) + image.resize(256, 256); + + // Get bottom edge of image + const edge = image.clone().crop(0, 255, 256, 1); + + const buffer = await edge.getBufferAsync(Jimp.AUTO); + let color = (await getAverageColor(buffer)).hexa; + + // If the edge is transparent, use the average color of the entire image + if (color === '#00000000') { + const buffer = await image.getBufferAsync(Jimp.AUTO); + color = (await getAverageColor(buffer)).hexa; + } + + // Remove color transparency + color = color.replace(/.{2}$/, ''); + + // Only use comma prefix if not first + let prefix = ','; + if (first) { + prefix = ''; + first = false; + } + + writeStream.write(`${prefix}"${project.project_id}":"${color}"`); + completed++; + } catch (error) { + // Ignore errors + // console.log(error); + } + } + progressBar.increment(); + }) + ); + }) + ); + + writeStream.write('}'); + writeStream.end(); + + progressBar.stop(); + console.log(`Failed to parse ${projectCount - completed} project icons.`); +} diff --git a/src/package/plugins/generator/outputs/tags.ts b/src/package/plugins/generator/outputs/tags.ts new file mode 100644 index 000000000..9805a270d --- /dev/null +++ b/src/package/plugins/generator/outputs/tags.ts @@ -0,0 +1,50 @@ +import { fetch } from 'undici'; +import { promises as fs } from 'fs'; +import cliProgress from 'cli-progress'; + +export async function tags(API_URL: string) { + const progressBar = new cliProgress.SingleBar({ + format: 'Generating tags | {bar} | {percentage}%', + barCompleteChar: '\u2588', + barIncompleteChar: '\u2591', + hideCursor: true, + }); + + progressBar.start(7, 0); + + // eslint-disable-next-line prefer-const + let [categories, loaders, licenses, donationPlatforms]: any = await Promise.all([ + await (await fetch(API_URL + 'tag/category')).json(), + await (await fetch(API_URL + 'tag/loader')).json(), + await (await fetch(API_URL + 'tag/license')).json(), + await (await fetch(API_URL + 'tag/donation_platform')).json(), + ]); + + progressBar.update(4); + + // Delete icons from original arrays + categories = categories.map(({ icon, ...rest }) => rest); + loaders = loaders.map(({ icon, ...rest }) => rest); + + progressBar.increment(); + + // Create single object with icons + const tagIcons = { + ...categories.reduce((a, v) => ({ ...a, [v.name]: v.icon }), {}), + ...loaders.reduce((a, v) => ({ ...a, [v.name]: v.icon }), {}), + }; + + progressBar.increment(); + + // Set project types + const projectTypes = ['mod', 'modpack']; + + // Write JSON file + await fs.writeFile( + './generated/tags.json', + JSON.stringify({ categories, loaders, projectTypes, licenses, donationPlatforms, tagIcons }) + ); + progressBar.increment(); + + progressBar.stop(); +} diff --git a/src/routes/getting-started/generator.md b/src/routes/getting-started/generator.md new file mode 100644 index 000000000..b48d158ff --- /dev/null +++ b/src/routes/getting-started/generator.md @@ -0,0 +1,38 @@ +--- +title: Generator plugin +--- + +The generator plugin creates static files from API responses to increase performance and perform tasks that would not be possible on the client. It regenerates files every 7 days, or when the plugin settings change. + +### Current options + +- `projectColors` (false) generates colors for every project +- `tags` (false) copies & parses tags from API +- `gameVersions` copes game versions from API +- `landingPage` gets icon urls for top 100 mods + +> All options are disabled by default + +## Configuration + +```js +import Generator from 'omorphia/plugins/generator'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + kit: { + vite: { + plugins: [ + Generator({ + projectColors: true, + tags: true, + gameVersions: true, + landingPage: true, + }), + ], + }, + }, +}; + +export default config; +``` diff --git a/tsconfig.json b/tsconfig.json index 477218dd7..8eae689b9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,15 @@ { - "compilerOptions": { - "paths": { - "omorphia/*": [ - "src/package/*" - ], - "omorphia": [ - "src/package" - ], - "$package/*": [ - "src/package/*" - ], - "$routes/*": [ - "src/routes/*" - ], - "$lib":["src/package"], - "$lib/*":["src/package/*"] - } - }, - "extends": "./.svelte-kit/tsconfig.json" + "compilerOptions": { + "paths": { + "omorphia/*": ["src/package/*"], + "omorphia": ["src/package"], + "$package/*": ["src/package/*"], + "$routes/*": ["src/routes/*"], + "$lib": ["src/package"], + "$lib/*": ["src/package/*"] + }, + "resolveJsonModule": true, + "esModuleInterop": true + }, + "extends": "./.svelte-kit/tsconfig.json" }