From d315ba4e9326be86ed4adf788a503422b8457a5f Mon Sep 17 00:00:00 2001 From: Borig Date: Fri, 24 Jan 2025 10:42:20 +1300 Subject: [PATCH 1/6] [0.16.1] Update packages and remove ESLint --- package-lock.json | 5299 ++++++++++----------------------------------- package.json | 45 +- 2 files changed, 1168 insertions(+), 4176 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5755bda..e0fe3ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,466 +1,170 @@ { "name": "@runejs/filestore", - "version": "0.16.0", - "lockfileVersion": 2, + "version": "0.16.1", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@runejs/filestore", - "version": "0.16.0", + "version": "0.16.1", "license": "GPL-3.0", "dependencies": { - "@runejs/common": "^2.0.1", - "canvas": "^2.9.0", - "pngjs": "^6.0.0", - "properties-parser": "^0.3.1", - "seek-bzip": "^1.0.6", - "tslib": "^2.3.1" + "@runejs/common": ">=2.0.2-beta.3", + "canvas": "^3.1.0", + "pngjs": "^7.0.0", + "properties-parser": "^0.6.0", + "seek-bzip": "^2.0.0", + "tslib": ">=2.8.1" }, "devDependencies": { - "@runejs/eslint-config": "^1.0.0", - "@types/node": "^16.11.26", - "@types/pngjs": "^3.4.2", - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", - "eslint": "^7.32.0", - "rimraf": "^3.0.2", - "ts-node": "^10.5.0", - "typescript": "^4.5.5" + "@types/node": "^22.10.10", + "@types/pngjs": "^6.0.5", + "rimraf": "^6.0.1", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" }, "peerDependencies": { - "@runejs/common": ">=2.0.1", - "tslib": ">=2.3.0", - "typescript": ">=4.5.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "engines": { - "node": ">= 12" + "@runejs/common": ">=2.0.2-beta.3", + "tslib": ">=2.8.1", + "typescript": ">=5.7.3" } }, "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@hapi/bourne": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz", - "integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.1.0.tgz", + "integrity": "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==", + "license": "BSD-3-Clause" }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "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==", "dev": true, + "license": "ISC", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "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": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", - "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", - "dependencies": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "node": ">=12" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=6.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, - "engines": { - "node": ">= 8" - } + "license": "MIT" }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@runejs/common": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@runejs/common/-/common-2.0.1.tgz", - "integrity": "sha512-mSWUVDELsWJ7Oi6MeGk6iQvJAI5TShpy8J7BwSym5cfdUoRm21884X+/p9D/C9PXTT//yRbvpq0CGK9EazMfNw==", + "version": "2.0.2-beta.3", + "resolved": "https://registry.npmjs.org/@runejs/common/-/common-2.0.2-beta.3.tgz", + "integrity": "sha512-IJGJ8ZspbHzqO5EPhWJuXBLfzNewOiGl9HqxrrJGVsCZmagRTekOXik2diWp9h6A99rjuKyOUg84PW3GwHM9TA==", + "license": "GPL-3.0", "dependencies": { "compressjs": "^1.0.3", "js-yaml": "^3.14.1", "pino": "^6.14.0", "pino-pretty": "^4.8.0", "sonic-boom": "^2.6.0", - "tslib": "^2.3.1" + "tslib": ">=2.8.1" }, "peerDependencies": { - "tslib": ">=2.3.0", - "typescript": ">=4.5.0" + "tslib": ">=2.8.1" } }, - "node_modules/@runejs/eslint-config": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@runejs/eslint-config/-/eslint-config-1.0.0.tgz", - "integrity": "sha512-Z4yELzMWGQ75ihZgPMIEUKucc1X5GvIu8ZYDxjKnjcCkTT3VvMRZ4mFvXxmrXy5kip2X/PR3Sklw6uIR9UCkBg==", - "dev": true - }, "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", - "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==", - "dev": true - }, - "node_modules/@types/pngjs": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@types/pngjs/-/pngjs-3.4.2.tgz", - "integrity": "sha512-LJVPDraJ5YFEnMHnzxTN4psdWz1M61MtaAAWPn3qnDk5fvs7BAmmQ9pd3KPlrdrvozMyne4ktanD4pg0L7x1Pw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } + "license": "MIT" }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } + "license": "MIT" }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "MIT" }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "MIT" }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "node_modules/@types/node": { + "version": "22.10.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.10.tgz", + "integrity": "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "undici-types": "~6.20.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "node_modules/@types/pngjs": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@types/pngjs/-/pngjs-6.0.5.tgz", + "integrity": "sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@types/node": "*" } }, - "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==" - }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -468,112 +172,77 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, - "engines": { - "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" + "acorn": "^8.11.0" }, "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node": ">=0.4.0" } }, "node_modules/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "license": "BSD-3-Clause OR MIT", "engines": { "node": ">=0.4.2" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/args": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", - "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", + "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", + "license": "MIT", "dependencies": { "camelcase": "5.0.0", "chalk": "2.4.2", @@ -584,10 +253,23 @@ "node": ">= 6.0.0" } }, + "node_modules/args/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/args/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -597,116 +279,173 @@ "node": ">=4" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, + "node_modules/args/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/args/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/args/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, + "node_modules/args/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/atomic-sleep": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "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" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, "node_modules/camelcase": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/canvas": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.9.0.tgz", - "integrity": "sha512-0l93g7uxp7rMyr7H+XRQ28A3ud0dKIUTIEkUe1Dxh4rjUYN7B93+SjC3r1PDKA18xcQN87OFGgUnyw7LSgNLSQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.1.0.tgz", + "integrity": "sha512-tTj3CqqukVJ9NgSahykNwtGda7V33VLObwrHfzT0vqJXu7J4d4C/7kQQW3fOEGDfZZoILPut5H00gOjyttPGyg==", "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.15.0", - "simple-get": "^3.0.3" + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1" }, "engines": { - "node": ">=6" + "node": "^18.12.0 || >= 20.9.0" } }, "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - } - }, - "node_modules/chalk/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/chalk?sponsor=1" } }, - "node_modules/chalk/node_modules/color-convert": { + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "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==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -714,68 +453,29 @@ "node": ">=7.0.0" } }, - "node_modules/chalk/node_modules/color-name": { + "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/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "graceful-readlink": ">= 1.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" + "node": ">= 0.6.x" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, "node_modules/compressjs": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/compressjs/-/compressjs-1.0.3.tgz", - "integrity": "sha1-ldt03VuQOM+AvKMhqw7eJxtJWbY=", + "integrity": "sha512-jpKJjBTretQACTGLNuvnozP1JdP2ZLrjdGdBgk/tz1VfXlUcBhhSZW6vEsuThmeot/yjvSrPQKEgfF3X2Lpi8Q==", + "license": "GPL", "dependencies": { "amdefine": "~1.0.0", "commander": "~2.8.1" @@ -784,43 +484,19 @@ "compressjs": "bin/compressjs" } }, - "node_modules/compressjs/node_modules/commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "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": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -834,52 +510,42 @@ "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "license": "MIT", "engines": { "node": "*" } }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=6.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dependencies": { - "mimic-response": "^2.0.0" - }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", "engines": { - "node": ">=0.10" + "node": ">=8" } }, "node_modules/diff": { @@ -887,3656 +553,923 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } + "license": "MIT" }, "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 + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { - "eslint": "bin/eslint.js" + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - } + "node_modules/flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", + "license": "MIT" }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "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==", "dev": true, + "license": "ISC", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "node_modules/glob": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", + "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", "dev": true, + "license": "ISC", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "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" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" + "node": "20 || >=22" }, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "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" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "engines": { - "node": ">=4.0" - } + "license": "ISC" }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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==", "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, "engines": { - "node": ">=4.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "node_modules/joycon": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz", + "integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=8.6.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/fast-json-stable-stringify": { + "node_modules/leven": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-redact": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.1.tgz", - "integrity": "sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "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==", "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "license": "ISC", + "engines": { + "node": "20 || >=22" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, + "license": "ISC" + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, + "license": "ISC", "dependencies": { - "to-regex-range": "^5.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, + "license": "ISC", "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" - }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" }, - "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==", - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/mri": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/node-abi": { + "version": "3.73.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.73.0.tgz", + "integrity": "sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "semver": "^7.3.5" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "wrappy": "1" } }, - "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "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==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "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==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" + "node_modules/pino": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", + "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", + "license": "MIT", + "dependencies": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.8", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + }, + "bin": { + "pino": "bin.js" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "node_modules/pino-pretty": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.8.0.tgz", + "integrity": "sha512-mhQfHG4rw5ZFpWL44m0Utjo4GC2+HMfdNvxyA8lLw0sIqn6fCf7uQe6dPckUcW/obly+OQHD7B/MTso6LNizYw==", + "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "@hapi/bourne": "^2.0.0", + "args": "^5.0.1", + "chalk": "^4.0.0", + "dateformat": "^4.5.1", + "fast-safe-stringify": "^2.0.7", + "jmespath": "^0.15.0", + "joycon": "^2.2.5", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "rfdc": "^1.3.0", + "split2": "^3.1.1", + "strip-json-comments": "^3.1.1" }, - "engines": { - "node": ">= 6" + "bin": { + "pino-pretty": "bin.js" } }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/pino-std-serializers": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", + "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", + "license": "MIT" }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, + "node_modules/pino/node_modules/sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "license": "MIT", + "engines": { + "node": ">=14.19.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", + "license": "MIT" + }, + "node_modules/properties-parser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.6.0.tgz", + "integrity": "sha512-qvr2cSmoA0dln0MARAKwBzPkkXn7FqwX+RVVNpMdMJc7rt9mqO2cXwluxtux9fHrLhjnPFaQkS8BM0kFrTCnSw==", + "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">= 0.3.1" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "number-is-nan": "^1.0.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/joycon": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz", - "integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "node": ">= 6" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/merge2": { + "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, + "license": "ISC", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { - "mkdirp": "bin/cmd.js" + "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": ">=10" - } - }, - "node_modules/mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", - "engines": { - "node": ">=4" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true + "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" } - } + ], + "license": "MIT" }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "node_modules/seek-bzip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-2.0.0.tgz", + "integrity": "sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg==", + "license": "MIT", "dependencies": { - "abbrev": "1" + "commander": "^6.0.0" }, "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "node_modules/seek-bzip/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" + "node": ">= 6" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "shebang-regex": "^3.0.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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==", "dev": true, + "license": "ISC", "engines": { - "node": ">=8.6" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pino": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", - "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", - "dependencies": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "process-warning": "^1.0.0", - "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" - }, - "bin": { - "pino": "bin.js" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pino-pretty": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.8.0.tgz", - "integrity": "sha512-mhQfHG4rw5ZFpWL44m0Utjo4GC2+HMfdNvxyA8lLw0sIqn6fCf7uQe6dPckUcW/obly+OQHD7B/MTso6LNizYw==", - "dependencies": { - "@hapi/bourne": "^2.0.0", - "args": "^5.0.1", - "chalk": "^4.0.0", - "dateformat": "^4.5.1", - "fast-safe-stringify": "^2.0.7", - "jmespath": "^0.15.0", - "joycon": "^2.2.5", - "pump": "^3.0.0", - "readable-stream": "^3.6.0", - "rfdc": "^1.3.0", - "split2": "^3.1.1", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "pino-pretty": "bin.js" - } - }, - "node_modules/pino-pretty/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" - }, - "node_modules/pino/node_modules/sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", - "dependencies": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" - } - }, - "node_modules/pngjs": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/process-warning": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", - "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/properties-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", - "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=", - "dependencies": { - "string.prototype.codepointat": "^0.2.0" - }, - "engines": { - "node": ">= 0.3.1" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, + "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dependencies": { - "commander": "^2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "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==" - }, - "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==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sonic-boom": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.6.0.tgz", - "integrity": "sha512-6xYZFRmDEtxGqfOKcDQ4cPLrNa0SPEDI+wlzDAHowXE6YV42NeXqg9mP2KkiM8JVu3lHfZ2iQKYlGOz+kTpphg==", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.codepointat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", - "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "6.1.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.10.tgz", - "integrity": "sha512-kvvfiVvjGMxeUNB6MyYv5z7vhfFRwbwCXJAeL0/lnbrttBVqcMOnpHUf0X42LrPMR8mMpgapkJMchFH4FSHzNA==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/ts-node": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz", - "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "0.7.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", - "dev": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true - }, - "@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "requires": { - "@cspotcode/source-map-consumer": "0.8.0" - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@hapi/bourne": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz", - "integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==" - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@mapbox/node-pre-gyp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", - "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", - "requires": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@runejs/common": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@runejs/common/-/common-2.0.1.tgz", - "integrity": "sha512-mSWUVDELsWJ7Oi6MeGk6iQvJAI5TShpy8J7BwSym5cfdUoRm21884X+/p9D/C9PXTT//yRbvpq0CGK9EazMfNw==", - "requires": { - "compressjs": "^1.0.3", - "js-yaml": "^3.14.1", - "pino": "^6.14.0", - "pino-pretty": "^4.8.0", - "sonic-boom": "^2.6.0", - "tslib": "^2.3.1" - } - }, - "@runejs/eslint-config": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@runejs/eslint-config/-/eslint-config-1.0.0.tgz", - "integrity": "sha512-Z4yELzMWGQ75ihZgPMIEUKucc1X5GvIu8ZYDxjKnjcCkTT3VvMRZ4mFvXxmrXy5kip2X/PR3Sklw6uIR9UCkBg==", - "dev": true - }, - "@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/node": { - "version": "16.11.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", - "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==", - "dev": true - }, - "@types/pngjs": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@types/pngjs/-/pngjs-3.4.2.tgz", - "integrity": "sha512-LJVPDraJ5YFEnMHnzxTN4psdWz1M61MtaAAWPn3qnDk5fvs7BAmmQ9pd3KPlrdrvozMyne4ktanD4pg0L7x1Pw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "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==", - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "args": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", - "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", - "requires": { - "camelcase": "5.0.0", - "chalk": "2.4.2", - "leven": "2.1.0", - "mri": "1.1.4" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - } - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" - }, - "canvas": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.9.0.tgz", - "integrity": "sha512-0l93g7uxp7rMyr7H+XRQ28A3ud0dKIUTIEkUe1Dxh4rjUYN7B93+SjC3r1PDKA18xcQN87OFGgUnyw7LSgNLSQ==", - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.15.0", - "simple-get": "^3.0.3" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "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==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "compressjs": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/compressjs/-/compressjs-1.0.3.tgz", - "integrity": "sha1-ldt03VuQOM+AvKMhqw7eJxtJWbY=", - "requires": { - "amdefine": "~1.0.0", - "commander": "~2.8.1" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "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==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "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 - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fast-redact": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.1.tgz", - "integrity": "sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==" - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" - }, - "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" - }, - "joycon": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz", - "integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "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==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pino": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", - "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", - "requires": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "process-warning": "^1.0.0", - "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" - }, - "dependencies": { - "sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", - "requires": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" - } - } - } - }, - "pino-pretty": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.8.0.tgz", - "integrity": "sha512-mhQfHG4rw5ZFpWL44m0Utjo4GC2+HMfdNvxyA8lLw0sIqn6fCf7uQe6dPckUcW/obly+OQHD7B/MTso6LNizYw==", - "requires": { - "@hapi/bourne": "^2.0.0", - "args": "^5.0.1", - "chalk": "^4.0.0", - "dateformat": "^4.5.1", - "fast-safe-stringify": "^2.0.7", - "jmespath": "^0.15.0", - "joycon": "^2.2.5", - "pump": "^3.0.0", - "readable-stream": "^3.6.0", - "rfdc": "^1.3.0", - "split2": "^3.1.1", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" - }, - "pngjs": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "process-warning": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", - "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "properties-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", - "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=", - "requires": { - "string.prototype.codepointat": "^0.2.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "requires": { - "commander": "^2.8.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "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==" - }, - "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==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "sonic-boom": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.6.0.tgz", - "integrity": "sha512-6xYZFRmDEtxGqfOKcDQ4cPLrNa0SPEDI+wlzDAHowXE6YV42NeXqg9mP2KkiM8JVu3lHfZ2iQKYlGOz+kTpphg==", - "requires": { + "node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "license": "MIT", + "dependencies": { "atomic-sleep": "^1.0.0" } }, - "split2": { + "node_modules/split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "requires": { - "readable-stream": "^3.0.0" - }, + "license": "ISC", "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "readable-stream": "^3.0.0" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" + "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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "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" } }, - "string.prototype.codepointat": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", - "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "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==", + "dev": true, + "license": "MIT" }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, + "license": "MIT", "dependencies": { - "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "tar": { - "version": "6.1.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.10.tgz", - "integrity": "sha512-kvvfiVvjGMxeUNB6MyYv5z7vhfFRwbwCXJAeL0/lnbrttBVqcMOnpHUf0X42LrPMR8mMpgapkJMchFH4FSHzNA==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "to-regex-range": { + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "is-number": "^7.0.0" + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", + "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } }, - "ts-node": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.5.0.tgz", - "integrity": "sha512-6kEJKwVxAJ35W4akuiysfKwKmjkbYxwQMTBaAxo9KKAx/Yd26mPUyhGz3ji+EsJoAgrLqVsYHNuuYwQe22lbtw==", + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, - "requires": { - "@cspotcode/source-map-support": "0.7.0", + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -4547,138 +1480,210 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.0", + "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, - "dependencies": { - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true } } }, - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", "dev": true, - "requires": { - "prelude-ls": "^1.2.1" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, - "requires": { - "punycode": "^2.1.0" - } + "license": "MIT" }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", - "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", - "dev": true - }, - "webidl-conversions": { + "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "license": "ISC", + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, - "yn": { + "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } } } } diff --git a/package.json b/package.json index 70116bd..e3d036a 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,13 @@ { "name": "@runejs/filestore", - "version": "0.16.0", + "version": "0.16.1", "description": "Tools for managing the RuneJS filestore.", "main": "lib/index.js", "types": "lib/index.d.ts", "scripts": { "build": "tsc", + "clean": "rimraf lib", "start": "ts-node src/run.ts", - "lint": "eslint --ext .ts src", - "lint:fix": "eslint --ext .ts src --fix", "package": "rimraf lib && npm i && npm run build && npm publish --dry-run" }, "repository": { @@ -30,35 +29,23 @@ }, "homepage": "https://github.com/runejs/filestore#readme", "peerDependencies": { - "@runejs/common": ">=2.0.1", - "tslib": ">=2.3.0", - "typescript": ">=4.5.0" + "@runejs/common": ">=2.0.2-beta.3", + "tslib": ">=2.8.1", + "typescript": ">=5.7.3" }, "dependencies": { - "@runejs/common": "^2.0.1", - "canvas": "^2.9.0", - "pngjs": "^6.0.0", - "properties-parser": "^0.3.1", - "seek-bzip": "^1.0.6", - "tslib": "^2.3.1" + "@runejs/common": ">=2.0.2-beta.3", + "canvas": "^3.1.0", + "pngjs": "^7.0.0", + "properties-parser": "^0.6.0", + "seek-bzip": "^2.0.0", + "tslib": ">=2.8.1" }, "devDependencies": { - "@runejs/eslint-config": "^1.0.0", - "@types/node": "^16.11.26", - "@types/pngjs": "^3.4.2", - "@typescript-eslint/eslint-plugin": "^4.33.0", - "@typescript-eslint/parser": "^4.33.0", - "eslint": "^7.32.0", - "rimraf": "^3.0.2", - "ts-node": "^10.5.0", - "typescript": "^4.5.5" - }, - "eslintConfig": { - "extends": [ - "@runejs/eslint-config" - ], - "parserOptions": { - "project": "./tsconfig.json" - } + "@types/node": "^22.10.10", + "@types/pngjs": "^6.0.5", + "rimraf": "^6.0.1", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" } } From d0f01ce6c7ece95a229fdd7c264021f099552974 Mon Sep 17 00:00:00 2001 From: Borig Date: Fri, 24 Jan 2025 10:42:28 +1300 Subject: [PATCH 2/6] [0.16.1] Fix Typescript errors from package updates --- src/filestore/stores/model-store.ts | 18 +++++++++--------- src/filestore/stores/region-store.ts | 4 ++-- src/filestore/util/xtea.ts | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/filestore/stores/model-store.ts b/src/filestore/stores/model-store.ts index fb4496f..056603c 100644 --- a/src/filestore/stores/model-store.ts +++ b/src/filestore/stores/model-store.ts @@ -565,7 +565,7 @@ export class ModelStore { let xOffset = 0; if((mask & 0x1) != 0) { try { - xOffset = xDataOffsetBuffer.get('SMART', 'UNSIGNED'); + xOffset = xDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { logger.warn('Tried to read out of range xOffset for object', id); } @@ -573,7 +573,7 @@ export class ModelStore { let yOffset = 0; if((mask & 0x2) != 0) { try { - yOffset = yDataOffsetBuffer.get('SMART', 'UNSIGNED'); + yOffset = yDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { logger.warn('Tried to read out of range yOffset for object', id); } @@ -581,7 +581,7 @@ export class ModelStore { let zOffset = 0; if((mask & 0x4) != 0) { try { - zOffset = zDataOffsetBuffer.get('SMART', 'UNSIGNED'); + zOffset = zDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { logger.warn('Tried to read out of range zOffset for object', id); } @@ -644,11 +644,11 @@ export class ModelStore { const type = xDataOffsetBuffer.get('BYTE', 'UNSIGNED'); switch(type) { case 1: - lastA = vertexDirectionOffsetBuffer.get('SMART', 'UNSIGNED') + accumulator; + lastA = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; accumulator = lastA; - lastB = vertexDirectionOffsetBuffer.get('SMART', 'UNSIGNED') + accumulator; + lastB = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; accumulator = lastB; - lastC = vertexDirectionOffsetBuffer.get('SMART', 'UNSIGNED') + accumulator; + lastC = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; accumulator = lastC; rsModel.faceIndicesA[i] = lastA; rsModel.faceIndicesB[i] = lastB; @@ -656,7 +656,7 @@ export class ModelStore { break; case 2: lastB = lastC; - lastC = vertexDirectionOffsetBuffer.get('SMART', 'UNSIGNED') + accumulator; + lastC = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; accumulator = lastC; rsModel.faceIndicesA[i] = lastA; rsModel.faceIndicesB[i] = lastB; @@ -664,7 +664,7 @@ export class ModelStore { break; case 3: lastA = lastC; - lastC = vertexDirectionOffsetBuffer.get('SMART', 'UNSIGNED') + accumulator; + lastC = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; accumulator = lastC; rsModel.faceIndicesA[i] = lastA; rsModel.faceIndicesB[i] = lastB; @@ -674,7 +674,7 @@ export class ModelStore { oldTrianglePointOffsetX = lastA; lastA = lastB; lastB = oldTrianglePointOffsetX; - lastC = vertexDirectionOffsetBuffer.get('SMART', 'UNSIGNED') + accumulator; + lastC = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; accumulator = lastC; rsModel.faceIndicesA[i] = lastA; rsModel.faceIndicesB[i] = lastB; diff --git a/src/filestore/stores/region-store.ts b/src/filestore/stores/region-store.ts index 7288006..3d91097 100644 --- a/src/filestore/stores/region-store.ts +++ b/src/filestore/stores/region-store.ts @@ -107,7 +107,7 @@ export class RegionStore { let objectLoop = true; while(objectLoop) { - const objectIdOffset = landscapeFile.content.get('SMART'); + const objectIdOffset = landscapeFile.content.get('SMART_SHORT'); if(objectIdOffset === 0) { objectLoop = false; @@ -120,7 +120,7 @@ export class RegionStore { let positionLoop = true; while(positionLoop) { - const objectPositionInfoOffset = landscapeFile.content.get('SMART'); + const objectPositionInfoOffset = landscapeFile.content.get('SMART_SHORT'); if(objectPositionInfoOffset === 0) { positionLoop = false; diff --git a/src/filestore/util/xtea.ts b/src/filestore/util/xtea.ts index a502dd3..55aa39d 100644 --- a/src/filestore/util/xtea.ts +++ b/src/filestore/util/xtea.ts @@ -37,7 +37,7 @@ export const createXteaRegion = (config: XteaDefinition): XteaRegion => export const loadXteaRegionFiles = async (path: string): Promise => { const regions: XteaRegionMap = {}; - const files = await loadConfigurationFiles(path); + const files = await loadConfigurationFiles(path); for(const file of files) { for(const region of file) { const xteaRegion = createXteaRegion(region) From e1e78c20f763b3ba79aa5c924112a72cfad03827 Mon Sep 17 00:00:00 2001 From: Borig Date: Fri, 24 Jan 2025 10:58:34 +1300 Subject: [PATCH 3/6] [0.16.1] Add Biome to the Project --- biome.json | 35 ++++++++++ package-lock.json | 165 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 6 ++ 3 files changed, 206 insertions(+) create mode 100644 biome.json diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..feeb97b --- /dev/null +++ b/biome.json @@ -0,0 +1,35 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 4 + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "complexity": { + "recommended": true, + "noForEach": "off" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single" + } + } +} diff --git a/package-lock.json b/package-lock.json index e0fe3ca..99b9451 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "tslib": ">=2.8.1" }, "devDependencies": { + "@biomejs/biome": "1.9.4", "@types/node": "^22.10.10", "@types/pngjs": "^6.0.5", "rimraf": "^6.0.1", @@ -29,6 +30,170 @@ "typescript": ">=5.7.3" } }, + "node_modules/@biomejs/biome": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", + "dev": true, + "hasInstallScript": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", diff --git a/package.json b/package.json index e3d036a..6892a32 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,11 @@ "scripts": { "build": "tsc", "clean": "rimraf lib", + "lint": "biome lint", + "lint:fix": "biome lint --write", + "format": "biome format", + "format:fix": "biome format --write", + "fin": "npm run lint:fix && npm run format:fix", "start": "ts-node src/run.ts", "package": "rimraf lib && npm i && npm run build && npm publish --dry-run" }, @@ -42,6 +47,7 @@ "tslib": ">=2.8.1" }, "devDependencies": { + "@biomejs/biome": "1.9.4", "@types/node": "^22.10.10", "@types/pngjs": "^6.0.5", "rimraf": "^6.0.1", From 7ec1214729e26af1cf271c002b0b4ae8d997c7c9 Mon Sep 17 00:00:00 2001 From: Borig Date: Fri, 24 Jan 2025 10:58:55 +1300 Subject: [PATCH 4/6] [0.16.1] Fix linting errors surfaced by Biome --- src/filestore/archive.ts | 6 +- src/filestore/data/chunk.ts | 9 +- src/filestore/data/compression.ts | 17 ++-- src/filestore/data/filestore-loader.ts | 4 +- src/filestore/file-data.ts | 6 +- src/filestore/file-index.ts | 2 +- src/filestore/filestore.ts | 14 +-- src/filestore/stores/binary-store.ts | 6 +- src/filestore/stores/config-store.ts | 9 +- src/filestore/stores/configs/item-store.ts | 46 ++++----- src/filestore/stores/configs/npc-store.ts | 74 +++++++------- src/filestore/stores/configs/object-store.ts | 102 +++++++++---------- src/filestore/stores/configs/varbit-store.ts | 14 +-- src/filestore/stores/font-store.ts | 13 +-- src/filestore/stores/jingle-store.ts | 6 +- src/filestore/stores/model-store.ts | 96 +++++++++-------- src/filestore/stores/music-store.ts | 6 +- src/filestore/stores/region-store.ts | 12 +-- src/filestore/stores/sound-store.ts | 6 +- src/filestore/stores/sprite-store.ts | 24 ++--- src/filestore/stores/texture-store.ts | 40 ++++---- src/filestore/stores/widget-store.ts | 70 +++++-------- src/filestore/util/name-hash.ts | 4 +- src/filestore/util/png.ts | 2 +- src/filestore/util/xtea.ts | 2 +- 25 files changed, 288 insertions(+), 302 deletions(-) diff --git a/src/filestore/archive.ts b/src/filestore/archive.ts index 06e3acb..0b9646c 100644 --- a/src/filestore/archive.ts +++ b/src/filestore/archive.ts @@ -1,8 +1,8 @@ import { ByteBuffer } from '@runejs/common'; import { FileData } from './file-data'; -import { FileIndex } from './file-index'; -import { FilestoreChannels, readIndexedDataChunk, decompress } from './data'; +import type { FileIndex } from './file-index'; +import { type FilestoreChannels, readIndexedDataChunk, decompress } from './data'; export class Archive extends FileData { @@ -17,7 +17,7 @@ export class Archive extends FileData { */ public type: 'archive' | 'file' = 'archive'; - private decoded: boolean = false; + private decoded = false; /** * Creates a new `Archive` object. diff --git a/src/filestore/data/chunk.ts b/src/filestore/data/chunk.ts index 2b152f9..64ebd78 100644 --- a/src/filestore/data/chunk.ts +++ b/src/filestore/data/chunk.ts @@ -1,6 +1,6 @@ import { ByteBuffer } from '@runejs/common'; -import { FilestoreChannels } from './filestore-loader'; +import type { FilestoreChannels } from './filestore-loader'; export const indexFileLength = 6; @@ -68,7 +68,8 @@ export const writeIndexChunk = (indexChunk: IndexChunk, indexChannel: ByteBuffer export const readDataChunk = (fileId: number, indexFile: IndexChunk, dataChannel: ByteBuffer): ByteBuffer => { const data = new ByteBuffer(indexFile.size); - let chunk = 0, remaining = indexFile.size; + let chunk = 0; + let remaining = indexFile.size; let ptr = indexFile.sector * sectorLength; do { @@ -115,7 +116,7 @@ export const readDataChunk = (fileId: number, indexFile: IndexChunk, dataChannel }; export const writeDataChunk = (indexId: number, fileId: number, fileBuffer: ByteBuffer, filestoreChannels: FilestoreChannels): void => { - let sector; + let sector: number; const writeBuffer = new ByteBuffer(sectorLength); @@ -139,7 +140,7 @@ export const writeDataChunk = (indexId: number, fileId: number, fileBuffer: Byte } } - let writableMax; + let writableMax: number; if(0xFFFF < fileId) { writableMax = 510; diff --git a/src/filestore/data/compression.ts b/src/filestore/data/compression.ts index 553c3c5..f1de661 100644 --- a/src/filestore/data/compression.ts +++ b/src/filestore/data/compression.ts @@ -1,5 +1,5 @@ import { ByteBuffer } from '@runejs/common'; -import { gunzipSync } from 'zlib'; +import { gunzipSync } from 'node:zlib'; const seekBzip = require('seek-bzip'); @@ -11,7 +11,7 @@ export function decompress(buffer: ByteBuffer, keys?: number[]): { compression: const compression = buffer.get('BYTE', 'UNSIGNED'); const compressedLength = buffer.get('INT'); - if (keys && keys.length == 4 && (keys[0] != 0 || keys[1] != 0 || keys[2] != 0 || keys[3] != 0)) { + if (keys && keys.length === 4 && (keys[0] !== 0 || keys[1] !== 0 || keys[2] !== 0 || keys[3] !== 0)) { const readerIndex = buffer.readerIndex; let lengthOffset = readerIndex; if (buffer.length - (compressedLength + readerIndex + 4) >= 2) { @@ -22,7 +22,7 @@ export function decompress(buffer: ByteBuffer, keys?: number[]): { compression: buffer.readerIndex = readerIndex; } - if(compression == 0) { + if(compression === 0) { // Uncompressed file const data = new ByteBuffer(compressedLength); buffer.copy(data, 0, buffer.readerIndex, compressedLength); @@ -35,15 +35,15 @@ export function decompress(buffer: ByteBuffer, keys?: number[]): { compression: } return { compression, buffer: decryptedData, version }; - } else { + } // Compressed file const uncompressedLength = buffer.get('INT'); if (uncompressedLength < 0) { - throw new Error(`Invalid uncompressed length`); + throw new Error('Invalid uncompressed length'); } const decryptedData = new ByteBuffer( - compression == 1 ? uncompressedLength : (buffer.length - buffer.readerIndex + 2) + compression === 1 ? uncompressedLength : (buffer.length - buffer.readerIndex + 2) ); buffer.copy(decryptedData, 0, buffer.readerIndex); @@ -53,13 +53,13 @@ export function decompress(buffer: ByteBuffer, keys?: number[]): { compression: } else if(compression === 2) { // GZIP decompressed = new ByteBuffer(gunzipSync(decryptedData)); } else { - throw new Error(`Invalid compression type`); + throw new Error('Invalid compression type'); } buffer.readerIndex = buffer.readerIndex + compressedLength; if(decompressed.length !== uncompressedLength) { - throw new Error(`Length mismatch`); + throw new Error('Length mismatch'); } let version = -1; @@ -68,7 +68,6 @@ export function decompress(buffer: ByteBuffer, keys?: number[]): { compression: } return { compression, buffer: decompressed, version }; - } } export function decryptXtea(input: ByteBuffer, keys: number[], length: number): ByteBuffer { diff --git a/src/filestore/data/filestore-loader.ts b/src/filestore/data/filestore-loader.ts index 46b3a6c..c985c3a 100644 --- a/src/filestore/data/filestore-loader.ts +++ b/src/filestore/data/filestore-loader.ts @@ -1,6 +1,6 @@ import { ByteBuffer } from '@runejs/common'; -import { readFileSync } from 'fs'; -import { join } from 'path'; +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; export interface FilestoreChannels { diff --git a/src/filestore/file-data.ts b/src/filestore/file-data.ts index 7fbc757..58e6454 100644 --- a/src/filestore/file-data.ts +++ b/src/filestore/file-data.ts @@ -1,7 +1,7 @@ import { ByteBuffer } from '@runejs/common'; -import { decompress, readIndexedDataChunk, FilestoreChannels } from './data'; -import { FileIndex } from './file-index'; +import { decompress, readIndexedDataChunk, type FilestoreChannels } from './data'; +import type { FileIndex } from './file-index'; export class FileData { @@ -52,7 +52,7 @@ export class FileData { public type: 'archive' | 'file' = 'file'; protected readonly filestoreChannels: FilestoreChannels; - private decompressed: boolean = false; + private decompressed = false; /** * Creates a new `FileData` object. diff --git a/src/filestore/file-index.ts b/src/filestore/file-index.ts index ffa45a0..aa66346 100644 --- a/src/filestore/file-index.ts +++ b/src/filestore/file-index.ts @@ -2,7 +2,7 @@ import { logger } from '@runejs/common'; import { Archive } from './archive'; import { FileData } from './file-data'; -import { FilestoreChannels, readIndexedDataChunk, decompress } from './data'; +import { type FilestoreChannels, readIndexedDataChunk, decompress } from './data'; import { hash } from './util'; diff --git a/src/filestore/filestore.ts b/src/filestore/filestore.ts index 96defd1..8d6c7aa 100644 --- a/src/filestore/filestore.ts +++ b/src/filestore/filestore.ts @@ -1,11 +1,11 @@ -import { FilestoreChannels, loadFilestore } from './data'; -import { FileIndex, IndexId, indexIdMap } from './file-index'; +import { type FilestoreChannels, loadFilestore } from './data'; +import { FileIndex, type IndexId, indexIdMap } from './file-index'; import { getFileNames } from './util'; import { SpriteStore, MusicStore, BinaryStore, JingleStore, SoundStore, RegionStore, ConfigStore, ModelStore, WidgetStore, FontStore, - TextureStore, ItemStore, NpcStore, ObjectStore, XteaDefinition, - VarbitStore + TextureStore, type ItemStore, type NpcStore, type ObjectStore, type XteaDefinition, + type VarbitStore } from './stores'; @@ -68,7 +68,8 @@ export class Filestore { * Fetches the specified File Index. * @param indexId The string or numberic ID of the File Index to find. */ - public getIndex(indexId: number | IndexId): FileIndex { + public getIndex(inputIndexId: number | IndexId): FileIndex { + let indexId = inputIndexId; if(typeof indexId !== 'number') { indexId = indexIdMap[indexId]; } @@ -78,9 +79,8 @@ export class Filestore { archiveIndex.decodeIndex(); this.indexes.set(indexId, archiveIndex); return archiveIndex; - } else { - return this.indexes.get(indexId); } + return this.indexes.get(indexId); } public get itemStore(): ItemStore { diff --git a/src/filestore/stores/binary-store.ts b/src/filestore/stores/binary-store.ts index 322c3e7..3e624cd 100644 --- a/src/filestore/stores/binary-store.ts +++ b/src/filestore/stores/binary-store.ts @@ -1,8 +1,8 @@ import { logger } from '@runejs/common'; -import { existsSync, mkdirSync, writeFileSync } from 'fs'; +import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; -import { Filestore, getFileName } from '../filestore'; -import { FileData } from '../file-data'; +import { type Filestore, getFileName } from '../filestore'; +import type { FileData } from '../file-data'; /** diff --git a/src/filestore/stores/config-store.ts b/src/filestore/stores/config-store.ts index 48ed9d5..a924420 100644 --- a/src/filestore/stores/config-store.ts +++ b/src/filestore/stores/config-store.ts @@ -1,6 +1,6 @@ -import { Filestore } from '../filestore'; -import { FileIndex } from '../file-index'; -import { Archive } from '../archive'; +import type { Filestore } from '../filestore'; +import type { FileIndex } from '../file-index'; +import type { Archive } from '../archive'; import { NpcStore, ObjectStore, ItemStore, VarbitStore } from './configs'; @@ -83,7 +83,8 @@ export class ConfigStore { this.varbitStore = new VarbitStore(this); } - public getArchive(configId: ConfigId | number): Archive { + public getArchive(inputConfigId: ConfigId | number): Archive { + let configId = inputConfigId; if(typeof configId !== 'number') { configId = configIdMap[configId]; } diff --git a/src/filestore/stores/configs/item-store.ts b/src/filestore/stores/configs/item-store.ts index cbe2c88..19b06f8 100644 --- a/src/filestore/stores/configs/item-store.ts +++ b/src/filestore/stores/configs/item-store.ts @@ -1,9 +1,9 @@ import { logger } from '@runejs/common'; import { ByteBuffer } from '@runejs/common'; -import { Archive } from '../../archive'; -import { ConfigStore } from '../config-store'; -import { FileData } from '../../file-data'; +import type { Archive } from '../../archive'; +import type { ConfigStore } from '../config-store'; +import type { FileData } from '../../file-data'; /** @@ -14,7 +14,7 @@ export class ItemConfig { gameId: number; name: string | null = null; stackable?: boolean; - value: number = 0; + value = 0; members?: boolean; worldOptions?: string[]; widgetOptions?: string[]; @@ -93,14 +93,14 @@ export class ItemStore { const itemArchive = this.itemArchive; if(!itemArchive) { - logger.error(`Item archive not found.`); + logger.error('Item archive not found.'); return null; } const itemFile = itemArchive.getFile(itemId) || null; if(!itemFile) { - logger.error(`Item file not found.`); + logger.error('Item file not found.'); return null; } @@ -366,23 +366,23 @@ export class ItemStore { } } else if(opcode === 65) { itemConfig.tradable = true; - } else if(opcode == 78) { + } else if(opcode === 78) { itemConfig.model3d.maleModels[2] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 79) { + } else if(opcode === 79) { itemConfig.model3d.femaleModels[2] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 90) { + } else if(opcode === 90) { itemConfig.model3d.maleHeadModels[0] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 91) { + } else if(opcode === 91) { itemConfig.model3d.femaleHeadModels[0] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 92) { + } else if(opcode === 92) { itemConfig.model3d.maleHeadModels[1] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 93) { + } else if(opcode === 93) { itemConfig.model3d.femaleHeadModels[1] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 95) { + } else if(opcode === 95) { itemConfig.model2d.rotationZ = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 97) { + } else if(opcode === 97) { itemConfig.bankNoteId = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode == 98) { + } else if(opcode === 98) { itemConfig.bankNoteTemplate = (buffer.get('SHORT', 'UNSIGNED')); } else if(opcode >= 100 && opcode < 110) { if(!itemConfig.stackableIds) { @@ -391,17 +391,17 @@ export class ItemStore { } itemConfig.stackableIds[opcode - 100] = (buffer.get('SHORT', 'UNSIGNED')); itemConfig.stackableAmounts[opcode - 100] = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode == 110) { + } else if(opcode === 110) { itemConfig.rendering.resizeX = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 111) { + } else if(opcode === 111) { itemConfig.rendering.resizeY = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 112) { + } else if(opcode === 112) { itemConfig.rendering.resizeZ = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 113) { + } else if(opcode === 113) { itemConfig.rendering.ambient = buffer.get('BYTE'); - } else if(opcode == 114) { + } else if(opcode === 114) { itemConfig.rendering.contrast = buffer.get('BYTE'); - } else if(opcode == 115) { + } else if(opcode === 115) { itemConfig.teamId = buffer.get('BYTE', 'UNSIGNED'); } } @@ -416,7 +416,7 @@ export class ItemStore { */ public decodeItemStore(): ItemConfig[] { if(!this.itemArchive) { - logger.error(`Item archive not found.`); + logger.error('Item archive not found.'); return null; } @@ -427,7 +427,7 @@ export class ItemStore { const itemFile = this.itemArchive.getFile(itemId) || null; if(!itemFile) { - logger.error(`Item file not found.`); + logger.error('Item file not found.'); return null; } diff --git a/src/filestore/stores/configs/npc-store.ts b/src/filestore/stores/configs/npc-store.ts index c57c7a9..5ce3c0e 100644 --- a/src/filestore/stores/configs/npc-store.ts +++ b/src/filestore/stores/configs/npc-store.ts @@ -1,8 +1,8 @@ import { logger } from '@runejs/common'; -import { Archive } from '../../archive'; -import { ConfigStore } from '../config-store'; -import { FileData } from '../../file-data'; +import type { Archive } from '../../archive'; +import type { ConfigStore } from '../config-store'; +import type { FileData } from '../../file-data'; /** @@ -26,13 +26,13 @@ export class NpcConfig { turnLeft: -1 }; options?: string[]; - minimapVisible: boolean = true; - combatLevel: number = -1; - headIcon: number = -1; - clickable: boolean = true; - turnDegrees: number = 32; - varbitId: number = -1; - settingId: number = -1; + minimapVisible = true; + combatLevel = -1; + headIcon = -1; + clickable = true; + turnDegrees = 32; + varbitId = -1; + settingId = -1; parentId?: number; childrenIds?: number[]; @@ -84,14 +84,14 @@ export class NpcStore { const npcArchive = this.npcArchive; if(!npcArchive) { - logger.error(`Npc archive not found.`); + logger.error('Npc archive not found.'); return null; } const npcFile = npcArchive.getFile(npcId) || null; if(!npcFile) { - logger.error(`Npc file not found.`); + logger.error('Npc file not found.'); return null; } @@ -117,25 +117,25 @@ export class NpcStore { break; } - if(opcode == 1) { + if(opcode === 1) { const length = buffer.get('BYTE', 'UNSIGNED'); npcConfig.model.models = new Array(length); for(let idx = 0; idx < length; ++idx) { npcConfig.model.models[idx] = buffer.get('SHORT', 'UNSIGNED'); } - } else if(opcode == 2) { + } else if(opcode === 2) { npcConfig.name = buffer.getString(); - } else if(opcode == 12) { + } else if(opcode === 12) { npcConfig.rendering.boundary = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode == 13) { + } else if(opcode === 13) { npcConfig.animations.stand = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 14) { + } else if(opcode === 14) { npcConfig.animations.walk = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 15) { + } else if(opcode === 15) { buffer.get('SHORT', 'UNSIGNED'); // junk - } else if(opcode == 16) { + } else if(opcode === 16) { buffer.get('SHORT', 'UNSIGNED'); // junk - } else if(opcode == 17) { + } else if(opcode === 17) { npcConfig.animations.walk = buffer.get('SHORT', 'UNSIGNED'); npcConfig.animations.turnAround = buffer.get('SHORT', 'UNSIGNED'); npcConfig.animations.turnRight = buffer.get('SHORT', 'UNSIGNED'); @@ -147,44 +147,44 @@ export class NpcStore { const option = buffer.getString(); npcConfig.options[opcode - 30] = option.toLowerCase() === 'hidden' ? null : option; - } else if(opcode == 40) { + } else if(opcode === 40) { // Model color replacement const length = buffer.get('BYTE', 'UNSIGNED'); for(let i = 0; i < length; i++) { buffer.get('SHORT', 'UNSIGNED'); buffer.get('SHORT', 'UNSIGNED'); } - } else if(opcode == 60) { + } else if(opcode === 60) { const length = buffer.get('BYTE', 'UNSIGNED'); npcConfig.model.headModels = new Array(length); for(let i = 0; length > i; i++) { npcConfig.model.headModels[i] = buffer.get('SHORT', 'UNSIGNED'); } - } else if(opcode == 93) { + } else if(opcode === 93) { npcConfig.minimapVisible = false; - } else if(opcode == 95) { + } else if(opcode === 95) { npcConfig.combatLevel = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 97) { + } else if(opcode === 97) { npcConfig.rendering.sizeX = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 98) { + } else if(opcode === 98) { npcConfig.rendering.sizeY = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode == 99) { + } else if(opcode === 99) { npcConfig.rendering.renderPriority = true; - } else if(opcode == 100) { + } else if(opcode === 100) { const ambient = buffer.get('BYTE'); - } else if(opcode == 101) { + } else if(opcode === 101) { const contrast = (buffer.get('BYTE')) * 5; - } else if(opcode == 102) { + } else if(opcode === 102) { npcConfig.headIcon = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode == 103) { + } else if(opcode === 103) { npcConfig.turnDegrees = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode == 106) { + } else if(opcode === 106) { npcConfig.varbitId = buffer.get('SHORT', 'UNSIGNED'); npcConfig.settingId = buffer.get('SHORT', 'UNSIGNED'); - if(npcConfig.varbitId == 65535) { + if(npcConfig.varbitId === 65535) { npcConfig.varbitId = -1; } - if(npcConfig.settingId == 65535) { + if(npcConfig.settingId === 65535) { npcConfig.settingId = -1; } npcConfig.childrenIds = []; @@ -195,7 +195,7 @@ export class NpcStore { npcConfig.childrenIds[i] = -1; } } - } else if(opcode == 107) { + } else if(opcode === 107) { npcConfig.clickable = false; } } @@ -210,7 +210,7 @@ export class NpcStore { */ public decodeNpcStore(): NpcConfig[] { if(!this.npcArchive) { - logger.error(`Npc archive not found.`); + logger.error('Npc archive not found.'); return null; } @@ -221,7 +221,7 @@ export class NpcStore { const npcFile = this.npcArchive.getFile(npcId) || null; if(!npcFile) { - logger.error(`Npc file not found.`); + logger.error('Npc file not found.'); return null; } diff --git a/src/filestore/stores/configs/object-store.ts b/src/filestore/stores/configs/object-store.ts index 726db0e..3dbc495 100644 --- a/src/filestore/stores/configs/object-store.ts +++ b/src/filestore/stores/configs/object-store.ts @@ -1,7 +1,7 @@ import { logger } from '@runejs/common'; -import { Archive } from '../../archive'; -import { ConfigStore } from '../config-store'; -import { FileData } from '../../file-data'; +import type { Archive } from '../../archive'; +import type { ConfigStore } from '../config-store'; +import type { FileData } from '../../file-data'; /** @@ -12,15 +12,15 @@ export class ObjectConfig { gameId: number; name: string | null = null; - solid: boolean = true; - nonWalkable: boolean = true; - hasOptions: boolean = false; + solid = true; + nonWalkable = true; + hasOptions = false; options: string[]; walkable: boolean; configChangeDest?: number[]; - configId: number = -1; - varbitId: number = -1; - supportsItems: boolean = false; + configId = -1; + varbitId = -1; + supportsItems = false; /** * 3d modelling information for this object. @@ -79,7 +79,7 @@ export class ObjectConfig { ambient: 0 }; icon?: number; - wall: boolean = false; + wall = false; } @@ -106,14 +106,14 @@ export class ObjectStore { const objectArchive = this.objectArchive; if(!objectArchive) { - logger.error(`Object archive not found.`); + logger.error('Object archive not found.'); return null; } const objectFile = objectArchive.getFile(objectId) || null; if(!objectFile) { - logger.error(`Object file not found.`); + logger.error('Object file not found.'); return null; } @@ -139,7 +139,7 @@ export class ObjectStore { break; } - if(opcode == 1) { + if(opcode === 1) { const length = buffer.get('BYTE', 'UNSIGNED'); if(length > 0) { if(objectConfig.rendering.objectModels == null) { @@ -153,9 +153,9 @@ export class ObjectStore { buffer.readerIndex += length * 3; } } - } else if(opcode == 2) { + } else if(opcode === 2) { objectConfig.name = buffer.getString(); - } else if(opcode == 5) { + } else if(opcode === 5) { const length = buffer.get('BYTE', 'UNSIGNED'); if(length > 0) { if(objectConfig.rendering.objectModels == null) { @@ -168,32 +168,32 @@ export class ObjectStore { buffer.readerIndex += length * 2; } } - } else if(opcode == 14) { + } else if(opcode === 14) { objectConfig.rendering.sizeX = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode == 15) { + } else if(opcode === 15) { objectConfig.rendering.sizeY = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode == 17) { + } else if(opcode === 17) { objectConfig.solid = false; - } else if(opcode == 18) { + } else if(opcode === 18) { objectConfig.walkable = false; - } else if(opcode == 19) { + } else if(opcode === 19) { objectConfig.hasOptions = buffer.get('BYTE', 'UNSIGNED') === 1; - } else if(opcode == 21) { + } else if(opcode === 21) { objectConfig.rendering.adjustToTerrain = true; - } else if(opcode == 22) { + } else if(opcode === 22) { objectConfig.rendering.nonFlatShading = true; - } else if(opcode == 23) { + } else if(opcode === 23) { objectConfig.wall = true; - } else if(opcode == 24) { + } else if(opcode === 24) { objectConfig.rendering.animationId = buffer.get('SHORT', 'UNSIGNED'); - if(objectConfig.rendering.animationId == 0xFFFF) { + if(objectConfig.rendering.animationId === 0xFFFF) { objectConfig.rendering.animationId = -1; } - } else if(opcode == 28) { + } else if(opcode === 28) { buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode == 29) { + } else if(opcode === 29) { objectConfig.rendering.ambient = buffer.get('BYTE'); - } else if(opcode == 39) { + } else if(opcode === 39) { objectConfig.rendering.contrast = 5 * buffer.get('BYTE'); } else if(opcode >= 30 && opcode < 35) { if(!objectConfig.options) { @@ -202,7 +202,7 @@ export class ObjectStore { const option = buffer.getString(); objectConfig.options[opcode - 30] = option.toLowerCase() === 'hidden' ? null : option; - } else if(opcode == 40) { + } else if(opcode === 40) { const length = buffer.get('BYTE', 'UNSIGNED'); objectConfig.rendering.recolorToFind = []; objectConfig.rendering.recolorToReplace = []; @@ -210,56 +210,56 @@ export class ObjectStore { objectConfig.rendering.recolorToFind[index] = (buffer.get('SHORT', 'UNSIGNED')); // old color objectConfig.rendering.recolorToReplace[index] = (buffer.get('SHORT', 'UNSIGNED')); // new color } - } else if(opcode == 60) { + } else if(opcode === 60) { objectConfig.icon = (buffer.get('SHORT', 'UNSIGNED')); // ?? - } else if(opcode == 62) { + } else if(opcode === 62) { objectConfig.rendering.rotated = true; - } else if(opcode == 64) { + } else if(opcode === 64) { objectConfig.rendering.castsShadow = false; - } else if(opcode == 65) { + } else if(opcode === 65) { objectConfig.rendering.modelSizeX = (buffer.get('SHORT', 'UNSIGNED')); // modelSizeX - } else if(opcode == 66) { + } else if(opcode === 66) { objectConfig.rendering.modelSizeHeight = (buffer.get('SHORT', 'UNSIGNED')); // modelSizeHeight - } else if(opcode == 67) { + } else if(opcode === 67) { objectConfig.rendering.modelSizeY = (buffer.get('SHORT', 'UNSIGNED')); // modelSizeY - } else if(opcode == 68) { + } else if(opcode === 68) { objectConfig.rendering.mapSceneID = (buffer.get('SHORT', 'UNSIGNED')); // mapSceneID - } else if(opcode == 69) { + } else if(opcode === 69) { objectConfig.rendering.face = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode == 70) { + } else if(opcode === 70) { objectConfig.rendering.translateX = (buffer.get('SHORT')); - } else if(opcode == 71) { + } else if(opcode === 71) { objectConfig.rendering.translateY = (buffer.get('SHORT')); - } else if(opcode == 72) { + } else if(opcode === 72) { objectConfig.rendering.translateLevel = (buffer.get('SHORT')); - } else if(opcode == 73) { + } else if(opcode === 73) { objectConfig.rendering.obstructsGround = true; - } else if(opcode == 74) { + } else if(opcode === 74) { objectConfig.rendering.hollow = true; - } else if(opcode == 75) { + } else if(opcode === 75) { objectConfig.supportsItems = buffer.get('BYTE', 'UNSIGNED') === 1; // anInt2533 - } else if(opcode == 77) { + } else if(opcode === 77) { objectConfig.varbitId = buffer.get('SHORT', 'UNSIGNED'); // varbit id - if(objectConfig.varbitId == 0xffff) { + if(objectConfig.varbitId === 0xffff) { objectConfig.varbitId = -1; } objectConfig.configId = buffer.get('SHORT', 'UNSIGNED'); // settings id - if(objectConfig.configId == 0xFFFF) { + if(objectConfig.configId === 0xFFFF) { objectConfig.configId = -1; } const length = buffer.get('BYTE', 'UNSIGNED'); objectConfig.configChangeDest = []; for(let index = 0; index <= length; ++index) { objectConfig.configChangeDest[index] = buffer.get('SHORT', 'UNSIGNED'); - if(0xFFFF == objectConfig.configChangeDest[index]) { + if(0xFFFF === objectConfig.configChangeDest[index]) { objectConfig.configChangeDest[index] = -1; } } - } else if(opcode == 78) { + } else if(opcode === 78) { buffer.get('SHORT', 'UNSIGNED'); // anInt2513 buffer.get('BYTE', 'UNSIGNED'); // anInt2502 - } else if(opcode == 79) { + } else if(opcode === 79) { buffer.get('SHORT', 'UNSIGNED'); // anInt2499 buffer.get('SHORT', 'UNSIGNED'); // anInt2542 buffer.get('BYTE', 'UNSIGNED'); // anInt2502 @@ -280,7 +280,7 @@ export class ObjectStore { */ public decodeObjectStore(): ObjectConfig[] { if(!this.objectArchive) { - logger.error(`Object archive not found.`); + logger.error('Object archive not found.'); return null; } @@ -291,7 +291,7 @@ export class ObjectStore { const objectFile = this.objectArchive.getFile(objectId) || null; if(!objectFile) { - logger.error(`Object file not found.`); + logger.error('Object file not found.'); return null; } diff --git a/src/filestore/stores/configs/varbit-store.ts b/src/filestore/stores/configs/varbit-store.ts index 3873c2a..24f4398 100644 --- a/src/filestore/stores/configs/varbit-store.ts +++ b/src/filestore/stores/configs/varbit-store.ts @@ -1,7 +1,7 @@ import { logger } from '@runejs/common'; -import { Archive } from '../../archive'; -import { ConfigStore } from '../config-store'; -import { FileData } from '../../file-data'; +import type { Archive } from '../../archive'; +import type { ConfigStore } from '../config-store'; +import type { FileData } from '../../file-data'; /** @@ -37,14 +37,14 @@ export class VarbitStore { const varbitArchive = this.varbitArchive; if(!varbitArchive) { - logger.error(`Varbit archive not found.`); + logger.error('Varbit archive not found.'); return null; } const varbitFile = varbitArchive.getFile(varbitId) || null; if(!varbitFile) { - logger.error(`Varbit file not found.`); + logger.error('Varbit file not found.'); return null; } @@ -86,7 +86,7 @@ export class VarbitStore { */ public decodeVarbitStore(): VarbitConfig[] { if(!this.varbitArchive) { - logger.error(`Varbit archive not found.`); + logger.error('Varbit archive not found.'); return null; } @@ -97,7 +97,7 @@ export class VarbitStore { const varbitFile = this.varbitArchive.getFile(varbitId) || null; if(!varbitFile) { - logger.error(`Varbit file not found.`); + logger.error('Varbit file not found.'); return null; } diff --git a/src/filestore/stores/font-store.ts b/src/filestore/stores/font-store.ts index 9c315e2..0d62be3 100644 --- a/src/filestore/stores/font-store.ts +++ b/src/filestore/stores/font-store.ts @@ -1,8 +1,8 @@ import { logger } from '@runejs/common'; import { createCanvas, createImageData } from 'canvas'; -import { Filestore } from '../filestore'; -import { SpritePack, SpriteStore, Sprite, toRgb } from './sprite-store'; +import type { Filestore } from '../filestore'; +import { type SpritePack, type SpriteStore, type Sprite, toRgb } from './sprite-store'; /** @@ -48,7 +48,7 @@ export class Font { * @param textColor The color to draw the text in. * @returns A base64 encoded PNG image. */ - public drawString(string: string, textColor: number = 0xffffff): string { + public drawString(string: string, textColor = 0xffffff): string { const stringWidth = this.getStringWidth(string); const stringHeight = this.getStringHeight(string); const characters = string.split(''); @@ -56,7 +56,7 @@ export class Font { const canvas = createCanvas(stringWidth, stringHeight); const context = canvas.getContext('2d'); - let x: number = 0; + let x = 0; for (const char of characters) { const charPixels = this.getCharPixels(char, textColor); const charWidth = this.getCharWidth(char); @@ -77,7 +77,7 @@ export class Font { * @param char The character or character code to get the pixels of. * @param color The color to set the character's pixels to. Defaults to white. */ - public getCharPixels(char: string | number, color: number = 0xffffff): Uint8ClampedArray | null { + public getCharPixels(char: string | number, color = 0xffffff): Uint8ClampedArray | null { const sprite = this.getSprite(char); if(!sprite) { return null; @@ -169,7 +169,8 @@ export class Font { * Gets the `Sprite` for the specified character or character code. * @param char The character or character code to get the sprite glyph for. */ - public getSprite(char: string | number): Sprite | null { + public getSprite(inputChar: string | number): Sprite | null { + let char = inputChar; if(typeof char === 'string') { char = char.charCodeAt(0); } diff --git a/src/filestore/stores/jingle-store.ts b/src/filestore/stores/jingle-store.ts index c570037..9c5bbbf 100644 --- a/src/filestore/stores/jingle-store.ts +++ b/src/filestore/stores/jingle-store.ts @@ -1,8 +1,8 @@ import { logger } from '@runejs/common'; -import { existsSync, mkdirSync, writeFileSync } from 'fs'; +import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; -import { Filestore } from '../filestore'; -import { FileData } from '../file-data'; +import type { Filestore } from '../filestore'; +import type { FileData } from '../file-data'; /** diff --git a/src/filestore/stores/model-store.ts b/src/filestore/stores/model-store.ts index 056603c..b69abb1 100644 --- a/src/filestore/stores/model-store.ts +++ b/src/filestore/stores/model-store.ts @@ -1,8 +1,8 @@ import { logger } from '@runejs/common'; import { ByteBuffer } from '@runejs/common'; -import { Filestore } from '../filestore'; -import { FileIndex } from '../file-index'; +import type { Filestore } from '../filestore'; +import type { FileIndex } from '../file-index'; export class RsModel { @@ -58,14 +58,14 @@ export class RsModel { this.faceTextureV = new Array>(this.faceCount); for(let i = 0; i < this.faceCount; i++) { - let texturedFaceTypeIndex; + let texturedFaceTypeIndex: number; if(this.texturedFaceTypeIndices == null) { texturedFaceTypeIndex = -1; } else { texturedFaceTypeIndex = this.texturedFaceTypeIndices[i]; } - let textureId; + let textureId: number; if(this.faceTextures == null) { textureId = -1; } else { @@ -175,7 +175,7 @@ export class RsModel { const i_61_ = this.verticesZ[faceC] - this.verticesZ[faceA]; let i_62_ = i_57_ * i_61_ - i_60_ * i_58_; let i_63_ = i_58_ * i_59_ - i_61_ * i_56_; - let i_64_; + let i_64_: number; for(i_64_ = i_56_ * i_60_ - i_59_ * i_57_; i_62_ > 8192 || i_63_ > 8192 || i_64_ > 8192 || i_62_ < -8192 || i_63_ < -8192 || i_64_ < -8192; i_64_ >>= 1) { @@ -189,7 +189,7 @@ export class RsModel { i_62_ = ~~(i_62_ * 256 / i_65_); i_63_ = ~~(i_63_ * 256 / i_65_); i_64_ = ~~(i_64_ * 256 / i_65_); - if(this.faceTypes == null || (this.faceTypes[i_52_] & 0x1) == 0) { + if(this.faceTypes == null || (this.faceTypes[i_52_] & 0x1) === 0) { let class46 = this.vertexNormals[faceA]; class46.x += i_62_; class46.y += i_63_; @@ -216,6 +216,7 @@ export class RsModel { this.vertexNormalOffsets = new Array(this.vertexCount); for(let i_67_ = 0; i_67_ < this.vertexCount; i_67_++) { const normal = this.vertexNormals[i_67_]; + // biome-ignore lint/suspicious/noAssignInExpressions: Legacy const normalOffset = this.vertexNormalOffsets[i_67_] = new VertexNormal(); normalOffset.x = normal.x; normalOffset.y = normal.y; @@ -242,7 +243,7 @@ export class RsModel { normal = this.vertexNormals[faceC]; i_76_ = ~~(arg0 + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / (arg1 * normal.magnitude)); this.faceColorsZ[i] = ColorUtils.method816(faceColor, i_76_, 0); - } else if((this.faceTypes[i] & 0x1) == 0) { + } else if((this.faceTypes[i] & 0x1) === 0) { const faceColor = this.faceColors[i]; const faceType = this.faceTypes[i]; let normal = this.vertexNormals[faceA]; @@ -274,6 +275,7 @@ export class VertexNormal { } } +// biome-ignore lint/complexity/noStaticOnlyClass: Legacy export class ColorUtils { private static readonly UNKNOWN_COLOR_TABLE = ColorUtils.initUnknownColorTable(); @@ -305,7 +307,9 @@ export class ColorUtils { } // @TODO use @runejs/color when published - public static initHsbToRgb(arg0: number, arg1: number, arg2: number): Uint32Array { + public static initHsbToRgb(inputArg0: number, arg1: number, arg2: number): Uint32Array { + let arg0 = inputArg0; + const table = new Uint32Array(65536); arg0 += Math.random() * 0.03 - 0.015; let i = arg1 * 128; @@ -318,7 +322,7 @@ export class ColorUtils { let green = d_61_; let blue = d_61_; if(d_59_ !== 0.0) { - let d_65_; + let d_65_: number; if(d_61_ < 0.5) { d_65_ = d_61_ * (1.0 + d_59_); } else { @@ -366,8 +370,8 @@ export class ColorUtils { const greenUByte = green * 256.0; const blueUByte = blue * 256.0; let rgb = (redUByte << 16) + (greenUByte << 8) + blueUByte; - rgb = this.method707(rgb, arg0); - if(rgb == 0) { + rgb = ColorUtils.method707(rgb, arg0); + if(rgb === 0) { rgb = 1; } table[i++] = rgb; @@ -377,30 +381,31 @@ export class ColorUtils { } public static hsbToRgb(hsb: number): number { - return this.HSB_TO_RGB[hsb]; + return ColorUtils.HSB_TO_RGB[hsb]; } public static method707(rgb: number, arg1: number) { let red = (rgb >> 16) / 256.0; let green = (rgb >> 8 & 0xff) / 256.0; let blue = (rgb & 0xff) / 256.0; - red = Math.pow(red, arg1); - green = Math.pow(green, arg1); - blue = Math.pow(blue, arg1); + red = red ** arg1; + green = green ** arg1; + blue = blue ** arg1; const newRed = red * 256.0; const newGreen = green * 256.0; const newBlue = blue * 256.0; return (newRed << 16) + (newGreen << 8) + newBlue; } - public static method816(faceColor: number, arg1: number, faceType: number): number { - if((faceType & 0x2) == 2) { + public static method816(faceColor: number, inputArg1: number, faceType: number): number { + let arg1 = inputArg1; + if((faceType & 0x2) === 2) { if(arg1 < 0) { arg1 = 0; } else if(arg1 > 127) { arg1 = 127; } - arg1 = this.UNKNOWN_COLOR_TABLE[arg1]; + arg1 = ColorUtils.UNKNOWN_COLOR_TABLE[arg1]; return arg1; } arg1 = arg1 * (faceColor & 0x7f) >> 7; @@ -412,7 +417,8 @@ export class ColorUtils { return (faceColor & 0xff80) + arg1; } - public static method709(arg0: number, arg1: number): number { + public static method709(arg0: number, inputArg1: number): number { + let arg1 = inputArg1; arg1 = (127 - arg1) * (arg0 & 0x7f) >> 7; if(arg1 < 2) { arg1 = 2; @@ -489,23 +495,23 @@ export class ModelStore { const facesCompressTypeOffset = offset; offset += rsModel.faceCount; const facePrioritiesOffset = offset; - if(modelPriority == 255) { + if(modelPriority === 255) { offset += rsModel.faceCount; } const faceSkinsOffset = offset; - if(hasFaceSkins == 1) { + if(hasFaceSkins === 1) { offset += rsModel.faceCount; } const faceTypesOffset = offset; - if(hasFaceTypes == 1) { + if(hasFaceTypes === 1) { offset += rsModel.faceCount; } const vertexSkinsOffset = offset; - if(hasVertexSkins == 1) { + if(hasVertexSkins === 1) { offset += rsModel.vertexCount; } const faceAlphasOffset = offset; - if(hasFaceAlphas == 1) { + if(hasFaceAlphas === 1) { offset += rsModel.faceCount; } const faceIndicesOffset = offset; @@ -532,23 +538,23 @@ export class ModelStore { rsModel.texturedFaceIndicesB = new Uint16Array(rsModel.texturedFaceCount); rsModel.texturedFaceIndicesC = new Uint16Array(rsModel.texturedFaceCount); } - if(hasVertexSkins == 1) { + if(hasVertexSkins === 1) { rsModel.vertexSkins = new Array(rsModel.texturedFaceCount); } - if(hasFaceTypes == 1) { + if(hasFaceTypes === 1) { rsModel.faceTypes = new Uint32Array(rsModel.faceCount); rsModel.texturedFaceTypeIndices = new Int8Array(rsModel.faceCount); rsModel.faceTextures = new Int8Array(rsModel.faceCount); } - if(modelPriority == 255) { + if(modelPriority === 255) { rsModel.facePriorities = new Uint8Array(rsModel.faceCount); } else { rsModel.facePriority = modelPriority & 128; } - if(hasFaceAlphas == 1) { + if(hasFaceAlphas === 1) { rsModel.faceAlphas = new Uint8Array(rsModel.faceCount); } - if(hasFaceSkins == 1) { + if(hasFaceSkins === 1) { rsModel.faceSkins = new Array(rsModel.faceCount); } rsModel.faceColors = new Uint32Array(rsModel.faceCount); @@ -563,7 +569,7 @@ export class ModelStore { for(let i = 0; i < rsModel.vertexCount; i++) { const mask = vertexDirectionOffsetBuffer.get('BYTE', 'UNSIGNED'); let xOffset = 0; - if((mask & 0x1) != 0) { + if((mask & 0x1) !== 0) { try { xOffset = xDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { @@ -571,7 +577,7 @@ export class ModelStore { } } let yOffset = 0; - if((mask & 0x2) != 0) { + if((mask & 0x2) !== 0) { try { yOffset = yDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { @@ -579,7 +585,7 @@ export class ModelStore { } } let zOffset = 0; - if((mask & 0x4) != 0) { + if((mask & 0x4) !== 0) { try { zOffset = zDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { @@ -592,7 +598,7 @@ export class ModelStore { baseOffsetX = rsModel.verticesX[i]; baseOffsetY = rsModel.verticesY[i]; baseOffsetZ = rsModel.verticesZ[i]; - if(hasVertexSkins == 1) { + if(hasVertexSkins === 1) { rsModel.vertexSkins[i] = vertexSkinOffsetBuffer.get('BYTE', 'UNSIGNED'); } } @@ -603,19 +609,19 @@ export class ModelStore { vertexSkinOffsetBuffer.readerIndex = faceSkinsOffset; for(let i = 0; i < rsModel.faceCount; i++) { rsModel.faceColors[i] = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - if(hasFaceTypes == 1) { + if(hasFaceTypes === 1) { const mask = xDataOffsetBuffer.get('BYTE', 'UNSIGNED'); - if((mask & 0x1) == 1) { + if((mask & 0x1) === 1) { rsModel.faceTypes[i] = 1; useFaceTypes = true; } else { rsModel.faceTypes[i] = 0; } - if((mask & 0x2) == 2) { + if((mask & 0x2) === 2) { rsModel.texturedFaceTypeIndices[i] = mask >> 2; rsModel.faceTextures[i] = rsModel.faceColors[i]; rsModel.faceColors[i] = 127; - if(rsModel.faceTextures[i] != -1) { + if(rsModel.faceTextures[i] !== -1) { useFaceTextures = true; } } else { @@ -623,13 +629,13 @@ export class ModelStore { rsModel.faceTextures[i] = -1; } } - if(modelPriority == 255) { + if(modelPriority === 255) { rsModel.facePriorities[i] = yDataOffsetBuffer.get('BYTE', 'UNSIGNED'); } - if(hasFaceAlphas == 1) { + if(hasFaceAlphas === 1) { rsModel.faceAlphas[i] = zDataOffsetBuffer.get('BYTE', 'UNSIGNED'); } - if(hasFaceSkins == 1) { + if(hasFaceSkins === 1) { rsModel.faceSkins[i] = vertexSkinOffsetBuffer.get('BYTE', 'UNSIGNED'); } } @@ -639,7 +645,7 @@ export class ModelStore { let lastB = 0; let lastC = 0; let accumulator = 0; - let oldTrianglePointOffsetX; + let oldTrianglePointOffsetX: number; for(let i = 0; i < rsModel.faceCount; i++) { const type = xDataOffsetBuffer.get('BYTE', 'UNSIGNED'); switch(type) { @@ -692,10 +698,10 @@ export class ModelStore { let useTexturedFaceTypeIndices = false; for(let face = 0; face < rsModel.faceCount; face++) { const texturedFaceTypeIndex = rsModel.texturedFaceTypeIndices[face] & 0xff; - if(texturedFaceTypeIndex != 255) { - if((rsModel.texturedFaceIndicesA[texturedFaceTypeIndex] & 0xffff) == rsModel.faceIndicesA[face] && - (rsModel.texturedFaceIndicesB[texturedFaceTypeIndex] & 0xffff) == rsModel.faceIndicesB[face] && - (rsModel.texturedFaceIndicesC[texturedFaceTypeIndex] & 0xffff) == rsModel.faceIndicesC[face]) { + if(texturedFaceTypeIndex !== 255) { + if((rsModel.texturedFaceIndicesA[texturedFaceTypeIndex] & 0xffff) === rsModel.faceIndicesA[face] && + (rsModel.texturedFaceIndicesB[texturedFaceTypeIndex] & 0xffff) === rsModel.faceIndicesB[face] && + (rsModel.texturedFaceIndicesC[texturedFaceTypeIndex] & 0xffff) === rsModel.faceIndicesC[face]) { rsModel.texturedFaceTypeIndices[face] = -1; } else { useTexturedFaceTypeIndices = true; diff --git a/src/filestore/stores/music-store.ts b/src/filestore/stores/music-store.ts index 9f1396b..f81f0f8 100644 --- a/src/filestore/stores/music-store.ts +++ b/src/filestore/stores/music-store.ts @@ -1,8 +1,8 @@ import { logger } from '@runejs/common'; -import { existsSync, mkdirSync, writeFileSync } from 'fs'; +import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; -import { Filestore, getFileName } from '../filestore'; -import { FileData } from '../file-data'; +import { type Filestore, getFileName } from '../filestore'; +import type { FileData } from '../file-data'; /** diff --git a/src/filestore/stores/region-store.ts b/src/filestore/stores/region-store.ts index 3d91097..9304620 100644 --- a/src/filestore/stores/region-store.ts +++ b/src/filestore/stores/region-store.ts @@ -1,9 +1,9 @@ import { logger } from '@runejs/common'; -import { readFileSync } from 'fs'; -import path from 'path'; +import { readFileSync } from 'node:fs'; +import path from 'node:path'; -import { Filestore } from '../filestore'; -import { FileIndex } from '../file-index'; +import type { Filestore } from '../filestore'; +import type { FileIndex } from '../file-index'; export const maxRegions = 32768; @@ -193,11 +193,11 @@ export class RegionStore { if(opcode === 0) { run = false; break; - } else if(opcode === 1) { + }if(opcode === 1) { tileHeights[level][x][y] = buffer.get('BYTE', 'UNSIGNED'); run = false; break; - } else if(opcode <= 49) { + }if(opcode <= 49) { tileOverlayIds[level][x][y] = buffer.get('BYTE'); tileOverlayPaths[level][x][y] = (opcode - 2) / 4; tileOverlayOrientations[level][x][y] = opcode - 2 & 3; diff --git a/src/filestore/stores/sound-store.ts b/src/filestore/stores/sound-store.ts index 8d58d9a..8812b25 100644 --- a/src/filestore/stores/sound-store.ts +++ b/src/filestore/stores/sound-store.ts @@ -1,8 +1,8 @@ import { logger } from '@runejs/common'; -import { existsSync, mkdirSync, writeFileSync } from 'fs'; +import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; -import { Filestore } from '../filestore'; -import { FileData } from '../file-data'; +import type { Filestore } from '../filestore'; +import type { FileData } from '../file-data'; /** diff --git a/src/filestore/stores/sprite-store.ts b/src/filestore/stores/sprite-store.ts index 32dddb5..7691c53 100644 --- a/src/filestore/stores/sprite-store.ts +++ b/src/filestore/stores/sprite-store.ts @@ -1,17 +1,18 @@ import { logger } from '@runejs/common'; -import { existsSync, mkdirSync, rmdirSync, writeFileSync } from 'fs'; +import { existsSync, mkdirSync, rmdirSync, writeFileSync } from 'node:fs'; import { PNG } from 'pngjs'; -import { Filestore, getFileName } from '../filestore'; -import { FileData } from '../file-data'; +import { type Filestore, getFileName } from '../filestore'; +import type { FileData } from '../file-data'; import { pngToBase64 } from '../util'; -export function toRgb(num: number): number[] { +export function toRgb(inputNum: number): number[] { + let num = inputNum; num >>>= 0; - const b = num & 0xFF, - g = (num & 0xFF00) >>> 8, - r = (num & 0xFF0000) >>> 16; + const b = num & 0xFF; + const g = (num & 0xFF00) >>> 8; + const r = (num & 0xFF0000) >>> 16; return [ r, g, b ]; } @@ -38,7 +39,7 @@ export class Sprite { } public resizeToLibSize() { - if (this.width != this.maxWidth || this.height != this.maxHeight) { + if (this.width !== this.maxWidth || this.height !== this.maxHeight) { const resizedPixels = new Array(this.maxWidth * this.maxHeight); let pixelCount = 0; for (let y = 0; y < this.height; y++) { @@ -146,13 +147,13 @@ export class SpritePack { const pngBuffer = PNG.sync.write(png); writeFileSync(`./unpacked/sprite-packs/${ this.fileData.fileId }_${ fileName }/${ i }.png`, pngBuffer); } catch(e) { - logger.error(`Error writing sprite to disk`, e); + logger.error('Error writing sprite to disk', e); } } } else if(this._sprites.length === 1) { const sprite = this._sprites[0]; if(!sprite) { - reject(`No sprite data found.`); + reject('No sprite data found.'); } else { const png = sprite.toPng(); png.pack(); @@ -177,7 +178,7 @@ export class SpritePack { if(buffer.length === 0) { throw new Error(`Empty file content for Sprite Pack ${this.fileData.fileId}.`); - } else { + } buffer.readerIndex = (buffer.length - 2); const spriteCount = buffer.get('SHORT', 'UNSIGNED'); const sprites: Sprite[] = new Array(spriteCount); @@ -271,7 +272,6 @@ export class SpritePack { } this._sprites = sprites; - } return this; } diff --git a/src/filestore/stores/texture-store.ts b/src/filestore/stores/texture-store.ts index 9d2d69f..ba2f0d0 100644 --- a/src/filestore/stores/texture-store.ts +++ b/src/filestore/stores/texture-store.ts @@ -1,9 +1,9 @@ import { logger } from '@runejs/common'; import { PNG } from 'pngjs'; -import { existsSync, mkdirSync, rmdirSync, writeFileSync } from 'fs'; +import { existsSync, mkdirSync, rmdirSync, writeFileSync } from 'node:fs'; -import { Filestore } from '../filestore'; -import { SpriteStore, toRgb } from './sprite-store'; +import type { Filestore } from '../filestore'; +import { type SpriteStore, toRgb } from './sprite-store'; import { ColorUtils } from './model-store'; import { pngToBase64 } from '../util'; @@ -32,11 +32,11 @@ export class Texture { size: number; public static setSize(size: number) { - this.TEXTURE_SIZE = size; + Texture.TEXTURE_SIZE = size; } public static setIntensity(intensity: number) { - this.TEXTURE_INTENSITY = intensity; + Texture.TEXTURE_INTENSITY = intensity; } public generatePixels(spriteStore: SpriteStore): boolean { @@ -62,12 +62,12 @@ export class Texture { const spritePixels = sprite.pixelIdx; const spritePalette = sprite.palette; const color = this.colors[i]; - if((color & ~0xffffff) == 50331648) { + if((color & ~0xffffff) === 50331648) { const i_15_ = color & 0xff00ff; const i_16_ = color >> 8 & 0xff; for(let j = 0; j < spritePalette.length; j++) { let i_18_ = spritePalette[j]; - if((i_18_ & 0xffff) == i_18_ >> 8) { + if((i_18_ & 0xffff) === i_18_ >> 8) { i_18_ &= 0xff; spritePalette[j] = i_15_ * i_18_ >> 8 & 0xff00ff | i_16_ * i_18_ & 0xff00; } @@ -76,7 +76,7 @@ export class Texture { for(let j = 0; j < spritePalette.length; j++) { spritePalette[j] = ColorUtils.method707(spritePalette[j], Texture.TEXTURE_INTENSITY); } - let renderType; + let renderType: number; if(i === 0) { renderType = 0; } else { @@ -118,12 +118,12 @@ export class Texture { public animate(gameTick: number) { if(this.pixels != null) { - if(this.direction == 1 || this.direction == 3) { + if(this.direction === 1 || this.direction === 3) { if(Texture.pixelsBuffer == null || Texture.pixelsBuffer.length < this.pixels.length) { Texture.pixelsBuffer = new Array(this.pixels.length); } - let size; - if(this.pixels.length == 16384) { + let size: number; + if(this.pixels.length === 16384) { size = 64; } else { size = 128; @@ -131,7 +131,7 @@ export class Texture { const colorCount = this.pixels.length / 4; let textureSpeed = size * gameTick * this.speed; const colorCountMin1 = colorCount - 1; - if(this.direction == 1) { + if(this.direction === 1) { textureSpeed = -textureSpeed; } for(let i = 0; i < colorCount; i++) { @@ -145,12 +145,12 @@ export class Texture { this.pixels = Texture.pixelsBuffer; Texture.pixelsBuffer = is; } - if(this.direction == 2 || this.direction == 4) { + if(this.direction === 2 || this.direction === 4) { if(Texture.pixelsBuffer == null || Texture.pixelsBuffer.length < this.pixels.length) { Texture.pixelsBuffer = new Array(this.pixels.length); } - let size; - if(this.pixels.length == 16384) { + let size: number; + if(this.pixels.length === 16384) { size = 64; } else { size = 128; @@ -158,7 +158,7 @@ export class Texture { const colorCount = this.pixels.length / 4; let textureSpeed = gameTick * this.speed; const sizeMin1 = size - 1; - if(this.direction == 2) { + if(this.direction === 2) { textureSpeed = -textureSpeed; } for(let x = 0; x < colorCount; x += size) { @@ -192,7 +192,7 @@ export class Texture { const png = this.toPng(); png.pack(); const pngBuffer = PNG.sync.write(png); - writeFileSync(path + `/${this.id}.png`, pngBuffer); + writeFileSync(`${path}/${this.id}.png`, pngBuffer); resolve(); } catch(e) { reject(e); @@ -272,7 +272,7 @@ export class TextureStore { const texture = new Texture(); texture.id = id; texture.rgb = buffer.get('SHORT', 'UNSIGNED'); - texture.opaque = buffer.get('BYTE', 'UNSIGNED') == 1; + texture.opaque = buffer.get('BYTE', 'UNSIGNED') === 1; const spritesCount = buffer.get('BYTE', 'UNSIGNED'); if(spritesCount < 1 || spritesCount > 4) { throw new Error(); @@ -315,7 +315,7 @@ export class TextureStore { if(!generated) { return null; } - if(texture.rgb == 0) { + if(texture.rgb === 0) { texture.resetPixels(); } else { //texture.anInt2137--; // TODO Find out why this? @@ -346,7 +346,7 @@ export class TextureStore { return false; } texture.generatePixels(this.fileStore.spriteStore); - return texture.size == Texture.LOW_MEMORY_TEXTURE_SIZE; + return texture.size === Texture.LOW_MEMORY_TEXTURE_SIZE; } } diff --git a/src/filestore/stores/widget-store.ts b/src/filestore/stores/widget-store.ts index 5909277..5a767e8 100644 --- a/src/filestore/stores/widget-store.ts +++ b/src/filestore/stores/widget-store.ts @@ -1,10 +1,10 @@ import { ByteBuffer } from '@runejs/common'; -import { FileIndex } from '../file-index'; -import { Filestore } from '../filestore'; -import { FileData } from '../file-data'; -import { Archive } from '../archive'; -import { existsSync, mkdirSync, writeFileSync } from 'fs'; +import type { FileIndex } from '../file-index'; +import type { Filestore } from '../filestore'; +import type { FileData } from '../file-data'; +import type { Archive } from '../archive'; +import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; import { logger } from '@runejs/common'; @@ -69,7 +69,7 @@ export class ParentWidget extends WidgetBase { } export class ContainerWidget extends WidgetBase { - public type: number = 0; + public type = 0; public scrollHeight: number; public scrollPosition: number; public scrollWidth: number; @@ -77,7 +77,7 @@ export class ContainerWidget extends WidgetBase { } export class TextWidget extends WidgetBase { - type: number = 1; + type = 1; textAlignmentX: number; textAlignmentY: number; lineHeight: number; @@ -87,7 +87,7 @@ export class TextWidget extends WidgetBase { } export class InteractableItemWidget extends WidgetBase { - type: number = 2; + type = 2; items: number[]; itemAmounts: number[]; itemSwapable: boolean; @@ -103,7 +103,7 @@ export class InteractableItemWidget extends WidgetBase { } export class RectangleWidget extends WidgetBase { - type: number = 3; + type = 3; filled: boolean; textColor: number; alternateTextColor: number; @@ -112,7 +112,7 @@ export class RectangleWidget extends WidgetBase { } export class LinkWidget extends WidgetBase { - type: number = 4; + type = 4; textAlignmentX: number; textAlignmentY: number; lineHeight: number; @@ -127,7 +127,7 @@ export class LinkWidget extends WidgetBase { } export class SpriteWidget extends WidgetBase { - type: number = 5; + type = 5; spriteId: number; alternateSpriteId: number; @@ -136,7 +136,7 @@ export class SpriteWidget extends WidgetBase { } export class ModelWidget extends WidgetBase { - type: number = 6; + type = 6; modelType: number; modelId: number; alternateModelType: number; @@ -153,7 +153,7 @@ export class ModelWidget extends WidgetBase { } export class StaticItemWidget extends WidgetBase { - type: number = 7; + type = 7; items: number[]; itemAmounts: number[]; isInventory: boolean; @@ -167,12 +167,12 @@ export class StaticItemWidget extends WidgetBase { } export class TooltipWidget extends WidgetBase { - type: number = 8; + type = 8; text: string; } export class LineWidget extends WidgetBase { - type: number = 9; + type = 9; lineWidth: number; textColor: number; } @@ -214,7 +214,7 @@ export class WidgetStore { const file = this.widgetFileIndex.files.get(id); if(file.type === 'file') { return this.decodeWidgetFile(id, file); - } else if(file.type === 'archive') { + }if(file.type === 'archive') { const widgetParent = new ParentWidget(id); const archive: Archive = file as Archive; archive.decodeArchiveFiles(); @@ -241,9 +241,8 @@ export class WidgetStore { const content = widgetFile.content; if(content[0] === -1) { return this.decodeWidgetFormat2(id, content); - } else { - return this.decodeWidgetFormat1(id, content); } + return this.decodeWidgetFormat1(id, content); } /** @@ -293,8 +292,8 @@ export class WidgetStore { return widget; } - public decodeWidgetFormat2(widgetId: number, buffer: ByteBuffer): WidgetBase { - buffer = new ByteBuffer(buffer); + public decodeWidgetFormat2(widgetId: number, inputBuffer: ByteBuffer): WidgetBase { + const buffer = new ByteBuffer(inputBuffer); buffer.readerIndex = 1; // skip the first byte for the new format @@ -365,7 +364,7 @@ export class WidgetStore { widget.lineHeight = buffer.get('BYTE', 'UNSIGNED'); widget.textAlignmentX = buffer.get('BYTE', 'UNSIGNED'); widget.textAlignmentY = buffer.get('BYTE', 'UNSIGNED'); - widget.textShadowed = buffer.get('BYTE', 'UNSIGNED') == 1; + widget.textShadowed = buffer.get('BYTE', 'UNSIGNED') === 1; widget.textColor = buffer.get('INT'); } @@ -387,8 +386,8 @@ export class WidgetStore { return widget; } - public decodeWidgetFormat1(widgetId: number, buffer: ByteBuffer): WidgetBase { - buffer = new ByteBuffer(buffer); + public decodeWidgetFormat1(widgetId: number, inputBuffer: ByteBuffer): WidgetBase { + const buffer = new ByteBuffer(inputBuffer); const widgetType = buffer.get('BYTE'); const widget: WidgetBase = this.createWidget(widgetType); @@ -555,11 +554,11 @@ export class WidgetStore { widget.itemAmounts = new Array(widget.width * widget.height); widget.textAlignmentX = buffer.get('BYTE', 'UNSIGNED'); widget.fontId = buffer.get('SHORT', 'UNSIGNED'); - widget.textShadowed = buffer.get('BYTE', 'UNSIGNED') == 1; + widget.textShadowed = buffer.get('BYTE', 'UNSIGNED') === 1; widget.textColor = buffer.get('INT'); widget.itemSpritePadsX = buffer.get('SHORT'); widget.itemSpritePadsY = buffer.get('SHORT'); - widget.isInventory = buffer.get('BYTE', 'UNSIGNED') == 1; + widget.isInventory = buffer.get('BYTE', 'UNSIGNED') === 1; widget.options = new Array(5); @@ -597,25 +596,4 @@ export class WidgetStore { return widget; } - - private decodeListener(buffer: ByteBuffer): any[] { - const length = buffer.get('BYTE', 'UNSIGNED'); - if(length === 0) { - return null; - } - - const objects: any[] = new Array(length); - - for(let i = 0; i < length; i++) { - const opcode = buffer.get('BYTE', 'UNSIGNED'); - if(opcode === 0) { - objects[i] = buffer.get('INT'); - } else if(opcode === 1) { - objects[i] = buffer.getString(); - } - } - - return objects; - } - } diff --git a/src/filestore/util/name-hash.ts b/src/filestore/util/name-hash.ts index a7bab41..0ab8de7 100644 --- a/src/filestore/util/name-hash.ts +++ b/src/filestore/util/name-hash.ts @@ -1,5 +1,5 @@ -import { readFileSync } from 'fs'; -import { join } from 'path'; +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; const parser = require('properties-parser'); diff --git a/src/filestore/util/png.ts b/src/filestore/util/png.ts index 1d5dc93..289f660 100644 --- a/src/filestore/util/png.ts +++ b/src/filestore/util/png.ts @@ -1,4 +1,4 @@ -import { PNG } from 'pngjs'; +import type { PNG } from 'pngjs'; export const pngToBase64 = async (png: PNG): Promise => { diff --git a/src/filestore/util/xtea.ts b/src/filestore/util/xtea.ts index 55aa39d..da49877 100644 --- a/src/filestore/util/xtea.ts +++ b/src/filestore/util/xtea.ts @@ -1,4 +1,4 @@ -import { XteaDefinition } from '../stores'; +import type { XteaDefinition } from '../stores'; import { loadConfigurationFiles } from '@runejs/common/fs'; From 98f9ff7992296f987a2042c12fbf7ed7b181745c Mon Sep 17 00:00:00 2001 From: Borig Date: Fri, 24 Jan 2025 10:59:28 +1300 Subject: [PATCH 5/6] [0.16.1] Auto-fix formatting with Biome --- biome.json | 66 +- config/map-keys.json | 7121 +++++++----------- src/filestore/archive.ts | 95 +- src/filestore/data/chunk.ts | 160 +- src/filestore/data/compression.ts | 108 +- src/filestore/data/filestore-loader.ts | 19 +- src/filestore/file-data.ts | 23 +- src/filestore/file-index.ts | 171 +- src/filestore/filestore.ts | 35 +- src/filestore/stores/binary-store.ts | 38 +- src/filestore/stores/config-store.ts | 38 +- src/filestore/stores/configs/item-store.ts | 392 +- src/filestore/stores/configs/npc-store.ts | 125 +- src/filestore/stores/configs/object-store.ts | 185 +- src/filestore/stores/configs/varbit-store.ts | 30 +- src/filestore/stores/font-store.ts | 63 +- src/filestore/stores/jingle-store.ts | 33 +- src/filestore/stores/model-store.ts | 607 +- src/filestore/stores/music-store.ts | 38 +- src/filestore/stores/region-store.ts | 116 +- src/filestore/stores/sound-store.ts | 33 +- src/filestore/stores/sprite-store.ts | 247 +- src/filestore/stores/texture-store.ts | 200 +- src/filestore/stores/widget-store.ts | 187 +- src/filestore/util/name-hash.ts | 5 +- src/filestore/util/png.ts | 8 +- src/filestore/util/xtea.ts | 33 +- src/run.ts | 1 - tsconfig.json | 12 +- 29 files changed, 4554 insertions(+), 5635 deletions(-) diff --git a/biome.json b/biome.json index feeb97b..14ab5f6 100644 --- a/biome.json +++ b/biome.json @@ -1,35 +1,35 @@ { - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", - "vcs": { - "enabled": true, - "clientKind": "git", - "useIgnoreFile": true - }, - "files": { - "ignoreUnknown": false, - "ignore": [] - }, - "formatter": { - "enabled": true, - "indentStyle": "space", - "indentWidth": 4 - }, - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "complexity": { - "recommended": true, - "noForEach": "off" - } - } - }, - "javascript": { - "formatter": { - "quoteStyle": "single" - } - } + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false, + "ignore": [] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 4 + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "complexity": { + "recommended": true, + "noForEach": "off" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single" + } + } } diff --git a/config/map-keys.json b/config/map-keys.json index dd9dd16..59a8e4b 100644 --- a/config/map-keys.json +++ b/config/map-keys.json @@ -1,4409 +1,2714 @@ [ - { - "archive": 5, - "group": 1, - "name_hash": -1153472937, - "name": "l40_55", - "mapsquare": 10295, - "key": [ - -1920480496, - -1423914110, - 951774544, - -1419269290 - ] - }, - { - "archive": 5, - "group": 5, - "name_hash": -1155051772, - "name": "l29_80", - "mapsquare": 7504, - "key": [ - 1847230655, - 1366615901, - 817013928, - -639754200 - ] - }, - { - "archive": 5, - "group": 13, - "name_hash": -1418243906, - "name": "l39_160", - "mapsquare": 10144, - "key": [ - 265530509, - 2033515489, - -2022406749, - -591072091 - ] - }, - { - "archive": 5, - "group": 21, - "name_hash": -1153472876, - "name": "l40_74", - "mapsquare": 10314, - "key": [ - -2020182865, - -861201399, - 1793241744, - -541294677 - ] - }, - { - "archive": 5, - "group": 25, - "name_hash": -1397926444, - "name": "l40_160", - "mapsquare": 10400, - "key": [ - -1656816922, - 1318311812, - -811481661, - 1625916625 - ] - }, - { - "archive": 5, - "group": 37, - "name_hash": -1154366605, - "name": "l31_75", - "mapsquare": 8011, - "key": [ - -1287670691, - 690712165, - -1180498360, - -813635980 - ] - }, - { - "archive": 5, - "group": 39, - "name_hash": -1154366601, - "name": "l31_79", - "mapsquare": 8015, - "key": [ - -1320874262, - 1937053221, - 220952674, - 1903403210 - ] - }, - { - "archive": 5, - "group": 49, - "name_hash": -1153472848, - "name": "l40_81", - "mapsquare": 10321, - "key": [ - -1416786366, - -183512307, - 774862574, - 1306347169 - ] - }, - { - "archive": 5, - "group": 63, - "name_hash": -1420090976, - "name": "l37_153", - "mapsquare": 9625, - "key": [ - -1160175957, - -906620860, - -585287228, - -1756474591 - ] - }, - { - "archive": 5, - "group": 65, - "name_hash": -1420090975, - "name": "l37_154", - "mapsquare": 9626, - "key": [ - -1086856428, - 1097853921, - -94537716, - -1037836120 - ] - }, - { - "archive": 5, - "group": 67, - "name_hash": -1152519655, - "name": "l51_46", - "mapsquare": 13102, - "key": [ - -585304244, - -85656032, - -1672180123, - -889752362 - ] - }, - { - "archive": 5, - "group": 69, - "name_hash": -1152519654, - "name": "l51_47", - "mapsquare": 13103, - "key": [ - 664202950, - 9942731, - 526981448, - 1961317213 - ] - }, - { - "archive": 5, - "group": 87, - "name_hash": -1152519624, - "name": "l51_56", - "mapsquare": 13112, - "key": [ - -294331294, - -882184793, - 66656303, - -1818669310 - ] - }, - { - "archive": 5, - "group": 91, - "name_hash": -1152519622, - "name": "l51_58", - "mapsquare": 13114, - "key": [ - -1266416096, - 120695750, - -1880861340, - 2120698563 - ] - }, - { - "archive": 5, - "group": 93, - "name_hash": -1153264429, - "name": "l47_47", - "mapsquare": 12079, - "key": [ - 339960494, - -1350930341, - -272469140, - 318766784 - ] - }, - { - "archive": 5, - "group": 95, - "name_hash": -1152519621, - "name": "l51_59", - "mapsquare": 13115, - "key": [ - 1818342784, - -642975152, - -355404480, - 132805372 - ] - }, - { - "archive": 5, - "group": 97, - "name_hash": -1153264428, - "name": "l47_48", - "mapsquare": 12080, - "key": [ - -1938428459, - -1838574783, - 131585942, - -1297008627 - ] - }, - { - "archive": 5, - "group": 99, - "name_hash": -1153264427, - "name": "l47_49", - "mapsquare": 12081, - "key": [ - 613255413, - -1717776939, - -179584559, - -1310165510 - ] - }, - { - "archive": 5, - "group": 101, - "name_hash": -1152519599, - "name": "l51_60", - "mapsquare": 13116, - "key": [ - 1370550295, - -820804475, - 1895373272, - 1832997410 - ] - }, - { - "archive": 5, - "group": 103, - "name_hash": -1152519598, - "name": "l51_61", - "mapsquare": 13117, - "key": [ - -1752848915, - -1242872593, - 1012298354, - -1076490243 - ] - }, - { - "archive": 5, - "group": 111, - "name_hash": -1153264402, - "name": "l47_53", - "mapsquare": 12085, - "key": [ - 866634875, - 2126690507, - 1264568376, - 2107515492 - ] - }, - { - "archive": 5, - "group": 117, - "name_hash": -1153264399, - "name": "l47_56", - "mapsquare": 12088, - "key": [ - 344960338, - -452527992, - 1340005990, - -1328736855 - ] - }, - { - "archive": 5, - "group": 119, - "name_hash": -1153264398, - "name": "l47_57", - "mapsquare": 12089, - "key": [ - -551791250, - -2032976862, - -1354246732, - 1795367998 - ] - }, - { - "archive": 5, - "group": 121, - "name_hash": -1153264397, - "name": "l47_58", - "mapsquare": 12090, - "key": [ - -2012109696, - -607715631, - -468949176, - 1368365998 - ] - }, - { - "archive": 5, - "group": 123, - "name_hash": -1153264396, - "name": "l47_59", - "mapsquare": 12091, - "key": [ - -2111919909, - -1125782501, - -1802382602, - 2137630247 - ] - }, - { - "archive": 5, - "group": 125, - "name_hash": -1153413382, - "name": "l42_49", - "mapsquare": 10801, - "key": [ - -1831859863, - -1836056891, - 342489401, - 1312886995 - ] - }, - { - "archive": 5, - "group": 127, - "name_hash": -1153264374, - "name": "l47_60", - "mapsquare": 12092, - "key": [ - 111448945, - 1997179939, - -1992758838, - -904080104 - ] - }, - { - "archive": 5, - "group": 129, - "name_hash": -1153264373, - "name": "l47_61", - "mapsquare": 12093, - "key": [ - -901249604, - 892308020, - 1075683735, - -148430952 - ] - }, - { - "archive": 5, - "group": 133, - "name_hash": -1153413359, - "name": "l42_51", - "mapsquare": 10803, - "key": [ - 632564181, - 298843585, - -1472601465, - -1065203254 - ] - }, - { - "archive": 5, - "group": 135, - "name_hash": -1153413358, - "name": "l42_52", - "mapsquare": 10804, - "key": [ - 844993707, - -1910359056, - -477807005, - 1502341650 - ] - }, - { - "archive": 5, - "group": 145, - "name_hash": -1369297323, - "name": "l50_151", - "mapsquare": 12951, - "key": [ - -700278939, - 1204517853, - 912770506, - 985515932 - ] - }, - { - "archive": 5, - "group": 149, - "name_hash": -1154158159, - "name": "l38_47", - "mapsquare": 9775, - "key": [ - 358467, - -1032890524, - -323905369, - 672132700 - ] - }, - { - "archive": 5, - "group": 159, - "name_hash": -1154158133, - "name": "l38_52", - "mapsquare": 9780, - "key": [ - 23047955, - 374207630, - -14357742, - 487844353 - ] - }, - { - "archive": 5, - "group": 167, - "name_hash": -1154158130, - "name": "l38_55", - "mapsquare": 9783, - "key": [ - -697645230, - -219261751, - 668010484, - -637416792 - ] - }, - { - "archive": 5, - "group": 175, - "name_hash": -1153413293, - "name": "l42_75", - "mapsquare": 10827, - "key": [ - -837303631, - -267210523, - -2043344605, - 99880496 - ] - }, - { - "archive": 5, - "group": 177, - "name_hash": -1368373827, - "name": "l51_147", - "mapsquare": 13203, - "key": [ - -1342258113, - -2106603709, - 395365404, - -973258459 - ] - }, - { - "archive": 5, - "group": 179, - "name_hash": -1152370701, - "name": "l56_45", - "mapsquare": 14381, - "key": [ - -534048527, - 1614741928, - -469012711, - 1064350100 - ] - }, - { - "archive": 5, - "group": 183, - "name_hash": -1154158069, - "name": "l38_74", - "mapsquare": 9802, - "key": [ - -1207560898, - -2121890421, - -1280361853, - 1268736089 - ] - }, - { - "archive": 5, - "group": 185, - "name_hash": -1368373799, - "name": "l51_154", - "mapsquare": 13210, - "key": [ - -1504547443, - 1455578463, - -1808313124, - -45471826 - ] - }, - { - "archive": 5, - "group": 189, - "name_hash": -1154307027, - "name": "l33_71", - "mapsquare": 8519, - "key": [ - -2051430502, - -746663069, - -593970049, - 379050420 - ] - }, - { - "archive": 5, - "group": 191, - "name_hash": -1154307026, - "name": "l33_72", - "mapsquare": 8520, - "key": [ - 576327208, - 1659610549, - -1319545488, - -1984379615 - ] - }, - { - "archive": 5, - "group": 193, - "name_hash": -1154307025, - "name": "l33_73", - "mapsquare": 8521, - "key": [ - -1909603451, - -596972288, - -446203583, - -1017538492 - ] - }, - { - "archive": 5, - "group": 205, - "name_hash": -1393308893, - "name": "l45_148", - "mapsquare": 11668, - "key": [ - 1094922095, - -1747387328, - 1439302672, - 1510179242 - ] - }, - { - "archive": 5, - "group": 209, - "name_hash": -1393308869, - "name": "l45_151", - "mapsquare": 11671, - "key": [ - 517807890, - -107570269, - 1542962182, - -1495382393 - ] - }, - { - "archive": 5, - "group": 211, - "name_hash": -1393308868, - "name": "l45_152", - "mapsquare": 11672, - "key": [ - 59956468, - -1316944326, - -1514599528, - 979714228 - ] - }, - { - "archive": 5, - "group": 213, - "name_hash": -1393308867, - "name": "l45_153", - "mapsquare": 11673, - "key": [ - 343838952, - -181461714, - 1044748667, - 1241583057 - ] - }, - { - "archive": 5, - "group": 217, - "name_hash": -1155051798, - "name": "l29_75", - "mapsquare": 7499, - "key": [ - 389242534, - 1468756327, - 1739858109, - -397529213 - ] - }, - { - "archive": 5, - "group": 225, - "name_hash": -1418243959, - "name": "l39_149", - "mapsquare": 10133, - "key": [ - -1295008659, - 266597781, - -348722649, - -387821353 - ] - }, - { - "archive": 5, - "group": 227, - "name_hash": -1418243937, - "name": "l39_150", - "mapsquare": 10134, - "key": [ - -169090672, - -418150474, - -663319294, - 345797130 - ] - }, - { - "archive": 5, - "group": 233, - "name_hash": -1418243934, - "name": "l39_153", - "mapsquare": 10137, - "key": [ - 309023294, - 10701046, - 752820323, - 320724862 - ] - }, - { - "archive": 5, - "group": 235, - "name_hash": -1418243933, - "name": "l39_154", - "mapsquare": 10138, - "key": [ - -1266932509, - 1159824249, - 1189711903, - 1903826998 - ] - }, - { - "archive": 5, - "group": 243, - "name_hash": -1152460047, - "name": "l53_51", - "mapsquare": 13619, - "key": [ - 712676739, - -1616631519, - -393806187, - 1432842778 - ] - }, - { - "archive": 5, - "group": 245, - "name_hash": -1152460046, - "name": "l53_52", - "mapsquare": 13620, - "key": [ - -1340730148, - -1509744228, - -755242060, - 937448072 - ] - }, - { - "archive": 5, - "group": 247, - "name_hash": -1152460045, - "name": "l53_53", - "mapsquare": 13621, - "key": [ - -58207297, - 135788372, - -1606570127, - 662309804 - ] - }, - { - "archive": 5, - "group": 253, - "name_hash": -1153204846, - "name": "l49_48", - "mapsquare": 12592, - "key": [ - -794001650, - -436110669, - 1193837402, - 1311524977 - ] - }, - { - "archive": 5, - "group": 255, - "name_hash": -1153204845, - "name": "l49_49", - "mapsquare": 12593, - "key": [ - -544590439, - -1841162484, - -767714061, - 1725894803 - ] - }, - { - "archive": 5, - "group": 257, - "name_hash": -1153204823, - "name": "l49_50", - "mapsquare": 12594, - "key": [ - -120447093, - 579654861, - -527409529, - 1730758809 - ] - }, - { - "archive": 5, - "group": 265, - "name_hash": -1152370700, - "name": "l56_46", - "mapsquare": 14382, - "key": [ - -2047578817, - 357439085, - 332136595, - 1757066622 - ] - }, - { - "archive": 5, - "group": 271, - "name_hash": -1153204817, - "name": "l49_56", - "mapsquare": 12600, - "key": [ - 2086237847, - -2000241337, - 787272168, - -1342875227 - ] - }, - { - "archive": 5, - "group": 275, - "name_hash": -1153204816, - "name": "l49_57", - "mapsquare": 12601, - "key": [ - -360556539, - 1198026803, - -609365963, - -1563087824 - ] - }, - { - "archive": 5, - "group": 279, - "name_hash": -1153204815, - "name": "l49_58", - "mapsquare": 12602, - "key": [ - -1597607397, - -2146719506, - -1185304014, - 1704592002 - ] - }, - { - "archive": 5, - "group": 281, - "name_hash": -1153353802, - "name": "l44_47", - "mapsquare": 11311, - "key": [ - 255517588, - -1240190218, - -693538893, - 52321524 - ] - }, - { - "archive": 5, - "group": 283, - "name_hash": -1153204814, - "name": "l49_59", - "mapsquare": 12603, - "key": [ - 1903637882, - -2078269745, - 1154595732, - 2025457352 - ] - }, - { - "archive": 5, - "group": 289, - "name_hash": -1153204792, - "name": "l49_60", - "mapsquare": 12604, - "key": [ - -1812120898, - -1662909112, - -1432124543, - 571589094 - ] - }, - { - "archive": 5, - "group": 291, - "name_hash": -1153204791, - "name": "l49_61", - "mapsquare": 12605, - "key": [ - 794830896, - -1814271030, - 54960303, - 1749986908 - ] - }, - { - "archive": 5, - "group": 299, - "name_hash": -1153353775, - "name": "l44_53", - "mapsquare": 11317, - "key": [ - 1589220603, - 1966511687, - -1108893479, - -635825550 - ] - }, - { - "archive": 5, - "group": 307, - "name_hash": -1391461850, - "name": "l47_149", - "mapsquare": 12181, - "key": [ - -1585897411, - -486973222, - 976725192, - 587846488 - ] - }, - { - "archive": 5, - "group": 325, - "name_hash": -1397926499, - "name": "l40_147", - "mapsquare": 10387, - "key": [ - 1215785755, - 210499977, - -2093512319, - -625901574 - ] - }, - { - "archive": 5, - "group": 327, - "name_hash": -1152340910, - "name": "l57_45", - "mapsquare": 14637, - "key": [ - 1954698915, - 587858534, - -1998840957, - -860751267 - ] - }, - { - "archive": 5, - "group": 329, - "name_hash": -1397926498, - "name": "l40_148", - "mapsquare": 10388, - "key": [ - 1415243362, - 801135032, - -385381783, - -83383530 - ] - }, - { - "archive": 5, - "group": 331, - "name_hash": -1153353711, - "name": "l44_75", - "mapsquare": 11339, - "key": [ - -1717666269, - 1594420520, - -1751131464, - -154240780 - ] - }, - { - "archive": 5, - "group": 343, - "name_hash": -1397926471, - "name": "l40_154", - "mapsquare": 10394, - "key": [ - -2102331685, - 781435808, - 1774321038, - -660278831 - ] - }, - { - "archive": 5, - "group": 349, - "name_hash": -1154396396, - "name": "l30_75", - "mapsquare": 7755, - "key": [ - 1467763642, - -2057666779, - 1692811, - 1234049587 - ] - }, - { - "archive": 5, - "group": 351, - "name_hash": -1152340907, - "name": "l57_48", - "mapsquare": 14640, - "key": [ - -95254230, - -1094148730, - -1768319507, - 105210786 - ] - }, - { - "archive": 5, - "group": 357, - "name_hash": -1389614782, - "name": "l49_154", - "mapsquare": 12698, - "key": [ - 1313997139, - 413705980, - -1786270630, - -1211819932 - ] - }, - { - "archive": 5, - "group": 367, - "name_hash": -1152311119, - "name": "l58_45", - "mapsquare": 14893, - "key": [ - -102394113, - 1484262111, - 933695487, - -283213546 - ] - }, - { - "archive": 5, - "group": 369, - "name_hash": -1396079432, - "name": "l42_151", - "mapsquare": 10903, - "key": [ - -1260800958, - -1306263170, - 319256612, - 1478365211 - ] - }, - { - "archive": 5, - "group": 371, - "name_hash": -1152549446, - "name": "l50_46", - "mapsquare": 12846, - "key": [ - -1128107273, - -1379368189, - -1166299202, - 1367493265 - ] - }, - { - "archive": 5, - "group": 373, - "name_hash": -1396079431, - "name": "l42_152", - "mapsquare": 10904, - "key": [ - 299433082, - 1093303265, - 1627642083, - 1856381978 - ] - }, - { - "archive": 5, - "group": 377, - "name_hash": -1396079430, - "name": "l42_153", - "mapsquare": 10905, - "key": [ - 15962844, - -263608354, - -1698286677, - -1506930528 - ] - }, - { - "archive": 5, - "group": 379, - "name_hash": -1152549444, - "name": "l50_48", - "mapsquare": 12848, - "key": [ - -472467501, - 942301843, - -1235756555, - 1092807961 - ] - }, - { - "archive": 5, - "group": 381, - "name_hash": -1152549443, - "name": "l50_49", - "mapsquare": 12849, - "key": [ - 856523891, - -869724785, - 1850232409, - -674722748 - ] - }, - { - "archive": 5, - "group": 395, - "name_hash": -1152549415, - "name": "l50_56", - "mapsquare": 12856, - "key": [ - 1065837316, - 566874993, - -395031456, - -1005765069 - ] - }, - { - "archive": 5, - "group": 397, - "name_hash": -1153294222, - "name": "l46_45", - "mapsquare": 11821, - "key": [ - -1676526445, - -459611821, - 895613340, - -1034819584 - ] - }, - { - "archive": 5, - "group": 399, - "name_hash": -1152549414, - "name": "l50_57", - "mapsquare": 12857, - "key": [ - 1315061238, - 798718066, - -593804887, - 1674278988 - ] - }, - { - "archive": 5, - "group": 401, - "name_hash": -1153294221, - "name": "l46_46", - "mapsquare": 11822, - "key": [ - 1634541811, - 1149149862, - -1352773374, - 843504994 - ] - }, - { - "archive": 5, - "group": 405, - "name_hash": -1152549413, - "name": "l50_58", - "mapsquare": 12858, - "key": [ - 1739165090, - 1380036717, - 1760229212, - -243206298 - ] - }, - { - "archive": 5, - "group": 407, - "name_hash": -1153294220, - "name": "l46_47", - "mapsquare": 11823, - "key": [ - -256018875, - 2059756735, - 1142698660, - 1129906231 - ] - }, - { - "archive": 5, - "group": 409, - "name_hash": -1152311117, - "name": "l58_47", - "mapsquare": 14895, - "key": [ - 1294223700, - 778677766, - -2141486577, - 1402077049 - ] - }, - { - "archive": 5, - "group": 411, - "name_hash": -1152549412, - "name": "l50_59", - "mapsquare": 12859, - "key": [ - 426800430, - 789609597, - 2049374976, - 800682309 - ] - }, - { - "archive": 5, - "group": 413, - "name_hash": -1153294219, - "name": "l46_48", - "mapsquare": 11824, - "key": [ - -1116727390, - -659788658, - 307002260, - 354360287 - ] - }, - { - "archive": 5, - "group": 417, - "name_hash": -1153294218, - "name": "l46_49", - "mapsquare": 11825, - "key": [ - 1525999114, - 1162595366, - 465333685, - 1306030426 - ] - }, - { - "archive": 5, - "group": 421, - "name_hash": -1152549390, - "name": "l50_60", - "mapsquare": 12860, - "key": [ - 189035026, - -14034698, - -394067455, - -734636364 - ] - }, - { - "archive": 5, - "group": 423, - "name_hash": -1152549389, - "name": "l50_61", - "mapsquare": 12861, - "key": [ - 1816963481, - -496926322, - 1214068433, - 1190940799 - ] - }, - { - "archive": 5, - "group": 445, - "name_hash": -1153294190, - "name": "l46_56", - "mapsquare": 11832, - "key": [ - 1106039923, - -761356647, - -2114299754, - 948992246 - ] - }, - { - "archive": 5, - "group": 453, - "name_hash": -1153294188, - "name": "l46_58", - "mapsquare": 11834, - "key": [ - 173215366, - -1499360859, - 472196248, - 1020719132 - ] - }, - { - "archive": 5, - "group": 457, - "name_hash": -1153294187, - "name": "l46_59", - "mapsquare": 11835, - "key": [ - 1629126437, - 1652550905, - 841609762, - -317888116 - ] - }, - { - "archive": 5, - "group": 459, - "name_hash": -1153443174, - "name": "l41_48", - "mapsquare": 10544, - "key": [ - -895303896, - 744949463, - -2033369513, - 338766696 - ] - }, - { - "archive": 5, - "group": 463, - "name_hash": -1153294165, - "name": "l46_60", - "mapsquare": 11836, - "key": [ - 1310410800, - 423198468, - -1302324807, - 259991487 - ] - }, - { - "archive": 5, - "group": 465, - "name_hash": -1153294164, - "name": "l46_61", - "mapsquare": 11837, - "key": [ - 1906296384, - 292432464, - 594794920, - -1546603049 - ] - }, - { - "archive": 5, - "group": 473, - "name_hash": -1153443148, - "name": "l41_53", - "mapsquare": 10549, - "key": [ - 1856240647, - -1307099618, - -1197945308, - -2122254516 - ] - }, - { - "archive": 5, - "group": 475, - "name_hash": -1153443147, - "name": "l41_54", - "mapsquare": 10550, - "key": [ - 957349475, - -496721990, - 1780878747, - -1948737082 - ] - }, - { - "archive": 5, - "group": 477, - "name_hash": -1153443146, - "name": "l41_55", - "mapsquare": 10551, - "key": [ - 1042296612, - -799710697, - -433924400, - -596565458 - ] - }, - { - "archive": 5, - "group": 479, - "name_hash": -1153443145, - "name": "l41_56", - "mapsquare": 10552, - "key": [ - 1428473548, - -513790027, - 959922611, - 2094550429 - ] - }, - { - "archive": 5, - "group": 483, - "name_hash": -1154187948, - "name": "l37_49", - "mapsquare": 9521, - "key": [ - -1204382617, - 894320578, - -2017151095, - -679668405 - ] - }, - { - "archive": 5, - "group": 485, - "name_hash": -1154187926, - "name": "l37_50", - "mapsquare": 9522, - "key": [ - 1252542168, - -1448059709, - 1122042436, - -1636001244 - ] - }, - { - "archive": 5, - "group": 487, - "name_hash": -1154187925, - "name": "l37_51", - "mapsquare": 9523, - "key": [ - -1310187207, - -834726064, - -1799766719, - 1699616161 - ] - }, - { - "archive": 5, - "group": 495, - "name_hash": -1154187922, - "name": "l37_54", - "mapsquare": 9526, - "key": [ - -2064252262, - -887239839, - 1167799401, - 858861043 - ] - }, - { - "archive": 5, - "group": 505, - "name_hash": -1153443084, - "name": "l41_75", - "mapsquare": 10571, - "key": [ - 1446859333, - -1375675929, - -760014134, - 1113381222 - ] - }, - { - "archive": 5, - "group": 509, - "name_hash": -1154187861, - "name": "l37_73", - "mapsquare": 9545, - "key": [ - 219605670, - 414657294, - -2055023109, - -49887033 - ] - }, - { - "archive": 5, - "group": 513, - "name_hash": -1154187859, - "name": "l37_75", - "mapsquare": 9547, - "key": [ - -157587105, - -806602516, - 1521207142, - -727421759 - ] - }, - { - "archive": 5, - "group": 525, - "name_hash": -1152281328, - "name": "l59_45", - "mapsquare": 15149, - "key": [ - -1200628316, - 15132614, - -465260385, - -1525542932 - ] - }, - { - "archive": 5, - "group": 543, - "name_hash": -1394232414, - "name": "l44_148", - "mapsquare": 11412, - "key": [ - -119590785, - -577007136, - 324812522, - 2041325243 - ] - }, - { - "archive": 5, - "group": 551, - "name_hash": -1394232389, - "name": "l44_152", - "mapsquare": 11416, - "key": [ - 698674506, - 1358331305, - 913172931, - 765272229 - ] - }, - { - "archive": 5, - "group": 553, - "name_hash": -1394232388, - "name": "l44_153", - "mapsquare": 11417, - "key": [ - 397843162, - 248774218, - -228700444, - -531210715 - ] - }, - { - "archive": 5, - "group": 557, - "name_hash": -1394232386, - "name": "l44_155", - "mapsquare": 11419, - "key": [ - 1015780380, - -702872379, - -62881570, - -362521171 - ] - }, - { - "archive": 5, - "group": 561, - "name_hash": -1419167482, - "name": "l38_147", - "mapsquare": 9875, - "key": [ - -266211268, - 1666415569, - -594364895, - -521555462 - ] - }, - { - "archive": 5, - "group": 575, - "name_hash": -1419167454, - "name": "l38_154", - "mapsquare": 9882, - "key": [ - 1405534886, - 1766737228, - -31518279, - -1845608276 - ] - }, - { - "archive": 5, - "group": 585, - "name_hash": -1152489861, - "name": "l52_49", - "mapsquare": 13361, - "key": [ - 1703044360, - 924675594, - 1161742507, - -1174930763 - ] - }, - { - "archive": 5, - "group": 587, - "name_hash": -1152489839, - "name": "l52_50", - "mapsquare": 13362, - "key": [ - 1001397515, - 373830398, - 1721578513, - -710173574 - ] - }, - { - "archive": 5, - "group": 589, - "name_hash": -1152489838, - "name": "l52_51", - "mapsquare": 13363, - "key": [ - -1632087500, - -620280348, - 22360696, - 1386365966 - ] - }, - { - "archive": 5, - "group": 599, - "name_hash": -1152489833, - "name": "l52_56", - "mapsquare": 13368, - "key": [ - -922499048, - 1143654396, - 1593518953, - 1160947087 - ] - }, - { - "archive": 5, - "group": 601, - "name_hash": -1152489832, - "name": "l52_57", - "mapsquare": 13369, - "key": [ - -857763581, - -71502428, - -1316897039, - -786191624 - ] - }, - { - "archive": 5, - "group": 603, - "name_hash": -1152489831, - "name": "l52_58", - "mapsquare": 13370, - "key": [ - -1259912756, - -640452721, - 1196310747, - 269878509 - ] - }, - { - "archive": 5, - "group": 605, - "name_hash": -1153234638, - "name": "l48_47", - "mapsquare": 12335, - "key": [ - -387260899, - -2132243418, - 654609855, - -1092457792 - ] - }, - { - "archive": 5, - "group": 607, - "name_hash": -1152489830, - "name": "l52_59", - "mapsquare": 13371, - "key": [ - -398274614, - 1285418048, - 876964091, - -1818498048 - ] - }, - { - "archive": 5, - "group": 609, - "name_hash": -1153234637, - "name": "l48_48", - "mapsquare": 12336, - "key": [ - 1152832719, - 1703327384, - -664371384, - 1662584632 - ] - }, - { - "archive": 5, - "group": 613, - "name_hash": -1152489808, - "name": "l52_60", - "mapsquare": 13372, - "key": [ - 865568678, - -2124731942, - 491055641, - 1024391843 - ] - }, - { - "archive": 5, - "group": 615, - "name_hash": -1152489807, - "name": "l52_61", - "mapsquare": 13373, - "key": [ - -2063060546, - 1762500570, - 940695155, - -1216823417 - ] - }, - { - "archive": 5, - "group": 629, - "name_hash": -1153234608, - "name": "l48_56", - "mapsquare": 12344, - "key": [ - 1004655261, - 1112441676, - -1346215742, - -481727651 - ] - }, - { - "archive": 5, - "group": 633, - "name_hash": -1153234607, - "name": "l48_57", - "mapsquare": 12345, - "key": [ - -1123116470, - -1886379076, - 75321832, - 214948598 - ] - }, - { - "archive": 5, - "group": 637, - "name_hash": -1153234606, - "name": "l48_58", - "mapsquare": 12346, - "key": [ - -715432683, - -1936681920, - -1020543828, - 1309349058 - ] - }, - { - "archive": 5, - "group": 641, - "name_hash": -1153234605, - "name": "l48_59", - "mapsquare": 12347, - "key": [ - -1936094430, - -1392774395, - -458238889, - -1734657503 - ] - }, - { - "archive": 5, - "group": 647, - "name_hash": -1153234583, - "name": "l48_60", - "mapsquare": 12348, - "key": [ - 1498945330, - -1007588865, - 989046743, - -1246005481 - ] - }, - { - "archive": 5, - "group": 651, - "name_hash": -1153383569, - "name": "l43_50", - "mapsquare": 11058, - "key": [ - 1248059648, - -909154233, - -2017783073, - -1490858018 - ] - }, - { - "archive": 5, - "group": 657, - "name_hash": -1153383566, - "name": "l43_53", - "mapsquare": 11061, - "key": [ - -1835613132, - -798666747, - 2068157339, - -2010441483 - ] - }, - { - "archive": 5, - "group": 661, - "name_hash": -1153383564, - "name": "l43_55", - "mapsquare": 11063, - "key": [ - 230190523, - -541989310, - 756088519, - 651538143 - ] - }, - { - "archive": 5, - "group": 665, - "name_hash": -1152281325, - "name": "l59_48", - "mapsquare": 15152, - "key": [ - 608495786, - -1850745649, - 1481459068, - 44047411 - ] - }, - { - "archive": 5, - "group": 673, - "name_hash": -1154128366, - "name": "l39_49", - "mapsquare": 10033, - "key": [ - 1965668434, - 1587425243, - 966917721, - 2010341526 - ] - }, - { - "archive": 5, - "group": 677, - "name_hash": -1154128343, - "name": "l39_51", - "mapsquare": 10035, - "key": [ - -1407868267, - -2023338060, - 1465071532, - -1638236197 - ] - }, - { - "archive": 5, - "group": 685, - "name_hash": -1367450280, - "name": "l52_152", - "mapsquare": 13464, - "key": [ - -1367805857, - 1879344111, - -360193890, - -1649253702 - ] - }, - { - "archive": 5, - "group": 695, - "name_hash": -1153383504, - "name": "l43_73", - "mapsquare": 11081, - "key": [ - -1262440825, - -866171020, - -669660830, - 1117529492 - ] - }, - { - "archive": 5, - "group": 697, - "name_hash": -1153383503, - "name": "l43_74", - "mapsquare": 11082, - "key": [ - -1048566284, - -1888694855, - 1387988701, - 1385807517 - ] - }, - { - "archive": 5, - "group": 701, - "name_hash": -1392385371, - "name": "l46_149", - "mapsquare": 11925, - "key": [ - -302404963, - 277321688, - 1579550568, - 112114901 - ] - }, - { - "archive": 5, - "group": 703, - "name_hash": -1392385349, - "name": "l46_150", - "mapsquare": 11926, - "key": [ - 1068449903, - -150593625, - 336172166, - -629999737 - ] - }, - { - "archive": 5, - "group": 707, - "name_hash": -1392385347, - "name": "l46_152", - "mapsquare": 11928, - "key": [ - 926476326, - -742526377, - -1211115608, - -1389832255 - ] - }, - { - "archive": 5, - "group": 709, - "name_hash": -1154128279, - "name": "l39_73", - "mapsquare": 10057, - "key": [ - 2098955587, - 1915815888, - -1487119512, - 2000380500 - ] - }, - { - "archive": 5, - "group": 711, - "name_hash": -1392385346, - "name": "l46_153", - "mapsquare": 11929, - "key": [ - 1557493911, - -1795871852, - 842977119, - -1273925544 - ] - }, - { - "archive": 5, - "group": 713, - "name_hash": -1154128278, - "name": "l39_74", - "mapsquare": 10058, - "key": [ - -1722103890, - -365638741, - -1142855167, - 2038282466 - ] - }, - { - "archive": 5, - "group": 717, - "name_hash": -1154128277, - "name": "l39_75", - "mapsquare": 10059, - "key": [ - 888791770, - 446863035, - 1420300298, - 1689801625 - ] - }, - { - "archive": 5, - "group": 719, - "name_hash": -1155051771, - "name": "l29_81", - "mapsquare": 7505, - "key": [ - 1128826986, - -1208716500, - 1252781850, - 1529005118 - ] - }, - { - "archive": 5, - "group": 733, - "name_hash": -1154277232, - "name": "l34_75", - "mapsquare": 8779, - "key": [ - -678956803, - 2085783757, - 650059580, - 1450034986 - ] - }, - { - "archive": 5, - "group": 735, - "name_hash": -1154366578, - "name": "l31_81", - "mapsquare": 8017, - "key": [ - 1937423379, - 797654757, - -418006613, - -1412491464 - ] - }, - { - "archive": 5, - "group": 737, - "name_hash": -1390538330, - "name": "l48_148", - "mapsquare": 12436, - "key": [ - 399007290, - 768017220, - 1423287782, - -1886380141 - ] - }, - { - "archive": 5, - "group": 739, - "name_hash": -1390538329, - "name": "l48_149", - "mapsquare": 12437, - "key": [ - -1441809522, - 719788383, - 401674935, - 735960337 - ] - }, - { - "archive": 5, - "group": 743, - "name_hash": -1390538304, - "name": "l48_153", - "mapsquare": 12441, - "key": [ - -2117208237, - -719237621, - 1574397150, - 760135387 - ] - }, - { - "archive": 5, - "group": 745, - "name_hash": -1390538303, - "name": "l48_154", - "mapsquare": 12442, - "key": [ - 1291079634, - -1775973138, - -22379340, - -1049278279 - ] - }, - { - "archive": 5, - "group": 747, - "name_hash": -1390538302, - "name": "l48_155", - "mapsquare": 12443, - "key": [ - 185729295, - -1473640650, - 785055601, - 1540127286 - ] - }, - { - "archive": 5, - "group": 755, - "name_hash": -1153324011, - "name": "l45_47", - "mapsquare": 11567, - "key": [ - 1608156752, - 653692997, - -1552888712, - -68059986 - ] - }, - { - "archive": 5, - "group": 757, - "name_hash": -1153324010, - "name": "l45_48", - "mapsquare": 11568, - "key": [ - 1434739536, - -965821980, - 1477351656, - -1116923723 - ] - }, - { - "archive": 5, - "group": 775, - "name_hash": -1153323982, - "name": "l45_55", - "mapsquare": 11575, - "key": [ - -945127161, - -1910820945, - -1457442680, - -838340972 - ] - }, - { - "archive": 5, - "group": 777, - "name_hash": -1153323981, - "name": "l45_56", - "mapsquare": 11576, - "key": [ - -653186907, - 1743653193, - 1590707166, - 841079490 - ] - }, - { - "archive": 5, - "group": 781, - "name_hash": -1397002953, - "name": "l41_151", - "mapsquare": 10647, - "key": [ - -805201729, - 122084157, - -1599110597, - -1319888179 - ] - }, - { - "archive": 5, - "group": 785, - "name_hash": -1153472967, - "name": "l40_46", - "mapsquare": 10286, - "key": [ - 153699565, - -613131576, - -377838747, - -1493212656 - ] - }, - { - "archive": 5, - "group": 789, - "name_hash": -1153323979, - "name": "l45_58", - "mapsquare": 11578, - "key": [ - 899841295, - -1673793442, - -444221245, - -1412324058 - ] - }, - { - "archive": 5, - "group": 793, - "name_hash": -1397002951, - "name": "l41_153", - "mapsquare": 10649, - "key": [ - -42874604, - 1755845042, - -28694142, - -1223794235 - ] - }, - { - "archive": 5, - "group": 795, - "name_hash": -1153323978, - "name": "l45_59", - "mapsquare": 11579, - "key": [ - -1812176752, - -317754254, - -1196521232, - -764437892 - ] - }, - { - "archive": 5, - "group": 799, - "name_hash": -1397002950, - "name": "l41_154", - "mapsquare": 10650, - "key": [ - 688979136, - 1749672831, - 630260962, - 1478721348 - ] - }, - { - "archive": 5, - "group": 801, - "name_hash": -1153472964, - "name": "l40_49", - "mapsquare": 10289, - "key": [ - 661370115, - 1720102, - -155777581, - 1516736681 - ] - }, - { - "archive": 5, - "group": 803, - "name_hash": -1154217623, - "name": "l36_81", - "mapsquare": 9297, - "key": [ - -713608515, - -67472639, - -1826048194, - 544718437 - ] - }, - { - "archive": 5, - "group": 815, - "name_hash": -1153472938, - "name": "l40_54", - "mapsquare": 10294, - "key": [ - -1453542294, - -12979792, - -48294325, - -2009299224 - ] - }, - { - "archive": 5, - "group": 817, - "name_hash": -1396079429, - "name": "l42_154", - "mapsquare": 10906, - "key": [ - 578750625, - -1699758530, - 981674787, - -1430062823 - ] - }, - { - "archive": 5, - "group": 869, - "name_hash": -1152460043, - "name": "l53_55", - "mapsquare": 13623, - "key": [ - 1573282650, - -1418634195, - -1148095035, - -1144615238 - ] - }, - { - "archive": 5, - "group": 871, - "name_hash": -1152400462, - "name": "l55_54", - "mapsquare": 14134, - "key": [ - -1102558063, - 817524163, - -892019492, - -1799662614 - ] - }, - { - "archive": 5, - "group": 875, - "name_hash": -1152430252, - "name": "l54_55", - "mapsquare": 13879, - "key": [ - -489064370, - 2145976597, - -1121899197, - 1908605309 - ] - }, - { - "archive": 5, - "group": 887, - "name_hash": -1152430256, - "name": "l54_51", - "mapsquare": 13875, - "key": [ - 1430738652, - -42941568, - -775986981, - 1000814725 - ] - }, - { - "archive": 5, - "group": 889, - "name_hash": -1152430255, - "name": "l54_52", - "mapsquare": 13876, - "key": [ - -225305190, - 2101410213, - -13023121, - 617681501 - ] - }, - { - "archive": 5, - "group": 891, - "name_hash": -1396079456, - "name": "l42_148", - "mapsquare": 10900, - "key": [ - 305961345, - -1339000220, - 2053506211, - -1898778662 - ] - }, - { - "archive": 5, - "group": 899, - "name_hash": -1395155934, - "name": "l43_149", - "mapsquare": 11157, - "key": [ - 1464071264, - -103928758, - 1681823375, - -1178129652 - ] - }, - { - "archive": 5, - "group": 907, - "name_hash": -1154247442, - "name": "l35_74", - "mapsquare": 9034, - "key": [ - 385694264, - 2091635410, - 1191598764, - -2130030706 - ] - }, - { - "archive": 5, - "group": 909, - "name_hash": -1153353772, - "name": "l44_56", - "mapsquare": 11320, - "key": [ - -1608050593, - -413428259, - 2059848881, - -2038252682 - ] - }, - { - "archive": 5, - "group": 911, - "name_hash": -1394232384, - "name": "l44_157", - "mapsquare": 11421, - "key": [ - 1786548109, - -823015733, - 1963056537, - -1997978489 - ] - }, - { - "archive": 5, - "group": 913, - "name_hash": -1153353771, - "name": "l44_57", - "mapsquare": 11321, - "key": [ - 1281968466, - -998167738, - 684914723, - -1121178555 - ] - }, - { - "archive": 5, - "group": 921, - "name_hash": -1369297347, - "name": "l50_148", - "mapsquare": 12948, - "key": [ - 1629198458, - 696032791, - -1386317415, - 445054408 - ] - }, - { - "archive": 5, - "group": 931, - "name_hash": -1154307113, - "name": "l33_48", - "mapsquare": 8496, - "key": [ - 1343253631, - 1982572295, - -1601521319, - 2107012341 - ] - }, - { - "archive": 5, - "group": 933, - "name_hash": -1154307112, - "name": "l33_49", - "mapsquare": 8497, - "key": [ - 2127424498, - 1622469596, - -1889017351, - -1927651722 - ] - }, - { - "archive": 5, - "group": 935, - "name_hash": -1154307090, - "name": "l33_50", - "mapsquare": 8498, - "key": [ - -1323684593, - -1102390619, - 1456317314, - -2027993898 - ] - }, - { - "archive": 5, - "group": 937, - "name_hash": -1154307089, - "name": "l33_51", - "mapsquare": 8499, - "key": [ - 1158999293, - 2131770333, - -861122128, - 1149793504 - ] - }, - { - "archive": 5, - "group": 939, - "name_hash": -1154277322, - "name": "l34_48", - "mapsquare": 8752, - "key": [ - 50858443, - 684152471, - 698071810, - -175585203 - ] - }, - { - "archive": 5, - "group": 945, - "name_hash": -1154277298, - "name": "l34_51", - "mapsquare": 8755, - "key": [ - -1165798584, - 772244190, - -402783978, - 541755309 - ] - }, - { - "archive": 5, - "group": 947, - "name_hash": -1154247531, - "name": "l35_48", - "mapsquare": 9008, - "key": [ - 2084752401, - -1394447522, - 2084945842, - 1474596929 - ] - }, - { - "archive": 5, - "group": 951, - "name_hash": -1154247508, - "name": "l35_50", - "mapsquare": 9010, - "key": [ - 1975408960, - 888933152, - -1564560503, - 1102048305 - ] - }, - { - "archive": 5, - "group": 953, - "name_hash": -1154247507, - "name": "l35_51", - "mapsquare": 9011, - "key": [ - -135370293, - 700991137, - -1302596410, - -1183796338 - ] - }, - { - "archive": 5, - "group": 955, - "name_hash": -1154247506, - "name": "l35_52", - "mapsquare": 9012, - "key": [ - 1204696185, - -486414605, - -1016110497, - 134649113 - ] - }, - { - "archive": 5, - "group": 957, - "name_hash": -1154217740, - "name": "l36_48", - "mapsquare": 9264, - "key": [ - 1166653059, - 1243560308, - 851316348, - -2052894389 - ] - }, - { - "archive": 5, - "group": 963, - "name_hash": -1154217716, - "name": "l36_51", - "mapsquare": 9267, - "key": [ - 245074215, - -415791406, - 175943925, - 572779390 - ] - }, - { - "archive": 5, - "group": 971, - "name_hash": -1152370671, - "name": "l56_54", - "mapsquare": 14390, - "key": [ - -1631704360, - 1281079278, - -1549067757, - -2034268623 - ] - }, - { - "archive": 5, - "group": 973, - "name_hash": -1153472936, - "name": "l40_56", - "mapsquare": 10296, - "key": [ - 352471788, - -1609938193, - -266114897, - -1904210854 - ] - }, - { - "archive": 5, - "group": 977, - "name_hash": -1153413353, - "name": "l42_57", - "mapsquare": 10809, - "key": [ - -256458821, - -522789093, - -547929725, - 1236572696 - ] - }, - { - "archive": 5, - "group": 981, - "name_hash": -1153383562, - "name": "l43_57", - "mapsquare": 11065, - "key": [ - -1487802839, - 856470179, - 1889283583, - 1157865105 - ] - }, - { - "archive": 5, - "group": 987, - "name_hash": -1153472935, - "name": "l40_57", - "mapsquare": 10297, - "key": [ - -465349039, - -896523889, - 319217459, - -1898915679 - ] - }, - { - "archive": 5, - "group": 991, - "name_hash": -1153443143, - "name": "l41_58", - "mapsquare": 10554, - "key": [ - 1188457126, - -1729374406, - -799893645, - 1217674507 - ] - }, - { - "archive": 5, - "group": 995, - "name_hash": -1418243931, - "name": "l39_156", - "mapsquare": 10140, - "key": [ - 1403932265, - 753452087, - 1731472685, - -767209354 - ] - }, - { - "archive": 5, - "group": 1001, - "name_hash": -1154158129, - "name": "l38_56", - "mapsquare": 9784, - "key": [ - 1874487660, - 1635569708, - -1949316626, - -1920350613 - ] - }, - { - "archive": 5, - "group": 1003, - "name_hash": -1154158128, - "name": "l38_57", - "mapsquare": 9785, - "key": [ - -65486938, - -1485596203, - -1327236566, - 408455718 - ] - }, - { - "archive": 5, - "group": 1005, - "name_hash": -1154128337, - "name": "l39_57", - "mapsquare": 10041, - "key": [ - 1187862613, - -117754960, - 130411769, - -1192628982 - ] - }, - { - "archive": 5, - "group": 1007, - "name_hash": -1154277230, - "name": "l34_77", - "mapsquare": 8781, - "key": [ - -1424107598, - 264936559, - -56759783, - -902529771 - ] - }, - { - "archive": 5, - "group": 1011, - "name_hash": -1154158104, - "name": "l38_60", - "mapsquare": 9788, - "key": [ - 432135203, - 92254316, - -1619550296, - 76065412 - ] - }, - { - "archive": 5, - "group": 1015, - "name_hash": -1154128335, - "name": "l39_59", - "mapsquare": 10043, - "key": [ - 1912880022, - -1723964516, - 2062562401, - -1162129761 - ] - }, - { - "archive": 5, - "group": 1025, - "name_hash": -1153472910, - "name": "l40_61", - "mapsquare": 10301, - "key": [ - -158146381, - 1698585677, - -910760378, - 815929788 - ] - }, - { - "archive": 5, - "group": 1031, - "name_hash": -1153443119, - "name": "l41_61", - "mapsquare": 10557, - "key": [ - -807815903, - 958215082, - -647601710, - 1350072419 - ] - }, - { - "archive": 5, - "group": 1039, - "name_hash": -1153413389, - "name": "l42_42", - "mapsquare": 10794, - "key": [ - 311561230, - 1919568586, - -437925589, - -1702919060 - ] - }, - { - "archive": 5, - "group": 1059, - "name_hash": -1154187950, - "name": "l37_47", - "mapsquare": 9519, - "key": [ - 859829242, - 1044182946, - -1333414478, - 1254064132 - ] - }, - { - "archive": 5, - "group": 1069, - "name_hash": -1154128336, - "name": "l39_58", - "mapsquare": 10042, - "key": [ - 736722071, - 75967325, - -775764394, - 106769937 - ] - }, - { - "archive": 5, - "group": 1075, - "name_hash": -1153413297, - "name": "l42_71", - "mapsquare": 10823, - "key": [ - -626951011, - -1729338061, - -758591782, - 439072305 - ] - }, - { - "archive": 5, - "group": 1087, - "name_hash": -1395155904, - "name": "l43_158", - "mapsquare": 11166, - "key": [ - 431616711, - -1774935949, - -1016388232, - -1018749983 - ] - }, - { - "archive": 5, - "group": 1089, - "name_hash": -1395155903, - "name": "l43_159", - "mapsquare": 11167, - "key": [ - -1959015492, - -1104071, - -1016386588, - 1365103001 - ] - }, - { - "archive": 5, - "group": 1091, - "name_hash": -1153383561, - "name": "l43_58", - "mapsquare": 11066, - "key": [ - 291008624, - -1992710142, - -1831766032, - 1925022398 - ] - }, - { - "archive": 5, - "group": 1093, - "name_hash": -1153383560, - "name": "l43_59", - "mapsquare": 11067, - "key": [ - 1192664190, - -341042618, - -820464572, - 602716622 - ] - }, - { - "archive": 5, - "group": 1095, - "name_hash": -1153383538, - "name": "l43_60", - "mapsquare": 11068, - "key": [ - 1956851882, - 1582504141, - -1090835806, - 1413275925 - ] - }, - { - "archive": 5, - "group": 1101, - "name_hash": -1153413329, - "name": "l42_60", - "mapsquare": 10812, - "key": [ - 90198727, - 258723745, - 748197903, - -426406231 - ] - }, - { - "archive": 5, - "group": 1103, - "name_hash": -1365603237, - "name": "l54_153", - "mapsquare": 13977, - "key": [ - 692126287, - 1949546323, - -1604362290, - -896929747 - ] - }, - { - "archive": 5, - "group": 1105, - "name_hash": -1152400465, - "name": "l55_51", - "mapsquare": 14131, - "key": [ - 1016975630, - -301160039, - -1036603507, - 114074749 - ] - }, - { - "archive": 5, - "group": 1107, - "name_hash": -1397002977, - "name": "l41_148", - "mapsquare": 10644, - "key": [ - -1850188218, - -1521064184, - 1993643055, - -554430753 - ] - }, - { - "archive": 5, - "group": 1117, - "name_hash": -1365603235, - "name": "l54_155", - "mapsquare": 13979, - "key": [ - 1489416025, - -1142280467, - 1808198885, - 137033499 - ] - }, - { - "archive": 5, - "group": 1119, - "name_hash": -1364679714, - "name": "l55_155", - "mapsquare": 14235, - "key": [ - 2114439316, - -345963084, - -1331796597, - 275182841 - ] - }, - { - "archive": 5, - "group": 1121, - "name_hash": -1364679715, - "name": "l55_154", - "mapsquare": 14234, - "key": [ - 237295045, - 867264725, - -1732973561, - -1010980224 - ] - }, - { - "archive": 5, - "group": 1123, - "name_hash": -1153472902, - "name": "l40_69", - "mapsquare": 10309, - "key": [ - 1450418080, - -2118438156, - -1409971045, - -1573015729 - ] - }, - { - "archive": 5, - "group": 1125, - "name_hash": -1152370670, - "name": "l56_55", - "mapsquare": 14391, - "key": [ - 956732210, - 1669781219, - 1907068552, - -1303552057 - ] - }, - { - "archive": 5, - "group": 1129, - "name_hash": -1152340880, - "name": "l57_54", - "mapsquare": 14646, - "key": [ - -1240067889, - -383570142, - -558581485, - 786219832 - ] - }, - { - "archive": 5, - "group": 1131, - "name_hash": -1152340879, - "name": "l57_55", - "mapsquare": 14647, - "key": [ - -1420591871, - -1781801975, - 1517176402, - -1599286074 - ] - }, - { - "archive": 5, - "group": 1133, - "name_hash": -1154187887, - "name": "l37_68", - "mapsquare": 9540, - "key": [ - 2133656685, - -1448323734, - -310319541, - -725382856 - ] - }, - { - "archive": 5, - "group": 1147, - "name_hash": -1154187857, - "name": "l37_77", - "mapsquare": 9549, - "key": [ - 1895759075, - -843340286, - 1429492719, - 295020002 - ] - }, - { - "archive": 5, - "group": 1149, - "name_hash": -1154128275, - "name": "l39_77", - "mapsquare": 10061, - "key": [ - -99111554, - 1883772725, - 1465462119, - 1523468364 - ] - }, - { - "archive": 5, - "group": 1153, - "name_hash": -1394232382, - "name": "l44_159", - "mapsquare": 11423, - "key": [ - 1414693295, - -863955294, - -2034093411, - 1818980885 - ] - }, - { - "archive": 5, - "group": 1155, - "name_hash": -1393308862, - "name": "l45_158", - "mapsquare": 11678, - "key": [ - 350404025, - 770298785, - 1215100269, - -965606935 - ] - }, - { - "archive": 5, - "group": 1165, - "name_hash": -1152430279, - "name": "l54_49", - "mapsquare": 13873, - "key": [ - -1098656620, - -1288920207, - 1465590763, - 1004731135 - ] - }, - { - "archive": 5, - "group": 1173, - "name_hash": -1153353769, - "name": "l44_59", - "mapsquare": 11323, - "key": [ - -1788142439, - -1669893367, - 1168059730, - -14615580 - ] - }, - { - "archive": 5, - "group": 1179, - "name_hash": -1390538307, - "name": "l48_150", - "mapsquare": 12438, - "key": [ - 1545165254, - 945298048, - 244672985, - -2058714291 - ] - }, - { - "archive": 5, - "group": 1181, - "name_hash": -1390538306, - "name": "l48_151", - "mapsquare": 12439, - "key": [ - 737806768, - -1467792108, - 1644942216, - -2040381961 - ] - }, - { - "archive": 5, - "group": 1187, - "name_hash": -1152549448, - "name": "l50_44", - "mapsquare": 12844, - "key": [ - 2093476291, - -208179048, - 86110726, - -3825057 - ] - }, - { - "archive": 5, - "group": 1193, - "name_hash": -1152519657, - "name": "l51_44", - "mapsquare": 13100, - "key": [ - -1830823075, - 1215145937, - -525456385, - -257417215 - ] - }, - { - "archive": 5, - "group": 1205, - "name_hash": -1154247443, - "name": "l35_73", - "mapsquare": 9033, - "key": [ - -340750931, - -1897990035, - 1835646040, - 1466647905 - ] - }, - { - "archive": 5, - "group": 1209, - "name_hash": -1364679718, - "name": "l55_151", - "mapsquare": 14231, - "key": [ - 1658757346, - -2019485271, - -1955365006, - 895906099 - ] - }, - { - "archive": 5, - "group": 1211, - "name_hash": -1154217741, - "name": "l36_47", - "mapsquare": 9263, - "key": [ - -937938813, - 1777088166, - 1291736808, - 1827292190 - ] - }, - { - "archive": 5, - "group": 1233, - "name_hash": -1155051796, - "name": "l29_77", - "mapsquare": 7501, - "key": [ - 1108184632, - 2136992911, - -832195021, - 495111280 - ] - }, - { - "archive": 5, - "group": 1235, - "name_hash": -1418243929, - "name": "l39_158", - "mapsquare": 10142, - "key": [ - 1872120942, - -765842959, - 449655176, - -1168971827 - ] - }, - { - "archive": 5, - "group": 1237, - "name_hash": -1419167450, - "name": "l38_158", - "mapsquare": 9886, - "key": [ - -1621103539, - 1580907615, - -2010887870, - 683082929 - ] - }, - { - "archive": 5, - "group": 1241, - "name_hash": -1154396394, - "name": "l30_77", - "mapsquare": 7757, - "key": [ - -1928468960, - 1136494639, - -1967058052, - 602105509 - ] - }, - { - "archive": 5, - "group": 1243, - "name_hash": -1154187833, - "name": "l37_80", - "mapsquare": 9552, - "key": [ - 1401891457, - -1899495202, - -773917688, - 1780158441 - ] - }, - { - "archive": 5, - "group": 1245, - "name_hash": -1154158042, - "name": "l38_80", - "mapsquare": 9808, - "key": [ - -923585668, - -574638285, - 500509980, - -960811077 - ] - }, - { - "archive": 5, - "group": 1247, - "name_hash": -1154366604, - "name": "l31_76", - "mapsquare": 8012, - "key": [ - -1309713498, - 82935011, - -1681291522, - -685742249 - ] - }, - { - "archive": 5, - "group": 1249, - "name_hash": -1155051803, - "name": "l29_70", - "mapsquare": 7494, - "key": [ - -462058213, - -2060727055, - 781172327, - 1942354602 - ] - }, - { - "archive": 5, - "group": 1251, - "name_hash": -1154187855, - "name": "l37_79", - "mapsquare": 9551, - "key": [ - 1566715405, - -1011565479, - -979871653, - -2050870795 - ] - }, - { - "archive": 5, - "group": 1259, - "name_hash": -1152460072, - "name": "l53_47", - "mapsquare": 13615, - "key": [ - 1478333842, - -146576907, - -285634093, - 361637473 - ] - }, - { - "archive": 5, - "group": 1263, - "name_hash": -1154306997, - "name": "l33_80", - "mapsquare": 8528, - "key": [ - -1141049958, - 1626814655, - 206252937, - 924426084 - ] - }, - { - "archive": 5, - "group": 1267, - "name_hash": -1155051826, - "name": "l29_68", - "mapsquare": 7492, - "key": [ - -342030979, - 1222986839, - 511788549, - 910172876 - ] - }, - { - "archive": 5, - "group": 1269, - "name_hash": -1154396424, - "name": "l30_68", - "mapsquare": 7748, - "key": [ - 1860227470, - -290409954, - 274550911, - -1155783956 - ] - }, - { - "archive": 5, - "group": 1273, - "name_hash": -1154396398, - "name": "l30_73", - "mapsquare": 7753, - "key": [ - 1896168736, - -1223044138, - 779149869, - -1759332197 - ] - }, - { - "archive": 5, - "group": 1275, - "name_hash": -1397002954, - "name": "l41_150", - "mapsquare": 10646, - "key": [ - 1341282074, - 345412696, - -2043666158, - -457216576 - ] - }, - { - "archive": 5, - "group": 1283, - "name_hash": -1152460073, - "name": "l53_46", - "mapsquare": 13614, - "key": [ - -1661089893, - 60198635, - 829308397, - -1835163720 - ] - }, - { - "archive": 5, - "group": 1289, - "name_hash": -1367450304, - "name": "l52_149", - "mapsquare": 13461, - "key": [ - -126183647, - -25151941, - 868809662, - 1423445530 - ] - }, - { - "archive": 5, - "group": 1291, - "name_hash": -1389614784, - "name": "l49_152", - "mapsquare": 12696, - "key": [ - 1955953194, - -1456762745, - -1903871849, - -1325043037 - ] - }, - { - "archive": 5, - "group": 1301, - "name_hash": -1153264340, - "name": "l47_73", - "mapsquare": 12105, - "key": [ - 1153497516, - -449169462, - -635419798, - -1471828315 - ] - }, - { - "archive": 5, - "group": 1303, - "name_hash": -1152489866, - "name": "l52_44", - "mapsquare": 13356, - "key": [ - -62403158, - -259993960, - 1312599048, - 602862976 - ] - }, - { - "archive": 5, - "group": 1307, - "name_hash": -1153204849, - "name": "l49_45", - "mapsquare": 12589, - "key": [ - 1867222552, - -1279268543, - 219776982, - -1133356510 - ] - }, - { - "archive": 5, - "group": 1315, - "name_hash": -1154396393, - "name": "l30_78", - "mapsquare": 7758, - "key": [ - -623741461, - -108703380, - 1436176787, - -834745239 - ] - }, - { - "archive": 5, - "group": 1319, - "name_hash": -1153294225, - "name": "l46_42", - "mapsquare": 11818, - "key": [ - -2034608097, - 1147002393, - -720701760, - -1045127369 - ] - }, - { - "archive": 5, - "group": 1323, - "name_hash": -1155111353, - "name": "l27_81", - "mapsquare": 6993, - "key": [ - 487810245, - -1442562976, - -1813756859, - 201393142 - ] - }, - { - "archive": 5, - "group": 1325, - "name_hash": -1155081594, - "name": "l28_70", - "mapsquare": 7238, - "key": [ - -853120516, - 1697831503, - -12188711, - 770411534 - ] - }, - { - "archive": 5, - "group": 1329, - "name_hash": -1392385372, - "name": "l46_148", - "mapsquare": 11924, - "key": [ - 1132625310, - 132067456, - -328236024, - 510687418 - ] - }, - { - "archive": 5, - "group": 1333, - "name_hash": -1154158096, - "name": "l38_68", - "mapsquare": 9796, - "key": [ - -392461938, - 562137949, - 1796705877, - -650819019 - ] - }, - { - "archive": 5, - "group": 1335, - "name_hash": -1152400488, - "name": "l55_49", - "mapsquare": 14129, - "key": [ - 2079314312, - -89031344, - 495299597, - -2042107512 - ] - }, - { - "archive": 5, - "group": 1337, - "name_hash": -1152400466, - "name": "l55_50", - "mapsquare": 14130, - "key": [ - 1237228106, - -349369148, - -1811607373, - -882226393 - ] - }, - { - "archive": 5, - "group": 1339, - "name_hash": -1365603240, - "name": "l54_150", - "mapsquare": 13974, - "key": [ - -606147120, - 1392509835, - -1748925993, - -2005068147 - ] - }, - { - "archive": 5, - "group": 1341, - "name_hash": -1153353715, - "name": "l44_71", - "mapsquare": 11335, - "key": [ - -133492081, - -915358326, - -714649892, - -2093709476 - ] - }, - { - "archive": 5, - "group": 1357, - "name_hash": -1153294102, - "name": "l46_81", - "mapsquare": 11857, - "key": [ - -1225499683, - -2000595018, - -612194825, - -2014162349 - ] - }, - { - "archive": 5, - "group": 1359, - "name_hash": -1368373800, - "name": "l51_153", - "mapsquare": 13209, - "key": [ - -795447804, - 1305344381, - 98581556, - 2008745861 - ] - }, - { - "archive": 5, - "group": 1361, - "name_hash": -1153264311, - "name": "l47_81", - "mapsquare": 12113, - "key": [ - 1668148064, - 1058673313, - -1746348692, - 847341704 - ] - }, - { - "archive": 5, - "group": 1363, - "name_hash": -1153234520, - "name": "l48_81", - "mapsquare": 12369, - "key": [ - -832628753, - 1107609195, - 262567666, - -1274474550 - ] - }, - { - "archive": 5, - "group": 1373, - "name_hash": -1154247501, - "name": "l35_57", - "mapsquare": 9017, - "key": [ - -518439975, - -1388520826, - 203536985, - 1155539914 - ] - }, - { - "archive": 5, - "group": 1391, - "name_hash": -1152430251, - "name": "l54_56", - "mapsquare": 13880, - "key": [ - -672032867, - -104766980, - -780173326, - -1476119873 - ] - }, - { - "archive": 5, - "group": 1393, - "name_hash": -1152400489, - "name": "l55_48", - "mapsquare": 14128, - "key": [ - 1907787432, - -241593923, - 1152767085, - -541422403 - ] - }, - { - "archive": 5, - "group": 1395, - "name_hash": -1152400460, - "name": "l55_56", - "mapsquare": 14136, - "key": [ - -1104533465, - 1792124817, - -1564247177, - 79706641 - ] - }, - { - "archive": 5, - "group": 1397, - "name_hash": -1152370669, - "name": "l56_56", - "mapsquare": 14392, - "key": [ - 993603906, - -1477196579, - 593064486, - 166369140 - ] - }, - { - "archive": 5, - "group": 1399, - "name_hash": -1152340878, - "name": "l57_56", - "mapsquare": 14648, - "key": [ - -1757352130, - -1996516705, - 263017190, - 1647356258 - ] - }, - { - "archive": 5, - "group": 1401, - "name_hash": -1152311088, - "name": "l58_55", - "mapsquare": 14903, - "key": [ - -1111240831, - 1790345264, - -366658712, - -331374702 - ] - }, - { - "archive": 5, - "group": 1403, - "name_hash": -1152311087, - "name": "l58_56", - "mapsquare": 14904, - "key": [ - -1967472485, - -192437954, - 1186759929, - -2078112945 - ] - }, - { - "archive": 5, - "group": 1405, - "name_hash": -1152281298, - "name": "l59_54", - "mapsquare": 15158, - "key": [ - -974248920, - -1426940984, - -551894435, - 1783499939 - ] - }, - { - "archive": 5, - "group": 1407, - "name_hash": -1152281296, - "name": "l59_56", - "mapsquare": 15160, - "key": [ - -553466395, - -1372948696, - -1385390322, - 710626387 - ] - }, - { - "archive": 5, - "group": 1411, - "name_hash": -1153264309, - "name": "l47_83", - "mapsquare": 12115, - "key": [ - 2146362785, - 1996258091, - -613445101, - 539756591 - ] - }, - { - "archive": 5, - "group": 1413, - "name_hash": -1154336814, - "name": "l32_75", - "mapsquare": 8267, - "key": [ - -474856962, - -1295973639, - 789657650, - -1769058462 - ] - }, - { - "archive": 5, - "group": 1415, - "name_hash": -1154217677, - "name": "l36_69", - "mapsquare": 9285, - "key": [ - -1376572370, - -121986361, - -1862348009, - -378224358 - ] - }, - { - "archive": 5, - "group": 1421, - "name_hash": -1151625926, - "name": "l60_45", - "mapsquare": 15405, - "key": [ - 1745315296, - 704015968, - -1726703759, - 250744336 - ] - }, - { - "archive": 5, - "group": 1423, - "name_hash": -1151625925, - "name": "l60_46", - "mapsquare": 15406, - "key": [ - 900232781, - 1037303290, - 2099698517, - -1839409134 - ] - }, - { - "archive": 5, - "group": 1425, - "name_hash": -1151625924, - "name": "l60_47", - "mapsquare": 15407, - "key": [ - -1139819812, - 165771634, - 462281145, - -1626973480 - ] - }, - { - "archive": 5, - "group": 1427, - "name_hash": -1155111376, - "name": "l27_79", - "mapsquare": 6991, - "key": [ - -1448188175, - 626198836, - 1985989165, - -1062391664 - ] - }, - { - "archive": 5, - "group": 1429, - "name_hash": -1155081585, - "name": "l28_79", - "mapsquare": 7247, - "key": [ - -122734679, - -1029771956, - 1633683499, - 846700218 - ] - }, - { - "archive": 5, - "group": 1439, - "name_hash": -1154277290, - "name": "l34_59", - "mapsquare": 8763, - "key": [ - -161594592, - -1041269457, - 871932542, - -908444460 - ] - }, - { - "archive": 5, - "group": 1447, - "name_hash": -1154336872, - "name": "l32_59", - "mapsquare": 8251, - "key": [ - 1142567601, - 1650263019, - 49659607, - -899246535 - ] - }, - { - "archive": 5, - "group": 1451, - "name_hash": -1154307082, - "name": "l33_58", - "mapsquare": 8506, - "key": [ - -1227747958, - 1491928866, - 1293676120, - 2065870654 - ] - }, - { - "archive": 5, - "group": 1453, - "name_hash": -1154307081, - "name": "l33_59", - "mapsquare": 8507, - "key": [ - 1765022148, - -80255262, - -725852452, - -1286377093 - ] - }, - { - "archive": 5, - "group": 1455, - "name_hash": -1154277292, - "name": "l34_57", - "mapsquare": 8761, - "key": [ - 1760753095, - -1427813077, - 266675077, - -255782653 - ] - }, - { - "archive": 5, - "group": 1457, - "name_hash": -1154277291, - "name": "l34_58", - "mapsquare": 8762, - "key": [ - -1868090282, - -1544166661, - -731821081, - 1736861342 - ] - }, - { - "archive": 5, - "group": 1459, - "name_hash": -1154277268, - "name": "l34_60", - "mapsquare": 8764, - "key": [ - 1880374454, - 1213514336, - -2078057600, - -2021473694 - ] - }, - { - "archive": 5, - "group": 1461, - "name_hash": -1154277267, - "name": "l34_61", - "mapsquare": 8765, - "key": [ - 1948979312, - 134066799, - -78879371, - -323055687 - ] - }, - { - "archive": 5, - "group": 1463, - "name_hash": -1154247499, - "name": "l35_59", - "mapsquare": 9019, - "key": [ - -1293726217, - -1696419000, - -859948399, - 1059527576 - ] - }, - { - "archive": 5, - "group": 1465, - "name_hash": -1154247477, - "name": "l35_60", - "mapsquare": 9020, - "key": [ - -1906040194, - 849367381, - 2098246444, - 1605043698 - ] - }, - { - "archive": 5, - "group": 1467, - "name_hash": -1154247476, - "name": "l35_61", - "mapsquare": 9021, - "key": [ - -665917952, - -432697139, - -602494723, - -2097936281 - ] - }, - { - "archive": 5, - "group": 1469, - "name_hash": -1153472973, - "name": "l40_40", - "mapsquare": 10280, - "key": [ - -1245893544, - -118079793, - -1624599660, - -626968532 - ] - }, - { - "archive": 5, - "group": 1471, - "name_hash": -1153472972, - "name": "l40_41", - "mapsquare": 10281, - "key": [ - 2129832996, - -1542613289, - -1612399066, - -323592936 - ] - }, - { - "archive": 5, - "group": 1473, - "name_hash": -1153472971, - "name": "l40_42", - "mapsquare": 10282, - "key": [ - 667792020, - 292003472, - -998896147, - 7080342 - ] - }, - { - "archive": 5, - "group": 1475, - "name_hash": -1153413391, - "name": "l42_40", - "mapsquare": 10792, - "key": [ - -125671574, - 254943715, - 1343095705, - -1965171670 - ] - }, - { - "archive": 5, - "group": 1477, - "name_hash": -1153413328, - "name": "l42_61", - "mapsquare": 10813, - "key": [ - 78604466, - -1582607088, - 691011324, - -1155733133 - ] - }, - { - "archive": 5, - "group": 1479, - "name_hash": -1153383537, - "name": "l43_61", - "mapsquare": 11069, - "key": [ - 281072607, - -1791037221, - -1221626554, - 801634958 - ] - }, - { - "archive": 5, - "group": 1481, - "name_hash": -1154158071, - "name": "l38_72", - "mapsquare": 9800, - "key": [ - 1648231074, - -690523856, - 538076864, - -489360965 - ] - }, - { - "archive": 5, - "group": 1483, - "name_hash": -1154307021, - "name": "l33_77", - "mapsquare": 8525, - "key": [ - 1448703859, - 604202172, - 1058795271, - -80742538 - ] - }, - { - "archive": 5, - "group": 1485, - "name_hash": -1154217742, - "name": "l36_46", - "mapsquare": 9262, - "key": [ - -1327237404, - -257519940, - -1398355053, - -970581711 - ] - }, - { - "archive": 5, - "group": 1487, - "name_hash": -1154187951, - "name": "l37_46", - "mapsquare": 9518, - "key": [ - -557639005, - 398566091, - -133936467, - -850662847 - ] - }, - { - "archive": 5, - "group": 1489, - "name_hash": -1153472970, - "name": "l40_43", - "mapsquare": 10283, - "key": [ - -2133080221, - 1327669620, - 173304076, - -151662318 - ] - }, - { - "archive": 5, - "group": 1499, - "name_hash": -1153294226, - "name": "l46_41", - "mapsquare": 11817, - "key": [ - 740863947, - -1459447536, - -1272357052, - -1730407126 - ] - }, - { - "archive": 5, - "group": 1501, - "name_hash": -1153294224, - "name": "l46_43", - "mapsquare": 11819, - "key": [ - -1632272271, - -1134214079, - -1204220834, - -1633494895 - ] - }, - { - "archive": 5, - "group": 1511, - "name_hash": -1152460042, - "name": "l53_56", - "mapsquare": 13624, - "key": [ - 2075882635, - 144612382, - -11140999, - 1068051873 - ] - }, - { - "archive": 5, - "group": 1513, - "name_hash": -1152460041, - "name": "l53_57", - "mapsquare": 13625, - "key": [ - -1688194808, - -751145145, - -64310690, - -9400824 - ] - }, - { - "archive": 5, - "group": 1515, - "name_hash": -1152460040, - "name": "l53_58", - "mapsquare": 13626, - "key": [ - 2091552269, - -19993197, - 919014338, - -2088295508 - ] - }, - { - "archive": 5, - "group": 1517, - "name_hash": -1152460039, - "name": "l53_59", - "mapsquare": 13627, - "key": [ - 341129543, - 405594157, - -935930552, - 1362472171 - ] - }, - { - "archive": 5, - "group": 1519, - "name_hash": -1152460017, - "name": "l53_60", - "mapsquare": 13628, - "key": [ - 83847925, - -1748584368, - -1828230097, - 915424426 - ] - }, - { - "archive": 5, - "group": 1521, - "name_hash": -1152460016, - "name": "l53_61", - "mapsquare": 13629, - "key": [ - -1526659316, - 194744161, - -1617203167, - 1822755797 - ] - }, - { - "archive": 5, - "group": 1523, - "name_hash": -1152460015, - "name": "l53_62", - "mapsquare": 13630, - "key": [ - -1632016999, - -2015192780, - -2137722473, - 477794767 - ] - }, - { - "archive": 5, - "group": 1525, - "name_hash": -1154187862, - "name": "l37_72", - "mapsquare": 9544, - "key": [ - 1190108828, - -1694672329, - 922227461, - 627710655 - ] - }, - { - "archive": 5, - "group": 1527, - "name_hash": -1152400464, - "name": "l55_52", - "mapsquare": 14132, - "key": [ - 1385901079, - -1626256839, - 2140816760, - -1871930940 - ] - }, - { - "archive": 5, - "group": 1529, - "name_hash": -1363756198, - "name": "l56_150", - "mapsquare": 14486, - "key": [ - 801004021, - 788873243, - -1673638404, - 152435782 - ] - }, - { - "archive": 5, - "group": 1535, - "name_hash": -1152370675, - "name": "l56_50", - "mapsquare": 14386, - "key": [ - -1730596947, - 85732186, - -1776102738, - -2096470688 - ] - }, - { - "archive": 5, - "group": 1537, - "name_hash": -1152370674, - "name": "l56_51", - "mapsquare": 14387, - "key": [ - -327431537, - -279720677, - 1848501675, - 306634513 - ] - }, - { - "archive": 5, - "group": 1539, - "name_hash": -1152370673, - "name": "l56_52", - "mapsquare": 14388, - "key": [ - 1061380274, - -429796323, - -221565610, - -967547362 - ] - }, - { - "archive": 5, - "group": 1541, - "name_hash": -1154217646, - "name": "l36_79", - "mapsquare": 9295, - "key": [ - -128031646, - -1131908397, - -1360861665, - 1112176197 - ] - }, - { - "archive": 5, - "group": 1543, - "name_hash": -1154396370, - "name": "l30_80", - "mapsquare": 7760, - "key": [ - 2042192998, - 743878512, - -1804236758, - -1160501924 - ] - }, - { - "archive": 5, - "group": 1545, - "name_hash": -1396079428, - "name": "l42_155", - "mapsquare": 10907, - "key": [ - 1703225431, - -1175749730, - 1842579622, - -1861290070 - ] - }, - { - "archive": 5, - "group": 1547, - "name_hash": -1155051797, - "name": "l29_76", - "mapsquare": 7500, - "key": [ - -1016974560, - 452375550, - 1138391999, - 85568702 - ] - } -] \ No newline at end of file + { + "archive": 5, + "group": 1, + "name_hash": -1153472937, + "name": "l40_55", + "mapsquare": 10295, + "key": [-1920480496, -1423914110, 951774544, -1419269290] + }, + { + "archive": 5, + "group": 5, + "name_hash": -1155051772, + "name": "l29_80", + "mapsquare": 7504, + "key": [1847230655, 1366615901, 817013928, -639754200] + }, + { + "archive": 5, + "group": 13, + "name_hash": -1418243906, + "name": "l39_160", + "mapsquare": 10144, + "key": [265530509, 2033515489, -2022406749, -591072091] + }, + { + "archive": 5, + "group": 21, + "name_hash": -1153472876, + "name": "l40_74", + "mapsquare": 10314, + "key": [-2020182865, -861201399, 1793241744, -541294677] + }, + { + "archive": 5, + "group": 25, + "name_hash": -1397926444, + "name": "l40_160", + "mapsquare": 10400, + "key": [-1656816922, 1318311812, -811481661, 1625916625] + }, + { + "archive": 5, + "group": 37, + "name_hash": -1154366605, + "name": "l31_75", + "mapsquare": 8011, + "key": [-1287670691, 690712165, -1180498360, -813635980] + }, + { + "archive": 5, + "group": 39, + "name_hash": -1154366601, + "name": "l31_79", + "mapsquare": 8015, + "key": [-1320874262, 1937053221, 220952674, 1903403210] + }, + { + "archive": 5, + "group": 49, + "name_hash": -1153472848, + "name": "l40_81", + "mapsquare": 10321, + "key": [-1416786366, -183512307, 774862574, 1306347169] + }, + { + "archive": 5, + "group": 63, + "name_hash": -1420090976, + "name": "l37_153", + "mapsquare": 9625, + "key": [-1160175957, -906620860, -585287228, -1756474591] + }, + { + "archive": 5, + "group": 65, + "name_hash": -1420090975, + "name": "l37_154", + "mapsquare": 9626, + "key": [-1086856428, 1097853921, -94537716, -1037836120] + }, + { + "archive": 5, + "group": 67, + "name_hash": -1152519655, + "name": "l51_46", + "mapsquare": 13102, + "key": [-585304244, -85656032, -1672180123, -889752362] + }, + { + "archive": 5, + "group": 69, + "name_hash": -1152519654, + "name": "l51_47", + "mapsquare": 13103, + "key": [664202950, 9942731, 526981448, 1961317213] + }, + { + "archive": 5, + "group": 87, + "name_hash": -1152519624, + "name": "l51_56", + "mapsquare": 13112, + "key": [-294331294, -882184793, 66656303, -1818669310] + }, + { + "archive": 5, + "group": 91, + "name_hash": -1152519622, + "name": "l51_58", + "mapsquare": 13114, + "key": [-1266416096, 120695750, -1880861340, 2120698563] + }, + { + "archive": 5, + "group": 93, + "name_hash": -1153264429, + "name": "l47_47", + "mapsquare": 12079, + "key": [339960494, -1350930341, -272469140, 318766784] + }, + { + "archive": 5, + "group": 95, + "name_hash": -1152519621, + "name": "l51_59", + "mapsquare": 13115, + "key": [1818342784, -642975152, -355404480, 132805372] + }, + { + "archive": 5, + "group": 97, + "name_hash": -1153264428, + "name": "l47_48", + "mapsquare": 12080, + "key": [-1938428459, -1838574783, 131585942, -1297008627] + }, + { + "archive": 5, + "group": 99, + "name_hash": -1153264427, + "name": "l47_49", + "mapsquare": 12081, + "key": [613255413, -1717776939, -179584559, -1310165510] + }, + { + "archive": 5, + "group": 101, + "name_hash": -1152519599, + "name": "l51_60", + "mapsquare": 13116, + "key": [1370550295, -820804475, 1895373272, 1832997410] + }, + { + "archive": 5, + "group": 103, + "name_hash": -1152519598, + "name": "l51_61", + "mapsquare": 13117, + "key": [-1752848915, -1242872593, 1012298354, -1076490243] + }, + { + "archive": 5, + "group": 111, + "name_hash": -1153264402, + "name": "l47_53", + "mapsquare": 12085, + "key": [866634875, 2126690507, 1264568376, 2107515492] + }, + { + "archive": 5, + "group": 117, + "name_hash": -1153264399, + "name": "l47_56", + "mapsquare": 12088, + "key": [344960338, -452527992, 1340005990, -1328736855] + }, + { + "archive": 5, + "group": 119, + "name_hash": -1153264398, + "name": "l47_57", + "mapsquare": 12089, + "key": [-551791250, -2032976862, -1354246732, 1795367998] + }, + { + "archive": 5, + "group": 121, + "name_hash": -1153264397, + "name": "l47_58", + "mapsquare": 12090, + "key": [-2012109696, -607715631, -468949176, 1368365998] + }, + { + "archive": 5, + "group": 123, + "name_hash": -1153264396, + "name": "l47_59", + "mapsquare": 12091, + "key": [-2111919909, -1125782501, -1802382602, 2137630247] + }, + { + "archive": 5, + "group": 125, + "name_hash": -1153413382, + "name": "l42_49", + "mapsquare": 10801, + "key": [-1831859863, -1836056891, 342489401, 1312886995] + }, + { + "archive": 5, + "group": 127, + "name_hash": -1153264374, + "name": "l47_60", + "mapsquare": 12092, + "key": [111448945, 1997179939, -1992758838, -904080104] + }, + { + "archive": 5, + "group": 129, + "name_hash": -1153264373, + "name": "l47_61", + "mapsquare": 12093, + "key": [-901249604, 892308020, 1075683735, -148430952] + }, + { + "archive": 5, + "group": 133, + "name_hash": -1153413359, + "name": "l42_51", + "mapsquare": 10803, + "key": [632564181, 298843585, -1472601465, -1065203254] + }, + { + "archive": 5, + "group": 135, + "name_hash": -1153413358, + "name": "l42_52", + "mapsquare": 10804, + "key": [844993707, -1910359056, -477807005, 1502341650] + }, + { + "archive": 5, + "group": 145, + "name_hash": -1369297323, + "name": "l50_151", + "mapsquare": 12951, + "key": [-700278939, 1204517853, 912770506, 985515932] + }, + { + "archive": 5, + "group": 149, + "name_hash": -1154158159, + "name": "l38_47", + "mapsquare": 9775, + "key": [358467, -1032890524, -323905369, 672132700] + }, + { + "archive": 5, + "group": 159, + "name_hash": -1154158133, + "name": "l38_52", + "mapsquare": 9780, + "key": [23047955, 374207630, -14357742, 487844353] + }, + { + "archive": 5, + "group": 167, + "name_hash": -1154158130, + "name": "l38_55", + "mapsquare": 9783, + "key": [-697645230, -219261751, 668010484, -637416792] + }, + { + "archive": 5, + "group": 175, + "name_hash": -1153413293, + "name": "l42_75", + "mapsquare": 10827, + "key": [-837303631, -267210523, -2043344605, 99880496] + }, + { + "archive": 5, + "group": 177, + "name_hash": -1368373827, + "name": "l51_147", + "mapsquare": 13203, + "key": [-1342258113, -2106603709, 395365404, -973258459] + }, + { + "archive": 5, + "group": 179, + "name_hash": -1152370701, + "name": "l56_45", + "mapsquare": 14381, + "key": [-534048527, 1614741928, -469012711, 1064350100] + }, + { + "archive": 5, + "group": 183, + "name_hash": -1154158069, + "name": "l38_74", + "mapsquare": 9802, + "key": [-1207560898, -2121890421, -1280361853, 1268736089] + }, + { + "archive": 5, + "group": 185, + "name_hash": -1368373799, + "name": "l51_154", + "mapsquare": 13210, + "key": [-1504547443, 1455578463, -1808313124, -45471826] + }, + { + "archive": 5, + "group": 189, + "name_hash": -1154307027, + "name": "l33_71", + "mapsquare": 8519, + "key": [-2051430502, -746663069, -593970049, 379050420] + }, + { + "archive": 5, + "group": 191, + "name_hash": -1154307026, + "name": "l33_72", + "mapsquare": 8520, + "key": [576327208, 1659610549, -1319545488, -1984379615] + }, + { + "archive": 5, + "group": 193, + "name_hash": -1154307025, + "name": "l33_73", + "mapsquare": 8521, + "key": [-1909603451, -596972288, -446203583, -1017538492] + }, + { + "archive": 5, + "group": 205, + "name_hash": -1393308893, + "name": "l45_148", + "mapsquare": 11668, + "key": [1094922095, -1747387328, 1439302672, 1510179242] + }, + { + "archive": 5, + "group": 209, + "name_hash": -1393308869, + "name": "l45_151", + "mapsquare": 11671, + "key": [517807890, -107570269, 1542962182, -1495382393] + }, + { + "archive": 5, + "group": 211, + "name_hash": -1393308868, + "name": "l45_152", + "mapsquare": 11672, + "key": [59956468, -1316944326, -1514599528, 979714228] + }, + { + "archive": 5, + "group": 213, + "name_hash": -1393308867, + "name": "l45_153", + "mapsquare": 11673, + "key": [343838952, -181461714, 1044748667, 1241583057] + }, + { + "archive": 5, + "group": 217, + "name_hash": -1155051798, + "name": "l29_75", + "mapsquare": 7499, + "key": [389242534, 1468756327, 1739858109, -397529213] + }, + { + "archive": 5, + "group": 225, + "name_hash": -1418243959, + "name": "l39_149", + "mapsquare": 10133, + "key": [-1295008659, 266597781, -348722649, -387821353] + }, + { + "archive": 5, + "group": 227, + "name_hash": -1418243937, + "name": "l39_150", + "mapsquare": 10134, + "key": [-169090672, -418150474, -663319294, 345797130] + }, + { + "archive": 5, + "group": 233, + "name_hash": -1418243934, + "name": "l39_153", + "mapsquare": 10137, + "key": [309023294, 10701046, 752820323, 320724862] + }, + { + "archive": 5, + "group": 235, + "name_hash": -1418243933, + "name": "l39_154", + "mapsquare": 10138, + "key": [-1266932509, 1159824249, 1189711903, 1903826998] + }, + { + "archive": 5, + "group": 243, + "name_hash": -1152460047, + "name": "l53_51", + "mapsquare": 13619, + "key": [712676739, -1616631519, -393806187, 1432842778] + }, + { + "archive": 5, + "group": 245, + "name_hash": -1152460046, + "name": "l53_52", + "mapsquare": 13620, + "key": [-1340730148, -1509744228, -755242060, 937448072] + }, + { + "archive": 5, + "group": 247, + "name_hash": -1152460045, + "name": "l53_53", + "mapsquare": 13621, + "key": [-58207297, 135788372, -1606570127, 662309804] + }, + { + "archive": 5, + "group": 253, + "name_hash": -1153204846, + "name": "l49_48", + "mapsquare": 12592, + "key": [-794001650, -436110669, 1193837402, 1311524977] + }, + { + "archive": 5, + "group": 255, + "name_hash": -1153204845, + "name": "l49_49", + "mapsquare": 12593, + "key": [-544590439, -1841162484, -767714061, 1725894803] + }, + { + "archive": 5, + "group": 257, + "name_hash": -1153204823, + "name": "l49_50", + "mapsquare": 12594, + "key": [-120447093, 579654861, -527409529, 1730758809] + }, + { + "archive": 5, + "group": 265, + "name_hash": -1152370700, + "name": "l56_46", + "mapsquare": 14382, + "key": [-2047578817, 357439085, 332136595, 1757066622] + }, + { + "archive": 5, + "group": 271, + "name_hash": -1153204817, + "name": "l49_56", + "mapsquare": 12600, + "key": [2086237847, -2000241337, 787272168, -1342875227] + }, + { + "archive": 5, + "group": 275, + "name_hash": -1153204816, + "name": "l49_57", + "mapsquare": 12601, + "key": [-360556539, 1198026803, -609365963, -1563087824] + }, + { + "archive": 5, + "group": 279, + "name_hash": -1153204815, + "name": "l49_58", + "mapsquare": 12602, + "key": [-1597607397, -2146719506, -1185304014, 1704592002] + }, + { + "archive": 5, + "group": 281, + "name_hash": -1153353802, + "name": "l44_47", + "mapsquare": 11311, + "key": [255517588, -1240190218, -693538893, 52321524] + }, + { + "archive": 5, + "group": 283, + "name_hash": -1153204814, + "name": "l49_59", + "mapsquare": 12603, + "key": [1903637882, -2078269745, 1154595732, 2025457352] + }, + { + "archive": 5, + "group": 289, + "name_hash": -1153204792, + "name": "l49_60", + "mapsquare": 12604, + "key": [-1812120898, -1662909112, -1432124543, 571589094] + }, + { + "archive": 5, + "group": 291, + "name_hash": -1153204791, + "name": "l49_61", + "mapsquare": 12605, + "key": [794830896, -1814271030, 54960303, 1749986908] + }, + { + "archive": 5, + "group": 299, + "name_hash": -1153353775, + "name": "l44_53", + "mapsquare": 11317, + "key": [1589220603, 1966511687, -1108893479, -635825550] + }, + { + "archive": 5, + "group": 307, + "name_hash": -1391461850, + "name": "l47_149", + "mapsquare": 12181, + "key": [-1585897411, -486973222, 976725192, 587846488] + }, + { + "archive": 5, + "group": 325, + "name_hash": -1397926499, + "name": "l40_147", + "mapsquare": 10387, + "key": [1215785755, 210499977, -2093512319, -625901574] + }, + { + "archive": 5, + "group": 327, + "name_hash": -1152340910, + "name": "l57_45", + "mapsquare": 14637, + "key": [1954698915, 587858534, -1998840957, -860751267] + }, + { + "archive": 5, + "group": 329, + "name_hash": -1397926498, + "name": "l40_148", + "mapsquare": 10388, + "key": [1415243362, 801135032, -385381783, -83383530] + }, + { + "archive": 5, + "group": 331, + "name_hash": -1153353711, + "name": "l44_75", + "mapsquare": 11339, + "key": [-1717666269, 1594420520, -1751131464, -154240780] + }, + { + "archive": 5, + "group": 343, + "name_hash": -1397926471, + "name": "l40_154", + "mapsquare": 10394, + "key": [-2102331685, 781435808, 1774321038, -660278831] + }, + { + "archive": 5, + "group": 349, + "name_hash": -1154396396, + "name": "l30_75", + "mapsquare": 7755, + "key": [1467763642, -2057666779, 1692811, 1234049587] + }, + { + "archive": 5, + "group": 351, + "name_hash": -1152340907, + "name": "l57_48", + "mapsquare": 14640, + "key": [-95254230, -1094148730, -1768319507, 105210786] + }, + { + "archive": 5, + "group": 357, + "name_hash": -1389614782, + "name": "l49_154", + "mapsquare": 12698, + "key": [1313997139, 413705980, -1786270630, -1211819932] + }, + { + "archive": 5, + "group": 367, + "name_hash": -1152311119, + "name": "l58_45", + "mapsquare": 14893, + "key": [-102394113, 1484262111, 933695487, -283213546] + }, + { + "archive": 5, + "group": 369, + "name_hash": -1396079432, + "name": "l42_151", + "mapsquare": 10903, + "key": [-1260800958, -1306263170, 319256612, 1478365211] + }, + { + "archive": 5, + "group": 371, + "name_hash": -1152549446, + "name": "l50_46", + "mapsquare": 12846, + "key": [-1128107273, -1379368189, -1166299202, 1367493265] + }, + { + "archive": 5, + "group": 373, + "name_hash": -1396079431, + "name": "l42_152", + "mapsquare": 10904, + "key": [299433082, 1093303265, 1627642083, 1856381978] + }, + { + "archive": 5, + "group": 377, + "name_hash": -1396079430, + "name": "l42_153", + "mapsquare": 10905, + "key": [15962844, -263608354, -1698286677, -1506930528] + }, + { + "archive": 5, + "group": 379, + "name_hash": -1152549444, + "name": "l50_48", + "mapsquare": 12848, + "key": [-472467501, 942301843, -1235756555, 1092807961] + }, + { + "archive": 5, + "group": 381, + "name_hash": -1152549443, + "name": "l50_49", + "mapsquare": 12849, + "key": [856523891, -869724785, 1850232409, -674722748] + }, + { + "archive": 5, + "group": 395, + "name_hash": -1152549415, + "name": "l50_56", + "mapsquare": 12856, + "key": [1065837316, 566874993, -395031456, -1005765069] + }, + { + "archive": 5, + "group": 397, + "name_hash": -1153294222, + "name": "l46_45", + "mapsquare": 11821, + "key": [-1676526445, -459611821, 895613340, -1034819584] + }, + { + "archive": 5, + "group": 399, + "name_hash": -1152549414, + "name": "l50_57", + "mapsquare": 12857, + "key": [1315061238, 798718066, -593804887, 1674278988] + }, + { + "archive": 5, + "group": 401, + "name_hash": -1153294221, + "name": "l46_46", + "mapsquare": 11822, + "key": [1634541811, 1149149862, -1352773374, 843504994] + }, + { + "archive": 5, + "group": 405, + "name_hash": -1152549413, + "name": "l50_58", + "mapsquare": 12858, + "key": [1739165090, 1380036717, 1760229212, -243206298] + }, + { + "archive": 5, + "group": 407, + "name_hash": -1153294220, + "name": "l46_47", + "mapsquare": 11823, + "key": [-256018875, 2059756735, 1142698660, 1129906231] + }, + { + "archive": 5, + "group": 409, + "name_hash": -1152311117, + "name": "l58_47", + "mapsquare": 14895, + "key": [1294223700, 778677766, -2141486577, 1402077049] + }, + { + "archive": 5, + "group": 411, + "name_hash": -1152549412, + "name": "l50_59", + "mapsquare": 12859, + "key": [426800430, 789609597, 2049374976, 800682309] + }, + { + "archive": 5, + "group": 413, + "name_hash": -1153294219, + "name": "l46_48", + "mapsquare": 11824, + "key": [-1116727390, -659788658, 307002260, 354360287] + }, + { + "archive": 5, + "group": 417, + "name_hash": -1153294218, + "name": "l46_49", + "mapsquare": 11825, + "key": [1525999114, 1162595366, 465333685, 1306030426] + }, + { + "archive": 5, + "group": 421, + "name_hash": -1152549390, + "name": "l50_60", + "mapsquare": 12860, + "key": [189035026, -14034698, -394067455, -734636364] + }, + { + "archive": 5, + "group": 423, + "name_hash": -1152549389, + "name": "l50_61", + "mapsquare": 12861, + "key": [1816963481, -496926322, 1214068433, 1190940799] + }, + { + "archive": 5, + "group": 445, + "name_hash": -1153294190, + "name": "l46_56", + "mapsquare": 11832, + "key": [1106039923, -761356647, -2114299754, 948992246] + }, + { + "archive": 5, + "group": 453, + "name_hash": -1153294188, + "name": "l46_58", + "mapsquare": 11834, + "key": [173215366, -1499360859, 472196248, 1020719132] + }, + { + "archive": 5, + "group": 457, + "name_hash": -1153294187, + "name": "l46_59", + "mapsquare": 11835, + "key": [1629126437, 1652550905, 841609762, -317888116] + }, + { + "archive": 5, + "group": 459, + "name_hash": -1153443174, + "name": "l41_48", + "mapsquare": 10544, + "key": [-895303896, 744949463, -2033369513, 338766696] + }, + { + "archive": 5, + "group": 463, + "name_hash": -1153294165, + "name": "l46_60", + "mapsquare": 11836, + "key": [1310410800, 423198468, -1302324807, 259991487] + }, + { + "archive": 5, + "group": 465, + "name_hash": -1153294164, + "name": "l46_61", + "mapsquare": 11837, + "key": [1906296384, 292432464, 594794920, -1546603049] + }, + { + "archive": 5, + "group": 473, + "name_hash": -1153443148, + "name": "l41_53", + "mapsquare": 10549, + "key": [1856240647, -1307099618, -1197945308, -2122254516] + }, + { + "archive": 5, + "group": 475, + "name_hash": -1153443147, + "name": "l41_54", + "mapsquare": 10550, + "key": [957349475, -496721990, 1780878747, -1948737082] + }, + { + "archive": 5, + "group": 477, + "name_hash": -1153443146, + "name": "l41_55", + "mapsquare": 10551, + "key": [1042296612, -799710697, -433924400, -596565458] + }, + { + "archive": 5, + "group": 479, + "name_hash": -1153443145, + "name": "l41_56", + "mapsquare": 10552, + "key": [1428473548, -513790027, 959922611, 2094550429] + }, + { + "archive": 5, + "group": 483, + "name_hash": -1154187948, + "name": "l37_49", + "mapsquare": 9521, + "key": [-1204382617, 894320578, -2017151095, -679668405] + }, + { + "archive": 5, + "group": 485, + "name_hash": -1154187926, + "name": "l37_50", + "mapsquare": 9522, + "key": [1252542168, -1448059709, 1122042436, -1636001244] + }, + { + "archive": 5, + "group": 487, + "name_hash": -1154187925, + "name": "l37_51", + "mapsquare": 9523, + "key": [-1310187207, -834726064, -1799766719, 1699616161] + }, + { + "archive": 5, + "group": 495, + "name_hash": -1154187922, + "name": "l37_54", + "mapsquare": 9526, + "key": [-2064252262, -887239839, 1167799401, 858861043] + }, + { + "archive": 5, + "group": 505, + "name_hash": -1153443084, + "name": "l41_75", + "mapsquare": 10571, + "key": [1446859333, -1375675929, -760014134, 1113381222] + }, + { + "archive": 5, + "group": 509, + "name_hash": -1154187861, + "name": "l37_73", + "mapsquare": 9545, + "key": [219605670, 414657294, -2055023109, -49887033] + }, + { + "archive": 5, + "group": 513, + "name_hash": -1154187859, + "name": "l37_75", + "mapsquare": 9547, + "key": [-157587105, -806602516, 1521207142, -727421759] + }, + { + "archive": 5, + "group": 525, + "name_hash": -1152281328, + "name": "l59_45", + "mapsquare": 15149, + "key": [-1200628316, 15132614, -465260385, -1525542932] + }, + { + "archive": 5, + "group": 543, + "name_hash": -1394232414, + "name": "l44_148", + "mapsquare": 11412, + "key": [-119590785, -577007136, 324812522, 2041325243] + }, + { + "archive": 5, + "group": 551, + "name_hash": -1394232389, + "name": "l44_152", + "mapsquare": 11416, + "key": [698674506, 1358331305, 913172931, 765272229] + }, + { + "archive": 5, + "group": 553, + "name_hash": -1394232388, + "name": "l44_153", + "mapsquare": 11417, + "key": [397843162, 248774218, -228700444, -531210715] + }, + { + "archive": 5, + "group": 557, + "name_hash": -1394232386, + "name": "l44_155", + "mapsquare": 11419, + "key": [1015780380, -702872379, -62881570, -362521171] + }, + { + "archive": 5, + "group": 561, + "name_hash": -1419167482, + "name": "l38_147", + "mapsquare": 9875, + "key": [-266211268, 1666415569, -594364895, -521555462] + }, + { + "archive": 5, + "group": 575, + "name_hash": -1419167454, + "name": "l38_154", + "mapsquare": 9882, + "key": [1405534886, 1766737228, -31518279, -1845608276] + }, + { + "archive": 5, + "group": 585, + "name_hash": -1152489861, + "name": "l52_49", + "mapsquare": 13361, + "key": [1703044360, 924675594, 1161742507, -1174930763] + }, + { + "archive": 5, + "group": 587, + "name_hash": -1152489839, + "name": "l52_50", + "mapsquare": 13362, + "key": [1001397515, 373830398, 1721578513, -710173574] + }, + { + "archive": 5, + "group": 589, + "name_hash": -1152489838, + "name": "l52_51", + "mapsquare": 13363, + "key": [-1632087500, -620280348, 22360696, 1386365966] + }, + { + "archive": 5, + "group": 599, + "name_hash": -1152489833, + "name": "l52_56", + "mapsquare": 13368, + "key": [-922499048, 1143654396, 1593518953, 1160947087] + }, + { + "archive": 5, + "group": 601, + "name_hash": -1152489832, + "name": "l52_57", + "mapsquare": 13369, + "key": [-857763581, -71502428, -1316897039, -786191624] + }, + { + "archive": 5, + "group": 603, + "name_hash": -1152489831, + "name": "l52_58", + "mapsquare": 13370, + "key": [-1259912756, -640452721, 1196310747, 269878509] + }, + { + "archive": 5, + "group": 605, + "name_hash": -1153234638, + "name": "l48_47", + "mapsquare": 12335, + "key": [-387260899, -2132243418, 654609855, -1092457792] + }, + { + "archive": 5, + "group": 607, + "name_hash": -1152489830, + "name": "l52_59", + "mapsquare": 13371, + "key": [-398274614, 1285418048, 876964091, -1818498048] + }, + { + "archive": 5, + "group": 609, + "name_hash": -1153234637, + "name": "l48_48", + "mapsquare": 12336, + "key": [1152832719, 1703327384, -664371384, 1662584632] + }, + { + "archive": 5, + "group": 613, + "name_hash": -1152489808, + "name": "l52_60", + "mapsquare": 13372, + "key": [865568678, -2124731942, 491055641, 1024391843] + }, + { + "archive": 5, + "group": 615, + "name_hash": -1152489807, + "name": "l52_61", + "mapsquare": 13373, + "key": [-2063060546, 1762500570, 940695155, -1216823417] + }, + { + "archive": 5, + "group": 629, + "name_hash": -1153234608, + "name": "l48_56", + "mapsquare": 12344, + "key": [1004655261, 1112441676, -1346215742, -481727651] + }, + { + "archive": 5, + "group": 633, + "name_hash": -1153234607, + "name": "l48_57", + "mapsquare": 12345, + "key": [-1123116470, -1886379076, 75321832, 214948598] + }, + { + "archive": 5, + "group": 637, + "name_hash": -1153234606, + "name": "l48_58", + "mapsquare": 12346, + "key": [-715432683, -1936681920, -1020543828, 1309349058] + }, + { + "archive": 5, + "group": 641, + "name_hash": -1153234605, + "name": "l48_59", + "mapsquare": 12347, + "key": [-1936094430, -1392774395, -458238889, -1734657503] + }, + { + "archive": 5, + "group": 647, + "name_hash": -1153234583, + "name": "l48_60", + "mapsquare": 12348, + "key": [1498945330, -1007588865, 989046743, -1246005481] + }, + { + "archive": 5, + "group": 651, + "name_hash": -1153383569, + "name": "l43_50", + "mapsquare": 11058, + "key": [1248059648, -909154233, -2017783073, -1490858018] + }, + { + "archive": 5, + "group": 657, + "name_hash": -1153383566, + "name": "l43_53", + "mapsquare": 11061, + "key": [-1835613132, -798666747, 2068157339, -2010441483] + }, + { + "archive": 5, + "group": 661, + "name_hash": -1153383564, + "name": "l43_55", + "mapsquare": 11063, + "key": [230190523, -541989310, 756088519, 651538143] + }, + { + "archive": 5, + "group": 665, + "name_hash": -1152281325, + "name": "l59_48", + "mapsquare": 15152, + "key": [608495786, -1850745649, 1481459068, 44047411] + }, + { + "archive": 5, + "group": 673, + "name_hash": -1154128366, + "name": "l39_49", + "mapsquare": 10033, + "key": [1965668434, 1587425243, 966917721, 2010341526] + }, + { + "archive": 5, + "group": 677, + "name_hash": -1154128343, + "name": "l39_51", + "mapsquare": 10035, + "key": [-1407868267, -2023338060, 1465071532, -1638236197] + }, + { + "archive": 5, + "group": 685, + "name_hash": -1367450280, + "name": "l52_152", + "mapsquare": 13464, + "key": [-1367805857, 1879344111, -360193890, -1649253702] + }, + { + "archive": 5, + "group": 695, + "name_hash": -1153383504, + "name": "l43_73", + "mapsquare": 11081, + "key": [-1262440825, -866171020, -669660830, 1117529492] + }, + { + "archive": 5, + "group": 697, + "name_hash": -1153383503, + "name": "l43_74", + "mapsquare": 11082, + "key": [-1048566284, -1888694855, 1387988701, 1385807517] + }, + { + "archive": 5, + "group": 701, + "name_hash": -1392385371, + "name": "l46_149", + "mapsquare": 11925, + "key": [-302404963, 277321688, 1579550568, 112114901] + }, + { + "archive": 5, + "group": 703, + "name_hash": -1392385349, + "name": "l46_150", + "mapsquare": 11926, + "key": [1068449903, -150593625, 336172166, -629999737] + }, + { + "archive": 5, + "group": 707, + "name_hash": -1392385347, + "name": "l46_152", + "mapsquare": 11928, + "key": [926476326, -742526377, -1211115608, -1389832255] + }, + { + "archive": 5, + "group": 709, + "name_hash": -1154128279, + "name": "l39_73", + "mapsquare": 10057, + "key": [2098955587, 1915815888, -1487119512, 2000380500] + }, + { + "archive": 5, + "group": 711, + "name_hash": -1392385346, + "name": "l46_153", + "mapsquare": 11929, + "key": [1557493911, -1795871852, 842977119, -1273925544] + }, + { + "archive": 5, + "group": 713, + "name_hash": -1154128278, + "name": "l39_74", + "mapsquare": 10058, + "key": [-1722103890, -365638741, -1142855167, 2038282466] + }, + { + "archive": 5, + "group": 717, + "name_hash": -1154128277, + "name": "l39_75", + "mapsquare": 10059, + "key": [888791770, 446863035, 1420300298, 1689801625] + }, + { + "archive": 5, + "group": 719, + "name_hash": -1155051771, + "name": "l29_81", + "mapsquare": 7505, + "key": [1128826986, -1208716500, 1252781850, 1529005118] + }, + { + "archive": 5, + "group": 733, + "name_hash": -1154277232, + "name": "l34_75", + "mapsquare": 8779, + "key": [-678956803, 2085783757, 650059580, 1450034986] + }, + { + "archive": 5, + "group": 735, + "name_hash": -1154366578, + "name": "l31_81", + "mapsquare": 8017, + "key": [1937423379, 797654757, -418006613, -1412491464] + }, + { + "archive": 5, + "group": 737, + "name_hash": -1390538330, + "name": "l48_148", + "mapsquare": 12436, + "key": [399007290, 768017220, 1423287782, -1886380141] + }, + { + "archive": 5, + "group": 739, + "name_hash": -1390538329, + "name": "l48_149", + "mapsquare": 12437, + "key": [-1441809522, 719788383, 401674935, 735960337] + }, + { + "archive": 5, + "group": 743, + "name_hash": -1390538304, + "name": "l48_153", + "mapsquare": 12441, + "key": [-2117208237, -719237621, 1574397150, 760135387] + }, + { + "archive": 5, + "group": 745, + "name_hash": -1390538303, + "name": "l48_154", + "mapsquare": 12442, + "key": [1291079634, -1775973138, -22379340, -1049278279] + }, + { + "archive": 5, + "group": 747, + "name_hash": -1390538302, + "name": "l48_155", + "mapsquare": 12443, + "key": [185729295, -1473640650, 785055601, 1540127286] + }, + { + "archive": 5, + "group": 755, + "name_hash": -1153324011, + "name": "l45_47", + "mapsquare": 11567, + "key": [1608156752, 653692997, -1552888712, -68059986] + }, + { + "archive": 5, + "group": 757, + "name_hash": -1153324010, + "name": "l45_48", + "mapsquare": 11568, + "key": [1434739536, -965821980, 1477351656, -1116923723] + }, + { + "archive": 5, + "group": 775, + "name_hash": -1153323982, + "name": "l45_55", + "mapsquare": 11575, + "key": [-945127161, -1910820945, -1457442680, -838340972] + }, + { + "archive": 5, + "group": 777, + "name_hash": -1153323981, + "name": "l45_56", + "mapsquare": 11576, + "key": [-653186907, 1743653193, 1590707166, 841079490] + }, + { + "archive": 5, + "group": 781, + "name_hash": -1397002953, + "name": "l41_151", + "mapsquare": 10647, + "key": [-805201729, 122084157, -1599110597, -1319888179] + }, + { + "archive": 5, + "group": 785, + "name_hash": -1153472967, + "name": "l40_46", + "mapsquare": 10286, + "key": [153699565, -613131576, -377838747, -1493212656] + }, + { + "archive": 5, + "group": 789, + "name_hash": -1153323979, + "name": "l45_58", + "mapsquare": 11578, + "key": [899841295, -1673793442, -444221245, -1412324058] + }, + { + "archive": 5, + "group": 793, + "name_hash": -1397002951, + "name": "l41_153", + "mapsquare": 10649, + "key": [-42874604, 1755845042, -28694142, -1223794235] + }, + { + "archive": 5, + "group": 795, + "name_hash": -1153323978, + "name": "l45_59", + "mapsquare": 11579, + "key": [-1812176752, -317754254, -1196521232, -764437892] + }, + { + "archive": 5, + "group": 799, + "name_hash": -1397002950, + "name": "l41_154", + "mapsquare": 10650, + "key": [688979136, 1749672831, 630260962, 1478721348] + }, + { + "archive": 5, + "group": 801, + "name_hash": -1153472964, + "name": "l40_49", + "mapsquare": 10289, + "key": [661370115, 1720102, -155777581, 1516736681] + }, + { + "archive": 5, + "group": 803, + "name_hash": -1154217623, + "name": "l36_81", + "mapsquare": 9297, + "key": [-713608515, -67472639, -1826048194, 544718437] + }, + { + "archive": 5, + "group": 815, + "name_hash": -1153472938, + "name": "l40_54", + "mapsquare": 10294, + "key": [-1453542294, -12979792, -48294325, -2009299224] + }, + { + "archive": 5, + "group": 817, + "name_hash": -1396079429, + "name": "l42_154", + "mapsquare": 10906, + "key": [578750625, -1699758530, 981674787, -1430062823] + }, + { + "archive": 5, + "group": 869, + "name_hash": -1152460043, + "name": "l53_55", + "mapsquare": 13623, + "key": [1573282650, -1418634195, -1148095035, -1144615238] + }, + { + "archive": 5, + "group": 871, + "name_hash": -1152400462, + "name": "l55_54", + "mapsquare": 14134, + "key": [-1102558063, 817524163, -892019492, -1799662614] + }, + { + "archive": 5, + "group": 875, + "name_hash": -1152430252, + "name": "l54_55", + "mapsquare": 13879, + "key": [-489064370, 2145976597, -1121899197, 1908605309] + }, + { + "archive": 5, + "group": 887, + "name_hash": -1152430256, + "name": "l54_51", + "mapsquare": 13875, + "key": [1430738652, -42941568, -775986981, 1000814725] + }, + { + "archive": 5, + "group": 889, + "name_hash": -1152430255, + "name": "l54_52", + "mapsquare": 13876, + "key": [-225305190, 2101410213, -13023121, 617681501] + }, + { + "archive": 5, + "group": 891, + "name_hash": -1396079456, + "name": "l42_148", + "mapsquare": 10900, + "key": [305961345, -1339000220, 2053506211, -1898778662] + }, + { + "archive": 5, + "group": 899, + "name_hash": -1395155934, + "name": "l43_149", + "mapsquare": 11157, + "key": [1464071264, -103928758, 1681823375, -1178129652] + }, + { + "archive": 5, + "group": 907, + "name_hash": -1154247442, + "name": "l35_74", + "mapsquare": 9034, + "key": [385694264, 2091635410, 1191598764, -2130030706] + }, + { + "archive": 5, + "group": 909, + "name_hash": -1153353772, + "name": "l44_56", + "mapsquare": 11320, + "key": [-1608050593, -413428259, 2059848881, -2038252682] + }, + { + "archive": 5, + "group": 911, + "name_hash": -1394232384, + "name": "l44_157", + "mapsquare": 11421, + "key": [1786548109, -823015733, 1963056537, -1997978489] + }, + { + "archive": 5, + "group": 913, + "name_hash": -1153353771, + "name": "l44_57", + "mapsquare": 11321, + "key": [1281968466, -998167738, 684914723, -1121178555] + }, + { + "archive": 5, + "group": 921, + "name_hash": -1369297347, + "name": "l50_148", + "mapsquare": 12948, + "key": [1629198458, 696032791, -1386317415, 445054408] + }, + { + "archive": 5, + "group": 931, + "name_hash": -1154307113, + "name": "l33_48", + "mapsquare": 8496, + "key": [1343253631, 1982572295, -1601521319, 2107012341] + }, + { + "archive": 5, + "group": 933, + "name_hash": -1154307112, + "name": "l33_49", + "mapsquare": 8497, + "key": [2127424498, 1622469596, -1889017351, -1927651722] + }, + { + "archive": 5, + "group": 935, + "name_hash": -1154307090, + "name": "l33_50", + "mapsquare": 8498, + "key": [-1323684593, -1102390619, 1456317314, -2027993898] + }, + { + "archive": 5, + "group": 937, + "name_hash": -1154307089, + "name": "l33_51", + "mapsquare": 8499, + "key": [1158999293, 2131770333, -861122128, 1149793504] + }, + { + "archive": 5, + "group": 939, + "name_hash": -1154277322, + "name": "l34_48", + "mapsquare": 8752, + "key": [50858443, 684152471, 698071810, -175585203] + }, + { + "archive": 5, + "group": 945, + "name_hash": -1154277298, + "name": "l34_51", + "mapsquare": 8755, + "key": [-1165798584, 772244190, -402783978, 541755309] + }, + { + "archive": 5, + "group": 947, + "name_hash": -1154247531, + "name": "l35_48", + "mapsquare": 9008, + "key": [2084752401, -1394447522, 2084945842, 1474596929] + }, + { + "archive": 5, + "group": 951, + "name_hash": -1154247508, + "name": "l35_50", + "mapsquare": 9010, + "key": [1975408960, 888933152, -1564560503, 1102048305] + }, + { + "archive": 5, + "group": 953, + "name_hash": -1154247507, + "name": "l35_51", + "mapsquare": 9011, + "key": [-135370293, 700991137, -1302596410, -1183796338] + }, + { + "archive": 5, + "group": 955, + "name_hash": -1154247506, + "name": "l35_52", + "mapsquare": 9012, + "key": [1204696185, -486414605, -1016110497, 134649113] + }, + { + "archive": 5, + "group": 957, + "name_hash": -1154217740, + "name": "l36_48", + "mapsquare": 9264, + "key": [1166653059, 1243560308, 851316348, -2052894389] + }, + { + "archive": 5, + "group": 963, + "name_hash": -1154217716, + "name": "l36_51", + "mapsquare": 9267, + "key": [245074215, -415791406, 175943925, 572779390] + }, + { + "archive": 5, + "group": 971, + "name_hash": -1152370671, + "name": "l56_54", + "mapsquare": 14390, + "key": [-1631704360, 1281079278, -1549067757, -2034268623] + }, + { + "archive": 5, + "group": 973, + "name_hash": -1153472936, + "name": "l40_56", + "mapsquare": 10296, + "key": [352471788, -1609938193, -266114897, -1904210854] + }, + { + "archive": 5, + "group": 977, + "name_hash": -1153413353, + "name": "l42_57", + "mapsquare": 10809, + "key": [-256458821, -522789093, -547929725, 1236572696] + }, + { + "archive": 5, + "group": 981, + "name_hash": -1153383562, + "name": "l43_57", + "mapsquare": 11065, + "key": [-1487802839, 856470179, 1889283583, 1157865105] + }, + { + "archive": 5, + "group": 987, + "name_hash": -1153472935, + "name": "l40_57", + "mapsquare": 10297, + "key": [-465349039, -896523889, 319217459, -1898915679] + }, + { + "archive": 5, + "group": 991, + "name_hash": -1153443143, + "name": "l41_58", + "mapsquare": 10554, + "key": [1188457126, -1729374406, -799893645, 1217674507] + }, + { + "archive": 5, + "group": 995, + "name_hash": -1418243931, + "name": "l39_156", + "mapsquare": 10140, + "key": [1403932265, 753452087, 1731472685, -767209354] + }, + { + "archive": 5, + "group": 1001, + "name_hash": -1154158129, + "name": "l38_56", + "mapsquare": 9784, + "key": [1874487660, 1635569708, -1949316626, -1920350613] + }, + { + "archive": 5, + "group": 1003, + "name_hash": -1154158128, + "name": "l38_57", + "mapsquare": 9785, + "key": [-65486938, -1485596203, -1327236566, 408455718] + }, + { + "archive": 5, + "group": 1005, + "name_hash": -1154128337, + "name": "l39_57", + "mapsquare": 10041, + "key": [1187862613, -117754960, 130411769, -1192628982] + }, + { + "archive": 5, + "group": 1007, + "name_hash": -1154277230, + "name": "l34_77", + "mapsquare": 8781, + "key": [-1424107598, 264936559, -56759783, -902529771] + }, + { + "archive": 5, + "group": 1011, + "name_hash": -1154158104, + "name": "l38_60", + "mapsquare": 9788, + "key": [432135203, 92254316, -1619550296, 76065412] + }, + { + "archive": 5, + "group": 1015, + "name_hash": -1154128335, + "name": "l39_59", + "mapsquare": 10043, + "key": [1912880022, -1723964516, 2062562401, -1162129761] + }, + { + "archive": 5, + "group": 1025, + "name_hash": -1153472910, + "name": "l40_61", + "mapsquare": 10301, + "key": [-158146381, 1698585677, -910760378, 815929788] + }, + { + "archive": 5, + "group": 1031, + "name_hash": -1153443119, + "name": "l41_61", + "mapsquare": 10557, + "key": [-807815903, 958215082, -647601710, 1350072419] + }, + { + "archive": 5, + "group": 1039, + "name_hash": -1153413389, + "name": "l42_42", + "mapsquare": 10794, + "key": [311561230, 1919568586, -437925589, -1702919060] + }, + { + "archive": 5, + "group": 1059, + "name_hash": -1154187950, + "name": "l37_47", + "mapsquare": 9519, + "key": [859829242, 1044182946, -1333414478, 1254064132] + }, + { + "archive": 5, + "group": 1069, + "name_hash": -1154128336, + "name": "l39_58", + "mapsquare": 10042, + "key": [736722071, 75967325, -775764394, 106769937] + }, + { + "archive": 5, + "group": 1075, + "name_hash": -1153413297, + "name": "l42_71", + "mapsquare": 10823, + "key": [-626951011, -1729338061, -758591782, 439072305] + }, + { + "archive": 5, + "group": 1087, + "name_hash": -1395155904, + "name": "l43_158", + "mapsquare": 11166, + "key": [431616711, -1774935949, -1016388232, -1018749983] + }, + { + "archive": 5, + "group": 1089, + "name_hash": -1395155903, + "name": "l43_159", + "mapsquare": 11167, + "key": [-1959015492, -1104071, -1016386588, 1365103001] + }, + { + "archive": 5, + "group": 1091, + "name_hash": -1153383561, + "name": "l43_58", + "mapsquare": 11066, + "key": [291008624, -1992710142, -1831766032, 1925022398] + }, + { + "archive": 5, + "group": 1093, + "name_hash": -1153383560, + "name": "l43_59", + "mapsquare": 11067, + "key": [1192664190, -341042618, -820464572, 602716622] + }, + { + "archive": 5, + "group": 1095, + "name_hash": -1153383538, + "name": "l43_60", + "mapsquare": 11068, + "key": [1956851882, 1582504141, -1090835806, 1413275925] + }, + { + "archive": 5, + "group": 1101, + "name_hash": -1153413329, + "name": "l42_60", + "mapsquare": 10812, + "key": [90198727, 258723745, 748197903, -426406231] + }, + { + "archive": 5, + "group": 1103, + "name_hash": -1365603237, + "name": "l54_153", + "mapsquare": 13977, + "key": [692126287, 1949546323, -1604362290, -896929747] + }, + { + "archive": 5, + "group": 1105, + "name_hash": -1152400465, + "name": "l55_51", + "mapsquare": 14131, + "key": [1016975630, -301160039, -1036603507, 114074749] + }, + { + "archive": 5, + "group": 1107, + "name_hash": -1397002977, + "name": "l41_148", + "mapsquare": 10644, + "key": [-1850188218, -1521064184, 1993643055, -554430753] + }, + { + "archive": 5, + "group": 1117, + "name_hash": -1365603235, + "name": "l54_155", + "mapsquare": 13979, + "key": [1489416025, -1142280467, 1808198885, 137033499] + }, + { + "archive": 5, + "group": 1119, + "name_hash": -1364679714, + "name": "l55_155", + "mapsquare": 14235, + "key": [2114439316, -345963084, -1331796597, 275182841] + }, + { + "archive": 5, + "group": 1121, + "name_hash": -1364679715, + "name": "l55_154", + "mapsquare": 14234, + "key": [237295045, 867264725, -1732973561, -1010980224] + }, + { + "archive": 5, + "group": 1123, + "name_hash": -1153472902, + "name": "l40_69", + "mapsquare": 10309, + "key": [1450418080, -2118438156, -1409971045, -1573015729] + }, + { + "archive": 5, + "group": 1125, + "name_hash": -1152370670, + "name": "l56_55", + "mapsquare": 14391, + "key": [956732210, 1669781219, 1907068552, -1303552057] + }, + { + "archive": 5, + "group": 1129, + "name_hash": -1152340880, + "name": "l57_54", + "mapsquare": 14646, + "key": [-1240067889, -383570142, -558581485, 786219832] + }, + { + "archive": 5, + "group": 1131, + "name_hash": -1152340879, + "name": "l57_55", + "mapsquare": 14647, + "key": [-1420591871, -1781801975, 1517176402, -1599286074] + }, + { + "archive": 5, + "group": 1133, + "name_hash": -1154187887, + "name": "l37_68", + "mapsquare": 9540, + "key": [2133656685, -1448323734, -310319541, -725382856] + }, + { + "archive": 5, + "group": 1147, + "name_hash": -1154187857, + "name": "l37_77", + "mapsquare": 9549, + "key": [1895759075, -843340286, 1429492719, 295020002] + }, + { + "archive": 5, + "group": 1149, + "name_hash": -1154128275, + "name": "l39_77", + "mapsquare": 10061, + "key": [-99111554, 1883772725, 1465462119, 1523468364] + }, + { + "archive": 5, + "group": 1153, + "name_hash": -1394232382, + "name": "l44_159", + "mapsquare": 11423, + "key": [1414693295, -863955294, -2034093411, 1818980885] + }, + { + "archive": 5, + "group": 1155, + "name_hash": -1393308862, + "name": "l45_158", + "mapsquare": 11678, + "key": [350404025, 770298785, 1215100269, -965606935] + }, + { + "archive": 5, + "group": 1165, + "name_hash": -1152430279, + "name": "l54_49", + "mapsquare": 13873, + "key": [-1098656620, -1288920207, 1465590763, 1004731135] + }, + { + "archive": 5, + "group": 1173, + "name_hash": -1153353769, + "name": "l44_59", + "mapsquare": 11323, + "key": [-1788142439, -1669893367, 1168059730, -14615580] + }, + { + "archive": 5, + "group": 1179, + "name_hash": -1390538307, + "name": "l48_150", + "mapsquare": 12438, + "key": [1545165254, 945298048, 244672985, -2058714291] + }, + { + "archive": 5, + "group": 1181, + "name_hash": -1390538306, + "name": "l48_151", + "mapsquare": 12439, + "key": [737806768, -1467792108, 1644942216, -2040381961] + }, + { + "archive": 5, + "group": 1187, + "name_hash": -1152549448, + "name": "l50_44", + "mapsquare": 12844, + "key": [2093476291, -208179048, 86110726, -3825057] + }, + { + "archive": 5, + "group": 1193, + "name_hash": -1152519657, + "name": "l51_44", + "mapsquare": 13100, + "key": [-1830823075, 1215145937, -525456385, -257417215] + }, + { + "archive": 5, + "group": 1205, + "name_hash": -1154247443, + "name": "l35_73", + "mapsquare": 9033, + "key": [-340750931, -1897990035, 1835646040, 1466647905] + }, + { + "archive": 5, + "group": 1209, + "name_hash": -1364679718, + "name": "l55_151", + "mapsquare": 14231, + "key": [1658757346, -2019485271, -1955365006, 895906099] + }, + { + "archive": 5, + "group": 1211, + "name_hash": -1154217741, + "name": "l36_47", + "mapsquare": 9263, + "key": [-937938813, 1777088166, 1291736808, 1827292190] + }, + { + "archive": 5, + "group": 1233, + "name_hash": -1155051796, + "name": "l29_77", + "mapsquare": 7501, + "key": [1108184632, 2136992911, -832195021, 495111280] + }, + { + "archive": 5, + "group": 1235, + "name_hash": -1418243929, + "name": "l39_158", + "mapsquare": 10142, + "key": [1872120942, -765842959, 449655176, -1168971827] + }, + { + "archive": 5, + "group": 1237, + "name_hash": -1419167450, + "name": "l38_158", + "mapsquare": 9886, + "key": [-1621103539, 1580907615, -2010887870, 683082929] + }, + { + "archive": 5, + "group": 1241, + "name_hash": -1154396394, + "name": "l30_77", + "mapsquare": 7757, + "key": [-1928468960, 1136494639, -1967058052, 602105509] + }, + { + "archive": 5, + "group": 1243, + "name_hash": -1154187833, + "name": "l37_80", + "mapsquare": 9552, + "key": [1401891457, -1899495202, -773917688, 1780158441] + }, + { + "archive": 5, + "group": 1245, + "name_hash": -1154158042, + "name": "l38_80", + "mapsquare": 9808, + "key": [-923585668, -574638285, 500509980, -960811077] + }, + { + "archive": 5, + "group": 1247, + "name_hash": -1154366604, + "name": "l31_76", + "mapsquare": 8012, + "key": [-1309713498, 82935011, -1681291522, -685742249] + }, + { + "archive": 5, + "group": 1249, + "name_hash": -1155051803, + "name": "l29_70", + "mapsquare": 7494, + "key": [-462058213, -2060727055, 781172327, 1942354602] + }, + { + "archive": 5, + "group": 1251, + "name_hash": -1154187855, + "name": "l37_79", + "mapsquare": 9551, + "key": [1566715405, -1011565479, -979871653, -2050870795] + }, + { + "archive": 5, + "group": 1259, + "name_hash": -1152460072, + "name": "l53_47", + "mapsquare": 13615, + "key": [1478333842, -146576907, -285634093, 361637473] + }, + { + "archive": 5, + "group": 1263, + "name_hash": -1154306997, + "name": "l33_80", + "mapsquare": 8528, + "key": [-1141049958, 1626814655, 206252937, 924426084] + }, + { + "archive": 5, + "group": 1267, + "name_hash": -1155051826, + "name": "l29_68", + "mapsquare": 7492, + "key": [-342030979, 1222986839, 511788549, 910172876] + }, + { + "archive": 5, + "group": 1269, + "name_hash": -1154396424, + "name": "l30_68", + "mapsquare": 7748, + "key": [1860227470, -290409954, 274550911, -1155783956] + }, + { + "archive": 5, + "group": 1273, + "name_hash": -1154396398, + "name": "l30_73", + "mapsquare": 7753, + "key": [1896168736, -1223044138, 779149869, -1759332197] + }, + { + "archive": 5, + "group": 1275, + "name_hash": -1397002954, + "name": "l41_150", + "mapsquare": 10646, + "key": [1341282074, 345412696, -2043666158, -457216576] + }, + { + "archive": 5, + "group": 1283, + "name_hash": -1152460073, + "name": "l53_46", + "mapsquare": 13614, + "key": [-1661089893, 60198635, 829308397, -1835163720] + }, + { + "archive": 5, + "group": 1289, + "name_hash": -1367450304, + "name": "l52_149", + "mapsquare": 13461, + "key": [-126183647, -25151941, 868809662, 1423445530] + }, + { + "archive": 5, + "group": 1291, + "name_hash": -1389614784, + "name": "l49_152", + "mapsquare": 12696, + "key": [1955953194, -1456762745, -1903871849, -1325043037] + }, + { + "archive": 5, + "group": 1301, + "name_hash": -1153264340, + "name": "l47_73", + "mapsquare": 12105, + "key": [1153497516, -449169462, -635419798, -1471828315] + }, + { + "archive": 5, + "group": 1303, + "name_hash": -1152489866, + "name": "l52_44", + "mapsquare": 13356, + "key": [-62403158, -259993960, 1312599048, 602862976] + }, + { + "archive": 5, + "group": 1307, + "name_hash": -1153204849, + "name": "l49_45", + "mapsquare": 12589, + "key": [1867222552, -1279268543, 219776982, -1133356510] + }, + { + "archive": 5, + "group": 1315, + "name_hash": -1154396393, + "name": "l30_78", + "mapsquare": 7758, + "key": [-623741461, -108703380, 1436176787, -834745239] + }, + { + "archive": 5, + "group": 1319, + "name_hash": -1153294225, + "name": "l46_42", + "mapsquare": 11818, + "key": [-2034608097, 1147002393, -720701760, -1045127369] + }, + { + "archive": 5, + "group": 1323, + "name_hash": -1155111353, + "name": "l27_81", + "mapsquare": 6993, + "key": [487810245, -1442562976, -1813756859, 201393142] + }, + { + "archive": 5, + "group": 1325, + "name_hash": -1155081594, + "name": "l28_70", + "mapsquare": 7238, + "key": [-853120516, 1697831503, -12188711, 770411534] + }, + { + "archive": 5, + "group": 1329, + "name_hash": -1392385372, + "name": "l46_148", + "mapsquare": 11924, + "key": [1132625310, 132067456, -328236024, 510687418] + }, + { + "archive": 5, + "group": 1333, + "name_hash": -1154158096, + "name": "l38_68", + "mapsquare": 9796, + "key": [-392461938, 562137949, 1796705877, -650819019] + }, + { + "archive": 5, + "group": 1335, + "name_hash": -1152400488, + "name": "l55_49", + "mapsquare": 14129, + "key": [2079314312, -89031344, 495299597, -2042107512] + }, + { + "archive": 5, + "group": 1337, + "name_hash": -1152400466, + "name": "l55_50", + "mapsquare": 14130, + "key": [1237228106, -349369148, -1811607373, -882226393] + }, + { + "archive": 5, + "group": 1339, + "name_hash": -1365603240, + "name": "l54_150", + "mapsquare": 13974, + "key": [-606147120, 1392509835, -1748925993, -2005068147] + }, + { + "archive": 5, + "group": 1341, + "name_hash": -1153353715, + "name": "l44_71", + "mapsquare": 11335, + "key": [-133492081, -915358326, -714649892, -2093709476] + }, + { + "archive": 5, + "group": 1357, + "name_hash": -1153294102, + "name": "l46_81", + "mapsquare": 11857, + "key": [-1225499683, -2000595018, -612194825, -2014162349] + }, + { + "archive": 5, + "group": 1359, + "name_hash": -1368373800, + "name": "l51_153", + "mapsquare": 13209, + "key": [-795447804, 1305344381, 98581556, 2008745861] + }, + { + "archive": 5, + "group": 1361, + "name_hash": -1153264311, + "name": "l47_81", + "mapsquare": 12113, + "key": [1668148064, 1058673313, -1746348692, 847341704] + }, + { + "archive": 5, + "group": 1363, + "name_hash": -1153234520, + "name": "l48_81", + "mapsquare": 12369, + "key": [-832628753, 1107609195, 262567666, -1274474550] + }, + { + "archive": 5, + "group": 1373, + "name_hash": -1154247501, + "name": "l35_57", + "mapsquare": 9017, + "key": [-518439975, -1388520826, 203536985, 1155539914] + }, + { + "archive": 5, + "group": 1391, + "name_hash": -1152430251, + "name": "l54_56", + "mapsquare": 13880, + "key": [-672032867, -104766980, -780173326, -1476119873] + }, + { + "archive": 5, + "group": 1393, + "name_hash": -1152400489, + "name": "l55_48", + "mapsquare": 14128, + "key": [1907787432, -241593923, 1152767085, -541422403] + }, + { + "archive": 5, + "group": 1395, + "name_hash": -1152400460, + "name": "l55_56", + "mapsquare": 14136, + "key": [-1104533465, 1792124817, -1564247177, 79706641] + }, + { + "archive": 5, + "group": 1397, + "name_hash": -1152370669, + "name": "l56_56", + "mapsquare": 14392, + "key": [993603906, -1477196579, 593064486, 166369140] + }, + { + "archive": 5, + "group": 1399, + "name_hash": -1152340878, + "name": "l57_56", + "mapsquare": 14648, + "key": [-1757352130, -1996516705, 263017190, 1647356258] + }, + { + "archive": 5, + "group": 1401, + "name_hash": -1152311088, + "name": "l58_55", + "mapsquare": 14903, + "key": [-1111240831, 1790345264, -366658712, -331374702] + }, + { + "archive": 5, + "group": 1403, + "name_hash": -1152311087, + "name": "l58_56", + "mapsquare": 14904, + "key": [-1967472485, -192437954, 1186759929, -2078112945] + }, + { + "archive": 5, + "group": 1405, + "name_hash": -1152281298, + "name": "l59_54", + "mapsquare": 15158, + "key": [-974248920, -1426940984, -551894435, 1783499939] + }, + { + "archive": 5, + "group": 1407, + "name_hash": -1152281296, + "name": "l59_56", + "mapsquare": 15160, + "key": [-553466395, -1372948696, -1385390322, 710626387] + }, + { + "archive": 5, + "group": 1411, + "name_hash": -1153264309, + "name": "l47_83", + "mapsquare": 12115, + "key": [2146362785, 1996258091, -613445101, 539756591] + }, + { + "archive": 5, + "group": 1413, + "name_hash": -1154336814, + "name": "l32_75", + "mapsquare": 8267, + "key": [-474856962, -1295973639, 789657650, -1769058462] + }, + { + "archive": 5, + "group": 1415, + "name_hash": -1154217677, + "name": "l36_69", + "mapsquare": 9285, + "key": [-1376572370, -121986361, -1862348009, -378224358] + }, + { + "archive": 5, + "group": 1421, + "name_hash": -1151625926, + "name": "l60_45", + "mapsquare": 15405, + "key": [1745315296, 704015968, -1726703759, 250744336] + }, + { + "archive": 5, + "group": 1423, + "name_hash": -1151625925, + "name": "l60_46", + "mapsquare": 15406, + "key": [900232781, 1037303290, 2099698517, -1839409134] + }, + { + "archive": 5, + "group": 1425, + "name_hash": -1151625924, + "name": "l60_47", + "mapsquare": 15407, + "key": [-1139819812, 165771634, 462281145, -1626973480] + }, + { + "archive": 5, + "group": 1427, + "name_hash": -1155111376, + "name": "l27_79", + "mapsquare": 6991, + "key": [-1448188175, 626198836, 1985989165, -1062391664] + }, + { + "archive": 5, + "group": 1429, + "name_hash": -1155081585, + "name": "l28_79", + "mapsquare": 7247, + "key": [-122734679, -1029771956, 1633683499, 846700218] + }, + { + "archive": 5, + "group": 1439, + "name_hash": -1154277290, + "name": "l34_59", + "mapsquare": 8763, + "key": [-161594592, -1041269457, 871932542, -908444460] + }, + { + "archive": 5, + "group": 1447, + "name_hash": -1154336872, + "name": "l32_59", + "mapsquare": 8251, + "key": [1142567601, 1650263019, 49659607, -899246535] + }, + { + "archive": 5, + "group": 1451, + "name_hash": -1154307082, + "name": "l33_58", + "mapsquare": 8506, + "key": [-1227747958, 1491928866, 1293676120, 2065870654] + }, + { + "archive": 5, + "group": 1453, + "name_hash": -1154307081, + "name": "l33_59", + "mapsquare": 8507, + "key": [1765022148, -80255262, -725852452, -1286377093] + }, + { + "archive": 5, + "group": 1455, + "name_hash": -1154277292, + "name": "l34_57", + "mapsquare": 8761, + "key": [1760753095, -1427813077, 266675077, -255782653] + }, + { + "archive": 5, + "group": 1457, + "name_hash": -1154277291, + "name": "l34_58", + "mapsquare": 8762, + "key": [-1868090282, -1544166661, -731821081, 1736861342] + }, + { + "archive": 5, + "group": 1459, + "name_hash": -1154277268, + "name": "l34_60", + "mapsquare": 8764, + "key": [1880374454, 1213514336, -2078057600, -2021473694] + }, + { + "archive": 5, + "group": 1461, + "name_hash": -1154277267, + "name": "l34_61", + "mapsquare": 8765, + "key": [1948979312, 134066799, -78879371, -323055687] + }, + { + "archive": 5, + "group": 1463, + "name_hash": -1154247499, + "name": "l35_59", + "mapsquare": 9019, + "key": [-1293726217, -1696419000, -859948399, 1059527576] + }, + { + "archive": 5, + "group": 1465, + "name_hash": -1154247477, + "name": "l35_60", + "mapsquare": 9020, + "key": [-1906040194, 849367381, 2098246444, 1605043698] + }, + { + "archive": 5, + "group": 1467, + "name_hash": -1154247476, + "name": "l35_61", + "mapsquare": 9021, + "key": [-665917952, -432697139, -602494723, -2097936281] + }, + { + "archive": 5, + "group": 1469, + "name_hash": -1153472973, + "name": "l40_40", + "mapsquare": 10280, + "key": [-1245893544, -118079793, -1624599660, -626968532] + }, + { + "archive": 5, + "group": 1471, + "name_hash": -1153472972, + "name": "l40_41", + "mapsquare": 10281, + "key": [2129832996, -1542613289, -1612399066, -323592936] + }, + { + "archive": 5, + "group": 1473, + "name_hash": -1153472971, + "name": "l40_42", + "mapsquare": 10282, + "key": [667792020, 292003472, -998896147, 7080342] + }, + { + "archive": 5, + "group": 1475, + "name_hash": -1153413391, + "name": "l42_40", + "mapsquare": 10792, + "key": [-125671574, 254943715, 1343095705, -1965171670] + }, + { + "archive": 5, + "group": 1477, + "name_hash": -1153413328, + "name": "l42_61", + "mapsquare": 10813, + "key": [78604466, -1582607088, 691011324, -1155733133] + }, + { + "archive": 5, + "group": 1479, + "name_hash": -1153383537, + "name": "l43_61", + "mapsquare": 11069, + "key": [281072607, -1791037221, -1221626554, 801634958] + }, + { + "archive": 5, + "group": 1481, + "name_hash": -1154158071, + "name": "l38_72", + "mapsquare": 9800, + "key": [1648231074, -690523856, 538076864, -489360965] + }, + { + "archive": 5, + "group": 1483, + "name_hash": -1154307021, + "name": "l33_77", + "mapsquare": 8525, + "key": [1448703859, 604202172, 1058795271, -80742538] + }, + { + "archive": 5, + "group": 1485, + "name_hash": -1154217742, + "name": "l36_46", + "mapsquare": 9262, + "key": [-1327237404, -257519940, -1398355053, -970581711] + }, + { + "archive": 5, + "group": 1487, + "name_hash": -1154187951, + "name": "l37_46", + "mapsquare": 9518, + "key": [-557639005, 398566091, -133936467, -850662847] + }, + { + "archive": 5, + "group": 1489, + "name_hash": -1153472970, + "name": "l40_43", + "mapsquare": 10283, + "key": [-2133080221, 1327669620, 173304076, -151662318] + }, + { + "archive": 5, + "group": 1499, + "name_hash": -1153294226, + "name": "l46_41", + "mapsquare": 11817, + "key": [740863947, -1459447536, -1272357052, -1730407126] + }, + { + "archive": 5, + "group": 1501, + "name_hash": -1153294224, + "name": "l46_43", + "mapsquare": 11819, + "key": [-1632272271, -1134214079, -1204220834, -1633494895] + }, + { + "archive": 5, + "group": 1511, + "name_hash": -1152460042, + "name": "l53_56", + "mapsquare": 13624, + "key": [2075882635, 144612382, -11140999, 1068051873] + }, + { + "archive": 5, + "group": 1513, + "name_hash": -1152460041, + "name": "l53_57", + "mapsquare": 13625, + "key": [-1688194808, -751145145, -64310690, -9400824] + }, + { + "archive": 5, + "group": 1515, + "name_hash": -1152460040, + "name": "l53_58", + "mapsquare": 13626, + "key": [2091552269, -19993197, 919014338, -2088295508] + }, + { + "archive": 5, + "group": 1517, + "name_hash": -1152460039, + "name": "l53_59", + "mapsquare": 13627, + "key": [341129543, 405594157, -935930552, 1362472171] + }, + { + "archive": 5, + "group": 1519, + "name_hash": -1152460017, + "name": "l53_60", + "mapsquare": 13628, + "key": [83847925, -1748584368, -1828230097, 915424426] + }, + { + "archive": 5, + "group": 1521, + "name_hash": -1152460016, + "name": "l53_61", + "mapsquare": 13629, + "key": [-1526659316, 194744161, -1617203167, 1822755797] + }, + { + "archive": 5, + "group": 1523, + "name_hash": -1152460015, + "name": "l53_62", + "mapsquare": 13630, + "key": [-1632016999, -2015192780, -2137722473, 477794767] + }, + { + "archive": 5, + "group": 1525, + "name_hash": -1154187862, + "name": "l37_72", + "mapsquare": 9544, + "key": [1190108828, -1694672329, 922227461, 627710655] + }, + { + "archive": 5, + "group": 1527, + "name_hash": -1152400464, + "name": "l55_52", + "mapsquare": 14132, + "key": [1385901079, -1626256839, 2140816760, -1871930940] + }, + { + "archive": 5, + "group": 1529, + "name_hash": -1363756198, + "name": "l56_150", + "mapsquare": 14486, + "key": [801004021, 788873243, -1673638404, 152435782] + }, + { + "archive": 5, + "group": 1535, + "name_hash": -1152370675, + "name": "l56_50", + "mapsquare": 14386, + "key": [-1730596947, 85732186, -1776102738, -2096470688] + }, + { + "archive": 5, + "group": 1537, + "name_hash": -1152370674, + "name": "l56_51", + "mapsquare": 14387, + "key": [-327431537, -279720677, 1848501675, 306634513] + }, + { + "archive": 5, + "group": 1539, + "name_hash": -1152370673, + "name": "l56_52", + "mapsquare": 14388, + "key": [1061380274, -429796323, -221565610, -967547362] + }, + { + "archive": 5, + "group": 1541, + "name_hash": -1154217646, + "name": "l36_79", + "mapsquare": 9295, + "key": [-128031646, -1131908397, -1360861665, 1112176197] + }, + { + "archive": 5, + "group": 1543, + "name_hash": -1154396370, + "name": "l30_80", + "mapsquare": 7760, + "key": [2042192998, 743878512, -1804236758, -1160501924] + }, + { + "archive": 5, + "group": 1545, + "name_hash": -1396079428, + "name": "l42_155", + "mapsquare": 10907, + "key": [1703225431, -1175749730, 1842579622, -1861290070] + }, + { + "archive": 5, + "group": 1547, + "name_hash": -1155051797, + "name": "l29_76", + "mapsquare": 7500, + "key": [-1016974560, 452375550, 1138391999, 85568702] + } +] diff --git a/src/filestore/archive.ts b/src/filestore/archive.ts index 0b9646c..5fb885e 100644 --- a/src/filestore/archive.ts +++ b/src/filestore/archive.ts @@ -2,11 +2,13 @@ import { ByteBuffer } from '@runejs/common'; import { FileData } from './file-data'; import type { FileIndex } from './file-index'; -import { type FilestoreChannels, readIndexedDataChunk, decompress } from './data'; - +import { + type FilestoreChannels, + readIndexedDataChunk, + decompress, +} from './data'; export class Archive extends FileData { - /** * A map of files housed within this Archive. */ @@ -25,7 +27,11 @@ export class Archive extends FileData { * @param index The File Index that this Archive belongs to. * @param filestoreChannels The main filestore channel for data access. */ - public constructor(id: number, index: FileIndex, filestoreChannels: FilestoreChannels); + public constructor( + id: number, + index: FileIndex, + filestoreChannels: FilestoreChannels, + ); /** * Creates a new `Archive` object. @@ -33,14 +39,29 @@ export class Archive extends FileData { * @param index The File Index that this Archive belongs to. * @param filestoreChannels The main filestore channel for data access. */ - public constructor(fileData: FileData, index: FileIndex, filestoreChannels: FilestoreChannels); - - public constructor(idOrFileData: number | FileData, index: FileIndex, filestoreChannels: FilestoreChannels) { - super(typeof idOrFileData === 'number' ? idOrFileData : idOrFileData.fileId, index, filestoreChannels); - - if(typeof idOrFileData !== 'number') { + public constructor( + fileData: FileData, + index: FileIndex, + filestoreChannels: FilestoreChannels, + ); + + public constructor( + idOrFileData: number | FileData, + index: FileIndex, + filestoreChannels: FilestoreChannels, + ) { + super( + typeof idOrFileData === 'number' + ? idOrFileData + : idOrFileData.fileId, + index, + filestoreChannels, + ); + + if (typeof idOrFileData !== 'number') { const fileData = idOrFileData as FileData; - const { content, nameHash, crc, whirlpool, version, compression } = fileData; + const { content, nameHash, crc, whirlpool, version, compression } = + fileData; this.content = content; this.nameHash = nameHash; this.crc = crc; @@ -64,12 +85,18 @@ export class Archive extends FileData { * Decodes the packed Archive files from the filestore on disk. */ public decodeArchiveFiles(): void { - if(this.decoded) { + if (this.decoded) { return; } - const archiveEntry = readIndexedDataChunk(this.fileId, this.index.indexId, this.filestoreChannels); - const { compression, version, buffer } = decompress(archiveEntry.dataFile); + const archiveEntry = readIndexedDataChunk( + this.fileId, + this.index.indexId, + this.filestoreChannels, + ); + const { compression, version, buffer } = decompress( + archiveEntry.dataFile, + ); const archiveSize = this.files.size; this.content = buffer; @@ -78,15 +105,17 @@ export class Archive extends FileData { this.content = buffer; this.compression = compression; this.files.clear(); - buffer.readerIndex = (buffer.length - 1); + buffer.readerIndex = buffer.length - 1; const chunkCount = buffer.get('BYTE', 'UNSIGNED'); - const chunkSizes: number[][] = new Array(chunkCount).fill(new Array(archiveSize)); + const chunkSizes: number[][] = new Array(chunkCount).fill( + new Array(archiveSize), + ); const sizes: number[] = new Array(archiveSize).fill(0); - buffer.readerIndex = (buffer.length - 1 - chunkCount * archiveSize * 4); - for(let chunk = 0; chunk < chunkCount; chunk++) { + buffer.readerIndex = buffer.length - 1 - chunkCount * archiveSize * 4; + for (let chunk = 0; chunk < chunkCount; chunk++) { let chunkSize = 0; - for(let id = 0; id < archiveSize; id++) { + for (let id = 0; id < archiveSize; id++) { const delta = buffer.get('INT'); chunkSize += delta; @@ -95,24 +124,36 @@ export class Archive extends FileData { } } - for(let id = 0; id < archiveSize; id++) { - const fileData = new FileData(id, this.index, this.filestoreChannels); + for (let id = 0; id < archiveSize; id++) { + const fileData = new FileData( + id, + this.index, + this.filestoreChannels, + ); fileData.content = new ByteBuffer(sizes[id]); this.files.set(id, fileData); } buffer.readerIndex = 0; - for(let chunk = 0; chunk < chunkCount; chunk++) { - for(let id = 0; id < archiveSize; id++) { + for (let chunk = 0; chunk < chunkCount; chunk++) { + for (let id = 0; id < archiveSize; id++) { const chunkSize = chunkSizes[chunk][id]; - this.files.get(id).content.putBytes(buffer.getSlice(buffer.readerIndex, chunkSize)); - buffer.copy(this.files.get(id).content, 0, buffer.readerIndex, buffer.readerIndex + chunkSize); - buffer.readerIndex = (buffer.readerIndex + chunkSize); + this.files + .get(id) + .content.putBytes( + buffer.getSlice(buffer.readerIndex, chunkSize), + ); + buffer.copy( + this.files.get(id).content, + 0, + buffer.readerIndex, + buffer.readerIndex + chunkSize, + ); + buffer.readerIndex = buffer.readerIndex + chunkSize; } } this.decoded = true; } - } diff --git a/src/filestore/data/chunk.ts b/src/filestore/data/chunk.ts index 64ebd78..490f438 100644 --- a/src/filestore/data/chunk.ts +++ b/src/filestore/data/chunk.ts @@ -2,12 +2,10 @@ import { ByteBuffer } from '@runejs/common'; import type { FilestoreChannels } from './filestore-loader'; - export const indexFileLength = 6; export const dataChunkLength = 512; export const sectorLength = 520; - export interface IndexChunk { readonly indexId: number; readonly fileId: number; @@ -20,34 +18,51 @@ export interface IndexedDataChunk { dataFile: ByteBuffer; } - -export const readIndexedDataChunk = (fileId: number, indexId: number, channels: FilestoreChannels): IndexedDataChunk => { - const indexFile = readIndexChunk(fileId, indexId, indexId === 255 ? - channels.metaChannel : channels.indexChannels[indexId]); - if(!indexFile) { - throw new Error(`Error parsing index file for file ID ${fileId} in index ${indexId}.`); +export const readIndexedDataChunk = ( + fileId: number, + indexId: number, + channels: FilestoreChannels, +): IndexedDataChunk => { + const indexFile = readIndexChunk( + fileId, + indexId, + indexId === 255 + ? channels.metaChannel + : channels.indexChannels[indexId], + ); + if (!indexFile) { + throw new Error( + `Error parsing index file for file ID ${fileId} in index ${indexId}.`, + ); } const dataFile = readDataChunk(fileId, indexFile, channels.dataChannel); - if(!dataFile) { - throw new Error(`Error parsing data file for file ID ${fileId} in index ${indexId}.`); + if (!dataFile) { + throw new Error( + `Error parsing data file for file ID ${fileId} in index ${indexId}.`, + ); } return { indexFile, dataFile }; }; - -export const readIndexChunk = (fileId: number, indexId: number, indexChannel: ByteBuffer): IndexChunk => { +export const readIndexChunk = ( + fileId: number, + indexId: number, + indexChannel: ByteBuffer, +): IndexChunk => { const ptr = fileId * indexFileLength; - if(ptr < 0 || ptr >= indexChannel.length) { + if (ptr < 0 || ptr >= indexChannel.length) { throw new Error('File Not Found'); } const buf = new ByteBuffer(indexFileLength); indexChannel.copy(buf, 0, ptr, ptr + indexFileLength); - if(buf.readable !== indexFileLength) { - throw new Error(`Not Enough Readable Index Data: Buffer contains ${buf.readable} but needed ${indexFileLength}`); + if (buf.readable !== indexFileLength) { + throw new Error( + `Not Enough Readable Index Data: Buffer contains ${buf.readable} but needed ${indexFileLength}`, + ); } const size = buf.get('INT24'); @@ -55,7 +70,10 @@ export const readIndexChunk = (fileId: number, indexId: number, indexChannel: By return { indexId, fileId, size, sector }; }; -export const writeIndexChunk = (indexChunk: IndexChunk, indexChannel: ByteBuffer): void => { +export const writeIndexChunk = ( + indexChunk: IndexChunk, + indexChannel: ByteBuffer, +): void => { const indexBuffer = new ByteBuffer(indexFileLength); indexBuffer.put(indexChunk.size, 'INT24'); indexBuffer.put(indexChunk.sector, 'INT24'); @@ -64,8 +82,11 @@ export const writeIndexChunk = (indexChunk: IndexChunk, indexChannel: ByteBuffer indexChannel.putBytes(indexBuffer); }; - -export const readDataChunk = (fileId: number, indexFile: IndexChunk, dataChannel: ByteBuffer): ByteBuffer => { +export const readDataChunk = ( + fileId: number, + indexFile: IndexChunk, + dataChannel: ByteBuffer, +): ByteBuffer => { const data = new ByteBuffer(indexFile.size); let chunk = 0; @@ -76,8 +97,10 @@ export const readDataChunk = (fileId: number, indexFile: IndexChunk, dataChannel const buf = new ByteBuffer(sectorLength); dataChannel.copy(buf, 0, ptr, ptr + sectorLength); - if(buf.readable !== sectorLength) { - throw new Error(`Not Enough Readable Sector Data: Buffer contains ${buf.readable} but needed ${sectorLength}`); + if (buf.readable !== sectorLength) { + throw new Error( + `Not Enough Readable Sector Data: Buffer contains ${buf.readable} but needed ${sectorLength}`, + ); } const sectorId = buf.get('SHORT', 'UNSIGNED'); @@ -85,64 +108,78 @@ export const readDataChunk = (fileId: number, indexFile: IndexChunk, dataChannel const nextSector = buf.get('INT24'); const sectorIndex = buf.get('BYTE', 'UNSIGNED'); const sectorData = new ByteBuffer(dataChunkLength); - buf.copy(sectorData, 0, buf.readerIndex, buf.readerIndex + dataChunkLength); - - if(remaining > dataChunkLength) { + buf.copy( + sectorData, + 0, + buf.readerIndex, + buf.readerIndex + dataChunkLength, + ); + + if (remaining > dataChunkLength) { sectorData.copy(data, data.writerIndex, 0, dataChunkLength); - data.writerIndex = (data.writerIndex + dataChunkLength); + data.writerIndex = data.writerIndex + dataChunkLength; remaining -= dataChunkLength; - if(sectorIndex !== indexFile.indexId) { + if (sectorIndex !== indexFile.indexId) { throw new Error('File type mismatch.'); } - if(sectorId !== fileId) { + if (sectorId !== fileId) { throw new Error('File id mismatch.'); } - if(sectorChunk !== chunk++) { + if (sectorChunk !== chunk++) { throw new Error('Chunk mismatch.'); } ptr = nextSector * sectorLength; } else { sectorData.copy(data, data.writerIndex, 0, remaining); - data.writerIndex = (data.writerIndex + remaining); + data.writerIndex = data.writerIndex + remaining; remaining = 0; } - } while(remaining > 0); + } while (remaining > 0); return data; }; -export const writeDataChunk = (indexId: number, fileId: number, fileBuffer: ByteBuffer, filestoreChannels: FilestoreChannels): void => { +export const writeDataChunk = ( + indexId: number, + fileId: number, + fileBuffer: ByteBuffer, + filestoreChannels: FilestoreChannels, +): void => { let sector: number; const writeBuffer = new ByteBuffer(sectorLength); - sector = (filestoreChannels.dataChannel.length + (sectorLength - 1)) / sectorLength; - if(sector === 0) { + sector = + (filestoreChannels.dataChannel.length + (sectorLength - 1)) / + sectorLength; + if (sector === 0) { sector = 1; } - for(let i = 0; fileBuffer.readable > 0; i++) { + for (let i = 0; fileBuffer.readable > 0; i++) { let nextSector = 0; let writableDataLength = 0; - if(nextSector === 0) { - nextSector = (filestoreChannels.dataChannel.length + (sectorLength - 1)) / sectorLength; - if(nextSector === 0) { + if (nextSector === 0) { + nextSector = + (filestoreChannels.dataChannel.length + (sectorLength - 1)) / + sectorLength; + if (nextSector === 0) { nextSector++; } - if(nextSector === sector) { + if (nextSector === sector) { nextSector++; } } let writableMax: number; - if(0xFFFF < fileId) { + if (0xffff < fileId) { writableMax = 510; writeBuffer.put(fileId, 'INT'); } else { @@ -150,7 +187,7 @@ export const writeDataChunk = (indexId: number, fileId: number, fileBuffer: Byte writeBuffer.put(fileId, 'SHORT'); } - if(fileBuffer.readable <= writableMax) { + if (fileBuffer.readable <= writableMax) { nextSector = 0; } @@ -161,9 +198,19 @@ export const writeDataChunk = (indexId: number, fileId: number, fileBuffer: Byte filestoreChannels.dataChannel.writerIndex = sectorLength * sector; // Ensure space - if(filestoreChannels.dataChannel.length < filestoreChannels.dataChannel.writerIndex + writeBuffer.length) { - const newBuffer = new ByteBuffer(filestoreChannels.dataChannel.writerIndex + writeBuffer.length); - filestoreChannels.dataChannel.copy(newBuffer, 0, 0, filestoreChannels.dataChannel.length); + if ( + filestoreChannels.dataChannel.length < + filestoreChannels.dataChannel.writerIndex + writeBuffer.length + ) { + const newBuffer = new ByteBuffer( + filestoreChannels.dataChannel.writerIndex + writeBuffer.length, + ); + filestoreChannels.dataChannel.copy( + newBuffer, + 0, + 0, + filestoreChannels.dataChannel.length, + ); newBuffer.writerIndex = filestoreChannels.dataChannel.writerIndex; filestoreChannels.dataChannel = newBuffer; } @@ -172,23 +219,40 @@ export const writeDataChunk = (indexId: number, fileId: number, fileBuffer: Byte filestoreChannels.dataChannel.putBytes(writeBuffer.getSlice(0, 8)); writableDataLength = fileBuffer.readable; - if(writableDataLength > writableMax) { + if (writableDataLength > writableMax) { writableDataLength = writableMax; } - writeBuffer.putBytes(fileBuffer.getSlice(fileBuffer.readerIndex, writableDataLength)); + writeBuffer.putBytes( + fileBuffer.getSlice(fileBuffer.readerIndex, writableDataLength), + ); fileBuffer.readerIndex += writableDataLength; // Ensure space - if(filestoreChannels.dataChannel.length < filestoreChannels.dataChannel.writerIndex + writeBuffer.length) { - const newBuffer = new ByteBuffer(filestoreChannels.dataChannel.writerIndex + writeBuffer.length); - filestoreChannels.dataChannel.copy(newBuffer, 0, 0, filestoreChannels.dataChannel.length); + if ( + filestoreChannels.dataChannel.length < + filestoreChannels.dataChannel.writerIndex + writeBuffer.length + ) { + const newBuffer = new ByteBuffer( + filestoreChannels.dataChannel.writerIndex + writeBuffer.length, + ); + filestoreChannels.dataChannel.copy( + newBuffer, + 0, + 0, + filestoreChannels.dataChannel.length, + ); newBuffer.writerIndex = filestoreChannels.dataChannel.writerIndex; filestoreChannels.dataChannel = newBuffer; } // Write the sector - filestoreChannels.dataChannel.putBytes(writeBuffer.getSlice(writeBuffer.readerIndex, writeBuffer.length - writeBuffer.readerIndex)); + filestoreChannels.dataChannel.putBytes( + writeBuffer.getSlice( + writeBuffer.readerIndex, + writeBuffer.length - writeBuffer.readerIndex, + ), + ); sector = nextSector; } diff --git a/src/filestore/data/compression.ts b/src/filestore/data/compression.ts index f1de661..c75ffb3 100644 --- a/src/filestore/data/compression.ts +++ b/src/filestore/data/compression.ts @@ -2,94 +2,116 @@ import { ByteBuffer } from '@runejs/common'; import { gunzipSync } from 'node:zlib'; const seekBzip = require('seek-bzip'); - -export function decompress(buffer: ByteBuffer, keys?: number[]): { compression: number, buffer: ByteBuffer, version: number } { - if(!buffer || buffer.length === 0) { +export function decompress( + buffer: ByteBuffer, + keys?: number[], +): { compression: number; buffer: ByteBuffer; version: number } { + if (!buffer || buffer.length === 0) { return { compression: -1, buffer: null, version: -1 }; } const compression = buffer.get('BYTE', 'UNSIGNED'); const compressedLength = buffer.get('INT'); - if (keys && keys.length === 4 && (keys[0] !== 0 || keys[1] !== 0 || keys[2] !== 0 || keys[3] !== 0)) { + if ( + keys && + keys.length === 4 && + (keys[0] !== 0 || keys[1] !== 0 || keys[2] !== 0 || keys[3] !== 0) + ) { const readerIndex = buffer.readerIndex; let lengthOffset = readerIndex; if (buffer.length - (compressedLength + readerIndex + 4) >= 2) { lengthOffset += 2; } - const decryptedData = decryptXtea(buffer, keys, buffer.length - lengthOffset); + const decryptedData = decryptXtea( + buffer, + keys, + buffer.length - lengthOffset, + ); decryptedData.copy(buffer, readerIndex, 0); buffer.readerIndex = readerIndex; } - if(compression === 0) { + if (compression === 0) { // Uncompressed file const data = new ByteBuffer(compressedLength); buffer.copy(data, 0, buffer.readerIndex, compressedLength); const decryptedData = decryptXtea(data, keys, compressedLength); - buffer.readerIndex = (buffer.readerIndex + compressedLength); + buffer.readerIndex = buffer.readerIndex + compressedLength; let version = -1; - if(buffer.readable >= 2) { + if (buffer.readable >= 2) { version = buffer.get('SHORT'); } return { compression, buffer: decryptedData, version }; } - // Compressed file - const uncompressedLength = buffer.get('INT'); - if (uncompressedLength < 0) { - throw new Error('Invalid uncompressed length'); - } + // Compressed file + const uncompressedLength = buffer.get('INT'); + if (uncompressedLength < 0) { + throw new Error('Invalid uncompressed length'); + } - const decryptedData = new ByteBuffer( - compression === 1 ? uncompressedLength : (buffer.length - buffer.readerIndex + 2) - ); - buffer.copy(decryptedData, 0, buffer.readerIndex); - - let decompressed: ByteBuffer; - if(compression === 1) { // BZIP2 - decompressed = decompressBzip(decryptedData); - } else if(compression === 2) { // GZIP - decompressed = new ByteBuffer(gunzipSync(decryptedData)); - } else { - throw new Error('Invalid compression type'); - } + const decryptedData = new ByteBuffer( + compression === 1 + ? uncompressedLength + : buffer.length - buffer.readerIndex + 2, + ); + buffer.copy(decryptedData, 0, buffer.readerIndex); + + let decompressed: ByteBuffer; + if (compression === 1) { + // BZIP2 + decompressed = decompressBzip(decryptedData); + } else if (compression === 2) { + // GZIP + decompressed = new ByteBuffer(gunzipSync(decryptedData)); + } else { + throw new Error('Invalid compression type'); + } - buffer.readerIndex = buffer.readerIndex + compressedLength; + buffer.readerIndex = buffer.readerIndex + compressedLength; - if(decompressed.length !== uncompressedLength) { - throw new Error('Length mismatch'); - } + if (decompressed.length !== uncompressedLength) { + throw new Error('Length mismatch'); + } - let version = -1; - if(buffer.readable >= 2) { - version = buffer.get('SHORT'); - } + let version = -1; + if (buffer.readable >= 2) { + version = buffer.get('SHORT'); + } - return { compression, buffer: decompressed, version }; + return { compression, buffer: decompressed, version }; } -export function decryptXtea(input: ByteBuffer, keys: number[], length: number): ByteBuffer { - if(!keys || keys.length === 0) { +export function decryptXtea( + input: ByteBuffer, + keys: number[], + length: number, +): ByteBuffer { + if (!keys || keys.length === 0) { return input; } const output = new ByteBuffer(length); const numBlocks = Math.floor(length / 8); - for(let block = 0; block < numBlocks; block++) { + for (let block = 0; block < numBlocks; block++) { let v0 = input.get('INT'); let v1 = input.get('INT'); - let sum = 0x9E3779B9 * 32; + let sum = 0x9e3779b9 * 32; - for(let i = 0; i < 32; i++) { - v1 -= ((toInt(v0 << 4) ^ toInt(v0 >>> 5)) + v0) ^ (sum + keys[(sum >>> 11) & 3]); + for (let i = 0; i < 32; i++) { + v1 -= + ((toInt(v0 << 4) ^ toInt(v0 >>> 5)) + v0) ^ + (sum + keys[(sum >>> 11) & 3]); v1 = toInt(v1); - sum -= 0x9E3779B9; + sum -= 0x9e3779b9; - v0 -= ((toInt(v1 << 4) ^ toInt(v1 >>> 5)) + v1) ^ (sum + keys[sum & 3]); + v0 -= + ((toInt(v1 << 4) ^ toInt(v1 >>> 5)) + v1) ^ + (sum + keys[sum & 3]); v0 = toInt(v0); } diff --git a/src/filestore/data/filestore-loader.ts b/src/filestore/data/filestore-loader.ts index c985c3a..31cdd7e 100644 --- a/src/filestore/data/filestore-loader.ts +++ b/src/filestore/data/filestore-loader.ts @@ -2,7 +2,6 @@ import { ByteBuffer } from '@runejs/common'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; - export interface FilestoreChannels { dataChannel: ByteBuffer; indexChannels: ByteBuffer[]; @@ -10,23 +9,29 @@ export interface FilestoreChannels { } export const loadFilestore = (dir: string): FilestoreChannels => { - const dataChannel = new ByteBuffer(readFileSync(join(dir, 'main_file_cache.dat2'))); + const dataChannel = new ByteBuffer( + readFileSync(join(dir, 'main_file_cache.dat2')), + ); const indexChannels = []; - for(let i = 0; i < 254; i++) { + for (let i = 0; i < 254; i++) { try { - const index = new ByteBuffer(readFileSync(join(dir, `main_file_cache.idx${i}`))); + const index = new ByteBuffer( + readFileSync(join(dir, `main_file_cache.idx${i}`)), + ); indexChannels.push(index); - } catch(error) { + } catch (error) { break; } } - const metaChannel = new ByteBuffer(readFileSync(join(dir, 'main_file_cache.idx255'))); + const metaChannel = new ByteBuffer( + readFileSync(join(dir, 'main_file_cache.idx255')), + ); return { dataChannel, indexChannels, - metaChannel + metaChannel, }; }; diff --git a/src/filestore/file-data.ts b/src/filestore/file-data.ts index 58e6454..7daac83 100644 --- a/src/filestore/file-data.ts +++ b/src/filestore/file-data.ts @@ -1,11 +1,13 @@ import { ByteBuffer } from '@runejs/common'; -import { decompress, readIndexedDataChunk, type FilestoreChannels } from './data'; +import { + decompress, + readIndexedDataChunk, + type FilestoreChannels, +} from './data'; import type { FileIndex } from './file-index'; - export class FileData { - /** * The ID of this file within it's File Index. */ @@ -60,7 +62,11 @@ export class FileData { * @param index The File Index that this file belongs to. * @param filestoreChannels The main filestore channel for data access. */ - public constructor(fileId: number, index: FileIndex, filestoreChannels: FilestoreChannels) { + public constructor( + fileId: number, + index: FileIndex, + filestoreChannels: FilestoreChannels, + ) { this.fileId = fileId; this.index = index; this.filestoreChannels = filestoreChannels; @@ -72,17 +78,20 @@ export class FileData { * @returns The decompressed file data buffer. */ public decompress(keys?: number[]): ByteBuffer { - if(this.decompressed) { + if (this.decompressed) { this.content.readerIndex = 0; this.content.writerIndex = 0; return this.content; } this.decompressed = true; - const archiveEntry = readIndexedDataChunk(this.fileId, this.index.indexId, this.filestoreChannels); + const archiveEntry = readIndexedDataChunk( + this.fileId, + this.index.indexId, + this.filestoreChannels, + ); const { buffer } = decompress(archiveEntry?.dataFile, keys); this.content = buffer; return this.content; } - } diff --git a/src/filestore/file-index.ts b/src/filestore/file-index.ts index aa66346..241f649 100644 --- a/src/filestore/file-index.ts +++ b/src/filestore/file-index.ts @@ -2,36 +2,51 @@ import { logger } from '@runejs/common'; import { Archive } from './archive'; import { FileData } from './file-data'; -import { type FilestoreChannels, readIndexedDataChunk, decompress } from './data'; +import { + type FilestoreChannels, + readIndexedDataChunk, + decompress, +} from './data'; import { hash } from './util'; - const NAME_FLAG = 0x01; const WHIRLPOOL_FLAG = 0x02; /** * String representations of numeric index ids. */ -export type IndexId = 'configs' | 'sprites' | 'music' | 'jingles' | 'sounds' | 'binary' | - 'widgets' | 'regions' | 'models' | 'textures' | 'scripts' | 'frames' | 'skeletons'; +export type IndexId = + | 'configs' + | 'sprites' + | 'music' + | 'jingles' + | 'sounds' + | 'binary' + | 'widgets' + | 'regions' + | 'models' + | 'textures' + | 'scripts' + | 'frames' + | 'skeletons'; /** * A map of unique index keys to numeric ids. */ export const indexIdMap: { [key: string]: number } = { - 'skeletons': 0, - 'frames': 1, - 'configs': 2, - 'widgets': 3, - 'sounds': 4, - 'regions': 5, - 'music': 6, - 'models': 7, - 'sprites': 8, - 'textures': 9, - 'binary': 10, - 'jingles': 11, - 'scripts': 12 + skeletons: 0, + frames: 1, + configs: 2, + widgets: 3, + sounds: 4, + regions: 5, + music: 6, + models: 7, + sprites: 8, + textures: 9, + binary: 10, + jingles: 11, + scripts: 12, }; /** @@ -40,8 +55,8 @@ export const indexIdMap: { [key: string]: number } = { */ export const getIndexId = (index: number): IndexId => { const ids: string[] = Object.keys(indexIdMap); - for(const id of ids) { - if(indexIdMap[id] === index) { + for (const id of ids) { + if (indexIdMap[id] === index) { return id as IndexId; } } @@ -49,9 +64,7 @@ export const getIndexId = (index: number): IndexId => { return null; }; - export class FileIndex { - /** * The ID of this File Index. */ @@ -80,7 +93,10 @@ export class FileIndex { /** * A map of all files housed within this File Index. Values are either an `Archive` or `FileData` object. */ - public files: Map = new Map(); + public files: Map = new Map< + number, + Archive | FileData + >(); private readonly filestoreChannels: FilestoreChannels; @@ -114,30 +130,40 @@ export class FileIndex { * @param keys The XTEA keys. * @returns The requested FileData object, or null if no matching file was found. */ - public getFile(fileIdOrName: number | string, keys?: number[]): FileData | null; - public getFile(fileIdOrName: number | string, keys?: number[]): FileData | null { + public getFile( + fileIdOrName: number | string, + keys?: number[], + ): FileData | null; + public getFile( + fileIdOrName: number | string, + keys?: number[], + ): FileData | null { let fileData: FileData; - if(typeof fileIdOrName === 'string') { + if (typeof fileIdOrName === 'string') { fileData = this.findByName(fileIdOrName) as FileData; } else { const archiveId = fileIdOrName as number; fileData = this.files.get(archiveId) as FileData; } - if(!fileData) { + if (!fileData) { return null; } - if(fileData.type === 'archive') { + if (fileData.type === 'archive') { logger.error(fileData); - throw new Error(`Requested item ${fileIdOrName} in index ${this.indexId} is of type Archive, not FileData.`); + throw new Error( + `Requested item ${fileIdOrName} in index ${this.indexId} is of type Archive, not FileData.`, + ); } try { fileData.decompress(keys); } catch (e) { - logger.warn(`Unable to decompress file ${fileIdOrName} in index ${this.indexId} with keys ${keys}`); + logger.warn( + `Unable to decompress file ${fileIdOrName} in index ${this.indexId} with keys ${keys}`, + ); return null; } @@ -167,19 +193,21 @@ export class FileIndex { public getArchive(archiveIdOrName: number | string): Archive | null { let archive: Archive; - if(typeof archiveIdOrName === 'string') { + if (typeof archiveIdOrName === 'string') { archive = this.findByName(archiveIdOrName) as Archive; } else { const archiveId = archiveIdOrName as number; archive = this.files.get(archiveId) as Archive; } - if(!archive) { + if (!archive) { return null; } - if(archive.type === 'file') { - throw new Error(`Requested item ${archiveIdOrName} in index ${this.indexId} is of type FileData, not Archive.`); + if (archive.type === 'file') { + throw new Error( + `Requested item ${archiveIdOrName} in index ${this.indexId} is of type FileData, not Archive.`, + ); } archive.decodeArchiveFiles(); @@ -195,9 +223,9 @@ export class FileIndex { public findByName(fileName: string): Archive | FileData | null { const indexFileCount = this.files.size; const nameHash = hash(fileName); - for(let fileId = 0; fileId < indexFileCount; fileId++) { + for (let fileId = 0; fileId < indexFileCount; fileId++) { const item = this.files.get(fileId); - if(item?.nameHash === nameHash) { + if (item?.nameHash === nameHash) { return item; } } @@ -209,15 +237,21 @@ export class FileIndex { * Decodes the packed index file data from the filestore on disk. */ public decodeIndex(): void { - const indexEntry = readIndexedDataChunk(this.indexId, 255, this.filestoreChannels); - const { compression, version, buffer } = decompress(indexEntry.dataFile); + const indexEntry = readIndexedDataChunk( + this.indexId, + 255, + this.filestoreChannels, + ); + const { compression, version, buffer } = decompress( + indexEntry.dataFile, + ); this.version = version; this.compression = compression; /* file header */ this.format = buffer.get('BYTE', 'UNSIGNED'); - if(this.format >= 6) { + if (this.format >= 6) { this.version = buffer.get('INT'); } this.settings = buffer.get('BYTE', 'UNSIGNED'); @@ -227,62 +261,66 @@ export class FileIndex { const ids: number[] = new Array(fileCount); let accumulator = 0; let size = -1; - for(let i = 0; i < ids.length; i++) { + for (let i = 0; i < ids.length; i++) { const delta = buffer.get('SHORT', 'UNSIGNED'); ids[i] = accumulator += delta; - if(ids[i] > size) { + if (ids[i] > size) { size = ids[i]; } } size++; - for(const id of ids) { + for (const id of ids) { this.files.set(id, new FileData(id, this, this.filestoreChannels)); } /* read the name hashes if present */ - if((this.settings & NAME_FLAG) !== 0) { - for(const id of ids) { + if ((this.settings & NAME_FLAG) !== 0) { + for (const id of ids) { const nameHash = buffer.get('INT'); this.files.get(id).nameHash = nameHash; } } /* read the crc values */ - for(const id of ids) { + for (const id of ids) { this.files.get(id).crc = buffer.get('INT'); } /* read the whirlpool values */ - if((this.settings & WHIRLPOOL_FLAG) !== 0) { - for(const id of ids) { - buffer.copy(this.files.get(id).whirlpool, 0, - buffer.readerIndex, buffer.readerIndex + 64); - buffer.readerIndex = (buffer.readerIndex + 64); + if ((this.settings & WHIRLPOOL_FLAG) !== 0) { + for (const id of ids) { + buffer.copy( + this.files.get(id).whirlpool, + 0, + buffer.readerIndex, + buffer.readerIndex + 64, + ); + buffer.readerIndex = buffer.readerIndex + 64; } } /* read the version numbers */ - for(const id of ids) { + for (const id of ids) { this.files.get(id).version = buffer.get('INT'); } /* read the child sizes */ const members: number[][] = new Array(size).fill([]); - for(const id of ids) { + for (const id of ids) { members[id] = new Array(buffer.get('SHORT', 'UNSIGNED')); } /* read the child ids */ - for(const id of ids) { + for (const id of ids) { accumulator = 0; size = -1; - for(let i = 0; i < members[id].length; i++) { + for (let i = 0; i < members[id].length; i++) { const delta = buffer.get('SHORT', 'UNSIGNED'); members[id][i] = accumulator += delta; - if(members[id][i] > size) { + if (members[id][i] > size) { size = members[id][i]; } } @@ -291,31 +329,36 @@ export class FileIndex { /* allocate specific entries within the array */ const file = this.files.get(id); - if(members[id].length > 1) { - if(file.type === 'file') { - this.files.set(id, new Archive(file, this, this.filestoreChannels)); + if (members[id].length > 1) { + if (file.type === 'file') { + this.files.set( + id, + new Archive(file, this, this.filestoreChannels), + ); } const archive = this.files.get(id) as Archive; - for(const childId of members[id]) { - archive.files.set(childId, new FileData(childId, this, this.filestoreChannels)); + for (const childId of members[id]) { + archive.files.set( + childId, + new FileData(childId, this, this.filestoreChannels), + ); } } } /* read the child name hashes */ - if((this.settings & NAME_FLAG) !== 0) { - for(const id of ids) { + if ((this.settings & NAME_FLAG) !== 0) { + for (const id of ids) { const archive = this.files.get(id) as Archive; - for(const childId of members[id]) { + for (const childId of members[id]) { const nameHash = buffer.get('INT'); - if(archive?.files?.get(childId)) { + if (archive?.files?.get(childId)) { archive.files.get(childId).nameHash = nameHash; } } } } } - } diff --git a/src/filestore/filestore.ts b/src/filestore/filestore.ts index 8d6c7aa..268aa11 100644 --- a/src/filestore/filestore.ts +++ b/src/filestore/filestore.ts @@ -2,22 +2,31 @@ import { type FilestoreChannels, loadFilestore } from './data'; import { FileIndex, type IndexId, indexIdMap } from './file-index'; import { getFileNames } from './util'; import { - SpriteStore, MusicStore, BinaryStore, JingleStore, SoundStore, - RegionStore, ConfigStore, ModelStore, WidgetStore, FontStore, - TextureStore, type ItemStore, type NpcStore, type ObjectStore, type XteaDefinition, - type VarbitStore + SpriteStore, + MusicStore, + BinaryStore, + JingleStore, + SoundStore, + RegionStore, + ConfigStore, + ModelStore, + WidgetStore, + FontStore, + TextureStore, + type ItemStore, + type NpcStore, + type ObjectStore, + type XteaDefinition, + type VarbitStore, } from './stores'; - -export let fileNames: { [ key: string ]: string | null }; +export let fileNames: { [key: string]: string | null }; export const getFileName = (nameHash: number): string | null => { return fileNames[nameHash.toString()] || nameHash.toString(); }; - export class Filestore { - public readonly filestoreDir: string; public readonly configDir: string; @@ -42,7 +51,8 @@ export class Filestore { options?: { configDir?: string; xteas?: { [key: number]: XteaDefinition }; - }) { + }, + ) { this.filestoreDir = filestoreDir; this.configDir = options?.configDir || filestoreDir; this.channels = loadFilestore(filestoreDir); @@ -70,17 +80,17 @@ export class Filestore { */ public getIndex(inputIndexId: number | IndexId): FileIndex { let indexId = inputIndexId; - if(typeof indexId !== 'number') { + if (typeof indexId !== 'number') { indexId = indexIdMap[indexId]; } - if(!this.indexes.has(indexId)) { + if (!this.indexes.has(indexId)) { const archiveIndex = new FileIndex(indexId, this.channels); archiveIndex.decodeIndex(); this.indexes.set(indexId, archiveIndex); return archiveIndex; } - return this.indexes.get(indexId); + return this.indexes.get(indexId); } public get itemStore(): ItemStore { @@ -98,5 +108,4 @@ export class Filestore { public get objectStore(): ObjectStore { return this.configStore?.objectStore; } - } diff --git a/src/filestore/stores/binary-store.ts b/src/filestore/stores/binary-store.ts index 3e624cd..b441761 100644 --- a/src/filestore/stores/binary-store.ts +++ b/src/filestore/stores/binary-store.ts @@ -4,35 +4,38 @@ import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; import { type Filestore, getFileName } from '../filestore'; import type { FileData } from '../file-data'; - /** * Controls misc binary file storage. */ export class BinaryStore { - - public constructor(private fileStore: Filestore) { - } + public constructor(private fileStore: Filestore) {} /** * Writes the specified file or all binary files to the disk. * @param binaryFile [optional] The file to write to disk. Writes all stored binary files to disk if not provided. */ public async writeToDisk(binaryFile?: FileData): Promise { - if(!binaryFile) { + if (!binaryFile) { // Write all files const binaryFiles: FileData[] = this.decodeBinaryFileStore(); - binaryFiles.forEach(async file => this.writeToDisk(file)); + binaryFiles.forEach(async (file) => this.writeToDisk(file)); } else { // Write single file return new Promise((resolve, reject) => { try { - const fileName = getFileName(binaryFile.nameHash).replace(/ /g, '_'); - if(!existsSync('./unpacked/binary')) { + const fileName = getFileName(binaryFile.nameHash).replace( + / /g, + '_', + ); + if (!existsSync('./unpacked/binary')) { mkdirSync('./unpacked/binary'); } - writeFileSync(`./unpacked/binary/${binaryFile.fileId}_${fileName}`, Buffer.from(binaryFile.content)); + writeFileSync( + `./unpacked/binary/${binaryFile.fileId}_${fileName}`, + Buffer.from(binaryFile.content), + ); resolve(); - } catch(error) { + } catch (error) { reject(error); } }); @@ -45,7 +48,7 @@ export class BinaryStore { * @returns The binary FileData object, or null if the file is not found. */ public getBinaryFile(nameOrId: string | number): FileData | null { - if(!nameOrId) { + if (!nameOrId) { return null; } @@ -62,11 +65,17 @@ export class BinaryStore { const binaryFileCount = binaryIndex.files.size; const binaryFiles: FileData[] = new Array(binaryFileCount); - for(let binaryFileId = 0; binaryFileId < binaryFileCount; binaryFileId++) { + for ( + let binaryFileId = 0; + binaryFileId < binaryFileCount; + binaryFileId++ + ) { const fileData = binaryIndex.getFile(binaryFileId); - if(!fileData) { + if (!fileData) { binaryFiles[binaryFileId] = null; - logger.warn(`No file found for binary file ID ${binaryFileId}.`); + logger.warn( + `No file found for binary file ID ${binaryFileId}.`, + ); continue; } @@ -75,5 +84,4 @@ export class BinaryStore { return binaryFiles; } - } diff --git a/src/filestore/stores/config-store.ts b/src/filestore/stores/config-store.ts index a924420..16e04f7 100644 --- a/src/filestore/stores/config-store.ts +++ b/src/filestore/stores/config-store.ts @@ -3,30 +3,29 @@ import type { FileIndex } from '../file-index'; import type { Archive } from '../archive'; import { NpcStore, ObjectStore, ItemStore, VarbitStore } from './configs'; - /** * String representations of config file/archive ids. */ export type ConfigId = - 'character' | - 'objects' | - 'npcs' | - 'items' | - 'animations' | - 'graphics' | - 'varbits'; + | 'character' + | 'objects' + | 'npcs' + | 'items' + | 'animations' + | 'graphics' + | 'varbits'; /** * A map of unique config keys to file/archive ids within the config store. */ export const configIdMap: { [key: string]: number } = { - 'character': 3, - 'objects': 6, - 'npcs': 9, - 'items': 10, - 'animations': 12, - 'graphics': 13, - 'varbits': 14 + character: 3, + objects: 6, + npcs: 9, + items: 10, + animations: 12, + graphics: 13, + varbits: 14, }; /** @@ -35,8 +34,8 @@ export const configIdMap: { [key: string]: number } = { */ export const getConfigId = (config: number): ConfigId => { const ids: string[] = Object.keys(configIdMap); - for(const id of ids) { - if(configIdMap[id] === config) { + for (const id of ids) { + if (configIdMap[id] === config) { return id as ConfigId; } } @@ -44,12 +43,10 @@ export const getConfigId = (config: number): ConfigId => { return null; }; - /** * Contains various configuration related Archives. */ export class ConfigStore { - /** * A Store used to access the Item Archive, containing details about every game item. */ @@ -85,11 +82,10 @@ export class ConfigStore { public getArchive(inputConfigId: ConfigId | number): Archive { let configId = inputConfigId; - if(typeof configId !== 'number') { + if (typeof configId !== 'number') { configId = configIdMap[configId]; } return this.configIndex.getArchive(configId); } - } diff --git a/src/filestore/stores/configs/item-store.ts b/src/filestore/stores/configs/item-store.ts index 19b06f8..be5a433 100644 --- a/src/filestore/stores/configs/item-store.ts +++ b/src/filestore/stores/configs/item-store.ts @@ -5,12 +5,10 @@ import type { Archive } from '../../archive'; import type { ConfigStore } from '../config-store'; import type { FileData } from '../../file-data'; - /** * Contains game client need-to-know level information about a single game item. */ export class ItemConfig { - gameId: number; name: string | null = null; stackable?: boolean; @@ -20,8 +18,8 @@ export class ItemConfig { widgetOptions?: string[]; tradable?: boolean; teamId?: number; - replacedColors?: [ number, number ][]; // [ originalColor, newColor ][] - replacedTextures?: [ number, number ][]; + replacedColors?: [number, number][]; // [ originalColor, newColor ][] + replacedTextures?: [number, number][]; bankNoteId?: number; bankNoteTemplate?: number; stackableAmounts?: number[]; @@ -44,17 +42,17 @@ export class ItemConfig { * 3d modelling information for this item. */ model3d: { - maleModels: [ number, number, number ]; - maleHeadModels: [ number, number ]; + maleModels: [number, number, number]; + maleHeadModels: [number, number]; maleModelOffset?: number; - femaleModels: [ number, number, number ]; - femaleHeadModels: [ number, number ]; + femaleModels: [number, number, number]; + femaleHeadModels: [number, number]; femaleModelOffset?: number; } = { - maleModels: [ -1, -1, -1 ], - maleHeadModels: [ -1, -1 ], - femaleModels: [ -1, -1, -1 ], - femaleHeadModels: [ -1, -1 ] + maleModels: [-1, -1, -1], + maleHeadModels: [-1, -1], + femaleModels: [-1, -1, -1], + femaleHeadModels: [-1, -1], }; /** @@ -67,15 +65,12 @@ export class ItemConfig { ambient?: number; contrast?: number; } = {}; - } - /** * Controls files within the Item Archive of the configuration index. */ export class ItemStore { - /** * The Item Archive, containing details about every game item. */ @@ -92,14 +87,14 @@ export class ItemStore { public getItem(itemId: number): ItemConfig | null { const itemArchive = this.itemArchive; - if(!itemArchive) { + if (!itemArchive) { logger.error('Item archive not found.'); return null; } const itemFile = itemArchive.getFile(itemId) || null; - if(!itemFile) { + if (!itemFile) { logger.error('Item file not found.'); return null; } @@ -115,156 +110,135 @@ export class ItemStore { return buffer; }; - if(item.model2d.widgetModel !== undefined) { - putOpcode(1) - .put(item.model2d.widgetModel, 'SHORT'); + if (item.model2d.widgetModel !== undefined) { + putOpcode(1).put(item.model2d.widgetModel, 'SHORT'); } - if(item.name) { - putOpcode(2) - .putString(item.name); + if (item.name) { + putOpcode(2).putString(item.name); } - putOpcode(4) - .put(item.model2d.zoom, 'SHORT'); - putOpcode(5) - .put(item.model2d.rotationX, 'SHORT'); - putOpcode(6) - .put(item.model2d.rotationY, 'SHORT'); - putOpcode(7) - .put(item.model2d.offsetX, 'SHORT'); - putOpcode(8) - .put(item.model2d.offsetY, 'SHORT'); - - if(item.stackable) { + putOpcode(4).put(item.model2d.zoom, 'SHORT'); + putOpcode(5).put(item.model2d.rotationX, 'SHORT'); + putOpcode(6).put(item.model2d.rotationY, 'SHORT'); + putOpcode(7).put(item.model2d.offsetX, 'SHORT'); + putOpcode(8).put(item.model2d.offsetY, 'SHORT'); + + if (item.stackable) { putOpcode(11); } - putOpcode(12) - .put(item.value, 'INT'); + putOpcode(12).put(item.value, 'INT'); - if(item.members) { + if (item.members) { putOpcode(16); } - if(item.model3d.maleModels[0] !== -1 || item.model3d.maleModelOffset !== undefined) { + if ( + item.model3d.maleModels[0] !== -1 || + item.model3d.maleModelOffset !== undefined + ) { putOpcode(23) .put(item.model3d.maleModels[0], 'SHORT') .put(item.model3d.maleModelOffset); } - if(item.model3d.maleModels[1] !== -1) { - putOpcode(24) - .put(item.model3d.maleModels[1], 'SHORT'); + if (item.model3d.maleModels[1] !== -1) { + putOpcode(24).put(item.model3d.maleModels[1], 'SHORT'); } - if(item.model3d.femaleModels[0] !== -1 || item.model3d.femaleModelOffset !== undefined) { + if ( + item.model3d.femaleModels[0] !== -1 || + item.model3d.femaleModelOffset !== undefined + ) { putOpcode(25) .put(item.model3d.femaleModels[0], 'SHORT') .put(item.model3d.femaleModelOffset); } - if(item.model3d.femaleModels[1] !== -1) { - putOpcode(26) - .put(item.model3d.femaleModels[1], 'SHORT'); + if (item.model3d.femaleModels[1] !== -1) { + putOpcode(26).put(item.model3d.femaleModels[1], 'SHORT'); } - if(item.worldOptions && item.worldOptions.length !== 0) { - for(let i = 0; i < 5; i++) { - if(item.worldOptions[i]) { - putOpcode(30 + i) - .putString(item.worldOptions[i]); + if (item.worldOptions && item.worldOptions.length !== 0) { + for (let i = 0; i < 5; i++) { + if (item.worldOptions[i]) { + putOpcode(30 + i).putString(item.worldOptions[i]); } } } - if(item.widgetOptions && item.widgetOptions.length !== 0) { - for(let i = 0; i < 5; i++) { - if(item.widgetOptions[i]) { - putOpcode(35 + i) - .putString(item.widgetOptions[i]); + if (item.widgetOptions && item.widgetOptions.length !== 0) { + for (let i = 0; i < 5; i++) { + if (item.widgetOptions[i]) { + putOpcode(35 + i).putString(item.widgetOptions[i]); } } } - if(item.replacedColors && item.replacedColors.length !== 0) { - putOpcode(40) - .put(item.replacedColors.length); - for(const [ oldColor, newColor ] of item.replacedColors) { + if (item.replacedColors && item.replacedColors.length !== 0) { + putOpcode(40).put(item.replacedColors.length); + for (const [oldColor, newColor] of item.replacedColors) { buffer.put(oldColor, 'SHORT').put(newColor, 'SHORT'); } } - if(item.replacedTextures && item.replacedTextures.length !== 0) { - putOpcode(41) - .put(item.replacedTextures.length); - for(const [ oldTexture, newTexture ] of item.replacedTextures) { + if (item.replacedTextures && item.replacedTextures.length !== 0) { + putOpcode(41).put(item.replacedTextures.length); + for (const [oldTexture, newTexture] of item.replacedTextures) { buffer.put(oldTexture, 'SHORT').put(newTexture, 'SHORT'); } } - if(item.tradable) { + if (item.tradable) { putOpcode(65); } - if(item.model3d.maleModels[2] !== -1) { - putOpcode(78) - .put(item.model3d.maleModels[2], 'SHORT'); + if (item.model3d.maleModels[2] !== -1) { + putOpcode(78).put(item.model3d.maleModels[2], 'SHORT'); } - if(item.model3d.femaleModels[2] !== -1) { - putOpcode(79) - .put(item.model3d.femaleModels[2], 'SHORT'); + if (item.model3d.femaleModels[2] !== -1) { + putOpcode(79).put(item.model3d.femaleModels[2], 'SHORT'); } - if(item.model3d.maleHeadModels[0] !== -1) { - putOpcode(90) - .put(item.model3d.maleHeadModels[0], 'SHORT'); + if (item.model3d.maleHeadModels[0] !== -1) { + putOpcode(90).put(item.model3d.maleHeadModels[0], 'SHORT'); } - if(item.model3d.femaleHeadModels[0] !== -1) { - putOpcode(91) - .put(item.model3d.femaleHeadModels[0], 'SHORT'); + if (item.model3d.femaleHeadModels[0] !== -1) { + putOpcode(91).put(item.model3d.femaleHeadModels[0], 'SHORT'); } - putOpcode(95) - .put(item.model2d.rotationZ, 'SHORT'); + putOpcode(95).put(item.model2d.rotationZ, 'SHORT'); - if(item.bankNoteId) { - putOpcode(97) - .put(item.bankNoteId, 'SHORT'); + if (item.bankNoteId) { + putOpcode(97).put(item.bankNoteId, 'SHORT'); } - if(item.bankNoteTemplate) { - putOpcode(98) - .put(item.bankNoteTemplate, 'SHORT'); + if (item.bankNoteTemplate) { + putOpcode(98).put(item.bankNoteTemplate, 'SHORT'); } - if(item.stackableIds && item.stackableIds.length !== 0) { - for(let i = 0; i < 10; i++) { + if (item.stackableIds && item.stackableIds.length !== 0) { + for (let i = 0; i < 10; i++) { putOpcode(100 + i) .put(item.stackableIds[i], 'SHORT') .put(item.stackableAmounts[i], 'SHORT'); } } - putOpcode(110) - .put(item.rendering.resizeX, 'SHORT'); + putOpcode(110).put(item.rendering.resizeX, 'SHORT'); - putOpcode(111) - .put(item.rendering.resizeY, 'SHORT'); + putOpcode(111).put(item.rendering.resizeY, 'SHORT'); - putOpcode(112) - .put(item.rendering.resizeZ, 'SHORT'); + putOpcode(112).put(item.rendering.resizeZ, 'SHORT'); - putOpcode(113) - .put(item.rendering.ambient); + putOpcode(113).put(item.rendering.ambient); - putOpcode(114) - .put(item.rendering.contrast); + putOpcode(114).put(item.rendering.contrast); - putOpcode(115) - .put(item.teamId); + putOpcode(115).put(item.teamId); putOpcode(0); @@ -283,125 +257,196 @@ export class ItemStore { let run = true; - while(run) { + while (run) { const opcode = buffer.get('BYTE', 'UNSIGNED'); - if(opcode === 0) { + if (opcode === 0) { run = false; break; } - if(opcode === 1) { - itemConfig.model2d.widgetModel = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 2) { + if (opcode === 1) { + itemConfig.model2d.widgetModel = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 2) { itemConfig.name = buffer.getString(); - } else if(opcode === 4) { + } else if (opcode === 4) { itemConfig.model2d.zoom = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 5) { + } else if (opcode === 5) { itemConfig.model2d.rotationX = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 6) { + } else if (opcode === 6) { itemConfig.model2d.rotationY = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 7) { + } else if (opcode === 7) { itemConfig.model2d.offsetX = buffer.get('SHORT', 'UNSIGNED'); - if(itemConfig.model2d.offsetX > 32767) { + if (itemConfig.model2d.offsetX > 32767) { itemConfig.model2d.offsetX -= 65536; } - } else if(opcode === 8) { + } else if (opcode === 8) { itemConfig.model2d.offsetY = buffer.get('SHORT', 'UNSIGNED'); - if(itemConfig.model2d.offsetY > 32767) { + if (itemConfig.model2d.offsetY > 32767) { itemConfig.model2d.offsetY -= 65536; } - } else if(opcode === 11) { + } else if (opcode === 11) { itemConfig.stackable = true; - } else if(opcode === 12) { + } else if (opcode === 12) { itemConfig.value = buffer.get('INT'); - } else if(opcode === 16) { + } else if (opcode === 16) { itemConfig.members = true; - } else if(opcode === 23) { - itemConfig.model3d.maleModels[0] = buffer.get('SHORT', 'UNSIGNED'); - itemConfig.model3d.maleModelOffset = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode === 24) { - itemConfig.model3d.maleModels[1] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 25) { - itemConfig.model3d.femaleModels[0] = buffer.get('SHORT', 'UNSIGNED'); - itemConfig.model3d.femaleModelOffset = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode === 26) { - itemConfig.model3d.femaleModels[1] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode >= 30 && opcode < 35) { - if(!itemConfig.worldOptions) { + } else if (opcode === 23) { + itemConfig.model3d.maleModels[0] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + itemConfig.model3d.maleModelOffset = buffer.get( + 'BYTE', + 'UNSIGNED', + ); + } else if (opcode === 24) { + itemConfig.model3d.maleModels[1] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 25) { + itemConfig.model3d.femaleModels[0] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + itemConfig.model3d.femaleModelOffset = buffer.get( + 'BYTE', + 'UNSIGNED', + ); + } else if (opcode === 26) { + itemConfig.model3d.femaleModels[1] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode >= 30 && opcode < 35) { + if (!itemConfig.worldOptions) { itemConfig.worldOptions = new Array(5).fill(null); } itemConfig.worldOptions[opcode - 30] = buffer.getString(); - if(itemConfig.worldOptions[opcode - 30] === 'Hidden' || itemConfig.worldOptions[opcode - 30] === 'hidden') { + if ( + itemConfig.worldOptions[opcode - 30] === 'Hidden' || + itemConfig.worldOptions[opcode - 30] === 'hidden' + ) { itemConfig.worldOptions[opcode - 30] = null; } - } else if(opcode >= 35 && opcode < 40) { - if(!itemConfig.widgetOptions) { + } else if (opcode >= 35 && opcode < 40) { + if (!itemConfig.widgetOptions) { itemConfig.widgetOptions = new Array(5).fill(null); } itemConfig.widgetOptions[opcode - 35] = buffer.getString(); - if(itemConfig.widgetOptions[opcode - 35] === 'Hidden' || itemConfig.widgetOptions[opcode - 35] === 'hidden') { + if ( + itemConfig.widgetOptions[opcode - 35] === 'Hidden' || + itemConfig.widgetOptions[opcode - 35] === 'hidden' + ) { itemConfig.widgetOptions[opcode - 35] = null; } - } else if(opcode === 40) { + } else if (opcode === 40) { const colorCount = buffer.get('BYTE', 'UNSIGNED'); itemConfig.replacedColors = new Array(colorCount); - itemConfig.replacedColors.fill([ -1, -1 ]); - - for(let colorIndex = 0; colorIndex < colorCount; colorIndex++) { - itemConfig.replacedColors[colorIndex][0] = buffer.get('SHORT', 'UNSIGNED'); - itemConfig.replacedColors[colorIndex][1] = buffer.get('SHORT', 'UNSIGNED'); + itemConfig.replacedColors.fill([-1, -1]); + + for ( + let colorIndex = 0; + colorIndex < colorCount; + colorIndex++ + ) { + itemConfig.replacedColors[colorIndex][0] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + itemConfig.replacedColors[colorIndex][1] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); } - } else if(opcode === 41) { + } else if (opcode === 41) { const textureCount = buffer.get('BYTE', 'UNSIGNED'); itemConfig.replacedTextures = new Array(textureCount); - itemConfig.replacedTextures.fill([ -1, -1 ]); - - for(let textureIndex = 0; textureIndex < textureCount; textureIndex++) { - itemConfig.replacedTextures[textureIndex][0] = buffer.get('SHORT', 'UNSIGNED'); - itemConfig.replacedTextures[textureIndex][1] = buffer.get('SHORT', 'UNSIGNED'); + itemConfig.replacedTextures.fill([-1, -1]); + + for ( + let textureIndex = 0; + textureIndex < textureCount; + textureIndex++ + ) { + itemConfig.replacedTextures[textureIndex][0] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + itemConfig.replacedTextures[textureIndex][1] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); } - } else if(opcode === 65) { + } else if (opcode === 65) { itemConfig.tradable = true; - } else if(opcode === 78) { - itemConfig.model3d.maleModels[2] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 79) { - itemConfig.model3d.femaleModels[2] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 90) { - itemConfig.model3d.maleHeadModels[0] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 91) { - itemConfig.model3d.femaleHeadModels[0] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 92) { - itemConfig.model3d.maleHeadModels[1] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 93) { - itemConfig.model3d.femaleHeadModels[1] = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 95) { + } else if (opcode === 78) { + itemConfig.model3d.maleModels[2] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 79) { + itemConfig.model3d.femaleModels[2] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 90) { + itemConfig.model3d.maleHeadModels[0] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 91) { + itemConfig.model3d.femaleHeadModels[0] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 92) { + itemConfig.model3d.maleHeadModels[1] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 93) { + itemConfig.model3d.femaleHeadModels[1] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 95) { itemConfig.model2d.rotationZ = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 97) { - itemConfig.bankNoteId = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode === 98) { - itemConfig.bankNoteTemplate = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode >= 100 && opcode < 110) { - if(!itemConfig.stackableIds) { + } else if (opcode === 97) { + itemConfig.bankNoteId = buffer.get('SHORT', 'UNSIGNED'); + } else if (opcode === 98) { + itemConfig.bankNoteTemplate = buffer.get('SHORT', 'UNSIGNED'); + } else if (opcode >= 100 && opcode < 110) { + if (!itemConfig.stackableIds) { itemConfig.stackableAmounts = new Array(10); itemConfig.stackableIds = new Array(10); } - itemConfig.stackableIds[opcode - 100] = (buffer.get('SHORT', 'UNSIGNED')); - itemConfig.stackableAmounts[opcode - 100] = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode === 110) { + itemConfig.stackableIds[opcode - 100] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + itemConfig.stackableAmounts[opcode - 100] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + } else if (opcode === 110) { itemConfig.rendering.resizeX = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 111) { + } else if (opcode === 111) { itemConfig.rendering.resizeY = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 112) { + } else if (opcode === 112) { itemConfig.rendering.resizeZ = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 113) { + } else if (opcode === 113) { itemConfig.rendering.ambient = buffer.get('BYTE'); - } else if(opcode === 114) { + } else if (opcode === 114) { itemConfig.rendering.contrast = buffer.get('BYTE'); - } else if(opcode === 115) { + } else if (opcode === 115) { itemConfig.teamId = buffer.get('BYTE', 'UNSIGNED'); } } @@ -415,7 +460,7 @@ export class ItemStore { * the resulting ItemConfig array. */ public decodeItemStore(): ItemConfig[] { - if(!this.itemArchive) { + if (!this.itemArchive) { logger.error('Item archive not found.'); return null; } @@ -423,10 +468,10 @@ export class ItemStore { const itemCount = this.itemArchive.files.size; const itemList: ItemConfig[] = new Array(itemCount); - for(let itemId = 0; itemId < itemCount; itemId++) { + for (let itemId = 0; itemId < itemCount; itemId++) { const itemFile = this.itemArchive.getFile(itemId) || null; - if(!itemFile) { + if (!itemFile) { logger.error('Item file not found.'); return null; } @@ -436,5 +481,4 @@ export class ItemStore { return itemList; } - } diff --git a/src/filestore/stores/configs/npc-store.ts b/src/filestore/stores/configs/npc-store.ts index 5ce3c0e..9ef4120 100644 --- a/src/filestore/stores/configs/npc-store.ts +++ b/src/filestore/stores/configs/npc-store.ts @@ -4,12 +4,10 @@ import type { Archive } from '../../archive'; import type { ConfigStore } from '../config-store'; import type { FileData } from '../../file-data'; - /** * Contains game client need-to-know level information about a single game npc. */ export class NpcConfig { - gameId: number; name: string | null = null; animations: { @@ -23,7 +21,7 @@ export class NpcConfig { walk: -1, turnAround: -1, turnRight: -1, - turnLeft: -1 + turnLeft: -1, }; options?: string[]; minimapVisible = true; @@ -56,16 +54,14 @@ export class NpcConfig { boundary: 1, sizeX: 128, sizeY: 128, - renderPriority: false + renderPriority: false, }; } - /** * Controls files within the NPC Archive of the configuration index. */ export class NpcStore { - /** * The NPC Archive, containing details about every game NPC. */ @@ -83,14 +79,14 @@ export class NpcStore { public getNpc(npcId: number): NpcConfig | null { const npcArchive = this.npcArchive; - if(!npcArchive) { + if (!npcArchive) { logger.error('Npc archive not found.'); return null; } const npcFile = npcArchive.getFile(npcId) || null; - if(!npcFile) { + if (!npcFile) { logger.error('Npc file not found.'); return null; } @@ -110,92 +106,105 @@ export class NpcStore { let run = true; - while(run) { + while (run) { const opcode = buffer.get('BYTE', 'UNSIGNED'); - if(opcode === 0) { + if (opcode === 0) { run = false; break; } - if(opcode === 1) { + if (opcode === 1) { const length = buffer.get('BYTE', 'UNSIGNED'); npcConfig.model.models = new Array(length); - for(let idx = 0; idx < length; ++idx) { - npcConfig.model.models[idx] = buffer.get('SHORT', 'UNSIGNED'); + for (let idx = 0; idx < length; ++idx) { + npcConfig.model.models[idx] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); } - } else if(opcode === 2) { + } else if (opcode === 2) { npcConfig.name = buffer.getString(); - } else if(opcode === 12) { + } else if (opcode === 12) { npcConfig.rendering.boundary = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode === 13) { + } else if (opcode === 13) { npcConfig.animations.stand = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 14) { + } else if (opcode === 14) { npcConfig.animations.walk = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 15) { + } else if (opcode === 15) { buffer.get('SHORT', 'UNSIGNED'); // junk - } else if(opcode === 16) { + } else if (opcode === 16) { buffer.get('SHORT', 'UNSIGNED'); // junk - } else if(opcode === 17) { + } else if (opcode === 17) { npcConfig.animations.walk = buffer.get('SHORT', 'UNSIGNED'); - npcConfig.animations.turnAround = buffer.get('SHORT', 'UNSIGNED'); - npcConfig.animations.turnRight = buffer.get('SHORT', 'UNSIGNED'); + npcConfig.animations.turnAround = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + npcConfig.animations.turnRight = buffer.get( + 'SHORT', + 'UNSIGNED', + ); npcConfig.animations.turnLeft = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode >= 30 && opcode < 35) { - if(!npcConfig.options) { + } else if (opcode >= 30 && opcode < 35) { + if (!npcConfig.options) { npcConfig.options = new Array(5).fill(null); } const option = buffer.getString(); - npcConfig.options[opcode - 30] = option.toLowerCase() === 'hidden' ? null : option; - } else if(opcode === 40) { + npcConfig.options[opcode - 30] = + option.toLowerCase() === 'hidden' ? null : option; + } else if (opcode === 40) { // Model color replacement const length = buffer.get('BYTE', 'UNSIGNED'); - for(let i = 0; i < length; i++) { + for (let i = 0; i < length; i++) { buffer.get('SHORT', 'UNSIGNED'); buffer.get('SHORT', 'UNSIGNED'); } - } else if(opcode === 60) { + } else if (opcode === 60) { const length = buffer.get('BYTE', 'UNSIGNED'); npcConfig.model.headModels = new Array(length); - for(let i = 0; length > i; i++) { - npcConfig.model.headModels[i] = buffer.get('SHORT', 'UNSIGNED'); + for (let i = 0; length > i; i++) { + npcConfig.model.headModels[i] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); } - } else if(opcode === 93) { + } else if (opcode === 93) { npcConfig.minimapVisible = false; - } else if(opcode === 95) { + } else if (opcode === 95) { npcConfig.combatLevel = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 97) { + } else if (opcode === 97) { npcConfig.rendering.sizeX = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 98) { + } else if (opcode === 98) { npcConfig.rendering.sizeY = buffer.get('SHORT', 'UNSIGNED'); - } else if(opcode === 99) { + } else if (opcode === 99) { npcConfig.rendering.renderPriority = true; - } else if(opcode === 100) { + } else if (opcode === 100) { const ambient = buffer.get('BYTE'); - } else if(opcode === 101) { - const contrast = (buffer.get('BYTE')) * 5; - } else if(opcode === 102) { - npcConfig.headIcon = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode === 103) { - npcConfig.turnDegrees = (buffer.get('SHORT', 'UNSIGNED')); - } else if(opcode === 106) { + } else if (opcode === 101) { + const contrast = buffer.get('BYTE') * 5; + } else if (opcode === 102) { + npcConfig.headIcon = buffer.get('SHORT', 'UNSIGNED'); + } else if (opcode === 103) { + npcConfig.turnDegrees = buffer.get('SHORT', 'UNSIGNED'); + } else if (opcode === 106) { npcConfig.varbitId = buffer.get('SHORT', 'UNSIGNED'); npcConfig.settingId = buffer.get('SHORT', 'UNSIGNED'); - if(npcConfig.varbitId === 65535) { + if (npcConfig.varbitId === 65535) { npcConfig.varbitId = -1; } - if(npcConfig.settingId === 65535) { + if (npcConfig.settingId === 65535) { npcConfig.settingId = -1; } npcConfig.childrenIds = []; const childCount = buffer.get('BYTE', 'UNSIGNED'); - for(let i = 0; childCount >= i; i++) { + for (let i = 0; childCount >= i; i++) { npcConfig.childrenIds[i] = buffer.get('SHORT', 'UNSIGNED'); - if(npcConfig.childrenIds[i] === 0xFFFF) { + if (npcConfig.childrenIds[i] === 0xffff) { npcConfig.childrenIds[i] = -1; } } - } else if(opcode === 107) { + } else if (opcode === 107) { npcConfig.clickable = false; } } @@ -209,7 +218,7 @@ export class NpcStore { * the resulting NpcConfig array. */ public decodeNpcStore(): NpcConfig[] { - if(!this.npcArchive) { + if (!this.npcArchive) { logger.error('Npc archive not found.'); return null; } @@ -217,27 +226,30 @@ export class NpcStore { const npcCount = this.npcArchive.files.size; const npcList: NpcConfig[] = new Array(npcCount); - for(let npcId = 0; npcId < npcCount; npcId++) { + for (let npcId = 0; npcId < npcCount; npcId++) { const npcFile = this.npcArchive.getFile(npcId) || null; - if(!npcFile) { + if (!npcFile) { logger.error('Npc file not found.'); return null; } npcList[npcId] = this.decodeNpcFile(npcFile); - if(npcList[npcId].childrenIds) { - this.children.set(npcList[npcId].gameId, npcList[npcId].childrenIds); + if (npcList[npcId].childrenIds) { + this.children.set( + npcList[npcId].gameId, + npcList[npcId].childrenIds, + ); } } - for(const childrenEntry of this.children.entries()) { + for (const childrenEntry of this.children.entries()) { const parentId = childrenEntry[0]; const childrenIds = childrenEntry[1]; - for(const childId of childrenIds) { - if(npcList[childId]) { + for (const childId of childrenIds) { + if (npcList[childId]) { npcList[childId].parentId = parentId; } } @@ -245,5 +257,4 @@ export class NpcStore { return npcList; } - } diff --git a/src/filestore/stores/configs/object-store.ts b/src/filestore/stores/configs/object-store.ts index 3dbc495..f706adb 100644 --- a/src/filestore/stores/configs/object-store.ts +++ b/src/filestore/stores/configs/object-store.ts @@ -3,12 +3,10 @@ import type { Archive } from '../../archive'; import type { ConfigStore } from '../config-store'; import type { FileData } from '../../file-data'; - /** * Contains game client need-to-know level information about a single game object. */ export class ObjectConfig { - gameId: number; name: string | null = null; @@ -27,8 +25,7 @@ export class ObjectConfig { */ model: { models?: number[]; - } = { - }; + } = {}; /** * Additional rendering details. @@ -76,19 +73,16 @@ export class ObjectConfig { castsShadow: true, rotated: false, contrast: 0, - ambient: 0 + ambient: 0, }; icon?: number; wall = false; - } - /** * Controls files within the Object Archive of the configuration index. */ export class ObjectStore { - /** * The Object Archive, containing details about every game object. */ @@ -105,14 +99,14 @@ export class ObjectStore { public getObject(objectId: number): ObjectConfig | null { const objectArchive = this.objectArchive; - if(!objectArchive) { + if (!objectArchive) { logger.error('Object archive not found.'); return null; } const objectFile = objectArchive.getFile(objectId) || null; - if(!objectFile) { + if (!objectFile) { logger.error('Object file not found.'); return null; } @@ -132,139 +126,167 @@ export class ObjectStore { let run = true; - while(run) { + while (run) { const opcode = buffer.get('BYTE', 'UNSIGNED'); - if(opcode === 0) { + if (opcode === 0) { run = false; break; } - if(opcode === 1) { + if (opcode === 1) { const length = buffer.get('BYTE', 'UNSIGNED'); - if(length > 0) { - if(objectConfig.rendering.objectModels == null) { + if (length > 0) { + if (objectConfig.rendering.objectModels == null) { objectConfig.rendering.objectModels = []; objectConfig.rendering.objectModelTypes = []; - for(let index = 0; length > index; index++) { - objectConfig.rendering.objectModels[index] = buffer.get('SHORT', 'UNSIGNED'); // model id - objectConfig.rendering.objectModelTypes[index] = buffer.get('BYTE', 'UNSIGNED'); // model type + for (let index = 0; length > index; index++) { + objectConfig.rendering.objectModels[index] = + buffer.get('SHORT', 'UNSIGNED'); // model id + objectConfig.rendering.objectModelTypes[index] = + buffer.get('BYTE', 'UNSIGNED'); // model type } } else { buffer.readerIndex += length * 3; } } - } else if(opcode === 2) { + } else if (opcode === 2) { objectConfig.name = buffer.getString(); - } else if(opcode === 5) { + } else if (opcode === 5) { const length = buffer.get('BYTE', 'UNSIGNED'); - if(length > 0) { - if(objectConfig.rendering.objectModels == null) { + if (length > 0) { + if (objectConfig.rendering.objectModels == null) { objectConfig.rendering.objectModels = []; objectConfig.rendering.objectModelTypes = null; - for(let index = 0; length > index; index++) { - objectConfig.rendering.objectModels[index] = buffer.get('SHORT', 'UNSIGNED'); // model id + for (let index = 0; length > index; index++) { + objectConfig.rendering.objectModels[index] = + buffer.get('SHORT', 'UNSIGNED'); // model id } } else { buffer.readerIndex += length * 2; } } - } else if(opcode === 14) { + } else if (opcode === 14) { objectConfig.rendering.sizeX = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode === 15) { + } else if (opcode === 15) { objectConfig.rendering.sizeY = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode === 17) { + } else if (opcode === 17) { objectConfig.solid = false; - } else if(opcode === 18) { + } else if (opcode === 18) { objectConfig.walkable = false; - } else if(opcode === 19) { + } else if (opcode === 19) { objectConfig.hasOptions = buffer.get('BYTE', 'UNSIGNED') === 1; - } else if(opcode === 21) { + } else if (opcode === 21) { objectConfig.rendering.adjustToTerrain = true; - } else if(opcode === 22) { + } else if (opcode === 22) { objectConfig.rendering.nonFlatShading = true; - } else if(opcode === 23) { + } else if (opcode === 23) { objectConfig.wall = true; - } else if(opcode === 24) { - objectConfig.rendering.animationId = buffer.get('SHORT', 'UNSIGNED'); - if(objectConfig.rendering.animationId === 0xFFFF) { + } else if (opcode === 24) { + objectConfig.rendering.animationId = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + if (objectConfig.rendering.animationId === 0xffff) { objectConfig.rendering.animationId = -1; } - } else if(opcode === 28) { + } else if (opcode === 28) { buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode === 29) { + } else if (opcode === 29) { objectConfig.rendering.ambient = buffer.get('BYTE'); - } else if(opcode === 39) { + } else if (opcode === 39) { objectConfig.rendering.contrast = 5 * buffer.get('BYTE'); - } else if(opcode >= 30 && opcode < 35) { - if(!objectConfig.options) { + } else if (opcode >= 30 && opcode < 35) { + if (!objectConfig.options) { objectConfig.options = new Array(5).fill(null); } const option = buffer.getString(); - objectConfig.options[opcode - 30] = option.toLowerCase() === 'hidden' ? null : option; - } else if(opcode === 40) { + objectConfig.options[opcode - 30] = + option.toLowerCase() === 'hidden' ? null : option; + } else if (opcode === 40) { const length = buffer.get('BYTE', 'UNSIGNED'); objectConfig.rendering.recolorToFind = []; objectConfig.rendering.recolorToReplace = []; - for(let index = 0; index < length; index++) { - objectConfig.rendering.recolorToFind[index] = (buffer.get('SHORT', 'UNSIGNED')); // old color - objectConfig.rendering.recolorToReplace[index] = (buffer.get('SHORT', 'UNSIGNED')); // new color + for (let index = 0; index < length; index++) { + objectConfig.rendering.recolorToFind[index] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); // old color + objectConfig.rendering.recolorToReplace[index] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); // new color } - } else if(opcode === 60) { - objectConfig.icon = (buffer.get('SHORT', 'UNSIGNED')); // ?? - } else if(opcode === 62) { + } else if (opcode === 60) { + objectConfig.icon = buffer.get('SHORT', 'UNSIGNED'); // ?? + } else if (opcode === 62) { objectConfig.rendering.rotated = true; - } else if(opcode === 64) { + } else if (opcode === 64) { objectConfig.rendering.castsShadow = false; - } else if(opcode === 65) { - objectConfig.rendering.modelSizeX = (buffer.get('SHORT', 'UNSIGNED')); // modelSizeX - } else if(opcode === 66) { - objectConfig.rendering.modelSizeHeight = (buffer.get('SHORT', 'UNSIGNED')); // modelSizeHeight - } else if(opcode === 67) { - objectConfig.rendering.modelSizeY = (buffer.get('SHORT', 'UNSIGNED')); // modelSizeY - } else if(opcode === 68) { - objectConfig.rendering.mapSceneID = (buffer.get('SHORT', 'UNSIGNED')); // mapSceneID - } else if(opcode === 69) { + } else if (opcode === 65) { + objectConfig.rendering.modelSizeX = buffer.get( + 'SHORT', + 'UNSIGNED', + ); // modelSizeX + } else if (opcode === 66) { + objectConfig.rendering.modelSizeHeight = buffer.get( + 'SHORT', + 'UNSIGNED', + ); // modelSizeHeight + } else if (opcode === 67) { + objectConfig.rendering.modelSizeY = buffer.get( + 'SHORT', + 'UNSIGNED', + ); // modelSizeY + } else if (opcode === 68) { + objectConfig.rendering.mapSceneID = buffer.get( + 'SHORT', + 'UNSIGNED', + ); // mapSceneID + } else if (opcode === 69) { objectConfig.rendering.face = buffer.get('BYTE', 'UNSIGNED'); - } else if(opcode === 70) { - objectConfig.rendering.translateX = (buffer.get('SHORT')); - } else if(opcode === 71) { - objectConfig.rendering.translateY = (buffer.get('SHORT')); - } else if(opcode === 72) { - objectConfig.rendering.translateLevel = (buffer.get('SHORT')); - } else if(opcode === 73) { + } else if (opcode === 70) { + objectConfig.rendering.translateX = buffer.get('SHORT'); + } else if (opcode === 71) { + objectConfig.rendering.translateY = buffer.get('SHORT'); + } else if (opcode === 72) { + objectConfig.rendering.translateLevel = buffer.get('SHORT'); + } else if (opcode === 73) { objectConfig.rendering.obstructsGround = true; - } else if(opcode === 74) { + } else if (opcode === 74) { objectConfig.rendering.hollow = true; - } else if(opcode === 75) { - objectConfig.supportsItems = buffer.get('BYTE', 'UNSIGNED') === 1; // anInt2533 - } else if(opcode === 77) { + } else if (opcode === 75) { + objectConfig.supportsItems = + buffer.get('BYTE', 'UNSIGNED') === 1; // anInt2533 + } else if (opcode === 77) { objectConfig.varbitId = buffer.get('SHORT', 'UNSIGNED'); // varbit id - if(objectConfig.varbitId === 0xffff) { + if (objectConfig.varbitId === 0xffff) { objectConfig.varbitId = -1; } objectConfig.configId = buffer.get('SHORT', 'UNSIGNED'); // settings id - if(objectConfig.configId === 0xFFFF) { + if (objectConfig.configId === 0xffff) { objectConfig.configId = -1; } const length = buffer.get('BYTE', 'UNSIGNED'); objectConfig.configChangeDest = []; - for(let index = 0; index <= length; ++index) { - objectConfig.configChangeDest[index] = buffer.get('SHORT', 'UNSIGNED'); - if(0xFFFF === objectConfig.configChangeDest[index]) { + for (let index = 0; index <= length; ++index) { + objectConfig.configChangeDest[index] = buffer.get( + 'SHORT', + 'UNSIGNED', + ); + if (0xffff === objectConfig.configChangeDest[index]) { objectConfig.configChangeDest[index] = -1; } - } - } else if(opcode === 78) { + } else if (opcode === 78) { buffer.get('SHORT', 'UNSIGNED'); // anInt2513 buffer.get('BYTE', 'UNSIGNED'); // anInt2502 - } else if(opcode === 79) { + } else if (opcode === 79) { buffer.get('SHORT', 'UNSIGNED'); // anInt2499 buffer.get('SHORT', 'UNSIGNED'); // anInt2542 buffer.get('BYTE', 'UNSIGNED'); // anInt2502 const length = buffer.get('BYTE', 'UNSIGNED'); - for(let index = 0; index < length; ++index) { + for (let index = 0; index < length; ++index) { buffer.get('SHORT', 'UNSIGNED'); // anIntArray2523[index] } } @@ -279,7 +301,7 @@ export class ObjectStore { * the resulting ObjectConfig array. */ public decodeObjectStore(): ObjectConfig[] { - if(!this.objectArchive) { + if (!this.objectArchive) { logger.error('Object archive not found.'); return null; } @@ -287,10 +309,10 @@ export class ObjectStore { const objectCount = this.objectArchive.files.size; const objectList: ObjectConfig[] = new Array(objectCount); - for(let objectId = 0; objectId < objectCount; objectId++) { + for (let objectId = 0; objectId < objectCount; objectId++) { const objectFile = this.objectArchive.getFile(objectId) || null; - if(!objectFile) { + if (!objectFile) { logger.error('Object file not found.'); return null; } @@ -300,5 +322,4 @@ export class ObjectStore { return objectList; } - } diff --git a/src/filestore/stores/configs/varbit-store.ts b/src/filestore/stores/configs/varbit-store.ts index 24f4398..3cda2d1 100644 --- a/src/filestore/stores/configs/varbit-store.ts +++ b/src/filestore/stores/configs/varbit-store.ts @@ -3,7 +3,6 @@ import type { Archive } from '../../archive'; import type { ConfigStore } from '../config-store'; import type { FileData } from '../../file-data'; - /** * Contains game client need-to-know level information about a single varbit. */ @@ -14,12 +13,10 @@ export class VarbitConfig { mostSignificantBit: number; } - /** * Controls files within the Varbit Archive of the configuration index. */ export class VarbitStore { - /** * The Varbit Archive, containing details about every game varbit. */ @@ -36,14 +33,14 @@ export class VarbitStore { public getVarbit(varbitId: number): VarbitConfig | null { const varbitArchive = this.varbitArchive; - if(!varbitArchive) { + if (!varbitArchive) { logger.error('Varbit archive not found.'); return null; } const varbitFile = varbitArchive.getFile(varbitId) || null; - if(!varbitFile) { + if (!varbitFile) { logger.error('Varbit file not found.'); return null; } @@ -63,16 +60,22 @@ export class VarbitStore { let run = true; - while(run) { + while (run) { const opcode = buffer.get('BYTE', 'UNSIGNED'); - if(opcode === 0) { + if (opcode === 0) { run = false; break; } - if(opcode === 1) { + if (opcode === 1) { varbitConfig.index = buffer.get('SHORT', 'UNSIGNED'); - varbitConfig.leastSignificantBit = buffer.get('BYTE', 'UNSIGNED'); - varbitConfig.mostSignificantBit = buffer.get('BYTE', 'UNSIGNED'); + varbitConfig.leastSignificantBit = buffer.get( + 'BYTE', + 'UNSIGNED', + ); + varbitConfig.mostSignificantBit = buffer.get( + 'BYTE', + 'UNSIGNED', + ); } } @@ -85,7 +88,7 @@ export class VarbitStore { * the resulting VarbitConfig array. */ public decodeVarbitStore(): VarbitConfig[] { - if(!this.varbitArchive) { + if (!this.varbitArchive) { logger.error('Varbit archive not found.'); return null; } @@ -93,10 +96,10 @@ export class VarbitStore { const varbitCount = this.varbitArchive.files.size; const varbitList: VarbitConfig[] = new Array(varbitCount); - for(let varbitId = 0; varbitId < varbitCount; varbitId++) { + for (let varbitId = 0; varbitId < varbitCount; varbitId++) { const varbitFile = this.varbitArchive.getFile(varbitId) || null; - if(!varbitFile) { + if (!varbitFile) { logger.error('Varbit file not found.'); return null; } @@ -106,5 +109,4 @@ export class VarbitStore { return varbitList; } - } diff --git a/src/filestore/stores/font-store.ts b/src/filestore/stores/font-store.ts index 0d62be3..1ba6493 100644 --- a/src/filestore/stores/font-store.ts +++ b/src/filestore/stores/font-store.ts @@ -2,8 +2,12 @@ import { logger } from '@runejs/common'; import { createCanvas, createImageData } from 'canvas'; import type { Filestore } from '../filestore'; -import { type SpritePack, type SpriteStore, type Sprite, toRgb } from './sprite-store'; - +import { + type SpritePack, + type SpriteStore, + type Sprite, + toRgb, +} from './sprite-store'; /** * A list of game font file names. @@ -25,19 +29,19 @@ export const fontNames: FontName[] = [ FontName.b12_full, FontName.q8_full, FontName.lunar_alphabet, - FontName.lunar_alphabet_lrg + FontName.lunar_alphabet_lrg, ]; - export class Font { - /** * The `SpritePack` containing this `Font`'s various character glypth. */ public readonly spritePack: SpritePack; - public constructor(public readonly name: string, - private readonly spriteStore: SpriteStore) { + public constructor( + public readonly name: string, + private readonly spriteStore: SpriteStore, + ) { this.spritePack = this.spriteStore.getSpritePack(this.name); this.spritePack?.decode(); } @@ -62,7 +66,11 @@ export class Font { const charWidth = this.getCharWidth(char); const charHeight = this.getCharHeight(char); const charSprite = this.getSprite(char); - const imageData = createImageData(charPixels, charWidth, charHeight); + const imageData = createImageData( + charPixels, + charWidth, + charHeight, + ); const y = charSprite.offsetY; context.putImageData(imageData, x, y); @@ -77,20 +85,23 @@ export class Font { * @param char The character or character code to get the pixels of. * @param color The color to set the character's pixels to. Defaults to white. */ - public getCharPixels(char: string | number, color = 0xffffff): Uint8ClampedArray | null { + public getCharPixels( + char: string | number, + color = 0xffffff, + ): Uint8ClampedArray | null { const sprite = this.getSprite(char); - if(!sprite) { + if (!sprite) { return null; } const pixels = sprite.getPixels(); - for(let x = 0; x < sprite.width; x++) { - for(let y = 0; y < sprite.height; y++) { + for (let x = 0; x < sprite.width; x++) { + for (let y = 0; y < sprite.height; y++) { const i = (sprite.width * y + x) << 2; - if(pixels[i] !== 0) { - const [ r, g, b ] = toRgb(color); + if (pixels[i] !== 0) { + const [r, g, b] = toRgb(color); pixels[i] = r; pixels[i + 1] = g; @@ -117,7 +128,7 @@ export class Font { let height = this.getCharHeight('A'); if (height === 0) { - throw new Error('Default height couldn\'t be defined!'); + throw new Error("Default height couldn't be defined!"); } for (const char of string.split('')) { @@ -145,7 +156,9 @@ export class Font { * @param string The string to find the width of. */ public getStringWidth(string: string): number { - const widths = string.split('').map(stringChar => this.getCharWidth(stringChar)); + const widths = string + .split('') + .map((stringChar) => this.getCharWidth(stringChar)); return widths.reduce((a, b) => a + b, 0); } @@ -171,26 +184,23 @@ export class Font { */ public getSprite(inputChar: string | number): Sprite | null { let char = inputChar; - if(typeof char === 'string') { + if (typeof char === 'string') { char = char.charCodeAt(0); } try { return this.spritePack.sprites[char] || null; - } catch(error) { + } catch (error) { logger.error(`Error loading glyph ${char}`, error); return null; } } - } - /** * Contains information and tools for the game's fonts. */ export class FontStore { - /** * A map of loaded game fonts by name. */ @@ -204,8 +214,11 @@ export class FontStore { * Load the list of registered game fonts and their associated Sprite Packs. */ public loadFonts(): FontStore { - for(const fontName of fontNames) { - this.fonts.set(fontName, new Font(fontName, this.filestore.spriteStore)); + for (const fontName of fontNames) { + this.fonts.set( + fontName, + new Font(fontName, this.filestore.spriteStore), + ); } return this; @@ -222,6 +235,8 @@ export class FontStore { * Fetches a font by its ID */ public getFontById(spriteId: number): Font { - return Array.from(this.fonts.values()).find(e => e.spritePack.packId === spriteId); + return Array.from(this.fonts.values()).find( + (e) => e.spritePack.packId === spriteId, + ); } } diff --git a/src/filestore/stores/jingle-store.ts b/src/filestore/stores/jingle-store.ts index 9c5bbbf..548ac8e 100644 --- a/src/filestore/stores/jingle-store.ts +++ b/src/filestore/stores/jingle-store.ts @@ -4,14 +4,11 @@ import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; import type { Filestore } from '../filestore'; import type { FileData } from '../file-data'; - /** * A single OGG file object. */ export class OggFile { - - public constructor(public readonly fileData: FileData) { - } + public constructor(public readonly fileData: FileData) {} /** * Writes this unpacked OGG file to the disk under `./unpacked/ogg/{oggId}.ogg` @@ -19,13 +16,16 @@ export class OggFile { public async writeToDisk(): Promise { return new Promise((resolve, reject) => { try { - if(!existsSync('./unpacked/ogg')) { + if (!existsSync('./unpacked/ogg')) { mkdirSync('./unpacked/ogg'); } const data = this.fileData.decompress(); - writeFileSync(`./unpacked/ogg/${this.fileId}.ogg`, Buffer.from(data)); + writeFileSync( + `./unpacked/ogg/${this.fileId}.ogg`, + Buffer.from(data), + ); resolve(); - } catch(error) { + } catch (error) { reject(error); } }); @@ -34,27 +34,23 @@ export class OggFile { public get fileId(): number { return this.fileData?.fileId || -1; } - } - /** * Controls short jingle (.ogg) file storage. */ export class JingleStore { - - public constructor(private fileStore: Filestore) { - } + public constructor(private fileStore: Filestore) {} /** * Writes all unpacked OGG files to the disk under `./unpacked/ogg/` */ public async writeToDisk(): Promise { const files = this.decodeJingleStore(); - for(const ogg of files) { + for (const ogg of files) { try { await ogg.writeToDisk(); - } catch(e) { + } catch (e) { logger.error(e); } } @@ -66,7 +62,7 @@ export class JingleStore { * @returns The decoded OggFile object, or null if the file is not found. */ public getOgg(id: number): OggFile | null { - if(id === undefined || id === null) { + if (id === undefined || id === null) { return null; } @@ -84,17 +80,17 @@ export class JingleStore { const fileCount = oggArchiveIndex.files.size; const oggFiles: OggFile[] = new Array(fileCount); - for(let oggId = 0; oggId < fileCount; oggId++) { + for (let oggId = 0; oggId < fileCount; oggId++) { try { const fileData = oggArchiveIndex.getFile(oggId); - if(!fileData) { + if (!fileData) { oggFiles[oggId] = null; logger.warn(`No file found for OGG ID ${oggId}.`); continue; } oggFiles[oggId] = new OggFile(fileData); - } catch(e) { + } catch (e) { oggFiles[oggId] = null; logger.error(`Error parsing OGG ID ${oggId}.`); logger.error(e); @@ -103,5 +99,4 @@ export class JingleStore { return oggFiles; } - } diff --git a/src/filestore/stores/model-store.ts b/src/filestore/stores/model-store.ts index b69abb1..1769b85 100644 --- a/src/filestore/stores/model-store.ts +++ b/src/filestore/stores/model-store.ts @@ -4,9 +4,7 @@ import { ByteBuffer } from '@runejs/common'; import type { Filestore } from '../filestore'; import type { FileIndex } from '../file-index'; - export class RsModel { - id: number; vertexCount: number; @@ -51,32 +49,32 @@ export class RsModel { } public computeTextureUVs() { - if(this.faceTextureU) { + if (this.faceTextureU) { return; } this.faceTextureU = new Array>(this.faceCount); this.faceTextureV = new Array>(this.faceCount); - for(let i = 0; i < this.faceCount; i++) { + for (let i = 0; i < this.faceCount; i++) { let texturedFaceTypeIndex: number; - if(this.texturedFaceTypeIndices == null) { + if (this.texturedFaceTypeIndices == null) { texturedFaceTypeIndex = -1; } else { texturedFaceTypeIndex = this.texturedFaceTypeIndices[i]; } let textureId: number; - if(this.faceTextures == null) { + if (this.faceTextures == null) { textureId = -1; } else { - textureId = this.faceTextures[i] & 0xFFFF; + textureId = this.faceTextures[i] & 0xffff; } - if(textureId !== -1) { + if (textureId !== -1) { const u = new Array(3); const v = new Array(3); - if(texturedFaceTypeIndex === -1) { + if (texturedFaceTypeIndex === -1) { u[0] = 0.0; v[0] = 1.0; @@ -86,32 +84,42 @@ export class RsModel { u[2] = 0.0; v[2] = 0.0; } else { - texturedFaceTypeIndex &= 0xFF; + texturedFaceTypeIndex &= 0xff; let texturedFaceType = 0; - if(this.texturedFaceTypes != null) { - texturedFaceType = this.texturedFaceTypes[texturedFaceTypeIndex]; + if (this.texturedFaceTypes != null) { + texturedFaceType = + this.texturedFaceTypes[texturedFaceTypeIndex]; } - if(texturedFaceType === 0) { + if (texturedFaceType === 0) { const faceIndexA = this.faceIndicesA[i]; const faceIndexB = this.faceIndicesB[i]; const faceIndexC = this.faceIndicesC[i]; - const texturedFaceIndexA = this.texturedFaceIndicesA[texturedFaceTypeIndex]; - const texturedFaceIndexB = this.texturedFaceIndicesB[texturedFaceTypeIndex]; - const texturedFaceIndexC = this.texturedFaceIndicesC[texturedFaceTypeIndex]; + const texturedFaceIndexA = + this.texturedFaceIndicesA[texturedFaceTypeIndex]; + const texturedFaceIndexB = + this.texturedFaceIndicesB[texturedFaceTypeIndex]; + const texturedFaceIndexC = + this.texturedFaceIndicesC[texturedFaceTypeIndex]; const vertexX = this.verticesX[texturedFaceIndexA]; const vertexY = this.verticesY[texturedFaceIndexA]; const vertexZ = this.verticesZ[texturedFaceIndexA]; - const f_882_ = this.verticesX[texturedFaceIndexB] - vertexX; - const f_883_ = this.verticesY[texturedFaceIndexB] - vertexY; - const f_884_ = this.verticesZ[texturedFaceIndexB] - vertexZ; - const f_885_ = this.verticesX[texturedFaceIndexC] - vertexX; - const f_886_ = this.verticesY[texturedFaceIndexC] - vertexY; - const f_887_ = this.verticesZ[texturedFaceIndexC] - vertexZ; + const f_882_ = + this.verticesX[texturedFaceIndexB] - vertexX; + const f_883_ = + this.verticesY[texturedFaceIndexB] - vertexY; + const f_884_ = + this.verticesZ[texturedFaceIndexB] - vertexZ; + const f_885_ = + this.verticesX[texturedFaceIndexC] - vertexX; + const f_886_ = + this.verticesY[texturedFaceIndexC] - vertexY; + const f_887_ = + this.verticesZ[texturedFaceIndexC] - vertexZ; const f_888_ = this.verticesX[faceIndexA] - vertexX; const f_889_ = this.verticesY[faceIndexA] - vertexY; const f_890_ = this.verticesZ[faceIndexA] - vertexZ; @@ -128,20 +136,52 @@ export class RsModel { let f_900_ = f_886_ * f_899_ - f_887_ * f_898_; let f_901_ = f_887_ * f_897_ - f_885_ * f_899_; let f_902_ = f_885_ * f_898_ - f_886_ * f_897_; - let f_903_ = 1.0 / (f_900_ * f_882_ + f_901_ * f_883_ + f_902_ * f_884_); - - u[0] = (f_900_ * f_888_ + f_901_ * f_889_ + f_902_ * f_890_) * f_903_; - u[1] = (f_900_ * f_891_ + f_901_ * f_892_ + f_902_ * f_893_) * f_903_; - u[2] = (f_900_ * f_894_ + f_901_ * f_895_ + f_902_ * f_896_) * f_903_; + let f_903_ = + 1.0 / + (f_900_ * f_882_ + + f_901_ * f_883_ + + f_902_ * f_884_); + + u[0] = + (f_900_ * f_888_ + + f_901_ * f_889_ + + f_902_ * f_890_) * + f_903_; + u[1] = + (f_900_ * f_891_ + + f_901_ * f_892_ + + f_902_ * f_893_) * + f_903_; + u[2] = + (f_900_ * f_894_ + + f_901_ * f_895_ + + f_902_ * f_896_) * + f_903_; f_900_ = f_883_ * f_899_ - f_884_ * f_898_; f_901_ = f_884_ * f_897_ - f_882_ * f_899_; f_902_ = f_882_ * f_898_ - f_883_ * f_897_; - f_903_ = 1.0 / (f_900_ * f_885_ + f_901_ * f_886_ + f_902_ * f_887_); - - v[0] = (f_900_ * f_888_ + f_901_ * f_889_ + f_902_ * f_890_) * f_903_; - v[1] = (f_900_ * f_891_ + f_901_ * f_892_ + f_902_ * f_893_) * f_903_; - v[2] = (f_900_ * f_894_ + f_901_ * f_895_ + f_902_ * f_896_) * f_903_; + f_903_ = + 1.0 / + (f_900_ * f_885_ + + f_901_ * f_886_ + + f_902_ * f_887_); + + v[0] = + (f_900_ * f_888_ + + f_901_ * f_889_ + + f_902_ * f_890_) * + f_903_; + v[1] = + (f_900_ * f_891_ + + f_901_ * f_892_ + + f_902_ * f_893_) * + f_903_; + v[2] = + (f_900_ * f_894_ + + f_901_ * f_895_ + + f_902_ * f_896_) * + f_903_; } } @@ -151,19 +191,28 @@ export class RsModel { } } - public applyLighting(ambient: number, contrast: number, arg2: number, arg3: number, arg4: number, applyShading: boolean) { + public applyLighting( + ambient: number, + contrast: number, + arg2: number, + arg3: number, + arg4: number, + applyShading: boolean, + ) { const i = ~~Math.sqrt(arg2 * arg2 + arg3 * arg3 + arg4 * arg4); - const i_50_ = contrast * i >> 8; - if(this.faceColorsX === null) { + const i_50_ = (contrast * i) >> 8; + if (this.faceColorsX === null) { this.faceColorsX = new Uint32Array(this.faceCount); this.faceColorsY = new Uint32Array(this.faceCount); this.faceColorsZ = new Uint32Array(this.faceCount); } - if(this.vertexNormals === null) { - const initializeVertexNormals = [ ...Array(this.vertexCount) ]; - this.vertexNormals = initializeVertexNormals.map(() => new VertexNormal()); + if (this.vertexNormals === null) { + const initializeVertexNormals = [...Array(this.vertexCount)]; + this.vertexNormals = initializeVertexNormals.map( + () => new VertexNormal(), + ); } - for(let i_52_ = 0; i_52_ < this.faceCount; i_52_++) { + for (let i_52_ = 0; i_52_ < this.faceCount; i_52_++) { const faceA = this.faceIndicesA[i_52_]; const faceB = this.faceIndicesB[i_52_]; const faceC = this.faceIndicesC[i_52_]; @@ -176,20 +225,29 @@ export class RsModel { let i_62_ = i_57_ * i_61_ - i_60_ * i_58_; let i_63_ = i_58_ * i_59_ - i_61_ * i_56_; let i_64_: number; - for(i_64_ = i_56_ * i_60_ - i_59_ * i_57_; - i_62_ > 8192 || i_63_ > 8192 || i_64_ > 8192 || i_62_ < -8192 || i_63_ < -8192 || i_64_ < -8192; - i_64_ >>= 1) { + for ( + i_64_ = i_56_ * i_60_ - i_59_ * i_57_; + i_62_ > 8192 || + i_63_ > 8192 || + i_64_ > 8192 || + i_62_ < -8192 || + i_63_ < -8192 || + i_64_ < -8192; + i_64_ >>= 1 + ) { i_62_ >>= 1; i_63_ >>= 1; } - let i_65_ = ~~Math.sqrt(i_62_ * i_62_ + i_63_ * i_63_ + i_64_ * i_64_); - if(i_65_ <= 0) { + let i_65_ = ~~Math.sqrt( + i_62_ * i_62_ + i_63_ * i_63_ + i_64_ * i_64_, + ); + if (i_65_ <= 0) { i_65_ = 1; } - i_62_ = ~~(i_62_ * 256 / i_65_); - i_63_ = ~~(i_63_ * 256 / i_65_); - i_64_ = ~~(i_64_ * 256 / i_65_); - if(this.faceTypes == null || (this.faceTypes[i_52_] & 0x1) === 0) { + i_62_ = ~~((i_62_ * 256) / i_65_); + i_63_ = ~~((i_63_ * 256) / i_65_); + i_64_ = ~~((i_64_ * 256) / i_65_); + if (this.faceTypes == null || (this.faceTypes[i_52_] & 0x1) === 0) { let class46 = this.vertexNormals[faceA]; class46.x += i_62_; class46.y += i_63_; @@ -206,18 +264,28 @@ export class RsModel { class46.z += i_64_; class46.magnitude++; } else { - const i_66_ = ambient + (arg2 * i_62_ + arg3 * i_63_ + arg4 * i_64_) / (i_50_ + i_50_ / 2); - this.faceColorsX[i_52_] = ColorUtils.method816(this.faceColors[i_52_], i_66_, this.faceTypes[i_52_]); + const i_66_ = + ambient + + (arg2 * i_62_ + arg3 * i_63_ + arg4 * i_64_) / + (i_50_ + i_50_ / 2); + this.faceColorsX[i_52_] = ColorUtils.method816( + this.faceColors[i_52_], + i_66_, + this.faceTypes[i_52_], + ); } } - if(applyShading) { + if (applyShading) { this.applyShading(ambient, i_50_, arg2, arg3, arg4); } else { - this.vertexNormalOffsets = new Array(this.vertexCount); - for(let i_67_ = 0; i_67_ < this.vertexCount; i_67_++) { + this.vertexNormalOffsets = new Array( + this.vertexCount, + ); + for (let i_67_ = 0; i_67_ < this.vertexCount; i_67_++) { const normal = this.vertexNormals[i_67_]; // biome-ignore lint/suspicious/noAssignInExpressions: Legacy - const normalOffset = this.vertexNormalOffsets[i_67_] = new VertexNormal(); + const normalOffset = (this.vertexNormalOffsets[i_67_] = + new VertexNormal()); normalOffset.x = normal.x; normalOffset.y = normal.y; normalOffset.z = normal.z; @@ -227,38 +295,79 @@ export class RsModel { } } - public applyShading(arg0: number, arg1: number, arg2: number, arg3: number, arg4: number) { - for(let i = 0; i < this.faceCount; i++) { + public applyShading( + arg0: number, + arg1: number, + arg2: number, + arg3: number, + arg4: number, + ) { + for (let i = 0; i < this.faceCount; i++) { const faceA = this.faceIndicesA[i]; const faceB = this.faceIndicesB[i]; const faceC = this.faceIndicesC[i]; - if(this.faceTypes == null) { + if (this.faceTypes == null) { const faceColor = this.faceColors[i]; let normal = this.vertexNormals[faceA]; - let i_76_ = ~~(arg0 + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / (arg1 * normal.magnitude)); + let i_76_ = ~~( + arg0 + + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / + (arg1 * normal.magnitude) + ); this.faceColorsX[i] = ColorUtils.method816(faceColor, i_76_, 0); normal = this.vertexNormals[faceB]; - i_76_ = ~~(arg0 + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / (arg1 * normal.magnitude)); + i_76_ = ~~( + arg0 + + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / + (arg1 * normal.magnitude) + ); this.faceColorsY[i] = ColorUtils.method816(faceColor, i_76_, 0); normal = this.vertexNormals[faceC]; - i_76_ = ~~(arg0 + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / (arg1 * normal.magnitude)); + i_76_ = ~~( + arg0 + + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / + (arg1 * normal.magnitude) + ); this.faceColorsZ[i] = ColorUtils.method816(faceColor, i_76_, 0); - } else if((this.faceTypes[i] & 0x1) === 0) { + } else if ((this.faceTypes[i] & 0x1) === 0) { const faceColor = this.faceColors[i]; const faceType = this.faceTypes[i]; let normal = this.vertexNormals[faceA]; - let i_79_ = ~~(arg0 + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / (arg1 * normal.magnitude)); - this.faceColorsX[i] = ColorUtils.method816(faceColor, i_79_, faceType); + let i_79_ = ~~( + arg0 + + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / + (arg1 * normal.magnitude) + ); + this.faceColorsX[i] = ColorUtils.method816( + faceColor, + i_79_, + faceType, + ); normal = this.vertexNormals[faceB]; - i_79_ = ~~(arg0 + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / (arg1 * normal.magnitude)); - this.faceColorsY[i] = ColorUtils.method816(faceColor, i_79_, faceType); + i_79_ = ~~( + arg0 + + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / + (arg1 * normal.magnitude) + ); + this.faceColorsY[i] = ColorUtils.method816( + faceColor, + i_79_, + faceType, + ); normal = this.vertexNormals[faceC]; - i_79_ = ~~(arg0 + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / (arg1 * normal.magnitude)); - this.faceColorsZ[i] = ColorUtils.method816(faceColor, i_79_, faceType); + i_79_ = ~~( + arg0 + + (arg2 * normal.x + arg3 * normal.y + arg4 * normal.z) / + (arg1 * normal.magnitude) + ); + this.faceColorsZ[i] = ColorUtils.method816( + faceColor, + i_79_, + faceType, + ); } } } - } export class VertexNormal { @@ -277,91 +386,107 @@ export class VertexNormal { // biome-ignore lint/complexity/noStaticOnlyClass: Legacy export class ColorUtils { - - private static readonly UNKNOWN_COLOR_TABLE = ColorUtils.initUnknownColorTable(); + private static readonly UNKNOWN_COLOR_TABLE = + ColorUtils.initUnknownColorTable(); private static readonly HSB_TO_RGB = ColorUtils.initHsbToRgb(0.7, 0, 512); public static initUnknownColorTable(): Uint32Array { const table = new Uint32Array(128); let i = 0; let i_322_ = 248; - while(i < 9) { + while (i < 9) { table[i++] = 255; } - while(i < 16) { + while (i < 16) { table[i++] = i_322_; i_322_ -= 8; } - while(i < 32) { + while (i < 32) { table[i++] = i_322_; i_322_ -= 4; } - while(i < 64) { + while (i < 64) { table[i++] = i_322_; i_322_ -= 2; } - while(i < 128) { + while (i < 128) { table[i++] = i_322_--; } return table; } // @TODO use @runejs/color when published - public static initHsbToRgb(inputArg0: number, arg1: number, arg2: number): Uint32Array { + public static initHsbToRgb( + inputArg0: number, + arg1: number, + arg2: number, + ): Uint32Array { let arg0 = inputArg0; const table = new Uint32Array(65536); arg0 += Math.random() * 0.03 - 0.015; let i = arg1 * 128; - for(let i_58_ = arg1; i_58_ < arg2; i_58_++) { + for (let i_58_ = arg1; i_58_ < arg2; i_58_++) { const d = (i_58_ >> 3) / 64.0 + 0.0078125; const d_59_ = (i_58_ & 0x7) / 8.0 + 0.0625; - for(let i_60_ = 0; i_60_ < 128; i_60_++) { + for (let i_60_ = 0; i_60_ < 128; i_60_++) { const d_61_ = i_60_ / 128.0; let red = d_61_; let green = d_61_; let blue = d_61_; - if(d_59_ !== 0.0) { + if (d_59_ !== 0.0) { let d_65_: number; - if(d_61_ < 0.5) { + if (d_61_ < 0.5) { d_65_ = d_61_ * (1.0 + d_59_); } else { d_65_ = d_61_ + d_59_ - d_61_ * d_59_; } const d_66_ = 2.0 * d_61_ - d_65_; let d_67_ = d + 0.3333333333333333; - if(d_67_ > 1.0) { + if (d_67_ > 1.0) { d_67_--; } const d_68_ = d; let d_69_ = d - 0.3333333333333333; - if(d_69_ < 0.0) { + if (d_69_ < 0.0) { d_69_++; } - if(6.0 * d_67_ < 1.0) { + if (6.0 * d_67_ < 1.0) { red = d_66_ + (d_65_ - d_66_) * 6.0 * d_67_; - } else if(2.0 * d_67_ < 1.0) { + } else if (2.0 * d_67_ < 1.0) { red = d_65_; - } else if(3.0 * d_67_ < 2.0) { - red = d_66_ + (d_65_ - d_66_) * (0.6666666666666666 - d_67_) * 6.0; + } else if (3.0 * d_67_ < 2.0) { + red = + d_66_ + + (d_65_ - d_66_) * + (0.6666666666666666 - d_67_) * + 6.0; } else { red = d_66_; } - if(6.0 * d_68_ < 1.0) { + if (6.0 * d_68_ < 1.0) { green = d_66_ + (d_65_ - d_66_) * 6.0 * d_68_; - } else if(2.0 * d_68_ < 1.0) { + } else if (2.0 * d_68_ < 1.0) { green = d_65_; - } else if(3.0 * d_68_ < 2.0) { - green = d_66_ + (d_65_ - d_66_) * (0.6666666666666666 - d_68_) * 6.0; + } else if (3.0 * d_68_ < 2.0) { + green = + d_66_ + + (d_65_ - d_66_) * + (0.6666666666666666 - d_68_) * + 6.0; } else { green = d_66_; } - if(6.0 * d_69_ < 1.0) { + if (6.0 * d_69_ < 1.0) { blue = d_66_ + (d_65_ - d_66_) * 6.0 * d_69_; - } else if(2.0 * d_69_ < 1.0) { + } else if (2.0 * d_69_ < 1.0) { blue = d_65_; - } else if(3.0 * d_69_ < 2.0) { - blue = d_66_ + (d_65_ - d_66_) * (0.6666666666666666 - d_69_) * 6.0; + } else if (3.0 * d_69_ < 2.0) { + blue = + d_66_ + + (d_65_ - d_66_) * + (0.6666666666666666 - d_69_) * + 6.0; } else { blue = d_66_; } @@ -371,7 +496,7 @@ export class ColorUtils { const blueUByte = blue * 256.0; let rgb = (redUByte << 16) + (greenUByte << 8) + blueUByte; rgb = ColorUtils.method707(rgb, arg0); - if(rgb === 0) { + if (rgb === 0) { rgb = 1; } table[i++] = rgb; @@ -386,7 +511,7 @@ export class ColorUtils { public static method707(rgb: number, arg1: number) { let red = (rgb >> 16) / 256.0; - let green = (rgb >> 8 & 0xff) / 256.0; + let green = ((rgb >> 8) & 0xff) / 256.0; let blue = (rgb & 0xff) / 256.0; red = red ** arg1; green = green ** arg1; @@ -397,21 +522,25 @@ export class ColorUtils { return (newRed << 16) + (newGreen << 8) + newBlue; } - public static method816(faceColor: number, inputArg1: number, faceType: number): number { + public static method816( + faceColor: number, + inputArg1: number, + faceType: number, + ): number { let arg1 = inputArg1; - if((faceType & 0x2) === 2) { - if(arg1 < 0) { + if ((faceType & 0x2) === 2) { + if (arg1 < 0) { arg1 = 0; - } else if(arg1 > 127) { + } else if (arg1 > 127) { arg1 = 127; } arg1 = ColorUtils.UNKNOWN_COLOR_TABLE[arg1]; return arg1; } - arg1 = arg1 * (faceColor & 0x7f) >> 7; - if(arg1 < 2) { + arg1 = (arg1 * (faceColor & 0x7f)) >> 7; + if (arg1 < 2) { arg1 = 2; - } else if(arg1 > 126) { + } else if (arg1 > 126) { arg1 = 126; } return (faceColor & 0xff80) + arg1; @@ -419,10 +548,10 @@ export class ColorUtils { public static method709(arg0: number, inputArg1: number): number { let arg1 = inputArg1; - arg1 = (127 - arg1) * (arg0 & 0x7f) >> 7; - if(arg1 < 2) { + arg1 = ((127 - arg1) * (arg0 & 0x7f)) >> 7; + if (arg1 < 2) { arg1 = 2; - } else if(arg1 > 126) { + } else if (arg1 > 126) { arg1 = 126; } return (arg0 & 0xff80) + arg1; @@ -431,10 +560,10 @@ export class ColorUtils { // custom shade function (i.e not from the client) public static shade(rgb: number, shadowRgb: number): number { let red = (rgb >> 16) / 256.0; - let green = (rgb >> 8 & 0xff) / 256.0; + let green = ((rgb >> 8) & 0xff) / 256.0; let blue = (rgb & 0xff) / 256.0; - const shadowRed = (shadowRgb >> 16 & 0xff) / 255.0; - const shadowGreen = (shadowRgb >> 8 & 0xff) / 255.0; + const shadowRed = ((shadowRgb >> 16) & 0xff) / 255.0; + const shadowGreen = ((shadowRgb >> 8) & 0xff) / 255.0; const shadowBlue = (shadowRgb & 0xff) / 255.0; red *= 1 - shadowRed; green *= 1 - shadowGreen; @@ -444,15 +573,12 @@ export class ColorUtils { const newBlue = blue * 256.0; return (newRed << 16) + (newGreen << 8) + newBlue; } - } - /** * Controls model file storage. */ export class ModelStore { - private readonly modelFileIndex: FileIndex; public constructor(private fileStore: Filestore) { @@ -461,7 +587,7 @@ export class ModelStore { public getModel(id: number): RsModel | null { const file = this.modelFileIndex.getFile(id) || null; - if(!file) { + if (!file) { logger.warn(`Model file ${id} not found`); return null; } @@ -477,41 +603,77 @@ export class ModelStore { const zDataOffsetBuffer = new ByteBuffer(buffer); const vertexSkinOffsetBuffer = new ByteBuffer(buffer); vertexDirectionOffsetBuffer.readerIndex = buffer.length - 18; - rsModel.vertexCount = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - rsModel.faceCount = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - rsModel.texturedFaceCount = vertexDirectionOffsetBuffer.get('BYTE', 'UNSIGNED'); - const hasFaceTypes = vertexDirectionOffsetBuffer.get('BYTE', 'UNSIGNED'); - const modelPriority = vertexDirectionOffsetBuffer.get('BYTE', 'UNSIGNED'); - const hasFaceAlphas = vertexDirectionOffsetBuffer.get('BYTE', 'UNSIGNED'); - const hasFaceSkins = vertexDirectionOffsetBuffer.get('BYTE', 'UNSIGNED'); - const hasVertexSkins = vertexDirectionOffsetBuffer.get('BYTE', 'UNSIGNED'); - const verticesXSubOffset = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - const verticesYSubOffset = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - const verticesZSubOffset = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - const faceIndicesSubOffset = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); + rsModel.vertexCount = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + rsModel.faceCount = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + rsModel.texturedFaceCount = vertexDirectionOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); + const hasFaceTypes = vertexDirectionOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); + const modelPriority = vertexDirectionOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); + const hasFaceAlphas = vertexDirectionOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); + const hasFaceSkins = vertexDirectionOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); + const hasVertexSkins = vertexDirectionOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); + const verticesXSubOffset = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + const verticesYSubOffset = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + const verticesZSubOffset = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + const faceIndicesSubOffset = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); let offset = 0; const vertexFlagsOffset = offset; offset += rsModel.vertexCount; const facesCompressTypeOffset = offset; offset += rsModel.faceCount; const facePrioritiesOffset = offset; - if(modelPriority === 255) { + if (modelPriority === 255) { offset += rsModel.faceCount; } const faceSkinsOffset = offset; - if(hasFaceSkins === 1) { + if (hasFaceSkins === 1) { offset += rsModel.faceCount; } const faceTypesOffset = offset; - if(hasFaceTypes === 1) { + if (hasFaceTypes === 1) { offset += rsModel.faceCount; } const vertexSkinsOffset = offset; - if(hasVertexSkins === 1) { + if (hasVertexSkins === 1) { offset += rsModel.vertexCount; } const faceAlphasOffset = offset; - if(hasFaceAlphas === 1) { + if (hasFaceAlphas === 1) { offset += rsModel.faceCount; } const faceIndicesOffset = offset; @@ -532,29 +694,37 @@ export class ModelStore { rsModel.faceIndicesA = new Uint16Array(rsModel.faceCount); rsModel.faceIndicesB = new Uint16Array(rsModel.faceCount); rsModel.faceIndicesC = new Uint16Array(rsModel.faceCount); - if(rsModel.texturedFaceCount > 0) { - rsModel.texturedFaceTypes = new Uint8Array(rsModel.texturedFaceCount); - rsModel.texturedFaceIndicesA = new Uint16Array(rsModel.texturedFaceCount); - rsModel.texturedFaceIndicesB = new Uint16Array(rsModel.texturedFaceCount); - rsModel.texturedFaceIndicesC = new Uint16Array(rsModel.texturedFaceCount); - } - if(hasVertexSkins === 1) { + if (rsModel.texturedFaceCount > 0) { + rsModel.texturedFaceTypes = new Uint8Array( + rsModel.texturedFaceCount, + ); + rsModel.texturedFaceIndicesA = new Uint16Array( + rsModel.texturedFaceCount, + ); + rsModel.texturedFaceIndicesB = new Uint16Array( + rsModel.texturedFaceCount, + ); + rsModel.texturedFaceIndicesC = new Uint16Array( + rsModel.texturedFaceCount, + ); + } + if (hasVertexSkins === 1) { rsModel.vertexSkins = new Array(rsModel.texturedFaceCount); } - if(hasFaceTypes === 1) { + if (hasFaceTypes === 1) { rsModel.faceTypes = new Uint32Array(rsModel.faceCount); rsModel.texturedFaceTypeIndices = new Int8Array(rsModel.faceCount); rsModel.faceTextures = new Int8Array(rsModel.faceCount); } - if(modelPriority === 255) { + if (modelPriority === 255) { rsModel.facePriorities = new Uint8Array(rsModel.faceCount); } else { rsModel.facePriority = modelPriority & 128; } - if(hasFaceAlphas === 1) { + if (hasFaceAlphas === 1) { rsModel.faceAlphas = new Uint8Array(rsModel.faceCount); } - if(hasFaceSkins === 1) { + if (hasFaceSkins === 1) { rsModel.faceSkins = new Array(rsModel.faceCount); } rsModel.faceColors = new Uint32Array(rsModel.faceCount); @@ -566,30 +736,39 @@ export class ModelStore { let baseOffsetX = 0; let baseOffsetY = 0; let baseOffsetZ = 0; - for(let i = 0; i < rsModel.vertexCount; i++) { + for (let i = 0; i < rsModel.vertexCount; i++) { const mask = vertexDirectionOffsetBuffer.get('BYTE', 'UNSIGNED'); let xOffset = 0; - if((mask & 0x1) !== 0) { + if ((mask & 0x1) !== 0) { try { xOffset = xDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { - logger.warn('Tried to read out of range xOffset for object', id); + logger.warn( + 'Tried to read out of range xOffset for object', + id, + ); } } let yOffset = 0; - if((mask & 0x2) !== 0) { + if ((mask & 0x2) !== 0) { try { yOffset = yDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { - logger.warn('Tried to read out of range yOffset for object', id); + logger.warn( + 'Tried to read out of range yOffset for object', + id, + ); } } let zOffset = 0; - if((mask & 0x4) !== 0) { + if ((mask & 0x4) !== 0) { try { zOffset = zDataOffsetBuffer.get('SMART_SHORT', 'UNSIGNED'); } catch { - logger.warn('Tried to read out of range zOffset for object', id); + logger.warn( + 'Tried to read out of range zOffset for object', + id, + ); } } rsModel.verticesX[i] = baseOffsetX + xOffset; @@ -598,8 +777,11 @@ export class ModelStore { baseOffsetX = rsModel.verticesX[i]; baseOffsetY = rsModel.verticesY[i]; baseOffsetZ = rsModel.verticesZ[i]; - if(hasVertexSkins === 1) { - rsModel.vertexSkins[i] = vertexSkinOffsetBuffer.get('BYTE', 'UNSIGNED'); + if (hasVertexSkins === 1) { + rsModel.vertexSkins[i] = vertexSkinOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); } } vertexDirectionOffsetBuffer.readerIndex = faceColorsOffset; @@ -607,21 +789,24 @@ export class ModelStore { yDataOffsetBuffer.readerIndex = facePrioritiesOffset; zDataOffsetBuffer.readerIndex = faceAlphasOffset; vertexSkinOffsetBuffer.readerIndex = faceSkinsOffset; - for(let i = 0; i < rsModel.faceCount; i++) { - rsModel.faceColors[i] = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - if(hasFaceTypes === 1) { + for (let i = 0; i < rsModel.faceCount; i++) { + rsModel.faceColors[i] = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + if (hasFaceTypes === 1) { const mask = xDataOffsetBuffer.get('BYTE', 'UNSIGNED'); - if((mask & 0x1) === 1) { + if ((mask & 0x1) === 1) { rsModel.faceTypes[i] = 1; useFaceTypes = true; } else { rsModel.faceTypes[i] = 0; } - if((mask & 0x2) === 2) { + if ((mask & 0x2) === 2) { rsModel.texturedFaceTypeIndices[i] = mask >> 2; rsModel.faceTextures[i] = rsModel.faceColors[i]; rsModel.faceColors[i] = 127; - if(rsModel.faceTextures[i] !== -1) { + if (rsModel.faceTextures[i] !== -1) { useFaceTextures = true; } } else { @@ -629,14 +814,23 @@ export class ModelStore { rsModel.faceTextures[i] = -1; } } - if(modelPriority === 255) { - rsModel.facePriorities[i] = yDataOffsetBuffer.get('BYTE', 'UNSIGNED'); + if (modelPriority === 255) { + rsModel.facePriorities[i] = yDataOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); } - if(hasFaceAlphas === 1) { - rsModel.faceAlphas[i] = zDataOffsetBuffer.get('BYTE', 'UNSIGNED'); + if (hasFaceAlphas === 1) { + rsModel.faceAlphas[i] = zDataOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); } - if(hasFaceSkins === 1) { - rsModel.faceSkins[i] = vertexSkinOffsetBuffer.get('BYTE', 'UNSIGNED'); + if (hasFaceSkins === 1) { + rsModel.faceSkins[i] = vertexSkinOffsetBuffer.get( + 'BYTE', + 'UNSIGNED', + ); } } vertexDirectionOffsetBuffer.readerIndex = faceIndicesOffset; @@ -646,15 +840,27 @@ export class ModelStore { let lastC = 0; let accumulator = 0; let oldTrianglePointOffsetX: number; - for(let i = 0; i < rsModel.faceCount; i++) { + for (let i = 0; i < rsModel.faceCount; i++) { const type = xDataOffsetBuffer.get('BYTE', 'UNSIGNED'); - switch(type) { + switch (type) { case 1: - lastA = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; + lastA = + vertexDirectionOffsetBuffer.get( + 'SMART_SHORT', + 'UNSIGNED', + ) + accumulator; accumulator = lastA; - lastB = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; + lastB = + vertexDirectionOffsetBuffer.get( + 'SMART_SHORT', + 'UNSIGNED', + ) + accumulator; accumulator = lastB; - lastC = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; + lastC = + vertexDirectionOffsetBuffer.get( + 'SMART_SHORT', + 'UNSIGNED', + ) + accumulator; accumulator = lastC; rsModel.faceIndicesA[i] = lastA; rsModel.faceIndicesB[i] = lastB; @@ -662,7 +868,11 @@ export class ModelStore { break; case 2: lastB = lastC; - lastC = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; + lastC = + vertexDirectionOffsetBuffer.get( + 'SMART_SHORT', + 'UNSIGNED', + ) + accumulator; accumulator = lastC; rsModel.faceIndicesA[i] = lastA; rsModel.faceIndicesB[i] = lastB; @@ -670,7 +880,11 @@ export class ModelStore { break; case 3: lastA = lastC; - lastC = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; + lastC = + vertexDirectionOffsetBuffer.get( + 'SMART_SHORT', + 'UNSIGNED', + ) + accumulator; accumulator = lastC; rsModel.faceIndicesA[i] = lastA; rsModel.faceIndicesB[i] = lastB; @@ -680,7 +894,11 @@ export class ModelStore { oldTrianglePointOffsetX = lastA; lastA = lastB; lastB = oldTrianglePointOffsetX; - lastC = vertexDirectionOffsetBuffer.get('SMART_SHORT', 'UNSIGNED') + accumulator; + lastC = + vertexDirectionOffsetBuffer.get( + 'SMART_SHORT', + 'UNSIGNED', + ) + accumulator; accumulator = lastC; rsModel.faceIndicesA[i] = lastA; rsModel.faceIndicesB[i] = lastB; @@ -689,36 +907,53 @@ export class ModelStore { } } vertexDirectionOffsetBuffer.readerIndex = faceMappingsOffset; - for(let i = 0; i < rsModel.texturedFaceCount; i++) { - rsModel.texturedFaceIndicesA[i] = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - rsModel.texturedFaceIndicesB[i] = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - rsModel.texturedFaceIndicesC[i] = vertexDirectionOffsetBuffer.get('SHORT', 'UNSIGNED'); - } - if(rsModel.texturedFaceTypeIndices != null) { + for (let i = 0; i < rsModel.texturedFaceCount; i++) { + rsModel.texturedFaceIndicesA[i] = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + rsModel.texturedFaceIndicesB[i] = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + rsModel.texturedFaceIndicesC[i] = vertexDirectionOffsetBuffer.get( + 'SHORT', + 'UNSIGNED', + ); + } + if (rsModel.texturedFaceTypeIndices != null) { let useTexturedFaceTypeIndices = false; - for(let face = 0; face < rsModel.faceCount; face++) { - const texturedFaceTypeIndex = rsModel.texturedFaceTypeIndices[face] & 0xff; - if(texturedFaceTypeIndex !== 255) { - if((rsModel.texturedFaceIndicesA[texturedFaceTypeIndex] & 0xffff) === rsModel.faceIndicesA[face] && - (rsModel.texturedFaceIndicesB[texturedFaceTypeIndex] & 0xffff) === rsModel.faceIndicesB[face] && - (rsModel.texturedFaceIndicesC[texturedFaceTypeIndex] & 0xffff) === rsModel.faceIndicesC[face]) { + for (let face = 0; face < rsModel.faceCount; face++) { + const texturedFaceTypeIndex = + rsModel.texturedFaceTypeIndices[face] & 0xff; + if (texturedFaceTypeIndex !== 255) { + if ( + (rsModel.texturedFaceIndicesA[texturedFaceTypeIndex] & + 0xffff) === + rsModel.faceIndicesA[face] && + (rsModel.texturedFaceIndicesB[texturedFaceTypeIndex] & + 0xffff) === + rsModel.faceIndicesB[face] && + (rsModel.texturedFaceIndicesC[texturedFaceTypeIndex] & + 0xffff) === + rsModel.faceIndicesC[face] + ) { rsModel.texturedFaceTypeIndices[face] = -1; } else { useTexturedFaceTypeIndices = true; } } } - if(!useTexturedFaceTypeIndices) { + if (!useTexturedFaceTypeIndices) { rsModel.texturedFaceTypeIndices = null; } } - if(!useFaceTextures) { + if (!useFaceTextures) { rsModel.faceTextures = null; } - if(!useFaceTypes) { + if (!useFaceTypes) { rsModel.faceTypes = null; } return rsModel; } - } diff --git a/src/filestore/stores/music-store.ts b/src/filestore/stores/music-store.ts index f81f0f8..bf54e59 100644 --- a/src/filestore/stores/music-store.ts +++ b/src/filestore/stores/music-store.ts @@ -4,14 +4,11 @@ import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; import { type Filestore, getFileName } from '../filestore'; import type { FileData } from '../file-data'; - /** * A single MIDI file object. */ export class MidiFile { - - public constructor(public readonly fileData: FileData) { - } + public constructor(public readonly fileData: FileData) {} /** * Writes this unpacked MIDI file to the disk under `./unpacked/midi/{midiFileName}.mid` @@ -19,14 +16,20 @@ export class MidiFile { public async writeToDisk(): Promise { return new Promise((resolve, reject) => { try { - const fileName = getFileName(this.fileData.nameHash).replace(/ /g, '_'); - if(!existsSync('./unpacked/midi')) { + const fileName = getFileName(this.fileData.nameHash).replace( + / /g, + '_', + ); + if (!existsSync('./unpacked/midi')) { mkdirSync('./unpacked/midi'); } const data = this.fileData.decompress(); - writeFileSync(`./unpacked/midi/${this.fileId}_${fileName}.mid`, Buffer.from(data)); + writeFileSync( + `./unpacked/midi/${this.fileId}_${fileName}.mid`, + Buffer.from(data), + ); resolve(); - } catch(error) { + } catch (error) { reject(error); } }); @@ -35,27 +38,23 @@ export class MidiFile { public get fileId(): number { return this.fileData?.fileId || -1; } - } - /** * Controls MIDI file storage. */ export class MusicStore { - - public constructor(private fileStore: Filestore) { - } + public constructor(private fileStore: Filestore) {} /** * Writes all unpacked MIDI files to the disk under `./unpacked/midi/` */ public async writeToDisk(): Promise { const files = this.decodeMusicStore(); - for(const midi of files) { + for (const midi of files) { try { await midi.writeToDisk(); - } catch(e) { + } catch (e) { logger.error(e); } } @@ -67,7 +66,7 @@ export class MusicStore { * @returns The decoded MidiFile object, or null if the file is not found. */ public getMidi(nameOrId: string | number): MidiFile | null { - if(!nameOrId) { + if (!nameOrId) { return null; } @@ -86,17 +85,17 @@ export class MusicStore { const fileCount = midiArchiveIndex.files.size; const midiFiles: MidiFile[] = new Array(fileCount); - for(let midiId = 0; midiId < fileCount; midiId++) { + for (let midiId = 0; midiId < fileCount; midiId++) { try { const fileData = midiArchiveIndex.getFile(midiId); - if(!fileData) { + if (!fileData) { midiFiles[midiId] = null; logger.warn(`No file found for midi ID ${midiId}.`); continue; } midiFiles[midiId] = new MidiFile(fileData); - } catch(e) { + } catch (e) { midiFiles[midiId] = null; logger.error(`Error parsing midi ID ${midiId}.`); logger.error(e); @@ -105,5 +104,4 @@ export class MusicStore { return midiFiles; } - } diff --git a/src/filestore/stores/region-store.ts b/src/filestore/stores/region-store.ts index 9304620..5cddc51 100644 --- a/src/filestore/stores/region-store.ts +++ b/src/filestore/stores/region-store.ts @@ -5,10 +5,8 @@ import path from 'node:path'; import type { Filestore } from '../filestore'; import type { FileIndex } from '../file-index'; - export const maxRegions = 32768; - export interface MapFile { fileId: number; regionX: number; @@ -50,25 +48,31 @@ export interface XteaDefinition { name_hash: number; name: string; mapsquare: number; - key: [number,number,number,number]; + key: [number, number, number, number]; } - -export type TileArray = (Uint8Array[])[]; +export type TileArray = Uint8Array[][]; export class RegionStore { - public readonly xteas: { [key: number]: XteaDefinition } = {}; private readonly regionIndex: FileIndex; - public constructor(private fileStore: Filestore, xteas?: { [p: number]: XteaDefinition }) { + public constructor( + private fileStore: Filestore, + xteas?: { [p: number]: XteaDefinition }, + ) { this.regionIndex = this.fileStore.getIndex('regions'); - if(xteas) { + if (xteas) { this.xteas = xteas; } else { - const array = JSON.parse(readFileSync(path.join(this.fileStore.configDir, 'map-keys.json'), 'utf8')); - for(let i = 0; i < array.length; i++) { + const array = JSON.parse( + readFileSync( + path.join(this.fileStore.configDir, 'map-keys.json'), + 'utf8', + ), + ); + for (let i = 0; i < array.length; i++) { const object: XteaDefinition = array[i]; this.xteas[object.name] = object; } @@ -81,7 +85,7 @@ export class RegionStore { public getRegion(regionX: number, regionY: number): Region | null { const mapFile = this.getMapFile(regionX, regionY); - if(!mapFile) { + if (!mapFile) { return null; } @@ -90,12 +94,20 @@ export class RegionStore { return { regionX, regionY, mapFile, landscapeFile }; } - public getLandscapeFile(regionX: number, regionY: number): LandscapeFile | null { + public getLandscapeFile( + regionX: number, + regionY: number, + ): LandscapeFile | null { const keys = this.getMapKeys(regionX, regionY); - const landscapeFile = this.regionIndex.getFile(`l${regionX}_${regionY}`, keys); - if(!landscapeFile) { - logger.warn(`Landscape file not found for region ${regionX},${regionY}`); + const landscapeFile = this.regionIndex.getFile( + `l${regionX}_${regionY}`, + keys, + ); + if (!landscapeFile) { + logger.warn( + `Landscape file not found for region ${regionX},${regionY}`, + ); return null; } @@ -106,10 +118,10 @@ export class RegionStore { let objectLoop = true; - while(objectLoop) { + while (objectLoop) { const objectIdOffset = landscapeFile.content.get('SMART_SHORT'); - if(objectIdOffset === 0) { + if (objectIdOffset === 0) { objectLoop = false; break; } @@ -119,10 +131,11 @@ export class RegionStore { let positionLoop = true; - while(positionLoop) { - const objectPositionInfoOffset = landscapeFile.content.get('SMART_SHORT'); + while (positionLoop) { + const objectPositionInfoOffset = + landscapeFile.content.get('SMART_SHORT'); - if(objectPositionInfoOffset === 0) { + if (objectPositionInfoOffset === 0) { positionLoop = false; break; } @@ -131,27 +144,38 @@ export class RegionStore { const worldX = (regionX & 0xff) * 64; const worldY = regionY * 64; - const x = (objectPositionInfo >> 6 & 0x3f) + worldX; + const x = ((objectPositionInfo >> 6) & 0x3f) + worldX; const y = (objectPositionInfo & 0x3f) + worldY; - const level = objectPositionInfo >> 12 & 0x3; - const objectMetadata = landscapeFile.content.get('BYTE', 'UNSIGNED'); + const level = (objectPositionInfo >> 12) & 0x3; + const objectMetadata = landscapeFile.content.get( + 'BYTE', + 'UNSIGNED', + ); const type = objectMetadata >> 2; const orientation = objectMetadata & 0x3; - landscapeObjects.push({ objectId, x, y, level, type, orientation }); + landscapeObjects.push({ + objectId, + x, + y, + level, + type, + orientation, + }); } } return { fileId: landscapeFile.fileId, - regionX, regionY, - landscapeObjects + regionX, + regionY, + landscapeObjects, }; } public getMapFile(regionX: number, regionY: number): MapFile | null { const mapFile = this.regionIndex.getFile(`m${regionX}_${regionY}`); - if(!mapFile) { + if (!mapFile) { logger.warn(`Map file not found for region ${regionX},${regionY}`); return null; } @@ -166,7 +190,7 @@ export class RegionStore { const buffer = mapFile.content; buffer.readerIndex = 0; - for(let level = 0; level < 4; level++) { + for (let level = 0; level < 4; level++) { tileHeights[level] = new Array(64); tileSettings[level] = new Array(64); tileOverlayIds[level] = new Array(64); @@ -174,7 +198,7 @@ export class RegionStore { tileOverlayOrientations[level] = new Array(64); tileUnderlayIds[level] = new Array(64); - for(let x = 0; x < 64; x++) { + for (let x = 0; x < 64; x++) { tileHeights[level][x] = new Array(64); tileSettings[level][x] = new Uint8Array(64); tileOverlayIds[level][x] = new Uint8Array(64); @@ -182,26 +206,32 @@ export class RegionStore { tileOverlayOrientations[level][x] = new Uint8Array(64); tileUnderlayIds[level][x] = new Uint8Array(64); - for(let y = 0; y < 64; y++) { + for (let y = 0; y < 64; y++) { tileSettings[level][x][y] = 0; let run = true; - while(run) { + while (run) { const opcode = buffer.get('BYTE', 'UNSIGNED'); - if(opcode === 0) { + if (opcode === 0) { run = false; break; - }if(opcode === 1) { - tileHeights[level][x][y] = buffer.get('BYTE', 'UNSIGNED'); + } + if (opcode === 1) { + tileHeights[level][x][y] = buffer.get( + 'BYTE', + 'UNSIGNED', + ); run = false; break; - }if(opcode <= 49) { + } + if (opcode <= 49) { tileOverlayIds[level][x][y] = buffer.get('BYTE'); tileOverlayPaths[level][x][y] = (opcode - 2) / 4; - tileOverlayOrientations[level][x][y] = opcode - 2 & 3; - } else if(opcode <= 81) { + tileOverlayOrientations[level][x][y] = + (opcode - 2) & 3; + } else if (opcode <= 81) { tileSettings[level][x][y] = opcode - 49; } else { tileUnderlayIds[level][x][y] = opcode - 81; @@ -213,10 +243,14 @@ export class RegionStore { return { fileId: mapFile.fileId, - regionX, regionY, - tileHeights, tileOverlayIds, tileOverlayOrientations, - tileOverlayPaths, tileSettings, tileUnderlayIds + regionX, + regionY, + tileHeights, + tileOverlayIds, + tileOverlayOrientations, + tileOverlayPaths, + tileSettings, + tileUnderlayIds, }; } - } diff --git a/src/filestore/stores/sound-store.ts b/src/filestore/stores/sound-store.ts index 8812b25..cc42bc0 100644 --- a/src/filestore/stores/sound-store.ts +++ b/src/filestore/stores/sound-store.ts @@ -4,14 +4,11 @@ import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; import type { Filestore } from '../filestore'; import type { FileData } from '../file-data'; - /** * A single sound file object. */ export class SoundFile { - - public constructor(public readonly fileData: FileData) { - } + public constructor(public readonly fileData: FileData) {} /** * Writes this unpacked sound file to the disk under `./unpacked/sounds/{soundId}.wav` @@ -19,13 +16,16 @@ export class SoundFile { public async writeToDisk(): Promise { return new Promise((resolve, reject) => { try { - if(!existsSync('./unpacked/sounds')) { + if (!existsSync('./unpacked/sounds')) { mkdirSync('./unpacked/sounds'); } const data = this.fileData.decompress(); - writeFileSync(`./unpacked/sounds/${this.fileId}.wav`, Buffer.from(data)); + writeFileSync( + `./unpacked/sounds/${this.fileId}.wav`, + Buffer.from(data), + ); resolve(); - } catch(error) { + } catch (error) { reject(error); } }); @@ -34,27 +34,23 @@ export class SoundFile { public get fileId(): number { return this.fileData?.fileId || -1; } - } - /** * Controls sound file storage. */ export class SoundStore { - - public constructor(private fileStore: Filestore) { - } + public constructor(private fileStore: Filestore) {} /** * Writes all unpacked WAV files to the disk under `./unpacked/sounds/` */ public async writeToDisk(): Promise { const files = this.decodeSoundStore(); - for(const wav of files) { + for (const wav of files) { try { await wav.writeToDisk(); - } catch(e) { + } catch (e) { logger.error(e); } } @@ -66,7 +62,7 @@ export class SoundStore { * @returns The decoded SoundFile object, or null if the file is not found. */ public getSound(id: number): SoundFile | null { - if(id === undefined || id === null) { + if (id === undefined || id === null) { return null; } @@ -84,17 +80,17 @@ export class SoundStore { const fileCount = soundArchiveIndex.files.size; const soundFiles: SoundFile[] = new Array(fileCount); - for(let soundId = 0; soundId < fileCount; soundId++) { + for (let soundId = 0; soundId < fileCount; soundId++) { try { const fileData = soundArchiveIndex.getFile(soundId); - if(!fileData) { + if (!fileData) { soundFiles[soundId] = null; logger.warn(`No file found for sound ID ${soundId}.`); continue; } soundFiles[soundId] = new SoundFile(fileData); - } catch(e) { + } catch (e) { soundFiles[soundId] = null; logger.error(`Error parsing sound ID ${soundId}.`); logger.error(e); @@ -103,5 +99,4 @@ export class SoundStore { return soundFiles; } - } diff --git a/src/filestore/stores/sprite-store.ts b/src/filestore/stores/sprite-store.ts index 7691c53..5cb2d62 100644 --- a/src/filestore/stores/sprite-store.ts +++ b/src/filestore/stores/sprite-store.ts @@ -6,21 +6,19 @@ import { type Filestore, getFileName } from '../filestore'; import type { FileData } from '../file-data'; import { pngToBase64 } from '../util'; - export function toRgb(inputNum: number): number[] { let num = inputNum; num >>>= 0; - const b = num & 0xFF; - const g = (num & 0xFF00) >>> 8; - const r = (num & 0xFF0000) >>> 16; - return [ r, g, b ]; + const b = num & 0xff; + const g = (num & 0xff00) >>> 8; + const r = (num & 0xff0000) >>> 16; + return [r, g, b]; } /** * A single Sprite within a SpritePack. */ export class Sprite { - spriteId: number; maxWidth: number; maxHeight: number; @@ -44,7 +42,9 @@ export class Sprite { let pixelCount = 0; for (let y = 0; y < this.height; y++) { for (let x = 0; x < this.width; x++) { - resizedPixels[x + this.offsetX + (y + this.offsetY) * this.maxWidth] = this.pixelIdx[pixelCount++]; + resizedPixels[ + x + this.offsetX + (y + this.offsetY) * this.maxWidth + ] = this.pixelIdx[pixelCount++]; } } this.pixelIdx = resizedPixels; @@ -69,13 +69,13 @@ export class Sprite { const png = new PNG({ width: this.width, height: this.height, - filterType: -1 + filterType: -1, }); - for(let x = 0; x < this.width; x++) { - for(let y = 0; y < this.height; y++) { + for (let x = 0; x < this.width; x++) { + for (let y = 0; y < this.height; y++) { const pixel = this.pixels[this.width * y + x]; - const [ r, g, b ] = toRgb(pixel); + const [r, g, b] = toRgb(pixel); const pngIndex = (this.width * y + x) << 2; png.data[pngIndex] = r; @@ -94,40 +94,45 @@ export class Sprite { public getPixels(): Uint8ClampedArray { return new Uint8ClampedArray(this.toPng().data); } - } - /** * A package of one or many Sprite objects. */ export class SpritePack { - private _sprites: Sprite[]; - public constructor(public readonly fileData: FileData) { - } + public constructor(public readonly fileData: FileData) {} public async writeToDisk(): Promise { return new Promise((resolve, reject) => { try { - const fileName = getFileName(this.fileData.nameHash).replace(/ /g, '_'); + const fileName = getFileName(this.fileData.nameHash).replace( + / /g, + '_', + ); - if(!existsSync('./unpacked/sprite-packs')) { + if (!existsSync('./unpacked/sprite-packs')) { mkdirSync('./unpacked/sprite-packs'); } - if(this._sprites.length > 1) { - if(!existsSync(`./unpacked/sprite-packs/${this.fileData.fileId}_${fileName}`)) { - mkdirSync((`./unpacked/sprite-packs/${this.fileData.fileId}_${fileName}`)); + if (this._sprites.length > 1) { + if ( + !existsSync( + `./unpacked/sprite-packs/${this.fileData.fileId}_${fileName}`, + ) + ) { + mkdirSync( + `./unpacked/sprite-packs/${this.fileData.fileId}_${fileName}`, + ); } - for(let i = 0; i < this._sprites.length; i++) { + for (let i = 0; i < this._sprites.length; i++) { try { const sprite = this._sprites[i]; let png: PNG; - if(!sprite) { + if (!sprite) { png = new PNG({ width: 1, height: 1, @@ -135,8 +140,8 @@ export class SpritePack { bgColor: { red: 0, green: 0, - blue: 0 - } + blue: 0, + }, }); } else { png = sprite.toPng(); @@ -145,14 +150,17 @@ export class SpritePack { png.pack(); const pngBuffer = PNG.sync.write(png); - writeFileSync(`./unpacked/sprite-packs/${ this.fileData.fileId }_${ fileName }/${ i }.png`, pngBuffer); - } catch(e) { + writeFileSync( + `./unpacked/sprite-packs/${this.fileData.fileId}_${fileName}/${i}.png`, + pngBuffer, + ); + } catch (e) { logger.error('Error writing sprite to disk', e); } } - } else if(this._sprites.length === 1) { + } else if (this._sprites.length === 1) { const sprite = this._sprites[0]; - if(!sprite) { + if (!sprite) { reject('No sprite data found.'); } else { const png = sprite.toPng(); @@ -160,11 +168,14 @@ export class SpritePack { const pngBuffer = PNG.sync.write(png); - writeFileSync(`./unpacked/sprite-packs/${this.fileData.fileId}_${fileName}.png`, pngBuffer); + writeFileSync( + `./unpacked/sprite-packs/${this.fileData.fileId}_${fileName}.png`, + pngBuffer, + ); } } resolve(); - } catch(error) { + } catch (error) { reject(error); } }); @@ -176,102 +187,107 @@ export class SpritePack { public decode(): SpritePack { const buffer = this.fileData.decompress(); - if(buffer.length === 0) { - throw new Error(`Empty file content for Sprite Pack ${this.fileData.fileId}.`); + if (buffer.length === 0) { + throw new Error( + `Empty file content for Sprite Pack ${this.fileData.fileId}.`, + ); } - buffer.readerIndex = (buffer.length - 2); - const spriteCount = buffer.get('SHORT', 'UNSIGNED'); - const sprites: Sprite[] = new Array(spriteCount); + buffer.readerIndex = buffer.length - 2; + const spriteCount = buffer.get('SHORT', 'UNSIGNED'); + const sprites: Sprite[] = new Array(spriteCount); - buffer.readerIndex = (buffer.length - 7 - spriteCount * 8); - const width = buffer.get('SHORT', 'UNSIGNED'); - const height = buffer.get('SHORT', 'UNSIGNED'); - const paletteLength = buffer.get('BYTE', 'UNSIGNED') + 1; + buffer.readerIndex = buffer.length - 7 - spriteCount * 8; + const width = buffer.get('SHORT', 'UNSIGNED'); + const height = buffer.get('SHORT', 'UNSIGNED'); + const paletteLength = buffer.get('BYTE', 'UNSIGNED') + 1; - for(let i = 0; i < spriteCount; i++) { - sprites[i] = new Sprite(i, width, height); - } + for (let i = 0; i < spriteCount; i++) { + sprites[i] = new Sprite(i, width, height); + } - for(let i = 0; i < spriteCount; i++) { - sprites[i].offsetX = buffer.get('SHORT', 'UNSIGNED'); - } - for(let i = 0; i < spriteCount; i++) { - sprites[i].offsetY = buffer.get('SHORT', 'UNSIGNED'); - } - for(let i = 0; i < spriteCount; i++) { - sprites[i].width = buffer.get('SHORT', 'UNSIGNED'); - } - for(let i = 0; i < spriteCount; i++) { - sprites[i].height = buffer.get('SHORT', 'UNSIGNED'); - } + for (let i = 0; i < spriteCount; i++) { + sprites[i].offsetX = buffer.get('SHORT', 'UNSIGNED'); + } + for (let i = 0; i < spriteCount; i++) { + sprites[i].offsetY = buffer.get('SHORT', 'UNSIGNED'); + } + for (let i = 0; i < spriteCount; i++) { + sprites[i].width = buffer.get('SHORT', 'UNSIGNED'); + } + for (let i = 0; i < spriteCount; i++) { + sprites[i].height = buffer.get('SHORT', 'UNSIGNED'); + } - buffer.readerIndex = (buffer.length - 7 - spriteCount * 8 - (paletteLength - 1) * 3); - const palette: number[] = new Array(paletteLength); + buffer.readerIndex = + buffer.length - 7 - spriteCount * 8 - (paletteLength - 1) * 3; + const palette: number[] = new Array(paletteLength); - for(let i = 1; i < paletteLength; i++) { - palette[i] = buffer.get('INT24'); + for (let i = 1; i < paletteLength; i++) { + palette[i] = buffer.get('INT24'); - if(palette[i] === 0) { - palette[i] = 1; - } + if (palette[i] === 0) { + palette[i] = 1; } + } - buffer.readerIndex = 0; + buffer.readerIndex = 0; - for(let i = 0; i < spriteCount; i++) { - const sprite = sprites[i]; - const spriteWidth = sprite.width; - const spriteHeight = sprite.height; - const dimension = spriteWidth * spriteHeight; - const pixelPaletteIndicies: number[] = new Array(dimension); - const pixelAlphas: number[] = new Array(dimension); - sprite.palette = palette; + for (let i = 0; i < spriteCount; i++) { + const sprite = sprites[i]; + const spriteWidth = sprite.width; + const spriteHeight = sprite.height; + const dimension = spriteWidth * spriteHeight; + const pixelPaletteIndicies: number[] = new Array(dimension); + const pixelAlphas: number[] = new Array(dimension); + sprite.palette = palette; - const flags = buffer.get('BYTE', 'UNSIGNED'); + const flags = buffer.get('BYTE', 'UNSIGNED'); - if((flags & 0b01) === 0) { - for(let j = 0; j < dimension; j++) { - pixelPaletteIndicies[j] = buffer.get('BYTE'); - } - } else { - for(let x = 0; x < spriteWidth; x++) { - for(let y = 0; y < spriteHeight; y++) { - pixelPaletteIndicies[spriteWidth * y + x] = buffer.get('BYTE'); - } + if ((flags & 0b01) === 0) { + for (let j = 0; j < dimension; j++) { + pixelPaletteIndicies[j] = buffer.get('BYTE'); + } + } else { + for (let x = 0; x < spriteWidth; x++) { + for (let y = 0; y < spriteHeight; y++) { + pixelPaletteIndicies[spriteWidth * y + x] = + buffer.get('BYTE'); } } + } - if((flags & 0b10) === 0) { - for(let j = 0; j < dimension; j++) { - const index = pixelPaletteIndicies[j]; - if(index !== 0) { - pixelAlphas[j] = 0xff; - } + if ((flags & 0b10) === 0) { + for (let j = 0; j < dimension; j++) { + const index = pixelPaletteIndicies[j]; + if (index !== 0) { + pixelAlphas[j] = 0xff; + } + } + } else { + if ((flags & 0b01) === 0) { + for (let j = 0; j < dimension; j++) { + pixelAlphas[j] = buffer.get('BYTE'); } } else { - if((flags & 0b01) === 0) { - for(let j = 0; j < dimension; j++) { - pixelAlphas[j] = buffer.get('BYTE'); - } - } else { - for(let x = 0; x < spriteWidth; x++) { - for(let y = 0; y < spriteHeight; y++) { - pixelAlphas[spriteWidth * y + x] = buffer.get('BYTE'); - } + for (let x = 0; x < spriteWidth; x++) { + for (let y = 0; y < spriteHeight; y++) { + pixelAlphas[spriteWidth * y + x] = + buffer.get('BYTE'); } } } + } - sprite.pixelIdx = pixelPaletteIndicies; - sprite.pixels = new Array(dimension); + sprite.pixelIdx = pixelPaletteIndicies; + sprite.pixels = new Array(dimension); - for(let j = 0; j < dimension; j++) { - const index = pixelPaletteIndicies[j] & 0xff; - sprite.pixels[j] = palette[index] | (pixelAlphas[j] << 24); - } + for (let j = 0; j < dimension; j++) { + const index = pixelPaletteIndicies[j] & 0xff; + sprite.pixels[j] = palette[index] | (pixelAlphas[j] << 24); } + } - this._sprites = sprites; + this._sprites = sprites; return this; } @@ -285,24 +301,22 @@ export class SpritePack { } } - /** * Controls SpritePack file storage. */ export class SpriteStore { - - - public constructor(private fileStore: Filestore) { - } + public constructor(private fileStore: Filestore) {} public async writeToDisk(): Promise { rmdirSync('./unpacked/sprite-packs', { recursive: true }); const spritePacks = this.decodeSpriteStore(); - for(const spritePack of spritePacks) { + for (const spritePack of spritePacks) { try { await spritePack.writeToDisk(); - } catch(e) { - logger.error(`Error writing spritepack ${spritePack.packId} to disk.`); + } catch (e) { + logger.error( + `Error writing spritepack ${spritePack.packId} to disk.`, + ); logger.error(e); } } @@ -328,7 +342,7 @@ export class SpriteStore { * @returns The decoded SpritePack object, or null if the file is not found. */ public getSpritePack(nameOrId: string | number): SpritePack | null { - if(!nameOrId) { + if (!nameOrId) { return null; } @@ -346,11 +360,13 @@ export class SpriteStore { const packCount = spritePackIndex.files.size; const spritePacks: SpritePack[] = new Array(packCount); - for(let spritePackId = 0; spritePackId < packCount; spritePackId++) { + for (let spritePackId = 0; spritePackId < packCount; spritePackId++) { const fileData = spritePackIndex.getFile(spritePackId); - if(!fileData) { + if (!fileData) { spritePacks[spritePackId] = null; - logger.warn(`No file found for sprite pack ID ${spritePackId}.`); + logger.warn( + `No file found for sprite pack ID ${spritePackId}.`, + ); continue; } @@ -361,5 +377,4 @@ export class SpriteStore { return spritePacks; } - } diff --git a/src/filestore/stores/texture-store.ts b/src/filestore/stores/texture-store.ts index ba2f0d0..a603374 100644 --- a/src/filestore/stores/texture-store.ts +++ b/src/filestore/stores/texture-store.ts @@ -7,9 +7,7 @@ import { type SpriteStore, toRgb } from './sprite-store'; import { ColorUtils } from './model-store'; import { pngToBase64 } from '../util'; - export class Texture { - public static readonly LOW_MEMORY_TEXTURE_SIZE = 64; public static readonly HIGH_MEMORY_TEXTURE_SIZE = 128; private static TEXTURE_SIZE = Texture.HIGH_MEMORY_TEXTURE_SIZE; @@ -40,15 +38,15 @@ export class Texture { } public generatePixels(spriteStore: SpriteStore): boolean { - if(this.pixels) { + if (this.pixels) { return true; } const size = Texture.TEXTURE_SIZE; this.size = size; const spritePacks = []; - for(let i = 0; i < this.spriteIds.length; i++) { + for (let i = 0; i < this.spriteIds.length; i++) { const spritePack = spriteStore.getSpritePack(this.spriteIds[i]); - if(spritePack == null) { + if (spritePack == null) { return false; } spritePack.decode(); @@ -56,49 +54,64 @@ export class Texture { } const colorCount = size * size; this.pixels = new Array(colorCount * 4); - for(let i = 0; i < this.spriteIds.length; i++) { + for (let i = 0; i < this.spriteIds.length; i++) { const sprite = spritePacks[i].sprites[0]; sprite.resizeToLibSize(); const spritePixels = sprite.pixelIdx; const spritePalette = sprite.palette; const color = this.colors[i]; - if((color & ~0xffffff) === 50331648) { + if ((color & ~0xffffff) === 50331648) { const i_15_ = color & 0xff00ff; - const i_16_ = color >> 8 & 0xff; - for(let j = 0; j < spritePalette.length; j++) { + const i_16_ = (color >> 8) & 0xff; + for (let j = 0; j < spritePalette.length; j++) { let i_18_ = spritePalette[j]; - if((i_18_ & 0xffff) === i_18_ >> 8) { + if ((i_18_ & 0xffff) === i_18_ >> 8) { i_18_ &= 0xff; - spritePalette[j] = i_15_ * i_18_ >> 8 & 0xff00ff | i_16_ * i_18_ & 0xff00; + spritePalette[j] = + (((i_15_ * i_18_) >> 8) & 0xff00ff) | + ((i_16_ * i_18_) & 0xff00); } } } - for(let j = 0; j < spritePalette.length; j++) { - spritePalette[j] = ColorUtils.method707(spritePalette[j], Texture.TEXTURE_INTENSITY); + for (let j = 0; j < spritePalette.length; j++) { + spritePalette[j] = ColorUtils.method707( + spritePalette[j], + Texture.TEXTURE_INTENSITY, + ); } let renderType: number; - if(i === 0) { + if (i === 0) { renderType = 0; } else { renderType = this.renderTypes[i - 1]; } - if(renderType === 0) { - if(sprite.width === size) { - for(let j = 0; j < colorCount; j++) { + if (renderType === 0) { + if (sprite.width === size) { + for (let j = 0; j < colorCount; j++) { this.pixels[j] = spritePalette[spritePixels[j] & 0xff]; } - } else if(sprite.width === 64 && size === 128) { + } else if (sprite.width === 64 && size === 128) { let index = 0; - for(let i_23_ = 0; i_23_ < size; i_23_++) { - for(let i_24_ = 0; i_24_ < size; i_24_++) { - this.pixels[index++] = spritePalette[spritePixels[(i_24_ >> 1) + (i_23_ >> 1 << 6)] & 0xff]; + for (let i_23_ = 0; i_23_ < size; i_23_++) { + for (let i_24_ = 0; i_24_ < size; i_24_++) { + this.pixels[index++] = + spritePalette[ + spritePixels[ + (i_24_ >> 1) + ((i_23_ >> 1) << 6) + ] & 0xff + ]; } } - } else if(sprite.width === 128 && size === 64) { + } else if (sprite.width === 128 && size === 64) { let index = 0; - for(let i_26_ = 0; i_26_ < size; i_26_++) { - for(let i_27_ = 0; i_27_ < size; i_27_++) { - this.pixels[index++] = spritePalette[spritePixels[(i_27_ << 1) + (i_26_ << 1 << 7)] & 0xff]; + for (let i_26_ = 0; i_26_ < size; i_26_++) { + for (let i_27_ = 0; i_27_ < size; i_27_++) { + this.pixels[index++] = + spritePalette[ + spritePixels[ + (i_27_ << 1) + ((i_26_ << 1) << 7) + ] & 0xff + ]; } } } else { @@ -106,24 +119,29 @@ export class Texture { } } } - for(let i = 0; i < colorCount; i++) { + for (let i = 0; i < colorCount; i++) { this.pixels[i] &= 0xf8f8ff; const i_29_ = this.pixels[i]; - this.pixels[i + colorCount] = i_29_ - (i_29_ >>> 3) & 0xf8f8ff; - this.pixels[i + colorCount + colorCount] = i_29_ - (i_29_ >>> 2) & 0xf8f8ff; - this.pixels[i + colorCount + colorCount + colorCount] = i_29_ - (i_29_ >>> 2) - (i_29_ >>> 3) & 0xf8f8ff; + this.pixels[i + colorCount] = (i_29_ - (i_29_ >>> 3)) & 0xf8f8ff; + this.pixels[i + colorCount + colorCount] = + (i_29_ - (i_29_ >>> 2)) & 0xf8f8ff; + this.pixels[i + colorCount + colorCount + colorCount] = + (i_29_ - (i_29_ >>> 2) - (i_29_ >>> 3)) & 0xf8f8ff; } return true; } public animate(gameTick: number) { - if(this.pixels != null) { - if(this.direction === 1 || this.direction === 3) { - if(Texture.pixelsBuffer == null || Texture.pixelsBuffer.length < this.pixels.length) { + if (this.pixels != null) { + if (this.direction === 1 || this.direction === 3) { + if ( + Texture.pixelsBuffer == null || + Texture.pixelsBuffer.length < this.pixels.length + ) { Texture.pixelsBuffer = new Array(this.pixels.length); } let size: number; - if(this.pixels.length === 16384) { + if (this.pixels.length === 16384) { size = 64; } else { size = 128; @@ -131,26 +149,36 @@ export class Texture { const colorCount = this.pixels.length / 4; let textureSpeed = size * gameTick * this.speed; const colorCountMin1 = colorCount - 1; - if(this.direction === 1) { + if (this.direction === 1) { textureSpeed = -textureSpeed; } - for(let i = 0; i < colorCount; i++) { - const i_4_ = i + textureSpeed & colorCountMin1; + for (let i = 0; i < colorCount; i++) { + const i_4_ = (i + textureSpeed) & colorCountMin1; Texture.pixelsBuffer[i] = this.pixels[i_4_]; - Texture.pixelsBuffer[i + colorCount] = this.pixels[i_4_ + colorCount]; - Texture.pixelsBuffer[i + colorCount + colorCount] = this.pixels[i_4_ + colorCount + colorCount]; - Texture.pixelsBuffer[i + colorCount + colorCount + colorCount] = this.pixels[i_4_ + colorCount + colorCount + colorCount]; + Texture.pixelsBuffer[i + colorCount] = + this.pixels[i_4_ + colorCount]; + Texture.pixelsBuffer[i + colorCount + colorCount] = + this.pixels[i_4_ + colorCount + colorCount]; + Texture.pixelsBuffer[ + i + colorCount + colorCount + colorCount + ] = + this.pixels[ + i_4_ + colorCount + colorCount + colorCount + ]; } const is = this.pixels; this.pixels = Texture.pixelsBuffer; Texture.pixelsBuffer = is; } - if(this.direction === 2 || this.direction === 4) { - if(Texture.pixelsBuffer == null || Texture.pixelsBuffer.length < this.pixels.length) { + if (this.direction === 2 || this.direction === 4) { + if ( + Texture.pixelsBuffer == null || + Texture.pixelsBuffer.length < this.pixels.length + ) { Texture.pixelsBuffer = new Array(this.pixels.length); } let size: number; - if(this.pixels.length === 16384) { + if (this.pixels.length === 16384) { size = 64; } else { size = 128; @@ -158,17 +186,24 @@ export class Texture { const colorCount = this.pixels.length / 4; let textureSpeed = gameTick * this.speed; const sizeMin1 = size - 1; - if(this.direction === 2) { + if (this.direction === 2) { textureSpeed = -textureSpeed; } - for(let x = 0; x < colorCount; x += size) { - for(let y = 0; y < size; y++) { + for (let x = 0; x < colorCount; x += size) { + for (let y = 0; y < size; y++) { const i_10_ = x + y; - const i_11_ = x + (y + textureSpeed & sizeMin1); + const i_11_ = x + ((y + textureSpeed) & sizeMin1); Texture.pixelsBuffer[i_10_] = this.pixels[i_11_]; - Texture.pixelsBuffer[i_10_ + colorCount] = this.pixels[i_11_ + colorCount]; - Texture.pixelsBuffer[i_10_ + colorCount + colorCount] = this.pixels[i_11_ + colorCount + colorCount]; - Texture.pixelsBuffer[i_10_ + colorCount + colorCount + colorCount] = this.pixels[i_11_ + colorCount + colorCount + colorCount]; + Texture.pixelsBuffer[i_10_ + colorCount] = + this.pixels[i_11_ + colorCount]; + Texture.pixelsBuffer[i_10_ + colorCount + colorCount] = + this.pixels[i_11_ + colorCount + colorCount]; + Texture.pixelsBuffer[ + i_10_ + colorCount + colorCount + colorCount + ] = + this.pixels[ + i_11_ + colorCount + colorCount + colorCount + ]; } } const is = this.pixels; @@ -186,7 +221,7 @@ export class Texture { return new Promise((resolve, reject) => { try { const path = './unpacked/textures'; - if(!existsSync(path)) { + if (!existsSync(path)) { mkdirSync(path); } const png = this.toPng(); @@ -194,7 +229,7 @@ export class Texture { const pngBuffer = PNG.sync.write(png); writeFileSync(`${path}/${this.id}.png`, pngBuffer); resolve(); - } catch(e) { + } catch (e) { reject(e); } }); @@ -215,13 +250,13 @@ export class Texture { const png = new PNG({ width: size, height: size, - filterType: -1 + filterType: -1, }); - for(let x = 0; x < size; x++) { - for(let y = 0; y < size; y++) { + for (let x = 0; x < size; x++) { + for (let y = 0; y < size; y++) { const pixel = this.pixels[size * y + x]; - const [ r, g, b ] = toRgb(pixel); + const [r, g, b] = toRgb(pixel); const pngIndex = (size * y + x) << 2; png.data[pngIndex] = r; @@ -233,24 +268,23 @@ export class Texture { return png; } - } - export class TextureStore { - - public constructor(private fileStore: Filestore) { - } + public constructor(private fileStore: Filestore) {} public async writeToDisk(): Promise { rmdirSync('./unpacked/textures', { recursive: true }); - const ids = this.fileStore.getIndex('textures').getArchive(0).files.keys(); - for(const id of ids) { + const ids = this.fileStore + .getIndex('textures') + .getArchive(0) + .files.keys(); + for (const id of ids) { try { const texture = this.getTexture(id); texture.generatePixels(this.fileStore.spriteStore); await texture.writeToDisk(); - } catch(e) { + } catch (e) { logger.error(`Error writing texture ${id} to disk.`); logger.error(e); } @@ -258,43 +292,46 @@ export class TextureStore { } public getTexture(id: number): Texture | null { - if(!id && id !== 0) { + if (!id && id !== 0) { logger.warn(`Invalid texture id specified: ${id}`); return null; } - const file = this.fileStore.getIndex('textures').getArchive(0).getFile(id); - if(file == null) { + const file = this.fileStore + .getIndex('textures') + .getArchive(0) + .getFile(id); + if (file == null) { logger.warn(`Texture file ${id} not found`); return null; } - const buffer = file.content + const buffer = file.content; buffer.readerIndex = 0; const texture = new Texture(); texture.id = id; texture.rgb = buffer.get('SHORT', 'UNSIGNED'); texture.opaque = buffer.get('BYTE', 'UNSIGNED') === 1; const spritesCount = buffer.get('BYTE', 'UNSIGNED'); - if(spritesCount < 1 || spritesCount > 4) { + if (spritesCount < 1 || spritesCount > 4) { throw new Error(); } texture.spriteIds = new Array(spritesCount); - for(let i = 0; i < spritesCount; i++) { + for (let i = 0; i < spritesCount; i++) { texture.spriteIds[i] = buffer.get('SHORT', 'UNSIGNED'); } - if(spritesCount > 1) { + if (spritesCount > 1) { texture.renderTypes = new Array(spritesCount - 1); - for(let i = 0; i < spritesCount - 1; i++) { + for (let i = 0; i < spritesCount - 1; i++) { texture.renderTypes[i] = buffer.get('BYTE', 'UNSIGNED'); } } - if(spritesCount > 1) { + if (spritesCount > 1) { texture.anIntArray2138 = new Array(spritesCount - 1); - for(let i = 0; i < spritesCount - 1; i++) { + for (let i = 0; i < spritesCount - 1; i++) { texture.anIntArray2138[i] = buffer.get('BYTE', 'UNSIGNED'); } } texture.colors = new Array(spritesCount); - for(let i = 0; i < spritesCount; i++) { + for (let i = 0; i < spritesCount; i++) { texture.colors[i] = buffer.get('INT'); } texture.direction = buffer.get('BYTE', 'UNSIGNED'); @@ -305,17 +342,17 @@ export class TextureStore { public getTexturePixels(id: number): number[] | null { const texture = this.getTexture(id); - if(texture == null) { + if (texture == null) { return null; } - if(texture.pixels != null) { + if (texture.pixels != null) { return texture.pixels; } const generated = texture.generatePixels(this.fileStore.spriteStore); - if(!generated) { + if (!generated) { return null; } - if(texture.rgb === 0) { + if (texture.rgb === 0) { texture.resetPixels(); } else { //texture.anInt2137--; // TODO Find out why this? @@ -325,7 +362,7 @@ export class TextureStore { public getTextureRgb(id: number): number { const texture = this.getTexture(id); - if(texture == null) { + if (texture == null) { return 0; } return texture.rgb; @@ -333,7 +370,7 @@ export class TextureStore { public isTextureOpaque(id: number): boolean { const texture = this.getTexture(id); - if(texture == null) { + if (texture == null) { return false; } return texture.opaque; @@ -342,11 +379,10 @@ export class TextureStore { // this only works if textures are cached public isTextureLowMemory(id: number): boolean { const texture = this.getTexture(id); - if(texture == null) { + if (texture == null) { return false; } texture.generatePixels(this.fileStore.spriteStore); return texture.size === Texture.LOW_MEMORY_TEXTURE_SIZE; } - } diff --git a/src/filestore/stores/widget-store.ts b/src/filestore/stores/widget-store.ts index 5a767e8..a84bbcb 100644 --- a/src/filestore/stores/widget-store.ts +++ b/src/filestore/stores/widget-store.ts @@ -7,9 +7,7 @@ import type { Archive } from '../archive'; import { existsSync, mkdirSync, writeFileSync } from 'node:fs'; import { logger } from '@runejs/common'; - export abstract class WidgetBase { - public id: number; public parentId: number; public type: number; @@ -40,32 +38,32 @@ export abstract class WidgetBase { public async writeToDisk(): Promise { return new Promise((resolve, reject) => { try { - if(!existsSync('./unpacked/widgets')) { + if (!existsSync('./unpacked/widgets')) { mkdirSync('./unpacked/widgets'); } const { id } = this; - writeFileSync(`./unpacked/widgets/${id}.json`, JSON.stringify(this, null, 4)); + writeFileSync( + `./unpacked/widgets/${id}.json`, + JSON.stringify(this, null, 4), + ); resolve(); - } catch(error) { + } catch (error) { reject(error); } }); } - } export class ParentWidget extends WidgetBase { - public children: WidgetBase[]; public constructor(id: number) { super(); this.id = id; } - } export class ContainerWidget extends WidgetBase { @@ -177,12 +175,10 @@ export class LineWidget extends WidgetBase { textColor: number; } - /** * Controls game interface widget file format and storage. */ export class WidgetStore { - /** * The main file index of the widget store. */ @@ -197,10 +193,10 @@ export class WidgetStore { */ public async writeToDisk(): Promise { const widgets = this.decodeWidgetStore(); - for(const widget of widgets) { + for (const widget of widgets) { try { await widget.writeToDisk(); - } catch(e) { + } catch (e) { logger.error(e); } } @@ -212,16 +208,22 @@ export class WidgetStore { */ public decodeWidget(id: number): WidgetBase { const file = this.widgetFileIndex.files.get(id); - if(file.type === 'file') { + if (file.type === 'file') { return this.decodeWidgetFile(id, file); - }if(file.type === 'archive') { + } + if (file.type === 'archive') { const widgetParent = new ParentWidget(id); const archive: Archive = file as Archive; archive.decodeArchiveFiles(); - const widgetChildFiles: FileData[] = Array.from(archive.files.values()); + const widgetChildFiles: FileData[] = Array.from( + archive.files.values(), + ); widgetParent.children = new Array(widgetChildFiles.length); - for(let i = 0; i < widgetChildFiles.length; i++) { - widgetParent.children[i] = this.decodeWidgetFile(i, widgetChildFiles[i]); + for (let i = 0; i < widgetChildFiles.length; i++) { + widgetParent.children[i] = this.decodeWidgetFile( + i, + widgetChildFiles[i], + ); } return widgetParent; @@ -233,16 +235,19 @@ export class WidgetStore { * @param id The numeric ID of the widget file to decode. * @param widgetFile The file data of the widget file to decode. */ - public decodeWidgetFile(id: number, widgetFile: FileData | Archive): WidgetBase { - if(!widgetFile.content) { + public decodeWidgetFile( + id: number, + widgetFile: FileData | Archive, + ): WidgetBase { + if (!widgetFile.content) { widgetFile.decompress(); } const content = widgetFile.content; - if(content[0] === -1) { + if (content[0] === -1) { return this.decodeWidgetFormat2(id, content); } - return this.decodeWidgetFormat1(id, content); + return this.decodeWidgetFormat1(id, content); } /** @@ -252,10 +257,10 @@ export class WidgetStore { public decodeWidgetStore(): WidgetBase[] { const widgetCount = this.widgetFileIndex.files.size; const widgets: WidgetBase[] = new Array(widgetCount); - for(let widgetId = 0; widgetId < widgetCount; widgetId++) { + for (let widgetId = 0; widgetId < widgetCount; widgetId++) { try { widgets[widgetId] = this.decodeWidget(widgetId); - } catch(error) { + } catch (error) { logger.error(`Error decoding widget ${widgetId}:`); logger.error(error); } @@ -267,32 +272,35 @@ export class WidgetStore { public createWidget(widgetType: number): WidgetBase { let widget: WidgetBase; - if(widgetType === 0) { + if (widgetType === 0) { widget = new ContainerWidget(); - } else if(widgetType === 1) { + } else if (widgetType === 1) { widget = new TextWidget(); - } else if(widgetType === 2) { + } else if (widgetType === 2) { widget = new InteractableItemWidget(); - } else if(widgetType === 3) { + } else if (widgetType === 3) { widget = new RectangleWidget(); - } else if(widgetType === 4) { + } else if (widgetType === 4) { widget = new LinkWidget(); - } else if(widgetType === 5) { + } else if (widgetType === 5) { widget = new SpriteWidget(); - } else if(widgetType === 6) { + } else if (widgetType === 6) { widget = new ModelWidget(); - } else if(widgetType === 7) { + } else if (widgetType === 7) { widget = new StaticItemWidget(); - } else if(widgetType === 8) { + } else if (widgetType === 8) { widget = new TooltipWidget(); - } else if(widgetType === 9) { + } else if (widgetType === 9) { widget = new LineWidget(); } return widget; } - public decodeWidgetFormat2(widgetId: number, inputBuffer: ByteBuffer): WidgetBase { + public decodeWidgetFormat2( + widgetId: number, + inputBuffer: ByteBuffer, + ): WidgetBase { const buffer = new ByteBuffer(inputBuffer); buffer.readerIndex = 1; // skip the first byte for the new format @@ -311,33 +319,33 @@ export class WidgetStore { widget.x = widget.originalX; widget.y = widget.originalY; - if(widget instanceof LineWidget) { + if (widget instanceof LineWidget) { widget.height = buffer.get('SHORT'); } else { widget.height = buffer.get('SHORT', 'UNSIGNED'); } widget.parentId = buffer.get('SHORT', 'UNSIGNED'); - if(widget.parentId === 0xffff) { + if (widget.parentId === 0xffff) { widget.parentId = -1; } widget.hidden = buffer.get('BYTE', 'UNSIGNED') === 1; widget.hasListeners = buffer.get('BYTE', 'UNSIGNED') === 1; - if(widget instanceof ContainerWidget) { + if (widget instanceof ContainerWidget) { widget.scrollWidth = buffer.get('SHORT', 'UNSIGNED'); widget.scrollPosition = buffer.get('SHORT', 'UNSIGNED'); } - if(widget instanceof SpriteWidget) { + if (widget instanceof SpriteWidget) { widget.spriteId = buffer.get('INT'); widget.textureId = buffer.get('SHORT', 'UNSIGNED'); widget.tiled = buffer.get('BYTE', 'UNSIGNED') === 1; widget.opacity = buffer.get('BYTE', 'UNSIGNED'); } - if(widget instanceof ModelWidget) { + if (widget instanceof ModelWidget) { widget.modelType = 1; widget.modelId = buffer.get('SHORT', 'UNSIGNED'); widget.offsetX = buffer.get('SHORT'); @@ -349,16 +357,16 @@ export class WidgetStore { widget.animation = buffer.get('SHORT', 'UNSIGNED'); widget.orthogonal = buffer.get('BYTE', 'UNSIGNED') === 1; - if(widget.animation === 65535) { + if (widget.animation === 65535) { widget.animation = -1; } - - if(widget.modelId === 65535) { + + if (widget.modelId === 65535) { widget.modelId = -1; } } - if(widget instanceof LinkWidget) { + if (widget instanceof LinkWidget) { widget.fontId = buffer.get('SHORT', 'UNSIGNED'); widget.text = buffer.getString(); widget.lineHeight = buffer.get('BYTE', 'UNSIGNED'); @@ -368,25 +376,28 @@ export class WidgetStore { widget.textColor = buffer.get('INT'); } - if(widget instanceof RectangleWidget) { + if (widget instanceof RectangleWidget) { widget.textColor = buffer.get('INT'); widget.filled = buffer.get('BYTE', 'UNSIGNED') === 1; widget.opacity = buffer.get('BYTE', 'UNSIGNED'); } - if(widget instanceof LineWidget) { + if (widget instanceof LineWidget) { widget.lineWidth = buffer.get('BYTE', 'UNSIGNED'); widget.textColor = buffer.get('INT'); } - if(widget.hasListeners) { + if (widget.hasListeners) { // @TODO decode listeners } return widget; } - public decodeWidgetFormat1(widgetId: number, inputBuffer: ByteBuffer): WidgetBase { + public decodeWidgetFormat1( + widgetId: number, + inputBuffer: ByteBuffer, + ): WidgetBase { const buffer = new ByteBuffer(inputBuffer); const widgetType = buffer.get('BYTE'); @@ -408,20 +419,21 @@ export class WidgetStore { widget.x = widget.originalX; widget.y = widget.originalY; - if(widget.parentId === 0xffff) { + if (widget.parentId === 0xffff) { widget.parentId = -1; } - if(widget.hoveredSiblingId === 0xffff) { // 0xffff === 65535 + if (widget.hoveredSiblingId === 0xffff) { + // 0xffff === 65535 widget.hoveredSiblingId = -1; } const alternateCount = buffer.get('BYTE', 'UNSIGNED'); - if(alternateCount > 0) { + if (alternateCount > 0) { widget.alternateOperators = new Array(alternateCount); widget.alternateRhs = new Array(alternateCount); - for(let i = 0; alternateCount > i; i++) { + for (let i = 0; alternateCount > i; i++) { widget.alternateOperators[i] = buffer.get('BYTE', 'UNSIGNED'); widget.alternateRhs[i] = buffer.get('SHORT', 'UNSIGNED'); } @@ -429,33 +441,33 @@ export class WidgetStore { const clientScriptCount = buffer.get('BYTE', 'UNSIGNED'); - if(clientScriptCount > 0) { + if (clientScriptCount > 0) { widget.cs1 = new Array(clientScriptCount); - for(let csIndex = 0; csIndex < clientScriptCount; csIndex++) { + for (let csIndex = 0; csIndex < clientScriptCount; csIndex++) { const k = buffer.get('SHORT', 'UNSIGNED'); widget.cs1[csIndex] = new Array(k); - for(let j = 0; k > j; j++) { + for (let j = 0; k > j; j++) { widget.cs1[csIndex][j] = buffer.get('SHORT', 'UNSIGNED'); - if(widget.cs1[csIndex][j] === 65535) { + if (widget.cs1[csIndex][j] === 65535) { widget.cs1[csIndex][j] = -1; } } } } - if(widget instanceof ContainerWidget) { + if (widget instanceof ContainerWidget) { widget.scrollHeight = buffer.get('SHORT', 'UNSIGNED'); widget.hidden = buffer.get('BYTE', 'UNSIGNED') === 1; } - if(widget instanceof TextWidget) { + if (widget instanceof TextWidget) { buffer.get('SHORT', 'UNSIGNED'); // @TODO look into these at some point buffer.get('BYTE', 'UNSIGNED'); } - if(widget instanceof InteractableItemWidget) { + if (widget instanceof InteractableItemWidget) { widget.items = new Array(widget.height * widget.width); widget.itemAmounts = new Array(widget.height * widget.width); widget.itemSwapable = buffer.get('BYTE', 'UNSIGNED') === 1; @@ -468,9 +480,9 @@ export class WidgetStore { widget.imageY = new Array(20); widget.images = new Array(20); - for(let sprite = 0; sprite < 20; sprite++) { + for (let sprite = 0; sprite < 20; sprite++) { const hasSprite = buffer.get('BYTE', 'UNSIGNED'); - if(hasSprite === 1) { + if (hasSprite === 1) { widget.images[sprite] = buffer.get('SHORT'); widget.imageX[sprite] = buffer.get('SHORT'); widget.imageY[sprite] = buffer.get('INT'); @@ -481,19 +493,19 @@ export class WidgetStore { widget.options = new Array(5); - for(let i = 0; i < 5; i++) { + for (let i = 0; i < 5; i++) { widget.options[i] = buffer.getString(); - if(widget.options[i].length === 0) { + if (widget.options[i].length === 0) { widget.options[i] = null; } } } - if(widget instanceof RectangleWidget) { + if (widget instanceof RectangleWidget) { widget.filled = buffer.get('BYTE', 'UNSIGNED') === 1; } - if(widget instanceof LinkWidget || widget instanceof TextWidget) { + if (widget instanceof LinkWidget || widget instanceof TextWidget) { widget.textAlignmentX = buffer.get('BYTE', 'UNSIGNED'); widget.textAlignmentY = buffer.get('BYTE', 'UNSIGNED'); widget.lineHeight = buffer.get('BYTE', 'UNSIGNED'); @@ -501,27 +513,31 @@ export class WidgetStore { widget.textShadowed = buffer.get('BYTE', 'UNSIGNED') === 1; } - if(widget instanceof LinkWidget) { + if (widget instanceof LinkWidget) { widget.text = buffer.getString(); widget.alternateText = buffer.getString(); } - if(widget instanceof TextWidget || widget instanceof RectangleWidget || widget instanceof LinkWidget) { + if ( + widget instanceof TextWidget || + widget instanceof RectangleWidget || + widget instanceof LinkWidget + ) { widget.textColor = buffer.get('INT'); } - if(widget instanceof RectangleWidget || widget instanceof LinkWidget) { + if (widget instanceof RectangleWidget || widget instanceof LinkWidget) { widget.alternateTextColor = buffer.get('INT'); widget.hoveredTextColor = buffer.get('INT'); widget.alternateHoveredTextColor = buffer.get('INT'); } - if(widget instanceof SpriteWidget) { + if (widget instanceof SpriteWidget) { widget.spriteId = buffer.get('INT'); widget.alternateSpriteId = buffer.get('INT'); } - if(widget instanceof ModelWidget) { + if (widget instanceof ModelWidget) { widget.modelType = 1; widget.alternateModelType = 1; widget.modelId = buffer.get('SHORT', 'UNSIGNED'); @@ -532,24 +548,24 @@ export class WidgetStore { widget.rotationX = buffer.get('SHORT', 'UNSIGNED'); widget.rotationY = buffer.get('SHORT', 'UNSIGNED'); - if(widget.modelId === 0xffff) { + if (widget.modelId === 0xffff) { widget.modelId = -1; } - if(widget.alternateModelId === 0xffff) { + if (widget.alternateModelId === 0xffff) { widget.alternateModelId = -1; } - if(widget.animation === 0xffff) { + if (widget.animation === 0xffff) { widget.animation = -1; } - if(widget.alternateAnimation === 0xffff) { + if (widget.alternateAnimation === 0xffff) { widget.alternateAnimation = -1; } } - if(widget instanceof StaticItemWidget) { + if (widget instanceof StaticItemWidget) { widget.items = new Array(widget.width * widget.height); widget.itemAmounts = new Array(widget.width * widget.height); widget.textAlignmentX = buffer.get('BYTE', 'UNSIGNED'); @@ -562,33 +578,38 @@ export class WidgetStore { widget.options = new Array(5); - for(let i = 0; i < 5; i++) { + for (let i = 0; i < 5; i++) { widget.options[i] = buffer.getString(); - if(widget.options[i].length === 0) { + if (widget.options[i].length === 0) { widget.options[i] = null; } } } - if(widget instanceof TooltipWidget) { + if (widget instanceof TooltipWidget) { widget.text = buffer.getString(); } - if(widget.menuType === 2 || widget instanceof InteractableItemWidget) { + if (widget.menuType === 2 || widget instanceof InteractableItemWidget) { widget.targetVerb = buffer.getString(); widget.spellName = buffer.getString(); widget.clickMask = buffer.get('SHORT', 'UNSIGNED'); } - if(widget.menuType === 1 || widget.menuType === 4 || widget.menuType === 5 || widget.menuType === 6) { + if ( + widget.menuType === 1 || + widget.menuType === 4 || + widget.menuType === 5 || + widget.menuType === 6 + ) { widget.hintText = buffer.getString(); - if(widget.hintText.length === 0) { - if(widget.menuType === 1) { + if (widget.hintText.length === 0) { + if (widget.menuType === 1) { widget.hintText = 'Ok'; - } else if(widget.menuType === 4 || widget.menuType === 5) { + } else if (widget.menuType === 4 || widget.menuType === 5) { widget.hintText = 'Select'; - } else if(widget.menuType === 6) { + } else if (widget.menuType === 6) { widget.hintText = 'Continue'; } } diff --git a/src/filestore/util/name-hash.ts b/src/filestore/util/name-hash.ts index 0ab8de7..8961092 100644 --- a/src/filestore/util/name-hash.ts +++ b/src/filestore/util/name-hash.ts @@ -2,11 +2,10 @@ import { readFileSync } from 'node:fs'; import { join } from 'node:path'; const parser = require('properties-parser'); - export function hash(name: string): number { let hash = 0; - for(let i = 0; i < name.length; i++) { - hash = Math.imul(31, hash) + name.charCodeAt(i) | 0; + for (let i = 0; i < name.length; i++) { + hash = (Math.imul(31, hash) + name.charCodeAt(i)) | 0; } return hash; diff --git a/src/filestore/util/png.ts b/src/filestore/util/png.ts index 289f660..1e8207d 100644 --- a/src/filestore/util/png.ts +++ b/src/filestore/util/png.ts @@ -1,14 +1,12 @@ import type { PNG } from 'pngjs'; - export const pngToBase64 = async (png: PNG): Promise => { const chunks = []; png.pack(); - png.on('data', chunk => chunks.push(chunk)); + png.on('data', (chunk) => chunks.push(chunk)); - return await new Promise(resolve => { - png.on('end', () => - resolve(Buffer.concat(chunks).toString('base64'))); + return await new Promise((resolve) => { + png.on('end', () => resolve(Buffer.concat(chunks).toString('base64'))); }); }; diff --git a/src/filestore/util/xtea.ts b/src/filestore/util/xtea.ts index da49877..aacf9ca 100644 --- a/src/filestore/util/xtea.ts +++ b/src/filestore/util/xtea.ts @@ -1,13 +1,11 @@ import type { XteaDefinition } from '../stores'; import { loadConfigurationFiles } from '@runejs/common/fs'; - export type XteaRegionMap = { [key: number]: XteaRegion }; - export class XteaRegion implements XteaDefinition { public mapsquare: number; - public key: [number,number,number,number]; + public key: [number, number, number, number]; public archive: number; public group: number; public name: string; @@ -15,11 +13,11 @@ export class XteaRegion implements XteaDefinition { public constructor( mapsquare: number, - key: [number,number,number,number], + key: [number, number, number, number], archive: number, group: number, name: string, - name_hash: number + name_hash: number, ) { this.mapsquare = mapsquare; this.key = key; @@ -30,18 +28,25 @@ export class XteaRegion implements XteaDefinition { } } - export const createXteaRegion = (config: XteaDefinition): XteaRegion => - new XteaRegion(config.mapsquare, config.key, config.archive, config.group, config.name, config.name_hash); - - -export const loadXteaRegionFiles = async (path: string): Promise => { + new XteaRegion( + config.mapsquare, + config.key, + config.archive, + config.group, + config.name, + config.name_hash, + ); + +export const loadXteaRegionFiles = async ( + path: string, +): Promise => { const regions: XteaRegionMap = {}; const files = await loadConfigurationFiles(path); - for(const file of files) { - for(const region of file) { - const xteaRegion = createXteaRegion(region) - regions[xteaRegion.name] = xteaRegion; + for (const file of files) { + for (const region of file) { + const xteaRegion = createXteaRegion(region); + regions[xteaRegion.name] = xteaRegion; } } return regions; diff --git a/src/run.ts b/src/run.ts index 719166e..78042a6 100644 --- a/src/run.ts +++ b/src/run.ts @@ -1,7 +1,6 @@ import { Filestore } from './filestore'; import { logger } from '@runejs/common'; - const fileStore = new Filestore('./packed', { configDir: './config' }); const region = fileStore.regionStore.getLandscapeFile(50, 44); logger.info(region.landscapeObjects.length); diff --git a/tsconfig.json b/tsconfig.json index 034fa88..1642d8c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,14 +13,8 @@ "allowJs": true, "declaration": true, "outDir": "./lib", - "types": [ - "node" - ] + "types": ["node"] }, - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "node_modules" - ] + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] } From ebc6329c8f75ed3349b3282d9eb10b8d3ec6ed83 Mon Sep 17 00:00:00 2001 From: Borig Date: Fri, 24 Jan 2025 15:49:16 +1300 Subject: [PATCH 6/6] [0.16.1] Align changes with other repos --- package-lock.json | 12 ++++++------ package.json | 12 ++++++------ tsconfig.json | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 99b9451..b010e11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,12 @@ "version": "0.16.1", "license": "GPL-3.0", "dependencies": { - "@runejs/common": ">=2.0.2-beta.3", + "@runejs/common": "2.0.2-beta.3", "canvas": "^3.1.0", "pngjs": "^7.0.0", "properties-parser": "^0.6.0", "seek-bzip": "^2.0.0", - "tslib": ">=2.8.1" + "tslib": "2.8.1" }, "devDependencies": { "@biomejs/biome": "1.9.4", @@ -22,12 +22,12 @@ "@types/pngjs": "^6.0.5", "rimraf": "^6.0.1", "ts-node": "^10.9.2", - "typescript": "^5.7.3" + "typescript": "5.7.3" }, "peerDependencies": { - "@runejs/common": ">=2.0.2-beta.3", - "tslib": ">=2.8.1", - "typescript": ">=5.7.3" + "@runejs/common": "2.0.2-beta.3", + "tslib": "2.8.1", + "typescript": "5.7.3" } }, "node_modules/@biomejs/biome": { diff --git a/package.json b/package.json index 6892a32..7e8d42e 100644 --- a/package.json +++ b/package.json @@ -34,17 +34,17 @@ }, "homepage": "https://github.com/runejs/filestore#readme", "peerDependencies": { - "@runejs/common": ">=2.0.2-beta.3", - "tslib": ">=2.8.1", - "typescript": ">=5.7.3" + "@runejs/common": "2.0.2-beta.3", + "tslib": "2.8.1", + "typescript": "5.7.3" }, "dependencies": { - "@runejs/common": ">=2.0.2-beta.3", + "@runejs/common": "2.0.2-beta.3", "canvas": "^3.1.0", "pngjs": "^7.0.0", "properties-parser": "^0.6.0", "seek-bzip": "^2.0.0", - "tslib": ">=2.8.1" + "tslib": "2.8.1" }, "devDependencies": { "@biomejs/biome": "1.9.4", @@ -52,6 +52,6 @@ "@types/pngjs": "^6.0.5", "rimraf": "^6.0.1", "ts-node": "^10.9.2", - "typescript": "^5.7.3" + "typescript": "5.7.3" } } diff --git a/tsconfig.json b/tsconfig.json index 1642d8c..39dc6e0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "module": "commonjs", - "target": "es6", + "target": "ESNext", "jsx": "preserve", "importHelpers": true, "moduleResolution": "node",