kopia lustrzana https://github.com/cheeaun/phanpy
				
				
				
			Experiment: resolve unresolved shortcodes
							rodzic
							
								
									efe8063361
								
							
						
					
					
						commit
						2eb96d2833
					
				|  | @ -23,6 +23,7 @@ | |||
|         "fast-blurhash": "~1.1.4", | ||||
|         "fast-equals": "~5.3.2", | ||||
|         "fuse.js": "~7.1.0", | ||||
|         "giframe": "~0.2.0", | ||||
|         "html-prettify": "~1.0.7", | ||||
|         "idb-keyval": "~6.2.2", | ||||
|         "intl-locale-textinfo-polyfill": "~3.0.0", | ||||
|  | @ -3893,6 +3894,38 @@ | |||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@mapbox/node-pre-gyp": { | ||||
|       "version": "1.0.11", | ||||
|       "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", | ||||
|       "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", | ||||
|       "license": "BSD-3-Clause", | ||||
|       "dependencies": { | ||||
|         "detect-libc": "^2.0.0", | ||||
|         "https-proxy-agent": "^5.0.0", | ||||
|         "make-dir": "^3.1.0", | ||||
|         "node-fetch": "^2.6.7", | ||||
|         "nopt": "^5.0.0", | ||||
|         "npmlog": "^5.0.1", | ||||
|         "rimraf": "^3.0.2", | ||||
|         "semver": "^7.3.5", | ||||
|         "tar": "^6.1.11" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "node-pre-gyp": "bin/node-pre-gyp" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { | ||||
|       "version": "7.7.3", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", | ||||
|       "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", | ||||
|       "license": "ISC", | ||||
|       "bin": { | ||||
|         "semver": "bin/semver.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@messageformat/parser": { | ||||
|       "version": "5.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.1.tgz", | ||||
|  | @ -4504,6 +4537,12 @@ | |||
|       "devOptional": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/abbrev": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", | ||||
|       "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/acorn": { | ||||
|       "version": "8.12.1", | ||||
|       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", | ||||
|  | @ -4516,6 +4555,18 @@ | |||
|         "node": ">=0.4.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/agent-base": { | ||||
|       "version": "6.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", | ||||
|       "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "debug": "4" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 6.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ajv": { | ||||
|       "version": "8.17.1", | ||||
|       "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", | ||||
|  | @ -4572,6 +4623,26 @@ | |||
|         "node": ">= 8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/aproba": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", | ||||
|       "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/are-we-there-yet": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", | ||||
|       "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", | ||||
|       "deprecated": "This package is no longer supported.", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "delegates": "^1.0.0", | ||||
|         "readable-stream": "^3.6.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/argparse": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", | ||||
|  | @ -4782,7 +4853,6 @@ | |||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", | ||||
|       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", | ||||
|       "dev": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/base64-js": { | ||||
|  | @ -4848,7 +4918,6 @@ | |||
|       "version": "1.1.11", | ||||
|       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | ||||
|       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "balanced-match": "^1.0.0", | ||||
|  | @ -5020,6 +5089,21 @@ | |||
|       ], | ||||
|       "license": "CC-BY-4.0" | ||||
|     }, | ||||
|     "node_modules/canvas": { | ||||
|       "version": "2.11.2", | ||||
|       "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", | ||||
|       "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", | ||||
|       "hasInstallScript": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@mapbox/node-pre-gyp": "^1.0.0", | ||||
|         "nan": "^2.17.0", | ||||
|         "simple-get": "^3.0.3" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/capital-case": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", | ||||
|  | @ -5088,6 +5172,15 @@ | |||
|         "fsevents": "~2.3.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/chownr": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", | ||||
|       "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", | ||||
|       "license": "ISC", | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/chroma-js": { | ||||
|       "version": "3.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-3.1.2.tgz", | ||||
|  | @ -5156,6 +5249,15 @@ | |||
|       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | ||||
|       "devOptional": true | ||||
|     }, | ||||
|     "node_modules/color-support": { | ||||
|       "version": "1.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", | ||||
|       "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", | ||||
|       "license": "ISC", | ||||
|       "bin": { | ||||
|         "color-support": "bin.js" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/colors": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", | ||||
|  | @ -5190,9 +5292,14 @@ | |||
|       "version": "0.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", | ||||
|       "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", | ||||
|       "dev": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/console-control-strings": { | ||||
|       "version": "1.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", | ||||
|       "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/constant-case": { | ||||
|       "version": "3.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", | ||||
|  | @ -5480,7 +5587,6 @@ | |||
|       "version": "4.3.7", | ||||
|       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", | ||||
|       "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", | ||||
|       "devOptional": true, | ||||
|       "dependencies": { | ||||
|         "ms": "^2.1.3" | ||||
|       }, | ||||
|  | @ -5499,6 +5605,18 @@ | |||
|       "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/decompress-response": { | ||||
|       "version": "4.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", | ||||
|       "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "mimic-response": "^2.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/deepmerge": { | ||||
|       "version": "4.3.1", | ||||
|       "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", | ||||
|  | @ -5597,6 +5715,21 @@ | |||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/delegates": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", | ||||
|       "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/detect-libc": { | ||||
|       "version": "2.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", | ||||
|       "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", | ||||
|       "license": "Apache-2.0", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/dom-input-range": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/dom-input-range/-/dom-input-range-2.0.1.tgz", | ||||
|  | @ -5702,8 +5835,7 @@ | |||
|     "node_modules/emoji-regex": { | ||||
|       "version": "8.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | ||||
|       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" | ||||
|     }, | ||||
|     "node_modules/entities": { | ||||
|       "version": "4.5.0", | ||||
|  | @ -6134,11 +6266,40 @@ | |||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fs-minipass": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", | ||||
|       "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "minipass": "^3.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fs-minipass/node_modules/minipass": { | ||||
|       "version": "3.3.6", | ||||
|       "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", | ||||
|       "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "yallist": "^4.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fs-minipass/node_modules/yallist": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||
|       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/fs.realpath": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", | ||||
|       "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" | ||||
|     }, | ||||
|     "node_modules/fsevents": { | ||||
|       "version": "2.3.3", | ||||
|  | @ -6198,6 +6359,48 @@ | |||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/gauge": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", | ||||
|       "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", | ||||
|       "deprecated": "This package is no longer supported.", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "aproba": "^1.0.3 || ^2.0.0", | ||||
|         "color-support": "^1.1.2", | ||||
|         "console-control-strings": "^1.0.0", | ||||
|         "has-unicode": "^2.0.1", | ||||
|         "object-assign": "^4.1.1", | ||||
|         "signal-exit": "^3.0.0", | ||||
|         "string-width": "^4.2.3", | ||||
|         "strip-ansi": "^6.0.1", | ||||
|         "wide-align": "^1.1.2" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/gauge/node_modules/ansi-regex": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/gauge/node_modules/strip-ansi": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "ansi-regex": "^5.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/gensync": { | ||||
|       "version": "1.0.0-beta.2", | ||||
|       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", | ||||
|  | @ -6262,11 +6465,19 @@ | |||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/giframe": { | ||||
|       "version": "0.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/giframe/-/giframe-0.2.0.tgz", | ||||
|       "integrity": "sha512-fJCuJSxTjB4FQ/qDvCZ6bbEXzrvQ1KQtl7BxqAeVunT3tSn5YoABq2o0poWgjnrqZgRSSuGGkLwF8O9oQ51HzQ==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "canvas": "^2.6.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/glob": { | ||||
|       "version": "7.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", | ||||
|       "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "fs.realpath": "^1.0.0", | ||||
|         "inflight": "^1.0.4", | ||||
|  | @ -6420,6 +6631,12 @@ | |||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/has-unicode": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", | ||||
|       "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/hasown": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", | ||||
|  | @ -6456,6 +6673,19 @@ | |||
|       "resolved": "https://registry.npmjs.org/html-prettify/-/html-prettify-1.0.7.tgz", | ||||
|       "integrity": "sha512-99pRsP2PV2DyWnrVibNyad7gNmzCP7AANO8jw7Z9yanWyXH9dPdqdMXGefySplroqCNdk95u7j5TLxfyJ1Cbbg==" | ||||
|     }, | ||||
|     "node_modules/https-proxy-agent": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", | ||||
|       "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "agent-base": "6", | ||||
|         "debug": "4" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/human-signals": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", | ||||
|  | @ -6517,7 +6747,6 @@ | |||
|       "version": "1.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", | ||||
|       "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "once": "^1.3.0", | ||||
|         "wrappy": "1" | ||||
|  | @ -6526,8 +6755,7 @@ | |||
|     "node_modules/inherits": { | ||||
|       "version": "2.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | ||||
|       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | ||||
|     }, | ||||
|     "node_modules/internal-slot": { | ||||
|       "version": "1.0.7", | ||||
|  | @ -6695,7 +6923,6 @@ | |||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", | ||||
|       "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|  | @ -7256,6 +7483,21 @@ | |||
|         "sourcemap-codec": "^1.4.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/make-dir": { | ||||
|       "version": "3.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", | ||||
|       "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "semver": "^6.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/masto": { | ||||
|       "version": "7.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/masto/-/masto-7.2.0.tgz", | ||||
|  | @ -7326,11 +7568,22 @@ | |||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/mimic-response": { | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", | ||||
|       "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/minimatch": { | ||||
|       "version": "3.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", | ||||
|       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", | ||||
|       "dev": true, | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "brace-expansion": "^1.1.7" | ||||
|  | @ -7348,6 +7601,49 @@ | |||
|         "node": ">=16 || 14 >=14.17" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/minizlib": { | ||||
|       "version": "2.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", | ||||
|       "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "minipass": "^3.0.0", | ||||
|         "yallist": "^4.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/minizlib/node_modules/minipass": { | ||||
|       "version": "3.3.6", | ||||
|       "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", | ||||
|       "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "yallist": "^4.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/minizlib/node_modules/yallist": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||
|       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/mkdirp": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", | ||||
|       "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", | ||||
|       "license": "MIT", | ||||
|       "bin": { | ||||
|         "mkdirp": "bin/cmd.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/moize": { | ||||
|       "version": "6.1.6", | ||||
|       "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.6.tgz", | ||||
|  | @ -7372,8 +7668,13 @@ | |||
|     "node_modules/ms": { | ||||
|       "version": "2.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | ||||
|       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", | ||||
|       "devOptional": true | ||||
|       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" | ||||
|     }, | ||||
|     "node_modules/nan": { | ||||
|       "version": "2.23.0", | ||||
|       "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", | ||||
|       "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/nanoid": { | ||||
|       "version": "3.3.11", | ||||
|  | @ -7404,6 +7705,48 @@ | |||
|         "tslib": "^2.0.3" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/node-fetch": { | ||||
|       "version": "2.7.0", | ||||
|       "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", | ||||
|       "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "whatwg-url": "^5.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": "4.x || >=6.0.0" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "encoding": "^0.1.0" | ||||
|       }, | ||||
|       "peerDependenciesMeta": { | ||||
|         "encoding": { | ||||
|           "optional": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/node-fetch/node_modules/tr46": { | ||||
|       "version": "0.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", | ||||
|       "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/node-fetch/node_modules/webidl-conversions": { | ||||
|       "version": "3.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", | ||||
|       "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", | ||||
|       "license": "BSD-2-Clause" | ||||
|     }, | ||||
|     "node_modules/node-fetch/node_modules/whatwg-url": { | ||||
|       "version": "5.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", | ||||
|       "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "tr46": "~0.0.3", | ||||
|         "webidl-conversions": "^3.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/node-html-parser": { | ||||
|       "version": "6.1.13", | ||||
|       "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", | ||||
|  | @ -7421,6 +7764,21 @@ | |||
|       "devOptional": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/nopt": { | ||||
|       "version": "5.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", | ||||
|       "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "abbrev": "1" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "nopt": "bin/nopt.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/normalize-path": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | ||||
|  | @ -7452,6 +7810,19 @@ | |||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/npmlog": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", | ||||
|       "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", | ||||
|       "deprecated": "This package is no longer supported.", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "are-we-there-yet": "^2.0.0", | ||||
|         "console-control-strings": "^1.1.0", | ||||
|         "gauge": "^3.0.0", | ||||
|         "set-blocking": "^2.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/nth-check": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", | ||||
|  | @ -7469,8 +7840,6 @@ | |||
|       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", | ||||
|       "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", | ||||
|       "license": "MIT", | ||||
|       "optional": true, | ||||
|       "peer": true, | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|  | @ -7525,7 +7894,6 @@ | |||
|       "version": "1.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", | ||||
|       "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "wrappy": "1" | ||||
|       } | ||||
|  | @ -7705,7 +8073,6 @@ | |||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", | ||||
|       "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=0.10.0" | ||||
|       } | ||||
|  | @ -8857,7 +9224,6 @@ | |||
|       "version": "3.6.2", | ||||
|       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", | ||||
|       "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "inherits": "^2.0.3", | ||||
|         "string_decoder": "^1.1.1", | ||||
|  | @ -9013,6 +9379,22 @@ | |||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/rimraf": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", | ||||
|       "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", | ||||
|       "deprecated": "Rimraf versions prior to v4 are no longer supported", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "glob": "^7.1.3" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "rimraf": "bin.js" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/isaacs" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/rollup": { | ||||
|       "version": "4.52.2", | ||||
|       "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.2.tgz", | ||||
|  | @ -9090,7 +9472,6 @@ | |||
|       "version": "5.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", | ||||
|       "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", | ||||
|       "dev": true, | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|  | @ -9137,7 +9518,6 @@ | |||
|       "version": "6.3.1", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", | ||||
|       "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", | ||||
|       "devOptional": true, | ||||
|       "bin": { | ||||
|         "semver": "bin/semver.js" | ||||
|       } | ||||
|  | @ -9162,6 +9542,12 @@ | |||
|         "randombytes": "^2.1.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/set-blocking": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", | ||||
|       "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/set-function-length": { | ||||
|       "version": "1.2.2", | ||||
|       "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", | ||||
|  | @ -9236,8 +9622,7 @@ | |||
|     "node_modules/signal-exit": { | ||||
|       "version": "3.0.7", | ||||
|       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", | ||||
|       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" | ||||
|     }, | ||||
|     "node_modules/simple-code-frame": { | ||||
|       "version": "1.3.0", | ||||
|  | @ -9248,6 +9633,37 @@ | |||
|         "kolorist": "^1.6.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/simple-concat": { | ||||
|       "version": "1.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", | ||||
|       "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "patreon", | ||||
|           "url": "https://www.patreon.com/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "consulting", | ||||
|           "url": "https://feross.org/support" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/simple-get": { | ||||
|       "version": "3.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", | ||||
|       "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "decompress-response": "^4.2.0", | ||||
|         "once": "^1.3.1", | ||||
|         "simple-concat": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/smob": { | ||||
|       "version": "1.5.0", | ||||
|       "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", | ||||
|  | @ -9331,7 +9747,6 @@ | |||
|       "version": "1.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", | ||||
|       "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "safe-buffer": "~5.2.0" | ||||
|       } | ||||
|  | @ -9354,7 +9769,6 @@ | |||
|       "version": "4.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", | ||||
|       "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "emoji-regex": "^8.0.0", | ||||
|         "is-fullwidth-code-point": "^3.0.0", | ||||
|  | @ -9404,7 +9818,6 @@ | |||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", | ||||
|       "dev": true, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|  | @ -9413,7 +9826,6 @@ | |||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|       "dev": true, | ||||
|       "dependencies": { | ||||
|         "ansi-regex": "^5.0.1" | ||||
|       }, | ||||
|  | @ -9595,6 +10007,38 @@ | |||
|       "resolved": "https://registry.npmjs.org/swiped-events/-/swiped-events-1.2.0.tgz", | ||||
|       "integrity": "sha512-KRu67z1hb4sPxMdFIF2kaufYHTcWOb8NVLbIl2g5dPWZkEQ6D3wfSIVJ7iXbicTt9cO3e0vARqgx9fITtTZxQw==" | ||||
|     }, | ||||
|     "node_modules/tar": { | ||||
|       "version": "6.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", | ||||
|       "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "chownr": "^2.0.0", | ||||
|         "fs-minipass": "^2.0.0", | ||||
|         "minipass": "^5.0.0", | ||||
|         "minizlib": "^2.1.1", | ||||
|         "mkdirp": "^1.0.3", | ||||
|         "yallist": "^4.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tar/node_modules/minipass": { | ||||
|       "version": "5.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", | ||||
|       "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", | ||||
|       "license": "ISC", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tar/node_modules/yallist": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||
|       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/temml": { | ||||
|       "version": "0.11.11", | ||||
|       "resolved": "https://registry.npmjs.org/temml/-/temml-0.11.11.tgz", | ||||
|  | @ -10086,8 +10530,7 @@ | |||
|     "node_modules/util-deprecate": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||||
|       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" | ||||
|     }, | ||||
|     "node_modules/valtio": { | ||||
|       "version": "2.1.8", | ||||
|  | @ -10425,6 +10868,15 @@ | |||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/wide-align": { | ||||
|       "version": "1.1.5", | ||||
|       "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", | ||||
|       "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "string-width": "^1.0.2 || 2 || 3 || 4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/workbox-background-sync": { | ||||
|       "version": "7.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.3.0.tgz", | ||||
|  | @ -10814,8 +11266,7 @@ | |||
|     "node_modules/wrappy": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | ||||
|       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" | ||||
|     }, | ||||
|     "node_modules/ws": { | ||||
|       "version": "8.18.0", | ||||
|  |  | |||
|  | @ -36,6 +36,7 @@ | |||
|     "fast-blurhash": "~1.1.4", | ||||
|     "fast-equals": "~5.3.2", | ||||
|     "fuse.js": "~7.1.0", | ||||
|     "giframe": "~0.2.0", | ||||
|     "html-prettify": "~1.0.7", | ||||
|     "idb-keyval": "~6.2.2", | ||||
|     "intl-locale-textinfo-polyfill": "~3.0.0", | ||||
|  |  | |||
							
								
								
									
										22
									
								
								public/sw.js
								
								
								
								
							
							
						
						
									
										22
									
								
								public/sw.js
								
								
								
								
							|  | @ -236,6 +236,28 @@ const apiExtendedRoute = new RegExpRoute( | |||
| ); | ||||
| registerRoute(apiExtendedRoute); | ||||
| 
 | ||||
| // Cache ActivityPub requests (Accept: application/activity+json)
 | ||||
| const activityPubRoute = new Route( | ||||
|   ({ request }) => { | ||||
|     const acceptHeader = request.headers.get('accept'); | ||||
|     return acceptHeader?.includes('application/activity+json'); | ||||
|   }, | ||||
|   new StaleWhileRevalidate({ | ||||
|     cacheName: 'activity-json', | ||||
|     plugins: [ | ||||
|       new ExpirationPlugin({ | ||||
|         maxEntries: 30, | ||||
|         maxAgeSeconds: 60 * 60, // 1 hour
 | ||||
|         ...expirationPluginOptions, | ||||
|       }), | ||||
|       new CacheableResponsePlugin({ | ||||
|         statuses: [0, 200], | ||||
|       }), | ||||
|     ], | ||||
|   }), | ||||
| ); | ||||
| registerRoute(activityPubRoute); | ||||
| 
 | ||||
| // Note: expiration is not working as expected
 | ||||
| // https://github.com/GoogleChrome/workbox/issues/3316
 | ||||
| //
 | ||||
|  |  | |||
|  | @ -121,7 +121,11 @@ function AccountBlock({ | |||
|           <> | ||||
|             {displayName ? ( | ||||
|               <b> | ||||
|                 <EmojiText text={displayName} emojis={emojis} /> | ||||
|                 <EmojiText | ||||
|                   text={displayName} | ||||
|                   emojis={emojis} | ||||
|                   resolverURL={url} | ||||
|                 /> | ||||
|               </b> | ||||
|             ) : ( | ||||
|               <b>{username}</b> | ||||
|  |  | |||
|  | @ -1,45 +1,112 @@ | |||
| import { memo } from 'preact/compat'; | ||||
| import pThrottle from 'p-throttle'; | ||||
| import { useEffect, useState } from 'preact/hooks'; | ||||
| 
 | ||||
| import { getGifFirstFrame } from '../utils/get-gif-first-frame'; | ||||
| import mem from '../utils/mem'; | ||||
| 
 | ||||
| import CustomEmoji from './custom-emoji'; | ||||
| 
 | ||||
| const throttledFetch = pThrottle({ | ||||
|   limit: 2, | ||||
|   interval: 1000, | ||||
| })(fetch); | ||||
| 
 | ||||
| const SHORTCODES_REGEX = /(\:(\w|\+|\-)+\:)(?=|[\!\.\?]|$)/g; | ||||
| 
 | ||||
| const shortcodesRegexp = mem((shortcodes) => { | ||||
|   return new RegExp(`:(${shortcodes.join('|')}):`, 'g'); | ||||
| }); | ||||
| 
 | ||||
| function EmojiText({ text, emojis, staticEmoji }) { | ||||
| function EmojiText({ text, emojis = [], staticEmoji, resolverURL }) { | ||||
|   const [resolvedEmojis, setResolvedEmojis] = useState([]); | ||||
|   const [loading, setLoading] = useState(false); | ||||
| 
 | ||||
|   useEffect(() => { | ||||
|     if (!resolverURL || !text?.includes(':')) return; | ||||
| 
 | ||||
|     const matches = text.match(SHORTCODES_REGEX); | ||||
|     if (!matches) return; | ||||
| 
 | ||||
|     const hasUnresolved = matches.some((match) => { | ||||
|       const shortcode = match.slice(1, -1); | ||||
|       return !emojis.some((e) => e.shortcode === shortcode); | ||||
|     }); | ||||
|     if (!hasUnresolved) return; | ||||
| 
 | ||||
|     setLoading(true); | ||||
| 
 | ||||
|     (async () => { | ||||
|       try { | ||||
|         const response = await throttledFetch(resolverURL, { | ||||
|           headers: { accept: 'application/activity+json' }, | ||||
|           referrerPolicy: 'no-referrer', | ||||
|         }); | ||||
| 
 | ||||
|         const data = await response.json(); | ||||
|         const emojiTags = data.tag?.filter((t) => t.type === 'Emoji') || []; | ||||
| 
 | ||||
|         if (!emojiTags.length) return; | ||||
| 
 | ||||
|         const emojis = emojiTags.map((t) => ({ | ||||
|           shortcode: t.name.replace(/^:|:$/g, ''), | ||||
|           url: t.icon.url, | ||||
|         })); | ||||
| 
 | ||||
|         await Promise.all( | ||||
|           emojis.map(async (emoji, index) => { | ||||
|             const tag = emojiTags[index]; | ||||
|             if (tag.icon?.mediaType === 'image/gif') { | ||||
|               const staticUrl = await getGifFirstFrame(emoji.url); | ||||
|               if (staticUrl) emoji.staticUrl = staticUrl; | ||||
|             } | ||||
|           }), | ||||
|         ); | ||||
| 
 | ||||
|         setResolvedEmojis(emojis); | ||||
|       } catch (error) { | ||||
|         console.error('Failed to resolve emojis:', error); | ||||
|       } finally { | ||||
|         setLoading(false); | ||||
|       } | ||||
|     })(); | ||||
|   }, [resolverURL, text, emojis?.length]); | ||||
| 
 | ||||
|   if (!text) return ''; | ||||
|   if (!emojis?.length) return text; | ||||
|   if (text.indexOf(':') === -1) return text; | ||||
|   // const regex = new RegExp( | ||||
|   //   `:(${emojis.map((e) => e.shortcode).join('|')}):`, | ||||
|   //   'g', | ||||
|   // ); | ||||
|   const regex = shortcodesRegexp(emojis.map((e) => e.shortcode)); | ||||
|   const elements = text.split(regex).map((word, i) => { | ||||
|     const emoji = emojis.find((e) => e.shortcode === word); | ||||
|   if (!text.includes(':')) return text; | ||||
| 
 | ||||
|   if (resolverURL && loading) { | ||||
|     return text.replace(SHORTCODES_REGEX, ''); | ||||
|   } | ||||
| 
 | ||||
|   const allEmojis = [ | ||||
|     ...resolvedEmojis.filter( | ||||
|       (resolved) => | ||||
|         !emojis.some((emoji) => emoji.shortcode === resolved.shortcode), | ||||
|     ), | ||||
|     ...emojis, | ||||
|   ]; | ||||
|   if (!allEmojis.length) return text; | ||||
| 
 | ||||
|   const regex = shortcodesRegexp(allEmojis.map((e) => e.shortcode)); | ||||
|   const elements = text.split(regex).map((word, index) => { | ||||
|     const emoji = allEmojis.find((e) => e.shortcode === word); | ||||
| 
 | ||||
|     if (emoji) { | ||||
|       const { url, staticUrl } = emoji; | ||||
|       return ( | ||||
|         <CustomEmoji | ||||
|           key={`${word}-${index}`} | ||||
|           staticUrl={staticEmoji ? undefined : staticUrl} | ||||
|           alt={word} | ||||
|           url={staticEmoji ? staticUrl || url : url} | ||||
|           key={word + '-' + i} // Handle >= 2 same shortcodes | ||||
|           alt={word} | ||||
|         /> | ||||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     return word; | ||||
|   }); | ||||
| 
 | ||||
|   return elements; | ||||
| } | ||||
| 
 | ||||
| export default mem(EmojiText); | ||||
| 
 | ||||
| // export default memo( | ||||
| //   EmojiText, | ||||
| //   (oldProps, newProps) => | ||||
| //     oldProps.text === newProps.text && | ||||
| //     oldProps.emojis?.length === newProps.emojis?.length, | ||||
| // ); | ||||
| export default EmojiText; | ||||
|  |  | |||
|  | @ -1,10 +1,8 @@ | |||
| import './name-text.css'; | ||||
| 
 | ||||
| import { useLingui } from '@lingui/react'; | ||||
| import { memo } from 'preact/compat'; | ||||
| 
 | ||||
| import { api } from '../utils/api'; | ||||
| import getDomain from '../utils/get-domain'; | ||||
| import mem from '../utils/mem'; | ||||
| import states from '../utils/states'; | ||||
| 
 | ||||
|  | @ -55,8 +53,6 @@ function NameText({ | |||
| 
 | ||||
|   if (!instance) instance = api().instance; | ||||
| 
 | ||||
|   const accountInstance = getDomain(url); | ||||
| 
 | ||||
|   const trimmedUsername = username.toLowerCase().trim(); | ||||
|   const trimmedDisplayName = (displayName || '').toLowerCase().trim(); | ||||
|   const shortenedDisplayName = trimmedDisplayName | ||||
|  | @ -113,7 +109,12 @@ function NameText({ | |||
|       {displayName && !short ? ( | ||||
|         <> | ||||
|           <b dir="auto"> | ||||
|             <EmojiText text={displayName} emojis={emojis} staticEmoji /> | ||||
|             <EmojiText | ||||
|               text={displayName} | ||||
|               emojis={emojis} | ||||
|               resolverURL={account.url} | ||||
|               staticEmoji | ||||
|             /> | ||||
|           </b> | ||||
|           {!showAcct && !hideUsername && ( | ||||
|             <> | ||||
|  | @ -148,11 +149,4 @@ function NameText({ | |||
|   ); | ||||
| } | ||||
| 
 | ||||
| export default mem(NameText); | ||||
| 
 | ||||
| // export default memo(NameText, (oldProps, newProps) => { | ||||
| //   // Only care about account.id, the other props usually don't change | ||||
| //   const { account } = oldProps; | ||||
| //   const { account: newAccount } = newProps; | ||||
| //   return account?.acct === newAccount?.acct; | ||||
| // }); | ||||
| export default NameText; | ||||
|  |  | |||
|  | @ -13,62 +13,62 @@ msgstr "" | |||
| "Language-Team: \n" | ||||
| "Plural-Forms: \n" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:139 | ||||
| #: src/components/account-block.jsx:143 | ||||
| msgid "Locked" | ||||
| msgstr "" | ||||
| 
 | ||||
| #. placeholder {0}: shortenNumber(statusesCount) | ||||
| #: src/components/account-block.jsx:146 | ||||
| #: src/components/account-block.jsx:150 | ||||
| msgid "Posts: {0}" | ||||
| msgstr "" | ||||
| 
 | ||||
| #. placeholder {0}: niceDateTime(lastStatusAt, { hideTime: true, }) | ||||
| #: src/components/account-block.jsx:151 | ||||
| #: src/components/account-block.jsx:155 | ||||
| msgid "Last posted: {0}" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:166 | ||||
| #: src/components/account-block.jsx:170 | ||||
| #: src/components/account-info.jsx:678 | ||||
| msgid "Automated" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:173 | ||||
| #: src/components/account-block.jsx:177 | ||||
| #: src/components/account-info.jsx:683 | ||||
| #: src/components/status.jsx:569 | ||||
| msgid "Group" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:183 | ||||
| #: src/components/account-block.jsx:187 | ||||
| msgid "Mutual" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:187 | ||||
| #: src/components/account-block.jsx:191 | ||||
| #: src/components/related-actions.jsx:882 | ||||
| msgid "Requested" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:191 | ||||
| #: src/components/account-block.jsx:195 | ||||
| #: src/components/related-actions.jsx:873 | ||||
| msgid "Following" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:195 | ||||
| #: src/components/account-block.jsx:199 | ||||
| #: src/components/related-actions.jsx:182 | ||||
| msgid "Follows you" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:203 | ||||
| #: src/components/account-block.jsx:207 | ||||
| msgid "{followersCount, plural, one {# follower} other {# followers}}" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/components/account-block.jsx:212 | ||||
| #: src/components/account-block.jsx:216 | ||||
| #: src/components/account-info.jsx:726 | ||||
| msgid "Verified" | ||||
| msgstr "" | ||||
| 
 | ||||
| #. placeholder {0}: niceDateTime(createdAt, { hideTime: true, }) | ||||
| #. placeholder {0}: niceDateTime(createdAt, { hideTime: true, }) | ||||
| #: src/components/account-block.jsx:227 | ||||
| #: src/components/account-block.jsx:231 | ||||
| #: src/components/account-info.jsx:865 | ||||
| msgid "Joined <0>{0}</0>" | ||||
| msgstr "" | ||||
|  | @ -120,7 +120,7 @@ msgstr "" | |||
| #: src/components/status.jsx:2267 | ||||
| #: src/components/status.jsx:2955 | ||||
| #: src/components/status.jsx:2958 | ||||
| #: src/pages/account-statuses.jsx:540 | ||||
| #: src/pages/account-statuses.jsx:544 | ||||
| #: src/pages/accounts.jsx:118 | ||||
| #: src/pages/hashtag.jsx:203 | ||||
| #: src/pages/list.jsx:171 | ||||
|  | @ -2958,31 +2958,31 @@ msgstr "" | |||
| msgid "Showing posts in {0}" | ||||
| msgstr "Showing posts in {0}" | ||||
| 
 | ||||
| #: src/pages/account-statuses.jsx:517 | ||||
| #: src/pages/account-statuses.jsx:521 | ||||
| msgid "Nothing to see here yet." | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/pages/account-statuses.jsx:518 | ||||
| #: src/pages/account-statuses.jsx:522 | ||||
| #: src/pages/public.jsx:99 | ||||
| #: src/pages/trending.jsx:452 | ||||
| msgid "Unable to load posts" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/pages/account-statuses.jsx:559 | ||||
| #: src/pages/account-statuses.jsx:589 | ||||
| #: src/pages/account-statuses.jsx:563 | ||||
| #: src/pages/account-statuses.jsx:593 | ||||
| msgid "Unable to fetch account info" | ||||
| msgstr "" | ||||
| 
 | ||||
| #. placeholder {0}: accountInstance ? ( <> {' '} (<b>{punycode.toUnicode(accountInstance)}</b>) </> ) : null | ||||
| #: src/pages/account-statuses.jsx:566 | ||||
| #: src/pages/account-statuses.jsx:570 | ||||
| msgid "Switch to account's instance {0}" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/pages/account-statuses.jsx:596 | ||||
| #: src/pages/account-statuses.jsx:600 | ||||
| msgid "Switch to my instance (<0>{currentInstance}</0>)" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: src/pages/account-statuses.jsx:669 | ||||
| #: src/pages/account-statuses.jsx:673 | ||||
| msgid "Month" | ||||
| msgstr "" | ||||
| 
 | ||||
|  |  | |||
|  | @ -505,7 +505,11 @@ function AccountStatuses() { | |||
|             // }} | ||||
|           > | ||||
|             <b> | ||||
|               <EmojiText text={displayName} emojis={emojis} /> | ||||
|               <EmojiText | ||||
|                 text={displayName} | ||||
|                 emojis={emojis} | ||||
|                 resolverURL={account?.url} | ||||
|               /> | ||||
|             </b> | ||||
|             <div> | ||||
|               <span class="bidi-isolate">@{acct}</span> | ||||
|  |  | |||
|  | @ -0,0 +1,24 @@ | |||
| import GIFrame from 'giframe'; | ||||
| 
 | ||||
| export async function getGifFirstFrame(gifUrl) { | ||||
|   try { | ||||
|     const giframe = new GIFrame(0, { | ||||
|       usePNG: true, | ||||
|     }); | ||||
|     const base64Promise = giframe.getBase64(); | ||||
| 
 | ||||
|     const response = await fetch(gifUrl); | ||||
|     const buf = await response.arrayBuffer(); | ||||
|     giframe.feed(new Uint8Array(buf)); | ||||
| 
 | ||||
|     const base64 = await base64Promise; | ||||
|     // Convert data URI to blob
 | ||||
|     // More memory-efficient if same image is rendered multiple times
 | ||||
|     const blob = await (await fetch(base64)).blob(); | ||||
|     const staticUrl = URL.createObjectURL(blob); | ||||
|     return staticUrl; | ||||
|   } catch (e) { | ||||
|     // Fail silently if giframe fails
 | ||||
|     return null; | ||||
|   } | ||||
| } | ||||
		Ładowanie…
	
		Reference in New Issue
	
	 Lim Chee Aun
						Lim Chee Aun