├── .github └── workflows │ └── test.yml ├── .gitignore ├── .npmignore ├── README.md ├── image └── cover.png ├── package.json ├── pnpm-lock.yaml ├── renovate.json ├── rollup.config.js ├── src └── index.ts ├── test └── index.js └── tsconfig.json /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3.0.0 14 | - uses: actions/setup-node@v3.0.0 15 | with: 16 | node-version: "14.x" 17 | - name: use npm 18 | run: | 19 | npm install 20 | npm test 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /dist -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | .github 3 | /test 4 | /image 5 | /dist 6 | renovate.json 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Generate Blurhash from Image URL 2 | 3 | :unicorn: Simple utility to generate blurhash from Image URL 4 | 5 | ![Test](https://github.com/mcnaveen/blurhash-from-url/workflows/Test/badge.svg) 6 | ![Downloads this Week](https://img.shields.io/npm/dw/blurhash-from-url) 7 | ![Bundle Size](https://img.shields.io/bundlephobia/min/blurhash-from-url) 8 | ![Version](https://img.shields.io/npm/v/blurhash-from-url) 9 | 10 | ![Blurhash from URL](./image/cover.png) 11 | 12 | ### :package: Requirements 13 | 14 | - Node.js 16X LTS or Higher 📦 15 | 16 | ### :sparkles: Installation 17 | 18 | - Install the NPM Package with the below command: 19 | 20 | ``` 21 | npm install blurhash-from-url --save 22 | ``` 23 | 24 | (or) 25 | 26 | - Install with Yarn: 27 | 28 | ``` 29 | yarn add blurhash-from-url 30 | ``` 31 | 32 | ### :bulb: Usage Example 33 | 34 | - Import it in your project 35 | - Pass the URL of the image 36 | - Make sure to use Async/Await function 37 | 38 | ```javascript 39 | //ES6 Import 40 | import { blurhashFromURL } from "blurhash-from-url"; 41 | 42 | // Commonjs Import 43 | // const { blurhashFromURL } = require("blurhash-from-url"); 44 | 45 | async function getBlurhash() { 46 | const output = await blurhashFromURL("https://i.imgur.com/NhfEdg2.png"); 47 | console.log(output); 48 | } 49 | 50 | getBlurhash(); 51 | ``` 52 | 53 | ### :ballot_box_with_check: Example Output 54 | 55 | ```json 56 | { 57 | encoded: 'UnR.*,kW.TnPt7WBocozpJV@nMkWadofWCV@', 58 | decoded: Uint8ClampedArray(1440000) [ 59 | 255, 255, 251, 255, 255, 255, 251, 255, 255, 255, 251, 255, 60 | 255, 255, 251, 255, 255, 255, 251, 255, 255, 255, 251, 255, 61 | 255, 255, 251, 255, 255, 255, 251, 255, 255, 255, 251, 255, 62 | 255, 255, 251, 255, 255, 255, 250, 255, 255, 255, 250, 255, 63 | 255, 255, 250, 255, 255, 255, 250, 255, 255, 255, 250, 255, 64 | 255, 255, 250, 255, 255, 255, 250, 255, 255, 255, 250, 255, 65 | 255, 255, 250, 255, 255, 255, 250, 255, 255, 255, 250, 255, 66 | 255, 255, 250, 255, 255, 255, 250, 255, 255, 255, 250, 255, 67 | 255, 255, 250, 255, 68 | ... 1439900 more items 69 | ], 70 | width: 600, 71 | height: 600 72 | } 73 | ``` 74 | 75 | ### Optional Size Parameter 76 | 77 | By default, the image is resized to 32x32. You can pass the size as an optional parameter. 78 | 79 | ```javascript 80 | async function getBlurhash() { 81 | const output = await blurhashFromURL("https://i.imgur.com/NhfEdg2.png", { 82 | size: 64, 83 | }); 84 | console.log(output); 85 | } 86 | ``` 87 | 88 | --- 89 | 90 | #### :green_heart: Message 91 | 92 | I hope you find this useful. If you have any questions, please create an issue. 93 | -------------------------------------------------------------------------------- /image/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcnaveen/blurhash-from-url/a8ab41783b0c016d48d94cf9e4ecf0b948f0bb0d/image/cover.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blurhash-from-url", 3 | "version": "0.0.10", 4 | "description": "Simple utility to generate blurhash from Image URL", 5 | "main": "dist/index.js", 6 | "module": "dist/index.esm.js", 7 | "files": [ 8 | "dist" 9 | ], 10 | "types": "dist/index.d.ts", 11 | "scripts": { 12 | "build": "rollup -c", 13 | "test": "npm run build && node ./test/index.js", 14 | "watch": "rollup -cw", 15 | "commit": "gacp", 16 | "clean:dist": "npm exec -- rimraf ./dist" 17 | }, 18 | "license": "MIT", 19 | "dependencies": { 20 | "blurhash": "^1.1.5", 21 | "image-size": "^1.0.2", 22 | "node-fetch": "2.6.7", 23 | "sharp": "^0.30.7" 24 | }, 25 | "devDependencies": { 26 | "@types/node-fetch": "^2.6.2", 27 | "@types/sharp": "^0.30.5", 28 | "gacp": "^3.0.3", 29 | "rimraf": "^3.0.2", 30 | "rollup": "^2.78.1", 31 | "rollup-plugin-terser": "^7.0.2", 32 | "rollup-plugin-typescript2": "^0.34.0", 33 | "typescript": "^4.8.2" 34 | }, 35 | "publishConfig": { 36 | "access": "public" 37 | }, 38 | "repository": { 39 | "type": "git", 40 | "url": "git+https://github.com/mcnaveen/blurhash-from-url.git" 41 | }, 42 | "author": "mcnaveen ", 43 | "bugs": { 44 | "url": "https://github.com/mcnaveen/blurhash-from-url/issues" 45 | }, 46 | "homepage": "https://github.com/mcnaveen/blurhash-from-url#readme", 47 | "keywords": [ 48 | "blurhash", 49 | "optimization", 50 | "bundle", 51 | "sharp", 52 | "plaiceholder", 53 | "blurhash-from-url" 54 | ], 55 | "gacp": { 56 | "add": false, 57 | "push": false, 58 | "emoji": "emoji", 59 | "editor": false 60 | }, 61 | "packageManager": "pnpm@9.6.0+sha512.38dc6fba8dba35b39340b9700112c2fe1e12f10b17134715a4aa98ccf7bb035e76fd981cf0bb384dfa98f8d6af5481c2bef2f4266a24bfa20c34eb7147ce0b5e" 62 | } 63 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | blurhash: 12 | specifier: ^1.1.5 13 | version: 1.1.5 14 | image-size: 15 | specifier: ^1.0.2 16 | version: 1.1.1 17 | node-fetch: 18 | specifier: 2.6.7 19 | version: 2.6.7 20 | sharp: 21 | specifier: ^0.30.7 22 | version: 0.30.7 23 | devDependencies: 24 | '@types/node-fetch': 25 | specifier: ^2.6.2 26 | version: 2.6.11 27 | '@types/sharp': 28 | specifier: ^0.30.5 29 | version: 0.30.5 30 | gacp: 31 | specifier: ^3.0.3 32 | version: 3.0.3 33 | rimraf: 34 | specifier: ^3.0.2 35 | version: 3.0.2 36 | rollup: 37 | specifier: ^2.78.1 38 | version: 2.79.1 39 | rollup-plugin-terser: 40 | specifier: ^7.0.2 41 | version: 7.0.2(rollup@2.79.1) 42 | rollup-plugin-typescript2: 43 | specifier: ^0.34.0 44 | version: 0.34.1(rollup@2.79.1)(typescript@4.9.5) 45 | typescript: 46 | specifier: ^4.8.2 47 | version: 4.9.5 48 | 49 | packages: 50 | 51 | '@babel/code-frame@7.24.7': 52 | resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} 53 | engines: {node: '>=6.9.0'} 54 | 55 | '@babel/helper-validator-identifier@7.24.7': 56 | resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} 57 | engines: {node: '>=6.9.0'} 58 | 59 | '@babel/highlight@7.24.7': 60 | resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} 61 | engines: {node: '>=6.9.0'} 62 | 63 | '@commitlint/execute-rule@12.1.4': 64 | resolution: {integrity: sha512-h2S1j8SXyNeABb27q2Ok2vD1WfxJiXvOttKuRA9Or7LN6OQoC/KtT3844CIhhWNteNMu/wE0gkTqGxDVAnJiHg==} 65 | engines: {node: '>=v10'} 66 | 67 | '@commitlint/load@12.1.4': 68 | resolution: {integrity: sha512-Keszi0IOjRzKfxT+qES/n+KZyLrxy79RQz8wWgssCboYjKEp+wC+fLCgbiMCYjI5k31CIzIOq/16J7Ycr0C0EA==} 69 | engines: {node: '>=v10'} 70 | 71 | '@commitlint/resolve-extends@12.1.4': 72 | resolution: {integrity: sha512-R9CoUtsXLd6KSCfsZly04grsH6JVnWFmVtWgWs1KdDpdV+G3TSs37tColMFqglpkx3dsWu8dsPD56+D9YnJfqg==} 73 | engines: {node: '>=v10'} 74 | 75 | '@commitlint/types@12.1.4': 76 | resolution: {integrity: sha512-KRIjdnWNUx6ywz+SJvjmNCbQKcKP6KArhjZhY2l+CWKxak0d77SOjggkMwFTiSgLODOwmuLTbarR2ZfWPiPMlw==} 77 | engines: {node: '>=v10'} 78 | 79 | '@jridgewell/gen-mapping@0.3.5': 80 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 81 | engines: {node: '>=6.0.0'} 82 | 83 | '@jridgewell/resolve-uri@3.1.2': 84 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 85 | engines: {node: '>=6.0.0'} 86 | 87 | '@jridgewell/set-array@1.2.1': 88 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 89 | engines: {node: '>=6.0.0'} 90 | 91 | '@jridgewell/source-map@0.3.6': 92 | resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} 93 | 94 | '@jridgewell/sourcemap-codec@1.5.0': 95 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 96 | 97 | '@jridgewell/trace-mapping@0.3.25': 98 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 99 | 100 | '@rollup/pluginutils@4.2.1': 101 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 102 | engines: {node: '>= 8.0.0'} 103 | 104 | '@sindresorhus/is@0.14.0': 105 | resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} 106 | engines: {node: '>=6'} 107 | 108 | '@szmarczak/http-timer@1.1.2': 109 | resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} 110 | engines: {node: '>=6'} 111 | 112 | '@types/keyv@3.1.4': 113 | resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} 114 | 115 | '@types/node-fetch@2.6.11': 116 | resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} 117 | 118 | '@types/node@22.2.0': 119 | resolution: {integrity: sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==} 120 | 121 | '@types/parse-json@4.0.2': 122 | resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} 123 | 124 | '@types/responselike@1.0.3': 125 | resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} 126 | 127 | '@types/sharp@0.30.5': 128 | resolution: {integrity: sha512-EhO29617AIBqxoVtpd1qdBanWpspk/kD2B6qTFRJ31Q23Rdf+DNU1xlHSwtqvwq1vgOqBwq1i38SX+HGCymIQg==} 129 | 130 | '@vivaxy/git@4.2.1': 131 | resolution: {integrity: sha512-Gpnne7sk3oTd0fyw1J3clVX2ZBkJjNRduccDbOcgYv31M35nBzUHSzQ56eFiJsOTNfdVadL2bo0ICw5oilGfEA==} 132 | 133 | acorn@8.12.1: 134 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 135 | engines: {node: '>=0.4.0'} 136 | hasBin: true 137 | 138 | ansi-align@3.0.1: 139 | resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} 140 | 141 | ansi-regex@5.0.1: 142 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 143 | engines: {node: '>=8'} 144 | 145 | ansi-styles@3.2.1: 146 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 147 | engines: {node: '>=4'} 148 | 149 | ansi-styles@4.3.0: 150 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 151 | engines: {node: '>=8'} 152 | 153 | asynckit@0.4.0: 154 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 155 | 156 | balanced-match@1.0.2: 157 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 158 | 159 | base64-js@1.5.1: 160 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 161 | 162 | bl@4.1.0: 163 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 164 | 165 | blurhash@1.1.5: 166 | resolution: {integrity: sha512-a+LO3A2DfxTaTztsmkbLYmUzUeApi0LZuKalwbNmqAHR6HhJGMt1qSV/R3wc+w4DL28holjqO3Bg74aUGavGjg==} 167 | 168 | boxen@5.1.2: 169 | resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} 170 | engines: {node: '>=10'} 171 | 172 | brace-expansion@1.1.11: 173 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 174 | 175 | buffer-from@1.1.2: 176 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 177 | 178 | buffer@5.7.1: 179 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 180 | 181 | cacheable-request@6.1.0: 182 | resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} 183 | engines: {node: '>=8'} 184 | 185 | callsites@3.1.0: 186 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 187 | engines: {node: '>=6'} 188 | 189 | camelcase@6.3.0: 190 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 191 | engines: {node: '>=10'} 192 | 193 | chalk@2.4.2: 194 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 195 | engines: {node: '>=4'} 196 | 197 | chalk@4.1.2: 198 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 199 | engines: {node: '>=10'} 200 | 201 | chardet@0.7.0: 202 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} 203 | 204 | chownr@1.1.4: 205 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 206 | 207 | ci-info@2.0.0: 208 | resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} 209 | 210 | cli-boxes@2.2.1: 211 | resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} 212 | engines: {node: '>=6'} 213 | 214 | cliui@8.0.1: 215 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 216 | engines: {node: '>=12'} 217 | 218 | clone-response@1.0.3: 219 | resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} 220 | 221 | color-convert@1.9.3: 222 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 223 | 224 | color-convert@2.0.1: 225 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 226 | engines: {node: '>=7.0.0'} 227 | 228 | color-name@1.1.3: 229 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 230 | 231 | color-name@1.1.4: 232 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 233 | 234 | color-string@1.9.1: 235 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 236 | 237 | color@4.2.3: 238 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 239 | engines: {node: '>=12.5.0'} 240 | 241 | combined-stream@1.0.8: 242 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 243 | engines: {node: '>= 0.8'} 244 | 245 | commander@2.20.3: 246 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 247 | 248 | commondir@1.0.1: 249 | resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 250 | 251 | concat-map@0.0.1: 252 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 253 | 254 | configstore@5.0.1: 255 | resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} 256 | engines: {node: '>=8'} 257 | 258 | conventional-commit-types@3.0.0: 259 | resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} 260 | 261 | cosmiconfig@7.1.0: 262 | resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} 263 | engines: {node: '>=10'} 264 | 265 | cross-spawn@7.0.3: 266 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 267 | engines: {node: '>= 8'} 268 | 269 | crypto-random-string@2.0.0: 270 | resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} 271 | engines: {node: '>=8'} 272 | 273 | decompress-response@3.3.0: 274 | resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} 275 | engines: {node: '>=4'} 276 | 277 | decompress-response@6.0.0: 278 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 279 | engines: {node: '>=10'} 280 | 281 | deep-extend@0.6.0: 282 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 283 | engines: {node: '>=4.0.0'} 284 | 285 | defer-to-connect@1.1.3: 286 | resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} 287 | 288 | delayed-stream@1.0.0: 289 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 290 | engines: {node: '>=0.4.0'} 291 | 292 | detect-libc@2.0.3: 293 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 294 | engines: {node: '>=8'} 295 | 296 | dot-prop@5.3.0: 297 | resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} 298 | engines: {node: '>=8'} 299 | 300 | duplexer3@0.1.5: 301 | resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} 302 | 303 | emoji-regex@8.0.0: 304 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 305 | 306 | end-of-stream@1.4.4: 307 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 308 | 309 | error-ex@1.3.2: 310 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 311 | 312 | escalade@3.1.2: 313 | resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} 314 | engines: {node: '>=6'} 315 | 316 | escape-goat@2.1.1: 317 | resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} 318 | engines: {node: '>=8'} 319 | 320 | escape-string-regexp@1.0.5: 321 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 322 | engines: {node: '>=0.8.0'} 323 | 324 | estree-walker@2.0.2: 325 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 326 | 327 | execa@5.1.1: 328 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 329 | engines: {node: '>=10'} 330 | 331 | expand-template@2.0.3: 332 | resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} 333 | engines: {node: '>=6'} 334 | 335 | external-editor@3.1.0: 336 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} 337 | engines: {node: '>=4'} 338 | 339 | figures@3.2.0: 340 | resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} 341 | engines: {node: '>=8'} 342 | 343 | find-cache-dir@3.3.2: 344 | resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} 345 | engines: {node: '>=8'} 346 | 347 | find-up@4.1.0: 348 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 349 | engines: {node: '>=8'} 350 | 351 | form-data@4.0.0: 352 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 353 | engines: {node: '>= 6'} 354 | 355 | fs-constants@1.0.0: 356 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 357 | 358 | fs-extra@10.1.0: 359 | resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} 360 | engines: {node: '>=12'} 361 | 362 | fs.realpath@1.0.0: 363 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 364 | 365 | fsevents@2.3.3: 366 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 367 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 368 | os: [darwin] 369 | 370 | gacp@3.0.3: 371 | resolution: {integrity: sha512-ncBb1MI/TRWhGVIRHJYl2MkLfVzrKHdy+9YlqzbdpAx0/yOktJQjrNeH0ublga49Jzk7VoSU8QdUfEexDJOd6g==} 372 | hasBin: true 373 | 374 | get-caller-file@2.0.5: 375 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 376 | engines: {node: 6.* || 8.* || >= 10.*} 377 | 378 | get-stream@4.1.0: 379 | resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} 380 | engines: {node: '>=6'} 381 | 382 | get-stream@5.2.0: 383 | resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} 384 | engines: {node: '>=8'} 385 | 386 | get-stream@6.0.1: 387 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 388 | engines: {node: '>=10'} 389 | 390 | github-from-package@0.0.0: 391 | resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} 392 | 393 | glob@7.2.3: 394 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 395 | deprecated: Glob versions prior to v9 are no longer supported 396 | 397 | global-dirs@0.1.1: 398 | resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} 399 | engines: {node: '>=4'} 400 | 401 | global-dirs@3.0.1: 402 | resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} 403 | engines: {node: '>=10'} 404 | 405 | got@9.6.0: 406 | resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} 407 | engines: {node: '>=8.6'} 408 | 409 | graceful-fs@4.2.11: 410 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 411 | 412 | has-flag@3.0.0: 413 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 414 | engines: {node: '>=4'} 415 | 416 | has-flag@4.0.0: 417 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 418 | engines: {node: '>=8'} 419 | 420 | has-yarn@2.1.0: 421 | resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} 422 | engines: {node: '>=8'} 423 | 424 | http-cache-semantics@4.1.1: 425 | resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} 426 | 427 | human-signals@2.1.0: 428 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 429 | engines: {node: '>=10.17.0'} 430 | 431 | iconv-lite@0.4.24: 432 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 433 | engines: {node: '>=0.10.0'} 434 | 435 | ieee754@1.2.1: 436 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 437 | 438 | image-size@1.1.1: 439 | resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} 440 | engines: {node: '>=16.x'} 441 | hasBin: true 442 | 443 | import-fresh@3.3.0: 444 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 445 | engines: {node: '>=6'} 446 | 447 | import-lazy@2.1.0: 448 | resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} 449 | engines: {node: '>=4'} 450 | 451 | imurmurhash@0.1.4: 452 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 453 | engines: {node: '>=0.8.19'} 454 | 455 | inflight@1.0.6: 456 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 457 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 458 | 459 | inherits@2.0.4: 460 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 461 | 462 | ini@1.3.8: 463 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 464 | 465 | ini@2.0.0: 466 | resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} 467 | engines: {node: '>=10'} 468 | 469 | is-arrayish@0.2.1: 470 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 471 | 472 | is-arrayish@0.3.2: 473 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 474 | 475 | is-ci@2.0.0: 476 | resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} 477 | hasBin: true 478 | 479 | is-fullwidth-code-point@3.0.0: 480 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 481 | engines: {node: '>=8'} 482 | 483 | is-installed-globally@0.4.0: 484 | resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} 485 | engines: {node: '>=10'} 486 | 487 | is-npm@5.0.0: 488 | resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} 489 | engines: {node: '>=10'} 490 | 491 | is-obj@2.0.0: 492 | resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} 493 | engines: {node: '>=8'} 494 | 495 | is-path-inside@3.0.3: 496 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 497 | engines: {node: '>=8'} 498 | 499 | is-stream@2.0.1: 500 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 501 | engines: {node: '>=8'} 502 | 503 | is-typedarray@1.0.0: 504 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 505 | 506 | is-yarn-global@0.3.0: 507 | resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} 508 | 509 | isexe@2.0.0: 510 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 511 | 512 | jest-worker@26.6.2: 513 | resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} 514 | engines: {node: '>= 10.13.0'} 515 | 516 | js-tokens@4.0.0: 517 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 518 | 519 | json-buffer@3.0.0: 520 | resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} 521 | 522 | json-parse-even-better-errors@2.3.1: 523 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 524 | 525 | jsonfile@6.1.0: 526 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 527 | 528 | keyv@3.1.0: 529 | resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} 530 | 531 | kleur@3.0.3: 532 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 533 | engines: {node: '>=6'} 534 | 535 | latest-version@5.1.0: 536 | resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} 537 | engines: {node: '>=8'} 538 | 539 | lines-and-columns@1.2.4: 540 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 541 | 542 | locate-path@5.0.0: 543 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 544 | engines: {node: '>=8'} 545 | 546 | lodash@4.17.21: 547 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 548 | 549 | log-symbols@3.0.0: 550 | resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} 551 | engines: {node: '>=8'} 552 | 553 | log-util@2.3.0: 554 | resolution: {integrity: sha512-ZFjjNKfCGicmPGUlcQX32TvOP/72qNpjgKha5MCsYPHj1rdQI4Cn6QSNGUpdzmG1KYAX3v/76oRG0df2M9nOKQ==} 555 | 556 | lowercase-keys@1.0.1: 557 | resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} 558 | engines: {node: '>=0.10.0'} 559 | 560 | lowercase-keys@2.0.0: 561 | resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} 562 | engines: {node: '>=8'} 563 | 564 | make-dir@3.1.0: 565 | resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} 566 | engines: {node: '>=8'} 567 | 568 | merge-stream@2.0.0: 569 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 570 | 571 | mime-db@1.52.0: 572 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 573 | engines: {node: '>= 0.6'} 574 | 575 | mime-types@2.1.35: 576 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 577 | engines: {node: '>= 0.6'} 578 | 579 | mimic-fn@2.1.0: 580 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 581 | engines: {node: '>=6'} 582 | 583 | mimic-response@1.0.1: 584 | resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} 585 | engines: {node: '>=4'} 586 | 587 | mimic-response@3.1.0: 588 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 589 | engines: {node: '>=10'} 590 | 591 | minimatch@3.1.2: 592 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 593 | 594 | minimist@1.2.8: 595 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 596 | 597 | mkdirp-classic@0.5.3: 598 | resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} 599 | 600 | napi-build-utils@1.0.2: 601 | resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} 602 | 603 | node-abi@3.65.0: 604 | resolution: {integrity: sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==} 605 | engines: {node: '>=10'} 606 | 607 | node-addon-api@5.1.0: 608 | resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} 609 | 610 | node-fetch@2.6.7: 611 | resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} 612 | engines: {node: 4.x || >=6.0.0} 613 | peerDependencies: 614 | encoding: ^0.1.0 615 | peerDependenciesMeta: 616 | encoding: 617 | optional: true 618 | 619 | normalize-url@4.5.1: 620 | resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} 621 | engines: {node: '>=8'} 622 | 623 | npm-run-path@4.0.1: 624 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 625 | engines: {node: '>=8'} 626 | 627 | once@1.4.0: 628 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 629 | 630 | onetime@5.1.2: 631 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 632 | engines: {node: '>=6'} 633 | 634 | os-tmpdir@1.0.2: 635 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} 636 | engines: {node: '>=0.10.0'} 637 | 638 | p-cancelable@1.1.0: 639 | resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} 640 | engines: {node: '>=6'} 641 | 642 | p-limit@2.3.0: 643 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 644 | engines: {node: '>=6'} 645 | 646 | p-locate@4.1.0: 647 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 648 | engines: {node: '>=8'} 649 | 650 | p-try@2.2.0: 651 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 652 | engines: {node: '>=6'} 653 | 654 | package-json@6.5.0: 655 | resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} 656 | engines: {node: '>=8'} 657 | 658 | parent-module@1.0.1: 659 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 660 | engines: {node: '>=6'} 661 | 662 | parse-json@5.2.0: 663 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 664 | engines: {node: '>=8'} 665 | 666 | path-exists@4.0.0: 667 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 668 | engines: {node: '>=8'} 669 | 670 | path-is-absolute@1.0.1: 671 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 672 | engines: {node: '>=0.10.0'} 673 | 674 | path-key@3.1.1: 675 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 676 | engines: {node: '>=8'} 677 | 678 | path-type@4.0.0: 679 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 680 | engines: {node: '>=8'} 681 | 682 | picocolors@1.0.1: 683 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 684 | 685 | picomatch@2.3.1: 686 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 687 | engines: {node: '>=8.6'} 688 | 689 | pkg-dir@4.2.0: 690 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 691 | engines: {node: '>=8'} 692 | 693 | prebuild-install@7.1.2: 694 | resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} 695 | engines: {node: '>=10'} 696 | hasBin: true 697 | 698 | prepend-http@2.0.0: 699 | resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} 700 | engines: {node: '>=4'} 701 | 702 | prompts@2.4.2: 703 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 704 | engines: {node: '>= 6'} 705 | 706 | pump@3.0.0: 707 | resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} 708 | 709 | pupa@2.1.1: 710 | resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} 711 | engines: {node: '>=8'} 712 | 713 | queue@6.0.2: 714 | resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} 715 | 716 | randombytes@2.1.0: 717 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 718 | 719 | rc@1.2.8: 720 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 721 | hasBin: true 722 | 723 | readable-stream@3.6.2: 724 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 725 | engines: {node: '>= 6'} 726 | 727 | registry-auth-token@4.2.2: 728 | resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} 729 | engines: {node: '>=6.0.0'} 730 | 731 | registry-url@5.1.0: 732 | resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} 733 | engines: {node: '>=8'} 734 | 735 | require-directory@2.1.1: 736 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 737 | engines: {node: '>=0.10.0'} 738 | 739 | resolve-from@4.0.0: 740 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 741 | engines: {node: '>=4'} 742 | 743 | resolve-from@5.0.0: 744 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 745 | engines: {node: '>=8'} 746 | 747 | resolve-global@1.0.0: 748 | resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} 749 | engines: {node: '>=8'} 750 | 751 | responselike@1.0.2: 752 | resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} 753 | 754 | right-pad@1.0.1: 755 | resolution: {integrity: sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==} 756 | engines: {node: '>= 0.10'} 757 | deprecated: Please use String.prototype.padEnd() over this package. 758 | 759 | rimraf@3.0.2: 760 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 761 | deprecated: Rimraf versions prior to v4 are no longer supported 762 | hasBin: true 763 | 764 | rollup-plugin-terser@7.0.2: 765 | resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} 766 | deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser 767 | peerDependencies: 768 | rollup: ^2.0.0 769 | 770 | rollup-plugin-typescript2@0.34.1: 771 | resolution: {integrity: sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==} 772 | peerDependencies: 773 | rollup: '>=1.26.3' 774 | typescript: '>=2.4.0' 775 | 776 | rollup@2.79.1: 777 | resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} 778 | engines: {node: '>=10.0.0'} 779 | hasBin: true 780 | 781 | safe-buffer@5.2.1: 782 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 783 | 784 | safer-buffer@2.1.2: 785 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 786 | 787 | semver-diff@3.1.1: 788 | resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} 789 | engines: {node: '>=8'} 790 | 791 | semver@6.3.1: 792 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 793 | hasBin: true 794 | 795 | semver@7.6.3: 796 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 797 | engines: {node: '>=10'} 798 | hasBin: true 799 | 800 | serialize-javascript@4.0.0: 801 | resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} 802 | 803 | sharp@0.30.7: 804 | resolution: {integrity: sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==} 805 | engines: {node: '>=12.13.0'} 806 | 807 | shebang-command@2.0.0: 808 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 809 | engines: {node: '>=8'} 810 | 811 | shebang-regex@3.0.0: 812 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 813 | engines: {node: '>=8'} 814 | 815 | signal-exit@3.0.7: 816 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 817 | 818 | simple-concat@1.0.1: 819 | resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} 820 | 821 | simple-get@4.0.1: 822 | resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} 823 | 824 | simple-swizzle@0.2.2: 825 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 826 | 827 | sisteransi@1.0.5: 828 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 829 | 830 | source-map-support@0.5.21: 831 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 832 | 833 | source-map@0.6.1: 834 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 835 | engines: {node: '>=0.10.0'} 836 | 837 | string-width@4.2.3: 838 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 839 | engines: {node: '>=8'} 840 | 841 | string_decoder@1.3.0: 842 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 843 | 844 | strip-ansi@6.0.1: 845 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 846 | engines: {node: '>=8'} 847 | 848 | strip-final-newline@2.0.0: 849 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 850 | engines: {node: '>=6'} 851 | 852 | strip-json-comments@2.0.1: 853 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 854 | engines: {node: '>=0.10.0'} 855 | 856 | supports-color@5.5.0: 857 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 858 | engines: {node: '>=4'} 859 | 860 | supports-color@7.2.0: 861 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 862 | engines: {node: '>=8'} 863 | 864 | tar-fs@2.1.1: 865 | resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} 866 | 867 | tar-stream@2.2.0: 868 | resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} 869 | engines: {node: '>=6'} 870 | 871 | terser@5.31.5: 872 | resolution: {integrity: sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q==} 873 | engines: {node: '>=10'} 874 | hasBin: true 875 | 876 | tmp@0.0.33: 877 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} 878 | engines: {node: '>=0.6.0'} 879 | 880 | to-readable-stream@1.0.0: 881 | resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} 882 | engines: {node: '>=6'} 883 | 884 | tr46@0.0.3: 885 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 886 | 887 | tslib@2.6.3: 888 | resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} 889 | 890 | tunnel-agent@0.6.0: 891 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 892 | 893 | type-fest@0.20.2: 894 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 895 | engines: {node: '>=10'} 896 | 897 | typedarray-to-buffer@3.1.5: 898 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 899 | 900 | typescript@4.9.5: 901 | resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} 902 | engines: {node: '>=4.2.0'} 903 | hasBin: true 904 | 905 | undici-types@6.13.0: 906 | resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} 907 | 908 | unique-string@2.0.0: 909 | resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} 910 | engines: {node: '>=8'} 911 | 912 | universalify@2.0.1: 913 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 914 | engines: {node: '>= 10.0.0'} 915 | 916 | update-notifier@5.1.0: 917 | resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} 918 | engines: {node: '>=10'} 919 | 920 | url-parse-lax@3.0.0: 921 | resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} 922 | engines: {node: '>=4'} 923 | 924 | util-deprecate@1.0.2: 925 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 926 | 927 | webidl-conversions@3.0.1: 928 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 929 | 930 | whatwg-url@5.0.0: 931 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 932 | 933 | which@2.0.2: 934 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 935 | engines: {node: '>= 8'} 936 | hasBin: true 937 | 938 | widest-line@3.1.0: 939 | resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} 940 | engines: {node: '>=8'} 941 | 942 | word-wrap@1.2.5: 943 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 944 | engines: {node: '>=0.10.0'} 945 | 946 | wrap-ansi@7.0.0: 947 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 948 | engines: {node: '>=10'} 949 | 950 | wrappy@1.0.2: 951 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 952 | 953 | write-file-atomic@3.0.3: 954 | resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} 955 | 956 | xdg-basedir@4.0.0: 957 | resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} 958 | engines: {node: '>=8'} 959 | 960 | y18n@5.0.8: 961 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 962 | engines: {node: '>=10'} 963 | 964 | yaml@1.10.2: 965 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 966 | engines: {node: '>= 6'} 967 | 968 | yargs-parser@21.1.1: 969 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 970 | engines: {node: '>=12'} 971 | 972 | yargs@17.7.2: 973 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 974 | engines: {node: '>=12'} 975 | 976 | snapshots: 977 | 978 | '@babel/code-frame@7.24.7': 979 | dependencies: 980 | '@babel/highlight': 7.24.7 981 | picocolors: 1.0.1 982 | 983 | '@babel/helper-validator-identifier@7.24.7': {} 984 | 985 | '@babel/highlight@7.24.7': 986 | dependencies: 987 | '@babel/helper-validator-identifier': 7.24.7 988 | chalk: 2.4.2 989 | js-tokens: 4.0.0 990 | picocolors: 1.0.1 991 | 992 | '@commitlint/execute-rule@12.1.4': {} 993 | 994 | '@commitlint/load@12.1.4': 995 | dependencies: 996 | '@commitlint/execute-rule': 12.1.4 997 | '@commitlint/resolve-extends': 12.1.4 998 | '@commitlint/types': 12.1.4 999 | chalk: 4.1.2 1000 | cosmiconfig: 7.1.0 1001 | lodash: 4.17.21 1002 | resolve-from: 5.0.0 1003 | 1004 | '@commitlint/resolve-extends@12.1.4': 1005 | dependencies: 1006 | import-fresh: 3.3.0 1007 | lodash: 4.17.21 1008 | resolve-from: 5.0.0 1009 | resolve-global: 1.0.0 1010 | 1011 | '@commitlint/types@12.1.4': 1012 | dependencies: 1013 | chalk: 4.1.2 1014 | 1015 | '@jridgewell/gen-mapping@0.3.5': 1016 | dependencies: 1017 | '@jridgewell/set-array': 1.2.1 1018 | '@jridgewell/sourcemap-codec': 1.5.0 1019 | '@jridgewell/trace-mapping': 0.3.25 1020 | 1021 | '@jridgewell/resolve-uri@3.1.2': {} 1022 | 1023 | '@jridgewell/set-array@1.2.1': {} 1024 | 1025 | '@jridgewell/source-map@0.3.6': 1026 | dependencies: 1027 | '@jridgewell/gen-mapping': 0.3.5 1028 | '@jridgewell/trace-mapping': 0.3.25 1029 | 1030 | '@jridgewell/sourcemap-codec@1.5.0': {} 1031 | 1032 | '@jridgewell/trace-mapping@0.3.25': 1033 | dependencies: 1034 | '@jridgewell/resolve-uri': 3.1.2 1035 | '@jridgewell/sourcemap-codec': 1.5.0 1036 | 1037 | '@rollup/pluginutils@4.2.1': 1038 | dependencies: 1039 | estree-walker: 2.0.2 1040 | picomatch: 2.3.1 1041 | 1042 | '@sindresorhus/is@0.14.0': {} 1043 | 1044 | '@szmarczak/http-timer@1.1.2': 1045 | dependencies: 1046 | defer-to-connect: 1.1.3 1047 | 1048 | '@types/keyv@3.1.4': 1049 | dependencies: 1050 | '@types/node': 22.2.0 1051 | 1052 | '@types/node-fetch@2.6.11': 1053 | dependencies: 1054 | '@types/node': 22.2.0 1055 | form-data: 4.0.0 1056 | 1057 | '@types/node@22.2.0': 1058 | dependencies: 1059 | undici-types: 6.13.0 1060 | 1061 | '@types/parse-json@4.0.2': {} 1062 | 1063 | '@types/responselike@1.0.3': 1064 | dependencies: 1065 | '@types/node': 22.2.0 1066 | 1067 | '@types/sharp@0.30.5': 1068 | dependencies: 1069 | '@types/node': 22.2.0 1070 | 1071 | '@vivaxy/git@4.2.1': 1072 | dependencies: 1073 | execa: 5.1.1 1074 | fs-extra: 10.1.0 1075 | 1076 | acorn@8.12.1: {} 1077 | 1078 | ansi-align@3.0.1: 1079 | dependencies: 1080 | string-width: 4.2.3 1081 | 1082 | ansi-regex@5.0.1: {} 1083 | 1084 | ansi-styles@3.2.1: 1085 | dependencies: 1086 | color-convert: 1.9.3 1087 | 1088 | ansi-styles@4.3.0: 1089 | dependencies: 1090 | color-convert: 2.0.1 1091 | 1092 | asynckit@0.4.0: {} 1093 | 1094 | balanced-match@1.0.2: {} 1095 | 1096 | base64-js@1.5.1: {} 1097 | 1098 | bl@4.1.0: 1099 | dependencies: 1100 | buffer: 5.7.1 1101 | inherits: 2.0.4 1102 | readable-stream: 3.6.2 1103 | 1104 | blurhash@1.1.5: {} 1105 | 1106 | boxen@5.1.2: 1107 | dependencies: 1108 | ansi-align: 3.0.1 1109 | camelcase: 6.3.0 1110 | chalk: 4.1.2 1111 | cli-boxes: 2.2.1 1112 | string-width: 4.2.3 1113 | type-fest: 0.20.2 1114 | widest-line: 3.1.0 1115 | wrap-ansi: 7.0.0 1116 | 1117 | brace-expansion@1.1.11: 1118 | dependencies: 1119 | balanced-match: 1.0.2 1120 | concat-map: 0.0.1 1121 | 1122 | buffer-from@1.1.2: {} 1123 | 1124 | buffer@5.7.1: 1125 | dependencies: 1126 | base64-js: 1.5.1 1127 | ieee754: 1.2.1 1128 | 1129 | cacheable-request@6.1.0: 1130 | dependencies: 1131 | clone-response: 1.0.3 1132 | get-stream: 5.2.0 1133 | http-cache-semantics: 4.1.1 1134 | keyv: 3.1.0 1135 | lowercase-keys: 2.0.0 1136 | normalize-url: 4.5.1 1137 | responselike: 1.0.2 1138 | 1139 | callsites@3.1.0: {} 1140 | 1141 | camelcase@6.3.0: {} 1142 | 1143 | chalk@2.4.2: 1144 | dependencies: 1145 | ansi-styles: 3.2.1 1146 | escape-string-regexp: 1.0.5 1147 | supports-color: 5.5.0 1148 | 1149 | chalk@4.1.2: 1150 | dependencies: 1151 | ansi-styles: 4.3.0 1152 | supports-color: 7.2.0 1153 | 1154 | chardet@0.7.0: {} 1155 | 1156 | chownr@1.1.4: {} 1157 | 1158 | ci-info@2.0.0: {} 1159 | 1160 | cli-boxes@2.2.1: {} 1161 | 1162 | cliui@8.0.1: 1163 | dependencies: 1164 | string-width: 4.2.3 1165 | strip-ansi: 6.0.1 1166 | wrap-ansi: 7.0.0 1167 | 1168 | clone-response@1.0.3: 1169 | dependencies: 1170 | mimic-response: 1.0.1 1171 | 1172 | color-convert@1.9.3: 1173 | dependencies: 1174 | color-name: 1.1.3 1175 | 1176 | color-convert@2.0.1: 1177 | dependencies: 1178 | color-name: 1.1.4 1179 | 1180 | color-name@1.1.3: {} 1181 | 1182 | color-name@1.1.4: {} 1183 | 1184 | color-string@1.9.1: 1185 | dependencies: 1186 | color-name: 1.1.4 1187 | simple-swizzle: 0.2.2 1188 | 1189 | color@4.2.3: 1190 | dependencies: 1191 | color-convert: 2.0.1 1192 | color-string: 1.9.1 1193 | 1194 | combined-stream@1.0.8: 1195 | dependencies: 1196 | delayed-stream: 1.0.0 1197 | 1198 | commander@2.20.3: {} 1199 | 1200 | commondir@1.0.1: {} 1201 | 1202 | concat-map@0.0.1: {} 1203 | 1204 | configstore@5.0.1: 1205 | dependencies: 1206 | dot-prop: 5.3.0 1207 | graceful-fs: 4.2.11 1208 | make-dir: 3.1.0 1209 | unique-string: 2.0.0 1210 | write-file-atomic: 3.0.3 1211 | xdg-basedir: 4.0.0 1212 | 1213 | conventional-commit-types@3.0.0: {} 1214 | 1215 | cosmiconfig@7.1.0: 1216 | dependencies: 1217 | '@types/parse-json': 4.0.2 1218 | import-fresh: 3.3.0 1219 | parse-json: 5.2.0 1220 | path-type: 4.0.0 1221 | yaml: 1.10.2 1222 | 1223 | cross-spawn@7.0.3: 1224 | dependencies: 1225 | path-key: 3.1.1 1226 | shebang-command: 2.0.0 1227 | which: 2.0.2 1228 | 1229 | crypto-random-string@2.0.0: {} 1230 | 1231 | decompress-response@3.3.0: 1232 | dependencies: 1233 | mimic-response: 1.0.1 1234 | 1235 | decompress-response@6.0.0: 1236 | dependencies: 1237 | mimic-response: 3.1.0 1238 | 1239 | deep-extend@0.6.0: {} 1240 | 1241 | defer-to-connect@1.1.3: {} 1242 | 1243 | delayed-stream@1.0.0: {} 1244 | 1245 | detect-libc@2.0.3: {} 1246 | 1247 | dot-prop@5.3.0: 1248 | dependencies: 1249 | is-obj: 2.0.0 1250 | 1251 | duplexer3@0.1.5: {} 1252 | 1253 | emoji-regex@8.0.0: {} 1254 | 1255 | end-of-stream@1.4.4: 1256 | dependencies: 1257 | once: 1.4.0 1258 | 1259 | error-ex@1.3.2: 1260 | dependencies: 1261 | is-arrayish: 0.2.1 1262 | 1263 | escalade@3.1.2: {} 1264 | 1265 | escape-goat@2.1.1: {} 1266 | 1267 | escape-string-regexp@1.0.5: {} 1268 | 1269 | estree-walker@2.0.2: {} 1270 | 1271 | execa@5.1.1: 1272 | dependencies: 1273 | cross-spawn: 7.0.3 1274 | get-stream: 6.0.1 1275 | human-signals: 2.1.0 1276 | is-stream: 2.0.1 1277 | merge-stream: 2.0.0 1278 | npm-run-path: 4.0.1 1279 | onetime: 5.1.2 1280 | signal-exit: 3.0.7 1281 | strip-final-newline: 2.0.0 1282 | 1283 | expand-template@2.0.3: {} 1284 | 1285 | external-editor@3.1.0: 1286 | dependencies: 1287 | chardet: 0.7.0 1288 | iconv-lite: 0.4.24 1289 | tmp: 0.0.33 1290 | 1291 | figures@3.2.0: 1292 | dependencies: 1293 | escape-string-regexp: 1.0.5 1294 | 1295 | find-cache-dir@3.3.2: 1296 | dependencies: 1297 | commondir: 1.0.1 1298 | make-dir: 3.1.0 1299 | pkg-dir: 4.2.0 1300 | 1301 | find-up@4.1.0: 1302 | dependencies: 1303 | locate-path: 5.0.0 1304 | path-exists: 4.0.0 1305 | 1306 | form-data@4.0.0: 1307 | dependencies: 1308 | asynckit: 0.4.0 1309 | combined-stream: 1.0.8 1310 | mime-types: 2.1.35 1311 | 1312 | fs-constants@1.0.0: {} 1313 | 1314 | fs-extra@10.1.0: 1315 | dependencies: 1316 | graceful-fs: 4.2.11 1317 | jsonfile: 6.1.0 1318 | universalify: 2.0.1 1319 | 1320 | fs.realpath@1.0.0: {} 1321 | 1322 | fsevents@2.3.3: 1323 | optional: true 1324 | 1325 | gacp@3.0.3: 1326 | dependencies: 1327 | '@commitlint/load': 12.1.4 1328 | '@commitlint/types': 12.1.4 1329 | '@vivaxy/git': 4.2.1 1330 | chalk: 4.1.2 1331 | conventional-commit-types: 3.0.0 1332 | cosmiconfig: 7.1.0 1333 | execa: 5.1.1 1334 | external-editor: 3.1.0 1335 | figures: 3.2.0 1336 | fs-extra: 10.1.0 1337 | log-util: 2.3.0 1338 | prompts: 2.4.2 1339 | right-pad: 1.0.1 1340 | update-notifier: 5.1.0 1341 | word-wrap: 1.2.5 1342 | yargs: 17.7.2 1343 | 1344 | get-caller-file@2.0.5: {} 1345 | 1346 | get-stream@4.1.0: 1347 | dependencies: 1348 | pump: 3.0.0 1349 | 1350 | get-stream@5.2.0: 1351 | dependencies: 1352 | pump: 3.0.0 1353 | 1354 | get-stream@6.0.1: {} 1355 | 1356 | github-from-package@0.0.0: {} 1357 | 1358 | glob@7.2.3: 1359 | dependencies: 1360 | fs.realpath: 1.0.0 1361 | inflight: 1.0.6 1362 | inherits: 2.0.4 1363 | minimatch: 3.1.2 1364 | once: 1.4.0 1365 | path-is-absolute: 1.0.1 1366 | 1367 | global-dirs@0.1.1: 1368 | dependencies: 1369 | ini: 1.3.8 1370 | 1371 | global-dirs@3.0.1: 1372 | dependencies: 1373 | ini: 2.0.0 1374 | 1375 | got@9.6.0: 1376 | dependencies: 1377 | '@sindresorhus/is': 0.14.0 1378 | '@szmarczak/http-timer': 1.1.2 1379 | '@types/keyv': 3.1.4 1380 | '@types/responselike': 1.0.3 1381 | cacheable-request: 6.1.0 1382 | decompress-response: 3.3.0 1383 | duplexer3: 0.1.5 1384 | get-stream: 4.1.0 1385 | lowercase-keys: 1.0.1 1386 | mimic-response: 1.0.1 1387 | p-cancelable: 1.1.0 1388 | to-readable-stream: 1.0.0 1389 | url-parse-lax: 3.0.0 1390 | 1391 | graceful-fs@4.2.11: {} 1392 | 1393 | has-flag@3.0.0: {} 1394 | 1395 | has-flag@4.0.0: {} 1396 | 1397 | has-yarn@2.1.0: {} 1398 | 1399 | http-cache-semantics@4.1.1: {} 1400 | 1401 | human-signals@2.1.0: {} 1402 | 1403 | iconv-lite@0.4.24: 1404 | dependencies: 1405 | safer-buffer: 2.1.2 1406 | 1407 | ieee754@1.2.1: {} 1408 | 1409 | image-size@1.1.1: 1410 | dependencies: 1411 | queue: 6.0.2 1412 | 1413 | import-fresh@3.3.0: 1414 | dependencies: 1415 | parent-module: 1.0.1 1416 | resolve-from: 4.0.0 1417 | 1418 | import-lazy@2.1.0: {} 1419 | 1420 | imurmurhash@0.1.4: {} 1421 | 1422 | inflight@1.0.6: 1423 | dependencies: 1424 | once: 1.4.0 1425 | wrappy: 1.0.2 1426 | 1427 | inherits@2.0.4: {} 1428 | 1429 | ini@1.3.8: {} 1430 | 1431 | ini@2.0.0: {} 1432 | 1433 | is-arrayish@0.2.1: {} 1434 | 1435 | is-arrayish@0.3.2: {} 1436 | 1437 | is-ci@2.0.0: 1438 | dependencies: 1439 | ci-info: 2.0.0 1440 | 1441 | is-fullwidth-code-point@3.0.0: {} 1442 | 1443 | is-installed-globally@0.4.0: 1444 | dependencies: 1445 | global-dirs: 3.0.1 1446 | is-path-inside: 3.0.3 1447 | 1448 | is-npm@5.0.0: {} 1449 | 1450 | is-obj@2.0.0: {} 1451 | 1452 | is-path-inside@3.0.3: {} 1453 | 1454 | is-stream@2.0.1: {} 1455 | 1456 | is-typedarray@1.0.0: {} 1457 | 1458 | is-yarn-global@0.3.0: {} 1459 | 1460 | isexe@2.0.0: {} 1461 | 1462 | jest-worker@26.6.2: 1463 | dependencies: 1464 | '@types/node': 22.2.0 1465 | merge-stream: 2.0.0 1466 | supports-color: 7.2.0 1467 | 1468 | js-tokens@4.0.0: {} 1469 | 1470 | json-buffer@3.0.0: {} 1471 | 1472 | json-parse-even-better-errors@2.3.1: {} 1473 | 1474 | jsonfile@6.1.0: 1475 | dependencies: 1476 | universalify: 2.0.1 1477 | optionalDependencies: 1478 | graceful-fs: 4.2.11 1479 | 1480 | keyv@3.1.0: 1481 | dependencies: 1482 | json-buffer: 3.0.0 1483 | 1484 | kleur@3.0.3: {} 1485 | 1486 | latest-version@5.1.0: 1487 | dependencies: 1488 | package-json: 6.5.0 1489 | 1490 | lines-and-columns@1.2.4: {} 1491 | 1492 | locate-path@5.0.0: 1493 | dependencies: 1494 | p-locate: 4.1.0 1495 | 1496 | lodash@4.17.21: {} 1497 | 1498 | log-symbols@3.0.0: 1499 | dependencies: 1500 | chalk: 2.4.2 1501 | 1502 | log-util@2.3.0: 1503 | dependencies: 1504 | chalk: 2.4.2 1505 | figures: 3.2.0 1506 | log-symbols: 3.0.0 1507 | 1508 | lowercase-keys@1.0.1: {} 1509 | 1510 | lowercase-keys@2.0.0: {} 1511 | 1512 | make-dir@3.1.0: 1513 | dependencies: 1514 | semver: 6.3.1 1515 | 1516 | merge-stream@2.0.0: {} 1517 | 1518 | mime-db@1.52.0: {} 1519 | 1520 | mime-types@2.1.35: 1521 | dependencies: 1522 | mime-db: 1.52.0 1523 | 1524 | mimic-fn@2.1.0: {} 1525 | 1526 | mimic-response@1.0.1: {} 1527 | 1528 | mimic-response@3.1.0: {} 1529 | 1530 | minimatch@3.1.2: 1531 | dependencies: 1532 | brace-expansion: 1.1.11 1533 | 1534 | minimist@1.2.8: {} 1535 | 1536 | mkdirp-classic@0.5.3: {} 1537 | 1538 | napi-build-utils@1.0.2: {} 1539 | 1540 | node-abi@3.65.0: 1541 | dependencies: 1542 | semver: 7.6.3 1543 | 1544 | node-addon-api@5.1.0: {} 1545 | 1546 | node-fetch@2.6.7: 1547 | dependencies: 1548 | whatwg-url: 5.0.0 1549 | 1550 | normalize-url@4.5.1: {} 1551 | 1552 | npm-run-path@4.0.1: 1553 | dependencies: 1554 | path-key: 3.1.1 1555 | 1556 | once@1.4.0: 1557 | dependencies: 1558 | wrappy: 1.0.2 1559 | 1560 | onetime@5.1.2: 1561 | dependencies: 1562 | mimic-fn: 2.1.0 1563 | 1564 | os-tmpdir@1.0.2: {} 1565 | 1566 | p-cancelable@1.1.0: {} 1567 | 1568 | p-limit@2.3.0: 1569 | dependencies: 1570 | p-try: 2.2.0 1571 | 1572 | p-locate@4.1.0: 1573 | dependencies: 1574 | p-limit: 2.3.0 1575 | 1576 | p-try@2.2.0: {} 1577 | 1578 | package-json@6.5.0: 1579 | dependencies: 1580 | got: 9.6.0 1581 | registry-auth-token: 4.2.2 1582 | registry-url: 5.1.0 1583 | semver: 6.3.1 1584 | 1585 | parent-module@1.0.1: 1586 | dependencies: 1587 | callsites: 3.1.0 1588 | 1589 | parse-json@5.2.0: 1590 | dependencies: 1591 | '@babel/code-frame': 7.24.7 1592 | error-ex: 1.3.2 1593 | json-parse-even-better-errors: 2.3.1 1594 | lines-and-columns: 1.2.4 1595 | 1596 | path-exists@4.0.0: {} 1597 | 1598 | path-is-absolute@1.0.1: {} 1599 | 1600 | path-key@3.1.1: {} 1601 | 1602 | path-type@4.0.0: {} 1603 | 1604 | picocolors@1.0.1: {} 1605 | 1606 | picomatch@2.3.1: {} 1607 | 1608 | pkg-dir@4.2.0: 1609 | dependencies: 1610 | find-up: 4.1.0 1611 | 1612 | prebuild-install@7.1.2: 1613 | dependencies: 1614 | detect-libc: 2.0.3 1615 | expand-template: 2.0.3 1616 | github-from-package: 0.0.0 1617 | minimist: 1.2.8 1618 | mkdirp-classic: 0.5.3 1619 | napi-build-utils: 1.0.2 1620 | node-abi: 3.65.0 1621 | pump: 3.0.0 1622 | rc: 1.2.8 1623 | simple-get: 4.0.1 1624 | tar-fs: 2.1.1 1625 | tunnel-agent: 0.6.0 1626 | 1627 | prepend-http@2.0.0: {} 1628 | 1629 | prompts@2.4.2: 1630 | dependencies: 1631 | kleur: 3.0.3 1632 | sisteransi: 1.0.5 1633 | 1634 | pump@3.0.0: 1635 | dependencies: 1636 | end-of-stream: 1.4.4 1637 | once: 1.4.0 1638 | 1639 | pupa@2.1.1: 1640 | dependencies: 1641 | escape-goat: 2.1.1 1642 | 1643 | queue@6.0.2: 1644 | dependencies: 1645 | inherits: 2.0.4 1646 | 1647 | randombytes@2.1.0: 1648 | dependencies: 1649 | safe-buffer: 5.2.1 1650 | 1651 | rc@1.2.8: 1652 | dependencies: 1653 | deep-extend: 0.6.0 1654 | ini: 1.3.8 1655 | minimist: 1.2.8 1656 | strip-json-comments: 2.0.1 1657 | 1658 | readable-stream@3.6.2: 1659 | dependencies: 1660 | inherits: 2.0.4 1661 | string_decoder: 1.3.0 1662 | util-deprecate: 1.0.2 1663 | 1664 | registry-auth-token@4.2.2: 1665 | dependencies: 1666 | rc: 1.2.8 1667 | 1668 | registry-url@5.1.0: 1669 | dependencies: 1670 | rc: 1.2.8 1671 | 1672 | require-directory@2.1.1: {} 1673 | 1674 | resolve-from@4.0.0: {} 1675 | 1676 | resolve-from@5.0.0: {} 1677 | 1678 | resolve-global@1.0.0: 1679 | dependencies: 1680 | global-dirs: 0.1.1 1681 | 1682 | responselike@1.0.2: 1683 | dependencies: 1684 | lowercase-keys: 1.0.1 1685 | 1686 | right-pad@1.0.1: {} 1687 | 1688 | rimraf@3.0.2: 1689 | dependencies: 1690 | glob: 7.2.3 1691 | 1692 | rollup-plugin-terser@7.0.2(rollup@2.79.1): 1693 | dependencies: 1694 | '@babel/code-frame': 7.24.7 1695 | jest-worker: 26.6.2 1696 | rollup: 2.79.1 1697 | serialize-javascript: 4.0.0 1698 | terser: 5.31.5 1699 | 1700 | rollup-plugin-typescript2@0.34.1(rollup@2.79.1)(typescript@4.9.5): 1701 | dependencies: 1702 | '@rollup/pluginutils': 4.2.1 1703 | find-cache-dir: 3.3.2 1704 | fs-extra: 10.1.0 1705 | rollup: 2.79.1 1706 | semver: 7.6.3 1707 | tslib: 2.6.3 1708 | typescript: 4.9.5 1709 | 1710 | rollup@2.79.1: 1711 | optionalDependencies: 1712 | fsevents: 2.3.3 1713 | 1714 | safe-buffer@5.2.1: {} 1715 | 1716 | safer-buffer@2.1.2: {} 1717 | 1718 | semver-diff@3.1.1: 1719 | dependencies: 1720 | semver: 6.3.1 1721 | 1722 | semver@6.3.1: {} 1723 | 1724 | semver@7.6.3: {} 1725 | 1726 | serialize-javascript@4.0.0: 1727 | dependencies: 1728 | randombytes: 2.1.0 1729 | 1730 | sharp@0.30.7: 1731 | dependencies: 1732 | color: 4.2.3 1733 | detect-libc: 2.0.3 1734 | node-addon-api: 5.1.0 1735 | prebuild-install: 7.1.2 1736 | semver: 7.6.3 1737 | simple-get: 4.0.1 1738 | tar-fs: 2.1.1 1739 | tunnel-agent: 0.6.0 1740 | 1741 | shebang-command@2.0.0: 1742 | dependencies: 1743 | shebang-regex: 3.0.0 1744 | 1745 | shebang-regex@3.0.0: {} 1746 | 1747 | signal-exit@3.0.7: {} 1748 | 1749 | simple-concat@1.0.1: {} 1750 | 1751 | simple-get@4.0.1: 1752 | dependencies: 1753 | decompress-response: 6.0.0 1754 | once: 1.4.0 1755 | simple-concat: 1.0.1 1756 | 1757 | simple-swizzle@0.2.2: 1758 | dependencies: 1759 | is-arrayish: 0.3.2 1760 | 1761 | sisteransi@1.0.5: {} 1762 | 1763 | source-map-support@0.5.21: 1764 | dependencies: 1765 | buffer-from: 1.1.2 1766 | source-map: 0.6.1 1767 | 1768 | source-map@0.6.1: {} 1769 | 1770 | string-width@4.2.3: 1771 | dependencies: 1772 | emoji-regex: 8.0.0 1773 | is-fullwidth-code-point: 3.0.0 1774 | strip-ansi: 6.0.1 1775 | 1776 | string_decoder@1.3.0: 1777 | dependencies: 1778 | safe-buffer: 5.2.1 1779 | 1780 | strip-ansi@6.0.1: 1781 | dependencies: 1782 | ansi-regex: 5.0.1 1783 | 1784 | strip-final-newline@2.0.0: {} 1785 | 1786 | strip-json-comments@2.0.1: {} 1787 | 1788 | supports-color@5.5.0: 1789 | dependencies: 1790 | has-flag: 3.0.0 1791 | 1792 | supports-color@7.2.0: 1793 | dependencies: 1794 | has-flag: 4.0.0 1795 | 1796 | tar-fs@2.1.1: 1797 | dependencies: 1798 | chownr: 1.1.4 1799 | mkdirp-classic: 0.5.3 1800 | pump: 3.0.0 1801 | tar-stream: 2.2.0 1802 | 1803 | tar-stream@2.2.0: 1804 | dependencies: 1805 | bl: 4.1.0 1806 | end-of-stream: 1.4.4 1807 | fs-constants: 1.0.0 1808 | inherits: 2.0.4 1809 | readable-stream: 3.6.2 1810 | 1811 | terser@5.31.5: 1812 | dependencies: 1813 | '@jridgewell/source-map': 0.3.6 1814 | acorn: 8.12.1 1815 | commander: 2.20.3 1816 | source-map-support: 0.5.21 1817 | 1818 | tmp@0.0.33: 1819 | dependencies: 1820 | os-tmpdir: 1.0.2 1821 | 1822 | to-readable-stream@1.0.0: {} 1823 | 1824 | tr46@0.0.3: {} 1825 | 1826 | tslib@2.6.3: {} 1827 | 1828 | tunnel-agent@0.6.0: 1829 | dependencies: 1830 | safe-buffer: 5.2.1 1831 | 1832 | type-fest@0.20.2: {} 1833 | 1834 | typedarray-to-buffer@3.1.5: 1835 | dependencies: 1836 | is-typedarray: 1.0.0 1837 | 1838 | typescript@4.9.5: {} 1839 | 1840 | undici-types@6.13.0: {} 1841 | 1842 | unique-string@2.0.0: 1843 | dependencies: 1844 | crypto-random-string: 2.0.0 1845 | 1846 | universalify@2.0.1: {} 1847 | 1848 | update-notifier@5.1.0: 1849 | dependencies: 1850 | boxen: 5.1.2 1851 | chalk: 4.1.2 1852 | configstore: 5.0.1 1853 | has-yarn: 2.1.0 1854 | import-lazy: 2.1.0 1855 | is-ci: 2.0.0 1856 | is-installed-globally: 0.4.0 1857 | is-npm: 5.0.0 1858 | is-yarn-global: 0.3.0 1859 | latest-version: 5.1.0 1860 | pupa: 2.1.1 1861 | semver: 7.6.3 1862 | semver-diff: 3.1.1 1863 | xdg-basedir: 4.0.0 1864 | 1865 | url-parse-lax@3.0.0: 1866 | dependencies: 1867 | prepend-http: 2.0.0 1868 | 1869 | util-deprecate@1.0.2: {} 1870 | 1871 | webidl-conversions@3.0.1: {} 1872 | 1873 | whatwg-url@5.0.0: 1874 | dependencies: 1875 | tr46: 0.0.3 1876 | webidl-conversions: 3.0.1 1877 | 1878 | which@2.0.2: 1879 | dependencies: 1880 | isexe: 2.0.0 1881 | 1882 | widest-line@3.1.0: 1883 | dependencies: 1884 | string-width: 4.2.3 1885 | 1886 | word-wrap@1.2.5: {} 1887 | 1888 | wrap-ansi@7.0.0: 1889 | dependencies: 1890 | ansi-styles: 4.3.0 1891 | string-width: 4.2.3 1892 | strip-ansi: 6.0.1 1893 | 1894 | wrappy@1.0.2: {} 1895 | 1896 | write-file-atomic@3.0.3: 1897 | dependencies: 1898 | imurmurhash: 0.1.4 1899 | is-typedarray: 1.0.0 1900 | signal-exit: 3.0.7 1901 | typedarray-to-buffer: 3.1.5 1902 | 1903 | xdg-basedir@4.0.0: {} 1904 | 1905 | y18n@5.0.8: {} 1906 | 1907 | yaml@1.10.2: {} 1908 | 1909 | yargs-parser@21.1.1: {} 1910 | 1911 | yargs@17.7.2: 1912 | dependencies: 1913 | cliui: 8.0.1 1914 | escalade: 3.1.2 1915 | get-caller-file: 2.0.5 1916 | require-directory: 2.1.1 1917 | string-width: 4.2.3 1918 | y18n: 5.0.8 1919 | yargs-parser: 21.1.1 1920 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import typescript from "rollup-plugin-typescript2"; 2 | import { terser } from "rollup-plugin-terser"; 3 | import pkg from "./package.json"; 4 | 5 | export default { 6 | input: "src/index.ts", 7 | output: [ 8 | { file: pkg.main, format: "cjs", plugins: [terser()] }, 9 | { file: pkg.module, format: "es", plugins: [terser()] }, 10 | ], 11 | external: [ 12 | ...Object.keys(pkg.dependencies || {}), 13 | ...Object.keys(pkg.peerDependencies || {}), 14 | "fs", 15 | ], 16 | 17 | plugins: [typescript({ typescript: require("typescript") })], 18 | }; 19 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import fetch from "node-fetch"; 2 | import { encode } from "blurhash"; 3 | import sharp from 'sharp'; 4 | import sizeOf from "image-size"; 5 | 6 | export interface IOptions { 7 | size?: number; 8 | offline?: boolean; 9 | } 10 | 11 | export interface IOutput { 12 | encoded: string; 13 | width: number; 14 | height: number; 15 | } 16 | 17 | /** 18 | * Generate a Blurhash string from a given image URL or local path. 19 | * 20 | * @param {string} source - The image URL or local path to the image file. 21 | * @param {IOptions} [options] - The optional configuration options. 22 | * @param {number} [options.size=32] - The desired size of the image for encoding the Blurhash. 23 | * @param {boolean} [options.offline=false] - Set to `true` if the image source is a local path, `false` if it's a URL. 24 | * @returns {Promise} The Promise that resolves to the encoded Blurhash string, along with the image width and height. 25 | * @default size 32 26 | * @default offline false 27 | * @example 28 | * ```js 29 | * import { blurhashFromURL } from "blurhash-from-url"; 30 | * 31 | * const output = await blurhashFromURL("https://i.imgur.com/NhfEdg2.png", { 32 | * size: 32, 33 | * }); 34 | * 35 | * console.log(output); 36 | * ``` 37 | */ 38 | export const blurhashFromURL = async (source: string, options: IOptions = {}): Promise => { 39 | const { size = 32, offline = false } = options; 40 | 41 | let width, height, returnedBuffer; 42 | 43 | if (offline) { 44 | const fs = await import("fs"); 45 | const { width: localWidth, height: localHeight } = sizeOf(source); 46 | width = localWidth; 47 | height = localHeight; 48 | returnedBuffer = await sharp(fs.readFileSync(source)).toBuffer(); 49 | } else { 50 | const response = await fetch(source); 51 | const arrayBuffer = await response.arrayBuffer(); 52 | returnedBuffer = Buffer.from(arrayBuffer); 53 | 54 | const { width: remoteWidth, height: remoteHeight } = sizeOf(returnedBuffer); 55 | width = remoteWidth; 56 | height = remoteHeight; 57 | } 58 | 59 | const { info, data } = await sharp(returnedBuffer) 60 | .resize(size, size, { 61 | fit: "inside", 62 | }) 63 | .ensureAlpha() 64 | .raw() 65 | .toBuffer({ 66 | resolveWithObject: true, 67 | }); 68 | 69 | const encoded = encode( 70 | new Uint8ClampedArray(data), 71 | info.width, 72 | info.height, 73 | 4, 74 | 4 75 | ); 76 | 77 | const output: IOutput = { 78 | encoded, 79 | width, 80 | height, 81 | }; 82 | 83 | return output; 84 | }; 85 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | const { blurhashFromURL } = require("../dist/index.js"); 2 | const assert = require('assert').strict; 3 | 4 | async function runTests() { 5 | console.log("Running Blurhash tests...\n"); 6 | 7 | // Test remote image 8 | await testRemoteImage(); 9 | 10 | // Test local image 11 | await testLocalImage(); 12 | 13 | // Test invalid URL 14 | await testInvalidURL(); 15 | 16 | // Test invalid local path 17 | await testInvalidLocalPath(); 18 | 19 | console.log("\nAll tests completed."); 20 | } 21 | 22 | async function testRemoteImage() { 23 | try { 24 | const output = await blurhashFromURL("https://images.unsplash.com/photo-1545769743-16f354c6262b?q=80&w=1932&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", { 25 | size: 32, 26 | }); 27 | console.log("\n✅ Remote Image Blurhash:"); 28 | console.log(output); 29 | assert(output.encoded, "Remote image should have an encoded blurhash"); 30 | assert(output.width > 0, "Remote image should have a positive width"); 31 | assert(output.height > 0, "Remote image should have a positive height"); 32 | } catch (error) { 33 | console.error("❌ Remote image test failed:", error.message); 34 | } 35 | } 36 | 37 | async function testLocalImage() { 38 | try { 39 | const output = await blurhashFromURL("./image/cover.png", { 40 | size: 32, 41 | offline: true, 42 | }); 43 | console.log("\n✅ Local Image Blurhash:"); 44 | console.log(output); 45 | assert(output.encoded, "Local image should have an encoded blurhash"); 46 | assert(output.width > 0, "Local image should have a positive width"); 47 | assert(output.height > 0, "Local image should have a positive height"); 48 | } catch (error) { 49 | console.error("❌ Local image test failed:", error.message); 50 | } 51 | } 52 | 53 | async function testInvalidURL() { 54 | try { 55 | await blurhashFromURL("https://invalid-url.com/non-existent-image.jpg"); 56 | console.error("❌ Invalid URL test should have thrown an error"); 57 | } catch (error) { 58 | console.log("✅ Invalid URL test passed (error thrown as expected)"); 59 | } 60 | } 61 | 62 | async function testInvalidLocalPath() { 63 | try { 64 | await blurhashFromURL("./non-existent-image.png", { offline: true }); 65 | console.error("❌ Invalid local path test should have thrown an error"); 66 | } catch (error) { 67 | console.log("✅ Invalid local path test passed (error thrown as expected)"); 68 | } 69 | } 70 | 71 | runTests().catch(console.error); -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "moduleResolution": "node", 5 | "declaration": true, 6 | "declarationDir": "./dist", 7 | "module": "ESNext", 8 | "noImplicitAny": true, 9 | "outDir": "./dist", 10 | "target": "ESNext", 11 | "sourceMap": true 12 | }, 13 | "include": ["src/**/*"], 14 | "exclude": ["node_modules"] 15 | } 16 | --------------------------------------------------------------------------------