## Problem - The web translations still use the original Cockpit mechanism for creating and loading the translations - That uses a server based logic which has quite some drawbacks - We have to reimplement the very same logic in a Webpack plugin to make it work also in the local development server (`npm run server`). And unfortunately we cannot share the code because it is Rust vs. Javascript... - This will not work in the Agama online demo site with completely static files (without any server side logic, everything needs to be on the client side). - For me the original logic was quite strange, why the server should decide which translations should the client use? It should be completely handled on the client side, there is no reason for the special server logic. The server should just report the available translations and let the client to pick and use the right one. - The old implementation has also some ugly parts like requiring a global Javascript variable... ## Solution - Move the translation logic from the server to the client (browser) - Use dynamic imports instead of HTTP redirection ## Implementation details - Removed the `po.js` handler from the Agama HTTP server - Removed the `po.js` handler from the Webpack development server - Removed the original Gettext PO files from Git, replaced by already converted JS files - Removed the Cockpit Webpack plugin for converting PO files to JS, replaced by a simple script with similar functionality. (As a bonus the code was fixed to avoid adding unnecessary `null` values into the output.) - Added dynamic import for downloading the requested translations - Some code cleanup (removing the global JS object) - Moved the `jed` and `gettext-parser` NPM dependencies to the PO->JS converter, that means those NPM packages are installed only when converting the PO files to JS (basically only in the GitHub action which merges them), they are not installed when building the Agama web frontend ## Testing - Tested manually, loading the translations works fine - I manually triggered the GitHub Action which merges the translations from Weblate. It works fine, the test run opened this [pull request](https://github.com/agama-project/agama/pull/1780) with updated translations (there are more changes as it was executed in the same branch as this pull request).
653 lines
23 KiB
JSON
653 lines
23 KiB
JSON
{
|
|
"name": "po-converter",
|
|
"version": "0.0.1",
|
|
"lockfileVersion": 3,
|
|
"requires": true,
|
|
"packages": {
|
|
"": {
|
|
"name": "po-converter",
|
|
"version": "0.0.1",
|
|
"license": "GPL-2.0-only",
|
|
"dependencies": {
|
|
"gettext-parser": "^8.0.0",
|
|
"glob": "^11.0.0",
|
|
"jed": "^1.1.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/node": "^22.9.1"
|
|
}
|
|
},
|
|
"node_modules/@isaacs/cliui": {
|
|
"version": "8.0.2",
|
|
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
|
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
|
|
"dependencies": {
|
|
"string-width": "^5.1.2",
|
|
"string-width-cjs": "npm:string-width@^4.2.0",
|
|
"strip-ansi": "^7.0.1",
|
|
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
|
|
"wrap-ansi": "^8.1.0",
|
|
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=12"
|
|
}
|
|
},
|
|
"node_modules/@types/node": {
|
|
"version": "22.9.1",
|
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz",
|
|
"integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==",
|
|
"dev": true,
|
|
"dependencies": {
|
|
"undici-types": "~6.19.8"
|
|
}
|
|
},
|
|
"node_modules/abort-controller": {
|
|
"version": "3.0.0",
|
|
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
|
|
"integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
|
|
"dependencies": {
|
|
"event-target-shim": "^5.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=6.5"
|
|
}
|
|
},
|
|
"node_modules/ansi-regex": {
|
|
"version": "6.1.0",
|
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
|
|
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
|
|
"engines": {
|
|
"node": ">=12"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
|
}
|
|
},
|
|
"node_modules/ansi-styles": {
|
|
"version": "6.2.1",
|
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
|
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
|
"engines": {
|
|
"node": ">=12"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
|
}
|
|
},
|
|
"node_modules/balanced-match": {
|
|
"version": "1.0.2",
|
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
|
},
|
|
"node_modules/base64-js": {
|
|
"version": "1.5.1",
|
|
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
|
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
|
|
"funding": [
|
|
{
|
|
"type": "github",
|
|
"url": "https://github.com/sponsors/feross"
|
|
},
|
|
{
|
|
"type": "patreon",
|
|
"url": "https://www.patreon.com/feross"
|
|
},
|
|
{
|
|
"type": "consulting",
|
|
"url": "https://feross.org/support"
|
|
}
|
|
]
|
|
},
|
|
"node_modules/brace-expansion": {
|
|
"version": "2.0.1",
|
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
|
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
|
"dependencies": {
|
|
"balanced-match": "^1.0.0"
|
|
}
|
|
},
|
|
"node_modules/buffer": {
|
|
"version": "6.0.3",
|
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
|
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
|
"funding": [
|
|
{
|
|
"type": "github",
|
|
"url": "https://github.com/sponsors/feross"
|
|
},
|
|
{
|
|
"type": "patreon",
|
|
"url": "https://www.patreon.com/feross"
|
|
},
|
|
{
|
|
"type": "consulting",
|
|
"url": "https://feross.org/support"
|
|
}
|
|
],
|
|
"dependencies": {
|
|
"base64-js": "^1.3.1",
|
|
"ieee754": "^1.2.1"
|
|
}
|
|
},
|
|
"node_modules/color-convert": {
|
|
"version": "2.0.1",
|
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
|
"dependencies": {
|
|
"color-name": "~1.1.4"
|
|
},
|
|
"engines": {
|
|
"node": ">=7.0.0"
|
|
}
|
|
},
|
|
"node_modules/color-name": {
|
|
"version": "1.1.4",
|
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
|
},
|
|
"node_modules/content-type": {
|
|
"version": "1.0.5",
|
|
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
|
|
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
|
|
"engines": {
|
|
"node": ">= 0.6"
|
|
}
|
|
},
|
|
"node_modules/cross-spawn": {
|
|
"version": "7.0.6",
|
|
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
|
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
|
"dependencies": {
|
|
"path-key": "^3.1.0",
|
|
"shebang-command": "^2.0.0",
|
|
"which": "^2.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">= 8"
|
|
}
|
|
},
|
|
"node_modules/eastasianwidth": {
|
|
"version": "0.2.0",
|
|
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
|
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
|
|
},
|
|
"node_modules/emoji-regex": {
|
|
"version": "9.2.2",
|
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
|
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
|
|
},
|
|
"node_modules/encoding": {
|
|
"version": "0.1.13",
|
|
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
|
|
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
|
|
"dependencies": {
|
|
"iconv-lite": "^0.6.2"
|
|
}
|
|
},
|
|
"node_modules/event-target-shim": {
|
|
"version": "5.0.1",
|
|
"resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
|
|
"integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
|
|
"engines": {
|
|
"node": ">=6"
|
|
}
|
|
},
|
|
"node_modules/events": {
|
|
"version": "3.3.0",
|
|
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
|
|
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
|
|
"engines": {
|
|
"node": ">=0.8.x"
|
|
}
|
|
},
|
|
"node_modules/foreground-child": {
|
|
"version": "3.3.0",
|
|
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
|
|
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
|
|
"dependencies": {
|
|
"cross-spawn": "^7.0.0",
|
|
"signal-exit": "^4.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=14"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/sponsors/isaacs"
|
|
}
|
|
},
|
|
"node_modules/gettext-parser": {
|
|
"version": "8.0.0",
|
|
"resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-8.0.0.tgz",
|
|
"integrity": "sha512-eFmhDi2xQ+2reMRY2AbJ2oa10uFOl1oyGbAKdCZiNOk94NJHi7aN0OBELSC9v35ZAPQdr+uRBi93/Gu4SlBdrA==",
|
|
"dependencies": {
|
|
"content-type": "^1.0.5",
|
|
"encoding": "^0.1.13",
|
|
"readable-stream": "^4.5.2",
|
|
"safe-buffer": "^5.2.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=18"
|
|
}
|
|
},
|
|
"node_modules/glob": {
|
|
"version": "11.0.0",
|
|
"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
|
|
"integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
|
|
"dependencies": {
|
|
"foreground-child": "^3.1.0",
|
|
"jackspeak": "^4.0.1",
|
|
"minimatch": "^10.0.0",
|
|
"minipass": "^7.1.2",
|
|
"package-json-from-dist": "^1.0.0",
|
|
"path-scurry": "^2.0.0"
|
|
},
|
|
"bin": {
|
|
"glob": "dist/esm/bin.mjs"
|
|
},
|
|
"engines": {
|
|
"node": "20 || >=22"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/sponsors/isaacs"
|
|
}
|
|
},
|
|
"node_modules/iconv-lite": {
|
|
"version": "0.6.3",
|
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
|
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
|
"dependencies": {
|
|
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=0.10.0"
|
|
}
|
|
},
|
|
"node_modules/ieee754": {
|
|
"version": "1.2.1",
|
|
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
|
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
|
|
"funding": [
|
|
{
|
|
"type": "github",
|
|
"url": "https://github.com/sponsors/feross"
|
|
},
|
|
{
|
|
"type": "patreon",
|
|
"url": "https://www.patreon.com/feross"
|
|
},
|
|
{
|
|
"type": "consulting",
|
|
"url": "https://feross.org/support"
|
|
}
|
|
]
|
|
},
|
|
"node_modules/is-fullwidth-code-point": {
|
|
"version": "3.0.0",
|
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/isexe": {
|
|
"version": "2.0.0",
|
|
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
|
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
|
|
},
|
|
"node_modules/jackspeak": {
|
|
"version": "4.0.2",
|
|
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz",
|
|
"integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==",
|
|
"dependencies": {
|
|
"@isaacs/cliui": "^8.0.2"
|
|
},
|
|
"engines": {
|
|
"node": "20 || >=22"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/sponsors/isaacs"
|
|
}
|
|
},
|
|
"node_modules/jed": {
|
|
"version": "1.1.1",
|
|
"resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz",
|
|
"integrity": "sha512-z35ZSEcXHxLW4yumw0dF6L464NT36vmx3wxJw8MDpraBcWuNVgUPZgPJKcu1HekNgwlMFNqol7i/IpSbjhqwqA=="
|
|
},
|
|
"node_modules/lru-cache": {
|
|
"version": "11.0.2",
|
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz",
|
|
"integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==",
|
|
"engines": {
|
|
"node": "20 || >=22"
|
|
}
|
|
},
|
|
"node_modules/minimatch": {
|
|
"version": "10.0.1",
|
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
|
|
"integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
|
|
"dependencies": {
|
|
"brace-expansion": "^2.0.1"
|
|
},
|
|
"engines": {
|
|
"node": "20 || >=22"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/sponsors/isaacs"
|
|
}
|
|
},
|
|
"node_modules/minipass": {
|
|
"version": "7.1.2",
|
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
|
|
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
|
|
"engines": {
|
|
"node": ">=16 || 14 >=14.17"
|
|
}
|
|
},
|
|
"node_modules/package-json-from-dist": {
|
|
"version": "1.0.1",
|
|
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
|
|
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
|
|
},
|
|
"node_modules/path-key": {
|
|
"version": "3.1.1",
|
|
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
|
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/path-scurry": {
|
|
"version": "2.0.0",
|
|
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
|
|
"integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
|
|
"dependencies": {
|
|
"lru-cache": "^11.0.0",
|
|
"minipass": "^7.1.2"
|
|
},
|
|
"engines": {
|
|
"node": "20 || >=22"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/sponsors/isaacs"
|
|
}
|
|
},
|
|
"node_modules/process": {
|
|
"version": "0.11.10",
|
|
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
|
|
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
|
|
"engines": {
|
|
"node": ">= 0.6.0"
|
|
}
|
|
},
|
|
"node_modules/readable-stream": {
|
|
"version": "4.5.2",
|
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
|
|
"integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
|
|
"dependencies": {
|
|
"abort-controller": "^3.0.0",
|
|
"buffer": "^6.0.3",
|
|
"events": "^3.3.0",
|
|
"process": "^0.11.10",
|
|
"string_decoder": "^1.3.0"
|
|
},
|
|
"engines": {
|
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
|
}
|
|
},
|
|
"node_modules/safe-buffer": {
|
|
"version": "5.2.1",
|
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
|
"funding": [
|
|
{
|
|
"type": "github",
|
|
"url": "https://github.com/sponsors/feross"
|
|
},
|
|
{
|
|
"type": "patreon",
|
|
"url": "https://www.patreon.com/feross"
|
|
},
|
|
{
|
|
"type": "consulting",
|
|
"url": "https://feross.org/support"
|
|
}
|
|
]
|
|
},
|
|
"node_modules/safer-buffer": {
|
|
"version": "2.1.2",
|
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
|
},
|
|
"node_modules/shebang-command": {
|
|
"version": "2.0.0",
|
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
|
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
|
"dependencies": {
|
|
"shebang-regex": "^3.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/shebang-regex": {
|
|
"version": "3.0.0",
|
|
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
|
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/signal-exit": {
|
|
"version": "4.1.0",
|
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
|
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
|
"engines": {
|
|
"node": ">=14"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/sponsors/isaacs"
|
|
}
|
|
},
|
|
"node_modules/string_decoder": {
|
|
"version": "1.3.0",
|
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
|
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
|
"dependencies": {
|
|
"safe-buffer": "~5.2.0"
|
|
}
|
|
},
|
|
"node_modules/string-width": {
|
|
"version": "5.1.2",
|
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
|
|
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
|
"dependencies": {
|
|
"eastasianwidth": "^0.2.0",
|
|
"emoji-regex": "^9.2.2",
|
|
"strip-ansi": "^7.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=12"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/sponsors/sindresorhus"
|
|
}
|
|
},
|
|
"node_modules/string-width-cjs": {
|
|
"name": "string-width",
|
|
"version": "4.2.3",
|
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
|
"dependencies": {
|
|
"emoji-regex": "^8.0.0",
|
|
"is-fullwidth-code-point": "^3.0.0",
|
|
"strip-ansi": "^6.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/string-width-cjs/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==",
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/string-width-cjs/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=="
|
|
},
|
|
"node_modules/string-width-cjs/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==",
|
|
"dependencies": {
|
|
"ansi-regex": "^5.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/strip-ansi": {
|
|
"version": "7.1.0",
|
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
|
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
|
"dependencies": {
|
|
"ansi-regex": "^6.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=12"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
|
}
|
|
},
|
|
"node_modules/strip-ansi-cjs": {
|
|
"name": "strip-ansi",
|
|
"version": "6.0.1",
|
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
|
"dependencies": {
|
|
"ansi-regex": "^5.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/strip-ansi-cjs/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==",
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/undici-types": {
|
|
"version": "6.19.8",
|
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
|
|
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
|
|
"dev": true
|
|
},
|
|
"node_modules/which": {
|
|
"version": "2.0.2",
|
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
|
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
|
"dependencies": {
|
|
"isexe": "^2.0.0"
|
|
},
|
|
"bin": {
|
|
"node-which": "bin/node-which"
|
|
},
|
|
"engines": {
|
|
"node": ">= 8"
|
|
}
|
|
},
|
|
"node_modules/wrap-ansi": {
|
|
"version": "8.1.0",
|
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
|
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
|
"dependencies": {
|
|
"ansi-styles": "^6.1.0",
|
|
"string-width": "^5.0.1",
|
|
"strip-ansi": "^7.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=12"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
|
}
|
|
},
|
|
"node_modules/wrap-ansi-cjs": {
|
|
"name": "wrap-ansi",
|
|
"version": "7.0.0",
|
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
|
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
|
"dependencies": {
|
|
"ansi-styles": "^4.0.0",
|
|
"string-width": "^4.1.0",
|
|
"strip-ansi": "^6.0.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=10"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
|
}
|
|
},
|
|
"node_modules/wrap-ansi-cjs/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==",
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
|
|
"version": "4.3.0",
|
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
|
"dependencies": {
|
|
"color-convert": "^2.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=8"
|
|
},
|
|
"funding": {
|
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
|
}
|
|
},
|
|
"node_modules/wrap-ansi-cjs/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=="
|
|
},
|
|
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
|
|
"version": "4.2.3",
|
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
|
"dependencies": {
|
|
"emoji-regex": "^8.0.0",
|
|
"is-fullwidth-code-point": "^3.0.0",
|
|
"strip-ansi": "^6.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
},
|
|
"node_modules/wrap-ansi-cjs/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==",
|
|
"dependencies": {
|
|
"ansi-regex": "^5.0.1"
|
|
},
|
|
"engines": {
|
|
"node": ">=8"
|
|
}
|
|
}
|
|
}
|
|
}
|