Update v0.6; with automatic code replacement
|  | @ -0,0 +1,4 @@ | |||
| .vscode | ||||
| node_modules | ||||
| game | ||||
| build | ||||
| Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB | 
| Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB | 
|  | @ -0,0 +1,116 @@ | |||
| const beautify = require('js-beautify').js; | ||||
| const fs = require('fs'); | ||||
| 
 | ||||
| if (!fs.existsSync("./build")) fs.mkdirSync("./build"); | ||||
| fs.cpSync("./static/", "./build/", { recursive: true }); | ||||
| let script = fs.readFileSync('./game/latest.js', { encoding: 'utf8' }).replace("\n", "").trim(); | ||||
| 
 | ||||
| const replaceOne = (expression, replaceValue) => { | ||||
|     const result = expression.exec(script); | ||||
|     if (result === null) throw new Error("no match for: ") + expression; | ||||
| 	if (expression.exec(script) !== null) throw new Error("more than one match for: " + expression); | ||||
|     // this (below) works correctly because expression.lastIndex gets reset in the line above when there is no match
 | ||||
|     script = script.replace(expression, replaceValue); | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| const dictionary = { __dictionaryVersion: "1.89.4   30 Jan 2024", playerId: "bA", playerNames: "gn", gIsSingleplayer: "fH", gIsTeamGame: "di" }; | ||||
| if (!script.includes(`"${dictionary.__dictionaryVersion}"`)) throw new Error("Dictionary is outdated."); | ||||
| 
 | ||||
| // Replace assets
 | ||||
| const assets = require('./assets.js'); | ||||
| replaceOne(/(\(4,"crown",4,")[^"]+"\),/g, "$1" + assets.crownIcon + "\"),"); | ||||
| replaceOne(/(\(6,"territorial\.io",6,")[^"]+"\),/g, "$1" + assets.fxClientLogo + "\"),"); | ||||
| 
 | ||||
| // Add FXClient menu item in "More" menu
 | ||||
| // match },ug[0][5]={name:a79,id:5,mf:90,oU:0,e8:0},
 | ||||
| replaceOne(/(},(\w+\[0\])\[\d+\]={(\w+):\w+,(\w+):\d+,(\w+):90,(\w+):0,(\w+):0},)/g, | ||||
|     '$1$2.push({$3:"FX Client v" + fx_version + " " + fx_update, $4: 20, $5: 0, $6: 0, $7: 70}),'); | ||||
| // Do not display hover effect on the last 2 items (territorial.io version and FX Client version) instead of only the last item
 | ||||
| // match 0 === a9P ? ug[a9P].length - 1 : ug[a9P].length : 1,
 | ||||
| replaceOne(/(0===(\w+)\?(\w+)\[\2\]\.length)-1:(\3\[\2\]\.length:1,)/g, "$1 - 2 : $4"); | ||||
| 
 | ||||
| // Max size for custom maps: from 4096x4096 to 8192x8192
 | ||||
| // TODO: test this; it might cause issues with new boat mechanics?
 | ||||
| 
 | ||||
| // Add Troop Density and Maximum Troops in side panel -- todo
 | ||||
| 
 | ||||
| // Increment win counter on wins
 | ||||
| replaceOne(/(=function\((\w+)\){)([^}]+),((\w+\(0),\w+<100\?\w+\[\w+\]\+" won the game."[^,]+,([^()]+?\))),(?<end>[^}]+},)/g, | ||||
| `$1 if (${dictionary.playerId} === $2) wins_counter++, window.localStorage.setItem("fx_win_count", wins_counter); ` + | ||||
| `$3, $4, $5, "Your Current Win Count is Now " + wins_counter, $6, $<end>`); | ||||
| 
 | ||||
| // Add settings button and win count
 | ||||
| // render gear icon and win count
 | ||||
| // cV.textAlign=cX,cV.textBaseline=cW,a03(a9Y.gb,a9Y.gc,a9Y.m5,a9Y.tD,ug[a9P][0].mf,ug[a9P][0].oU,ug[a9P][0].e8,0===yk,ug[a9P][0].name),a9O))
 | ||||
| // l(A.f3, A.f4, A.hw, A.nI, z[0].f7, z[0].mx, z[0].cm, 0 === t, z[0].name, .6);
 | ||||
| // cH.drawImage(settingsGearIcon,A.f3-A.hw/2,A.f4,A.nI,A.nI);
 | ||||
| // cH.font = bt + Math.floor(A.nI * 0.4) + bu;
 | ||||
| // cH.fillText("Win count: " + wins_counter, Math.floor(A.f3 + A.hw / 2), Math.floor((A.f4 + A.nI / 2) * 2.1));
 | ||||
| const { groups } = replaceOne(/((?<canvas>\w+)\.textAlign=\w+,\2\.textBaseline=\w+,\w+\((?<x>(?<coords>\w+).\w+),(?<y>\4.\w+),(?<w>\4.\w+),(?<h>\4.\w+),[^)]+\)),(?<end>(?<isMenuOpened>\w+)\)\))/g, '$1, ' + | ||||
| '$<canvas>.imageSmoothingEnabled = true, ' + | ||||
| '$<canvas>.drawImage(settingsGearIcon, $<x>-$<w>/2, $<y>, $<h>, $<h>), ' + | ||||
| '$<canvas>.imageSmoothingEnabled = false, ' + | ||||
| '$<canvas>.font = "bold " + Math.floor($<h> * 0.4) + "px " + settings.fontName, ' + | ||||
| '(!$<isMenuOpened> && $<canvas>.fillText("Win count: " + wins_counter, Math.floor($<x> + $<w> / 2), Math.floor(($<y> + $<h> / 2) * 2.1))), ' + | ||||
| '$<end>'); | ||||
| // handle settings button click
 | ||||
| replaceOne(/(this\.\w+=function\((?<mouseX>\w+),(?<mouseY>\w+)\){[^}]+?)if\((?<coordsGet>\w+=\w+\(\)),(?<isMenuOpened>\w+)\)(?<end>{for\([^}]+"Lobby ")/g, | ||||
| '$1 $<coordsGet>; ' + | ||||
| `var gearIconX = ${groups.x}-${groups.w}/2; ` + | ||||
| // if (y > (C.f3-C.hw/2) && y < ((C.f3-C.hw/2)+C.nI) && A > C.f4 && A < (C.f4 + C.nI)) WindowManager.openWindow("settings");
 | ||||
| `if ($<mouseX> > gearIconX && $<mouseX> < (gearIconX+${groups.h}) && $<mouseY> > ${groups.y} && $<mouseY> < (${groups.y}+${groups.h})) return WindowManager.openWindow("settings"); ` + | ||||
| 'if ($<isMenuOpened>) $<end>'); | ||||
| 
 | ||||
| // Enforce custom font name
 | ||||
| script = script.replace(/"px sans-serif"/g, '"px " + settings.fontName'); | ||||
| 
 | ||||
| // Realistic bot names setting
 | ||||
| // matches c4[i] = c4[i].replace(a6U[dx], a6V[dx])
 | ||||
| replaceOne(/(((\w+)\[\w+\])=\2\.replace\(\w+(\[\w+\]),\w+\4\))/g, "$1; if (settings.realisticNames) $3 = realisticNames;") | ||||
| 
 | ||||
| // Hide all links in main menu depending on settings
 | ||||
| replaceOne(/(this\.\w+=function\(\){)((\w+\.\w+)\[2\]=\3\[3\]=\3\[4\]=(?<linksHidden>!this\.\w+\.\w+),)/g, | ||||
| "$1 if (settings.hideAllLinks) $3[0] = $3[1] = $<linksHidden>; else $3[0] = $3[1] = true; $2") | ||||
| 
 | ||||
| // Track donations -- todo
 | ||||
| 
 | ||||
| 
 | ||||
| // Display donations for a player when clicking on them in the leaderboard
 | ||||
| // match , 0 !== dG[x]) && fq.hB(x, 800, false, 0),
 | ||||
| replaceOne(/,(0!==\w+\[(\w+)\]\)&&\w+\.\w+\(\2,800,!1,0\),)/g, | ||||
| 	`, ${dictionary.gIsTeamGame} && displayDonationsHistory($2, ${dictionary.playerNames}, ${dictionary.gIsSingleplayer}), $1`); | ||||
| 
 | ||||
| console.log("Formatting code..."); | ||||
| 
 | ||||
| exposeVarsToGlobalScope = true; | ||||
| 
 | ||||
| if (exposeVarsToGlobalScope && script.startsWith("\"use strict\";    (function () {") && script.endsWith("})();")) | ||||
| 	script = script.slice("\"use strict\";    (function () {".length, -"})();".length); | ||||
| if (exposeVarsToGlobalScope && script.startsWith("(function () {") && script.endsWith("})();")) | ||||
| 	script = script.slice("(function () {".length, -"})();".length); | ||||
| 
 | ||||
| script = beautify(script, { | ||||
| 	"indent_size": "1", | ||||
| 	"indent_char": "\t", | ||||
| 	"max_preserve_newlines": "5", | ||||
| 	"preserve_newlines": true, | ||||
| 	"keep_array_indentation": false, | ||||
| 	"break_chained_methods": false, | ||||
| 	"indent_scripts": "normal", | ||||
| 	"brace_style": "collapse", | ||||
| 	//"brace_style": "expand",
 | ||||
| 	"space_before_conditional": true, | ||||
| 	"unescape_strings": false, | ||||
| 	"jslint_happy": false, | ||||
| 	"end_with_newline": false, | ||||
| 	"wrap_line_length": "250", | ||||
| 	"indent_inner_html": false, | ||||
| 	"comma_first": false, | ||||
| 	"e4x": false, | ||||
| 	"indent_empty_lines": false | ||||
| }); | ||||
| 
 | ||||
| fs.writeFileSync("./build/game.js", script); | ||||
| console.log("Wrote ./build/game.js"); | ||||
| console.log("Build done"); | ||||
|  | @ -0,0 +1,35 @@ | |||
| const downloadGame = () => new Promise(resolve => { | ||||
| // Download game
 | ||||
| // https://stackoverflow.com/a/11944984
 | ||||
| const https = require('https'); // or 'https' for https:// URLs
 | ||||
| const fs = require('fs'); | ||||
| 
 | ||||
| if (!fs.existsSync("./game")) fs.mkdirSync("./game"); | ||||
| const file = fs.createWriteStream("./game/latest.html"); | ||||
| // Download the game's code from the website
 | ||||
| const request = https.get("https://territorial.io", function (response) { | ||||
| 	// and save it to ./game/latest.html
 | ||||
| 	response.pipe(file); | ||||
| 
 | ||||
| 	// after download completed close filestream
 | ||||
| 	file.on("finish", () => { | ||||
| 		file.close(); | ||||
| 		console.log("Download Completed [downloaded to latest.html]"); | ||||
| 		fs.readFile('./game/latest.html', 'utf8', function (err, data) { | ||||
| 			if (err) throw err; | ||||
| 			// Extract the game script from the html
 | ||||
| 			// https://stackoverflow.com/a/14867897
 | ||||
| 			const scriptContent = data.substring( | ||||
| 				data.indexOf("<script>") + "<script>".length, | ||||
| 				data.lastIndexOf("</script>") | ||||
| 			); | ||||
| 			// Write the script to ./game/latest.js without any line breaks
 | ||||
| 			fs.writeFileSync("./game/latest.js", scriptContent.replace(/\r?\n|\r/g, "")); | ||||
| 			console.log("Wrote script to latest.js"); | ||||
| 			resolve(); | ||||
| 		}); | ||||
| 
 | ||||
| 	}); | ||||
| }); | ||||
| }); | ||||
| module.exports = downloadGame; | ||||
|  | @ -0,0 +1,2 @@ | |||
| console.log("Building FXClient"); | ||||
| require("./download.js")().then(() => require("./build.js")); | ||||
|  | @ -0,0 +1,953 @@ | |||
| { | ||||
|   "name": "fxclient", | ||||
|   "version": "0.5.3", | ||||
|   "lockfileVersion": 2, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "fxclient", | ||||
|       "version": "0.5.3", | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "js-beautify": "^1.14.11" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@isaacs/cliui": { | ||||
|       "version": "8.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", | ||||
|       "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", | ||||
|       "dependencies": { | ||||
|         "string-width": "^5.1.2", | ||||
|         "string-width-cjs": "npm:string-width@^4.2.0", | ||||
|         "strip-ansi": "^7.0.1", | ||||
|         "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", | ||||
|         "wrap-ansi": "^8.1.0", | ||||
|         "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/@one-ini/wasm": { | ||||
|       "version": "0.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", | ||||
|       "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" | ||||
|     }, | ||||
|     "node_modules/@pkgjs/parseargs": { | ||||
|       "version": "0.11.0", | ||||
|       "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", | ||||
|       "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", | ||||
|       "optional": true, | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/abbrev": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", | ||||
|       "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", | ||||
|       "engines": { | ||||
|         "node": "^14.17.0 || ^16.13.0 || >=18.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ansi-regex": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", | ||||
|       "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/chalk/ansi-regex?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ansi-styles": { | ||||
|       "version": "6.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", | ||||
|       "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/chalk/ansi-styles?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/balanced-match": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", | ||||
|       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" | ||||
|     }, | ||||
|     "node_modules/brace-expansion": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", | ||||
|       "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", | ||||
|       "dependencies": { | ||||
|         "balanced-match": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/color-convert": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", | ||||
|       "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", | ||||
|       "dependencies": { | ||||
|         "color-name": "~1.1.4" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=7.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/color-name": { | ||||
|       "version": "1.1.4", | ||||
|       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | ||||
|       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" | ||||
|     }, | ||||
|     "node_modules/commander": { | ||||
|       "version": "10.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", | ||||
|       "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/config-chain": { | ||||
|       "version": "1.1.13", | ||||
|       "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", | ||||
|       "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", | ||||
|       "dependencies": { | ||||
|         "ini": "^1.3.4", | ||||
|         "proto-list": "~1.2.1" | ||||
|       } | ||||
|     }, | ||||
|     "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==", | ||||
|       "dependencies": { | ||||
|         "path-key": "^3.1.0", | ||||
|         "shebang-command": "^2.0.0", | ||||
|         "which": "^2.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/eastasianwidth": { | ||||
|       "version": "0.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", | ||||
|       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" | ||||
|     }, | ||||
|     "node_modules/editorconfig": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", | ||||
|       "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", | ||||
|       "dependencies": { | ||||
|         "@one-ini/wasm": "0.1.1", | ||||
|         "commander": "^10.0.0", | ||||
|         "minimatch": "9.0.1", | ||||
|         "semver": "^7.5.3" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "editorconfig": "bin/editorconfig" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/emoji-regex": { | ||||
|       "version": "9.2.2", | ||||
|       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", | ||||
|       "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" | ||||
|     }, | ||||
|     "node_modules/foreground-child": { | ||||
|       "version": "3.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", | ||||
|       "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", | ||||
|       "dependencies": { | ||||
|         "cross-spawn": "^7.0.0", | ||||
|         "signal-exit": "^4.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/isaacs" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/glob": { | ||||
|       "version": "10.3.10", | ||||
|       "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", | ||||
|       "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", | ||||
|       "dependencies": { | ||||
|         "foreground-child": "^3.1.0", | ||||
|         "jackspeak": "^2.3.5", | ||||
|         "minimatch": "^9.0.1", | ||||
|         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", | ||||
|         "path-scurry": "^1.10.1" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "glob": "dist/esm/bin.mjs" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=16 || 14 >=14.17" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/isaacs" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ini": { | ||||
|       "version": "1.3.8", | ||||
|       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", | ||||
|       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" | ||||
|     }, | ||||
|     "node_modules/is-fullwidth-code-point": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", | ||||
|       "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/isexe": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", | ||||
|       "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" | ||||
|     }, | ||||
|     "node_modules/jackspeak": { | ||||
|       "version": "2.3.6", | ||||
|       "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", | ||||
|       "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", | ||||
|       "dependencies": { | ||||
|         "@isaacs/cliui": "^8.0.2" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/isaacs" | ||||
|       }, | ||||
|       "optionalDependencies": { | ||||
|         "@pkgjs/parseargs": "^0.11.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/js-beautify": { | ||||
|       "version": "1.14.11", | ||||
|       "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.11.tgz", | ||||
|       "integrity": "sha512-rPogWqAfoYh1Ryqqh2agUpVfbxAhbjuN1SmU86dskQUKouRiggUTCO4+2ym9UPXllc2WAp0J+T5qxn7Um3lCdw==", | ||||
|       "dependencies": { | ||||
|         "config-chain": "^1.1.13", | ||||
|         "editorconfig": "^1.0.3", | ||||
|         "glob": "^10.3.3", | ||||
|         "nopt": "^7.2.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "css-beautify": "js/bin/css-beautify.js", | ||||
|         "html-beautify": "js/bin/html-beautify.js", | ||||
|         "js-beautify": "js/bin/js-beautify.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/lru-cache": { | ||||
|       "version": "10.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", | ||||
|       "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", | ||||
|       "engines": { | ||||
|         "node": "14 || >=16.14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/minimatch": { | ||||
|       "version": "9.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", | ||||
|       "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", | ||||
|       "dependencies": { | ||||
|         "brace-expansion": "^2.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=16 || 14 >=14.17" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/isaacs" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/minipass": { | ||||
|       "version": "7.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", | ||||
|       "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", | ||||
|       "engines": { | ||||
|         "node": ">=16 || 14 >=14.17" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/nopt": { | ||||
|       "version": "7.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", | ||||
|       "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", | ||||
|       "dependencies": { | ||||
|         "abbrev": "^2.0.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "nopt": "bin/nopt.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": "^14.17.0 || ^16.13.0 || >=18.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==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/path-scurry": { | ||||
|       "version": "1.10.1", | ||||
|       "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", | ||||
|       "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", | ||||
|       "dependencies": { | ||||
|         "lru-cache": "^9.1.1 || ^10.0.0", | ||||
|         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=16 || 14 >=14.17" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/isaacs" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/proto-list": { | ||||
|       "version": "1.2.4", | ||||
|       "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", | ||||
|       "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" | ||||
|     }, | ||||
|     "node_modules/semver": { | ||||
|       "version": "7.5.4", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", | ||||
|       "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", | ||||
|       "dependencies": { | ||||
|         "lru-cache": "^6.0.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "semver": "bin/semver.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/semver/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/shebang-command": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", | ||||
|       "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", | ||||
|       "dependencies": { | ||||
|         "shebang-regex": "^3.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/shebang-regex": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", | ||||
|       "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/signal-exit": { | ||||
|       "version": "4.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", | ||||
|       "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", | ||||
|       "engines": { | ||||
|         "node": ">=14" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/isaacs" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/string-width": { | ||||
|       "version": "5.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", | ||||
|       "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", | ||||
|       "dependencies": { | ||||
|         "eastasianwidth": "^0.2.0", | ||||
|         "emoji-regex": "^9.2.2", | ||||
|         "strip-ansi": "^7.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/sindresorhus" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/string-width-cjs": { | ||||
|       "name": "string-width", | ||||
|       "version": "4.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", | ||||
|       "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", | ||||
|       "dependencies": { | ||||
|         "emoji-regex": "^8.0.0", | ||||
|         "is-fullwidth-code-point": "^3.0.0", | ||||
|         "strip-ansi": "^6.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/string-width-cjs/node_modules/ansi-regex": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/string-width-cjs/node_modules/emoji-regex": { | ||||
|       "version": "8.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | ||||
|       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" | ||||
|     }, | ||||
|     "node_modules/string-width-cjs/node_modules/strip-ansi": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|       "dependencies": { | ||||
|         "ansi-regex": "^5.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/strip-ansi": { | ||||
|       "version": "7.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", | ||||
|       "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", | ||||
|       "dependencies": { | ||||
|         "ansi-regex": "^6.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/chalk/strip-ansi?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/strip-ansi-cjs": { | ||||
|       "name": "strip-ansi", | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|       "dependencies": { | ||||
|         "ansi-regex": "^5.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/which": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", | ||||
|       "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", | ||||
|       "dependencies": { | ||||
|         "isexe": "^2.0.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "node-which": "bin/node-which" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/wrap-ansi": { | ||||
|       "version": "8.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", | ||||
|       "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", | ||||
|       "dependencies": { | ||||
|         "ansi-styles": "^6.1.0", | ||||
|         "string-width": "^5.0.1", | ||||
|         "strip-ansi": "^7.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=12" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/chalk/wrap-ansi?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/wrap-ansi-cjs": { | ||||
|       "name": "wrap-ansi", | ||||
|       "version": "7.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", | ||||
|       "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", | ||||
|       "dependencies": { | ||||
|         "ansi-styles": "^4.0.0", | ||||
|         "string-width": "^4.1.0", | ||||
|         "strip-ansi": "^6.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/chalk/wrap-ansi?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { | ||||
|       "version": "5.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|       "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { | ||||
|       "version": "4.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", | ||||
|       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", | ||||
|       "dependencies": { | ||||
|         "color-convert": "^2.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/chalk/ansi-styles?sponsor=1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { | ||||
|       "version": "8.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | ||||
|       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" | ||||
|     }, | ||||
|     "node_modules/wrap-ansi-cjs/node_modules/string-width": { | ||||
|       "version": "4.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", | ||||
|       "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", | ||||
|       "dependencies": { | ||||
|         "emoji-regex": "^8.0.0", | ||||
|         "is-fullwidth-code-point": "^3.0.0", | ||||
|         "strip-ansi": "^6.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|       "dependencies": { | ||||
|         "ansi-regex": "^5.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/yallist": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||
|       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||||
|     } | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@isaacs/cliui": { | ||||
|       "version": "8.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", | ||||
|       "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", | ||||
|       "requires": { | ||||
|         "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" | ||||
|       } | ||||
|     }, | ||||
|     "@one-ini/wasm": { | ||||
|       "version": "0.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", | ||||
|       "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==" | ||||
|     }, | ||||
|     "@pkgjs/parseargs": { | ||||
|       "version": "0.11.0", | ||||
|       "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", | ||||
|       "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", | ||||
|       "optional": true | ||||
|     }, | ||||
|     "abbrev": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", | ||||
|       "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==" | ||||
|     }, | ||||
|     "ansi-regex": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", | ||||
|       "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" | ||||
|     }, | ||||
|     "ansi-styles": { | ||||
|       "version": "6.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", | ||||
|       "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" | ||||
|     }, | ||||
|     "balanced-match": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", | ||||
|       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" | ||||
|     }, | ||||
|     "brace-expansion": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", | ||||
|       "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", | ||||
|       "requires": { | ||||
|         "balanced-match": "^1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "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==" | ||||
|     }, | ||||
|     "commander": { | ||||
|       "version": "10.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", | ||||
|       "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" | ||||
|     }, | ||||
|     "config-chain": { | ||||
|       "version": "1.1.13", | ||||
|       "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", | ||||
|       "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", | ||||
|       "requires": { | ||||
|         "ini": "^1.3.4", | ||||
|         "proto-list": "~1.2.1" | ||||
|       } | ||||
|     }, | ||||
|     "cross-spawn": { | ||||
|       "version": "7.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", | ||||
|       "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", | ||||
|       "requires": { | ||||
|         "path-key": "^3.1.0", | ||||
|         "shebang-command": "^2.0.0", | ||||
|         "which": "^2.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "eastasianwidth": { | ||||
|       "version": "0.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", | ||||
|       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" | ||||
|     }, | ||||
|     "editorconfig": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", | ||||
|       "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", | ||||
|       "requires": { | ||||
|         "@one-ini/wasm": "0.1.1", | ||||
|         "commander": "^10.0.0", | ||||
|         "minimatch": "9.0.1", | ||||
|         "semver": "^7.5.3" | ||||
|       } | ||||
|     }, | ||||
|     "emoji-regex": { | ||||
|       "version": "9.2.2", | ||||
|       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", | ||||
|       "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" | ||||
|     }, | ||||
|     "foreground-child": { | ||||
|       "version": "3.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", | ||||
|       "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", | ||||
|       "requires": { | ||||
|         "cross-spawn": "^7.0.0", | ||||
|         "signal-exit": "^4.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "glob": { | ||||
|       "version": "10.3.10", | ||||
|       "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", | ||||
|       "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", | ||||
|       "requires": { | ||||
|         "foreground-child": "^3.1.0", | ||||
|         "jackspeak": "^2.3.5", | ||||
|         "minimatch": "^9.0.1", | ||||
|         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", | ||||
|         "path-scurry": "^1.10.1" | ||||
|       } | ||||
|     }, | ||||
|     "ini": { | ||||
|       "version": "1.3.8", | ||||
|       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", | ||||
|       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" | ||||
|     }, | ||||
|     "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==" | ||||
|     }, | ||||
|     "isexe": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", | ||||
|       "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" | ||||
|     }, | ||||
|     "jackspeak": { | ||||
|       "version": "2.3.6", | ||||
|       "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", | ||||
|       "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", | ||||
|       "requires": { | ||||
|         "@isaacs/cliui": "^8.0.2", | ||||
|         "@pkgjs/parseargs": "^0.11.0" | ||||
|       } | ||||
|     }, | ||||
|     "js-beautify": { | ||||
|       "version": "1.14.11", | ||||
|       "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.11.tgz", | ||||
|       "integrity": "sha512-rPogWqAfoYh1Ryqqh2agUpVfbxAhbjuN1SmU86dskQUKouRiggUTCO4+2ym9UPXllc2WAp0J+T5qxn7Um3lCdw==", | ||||
|       "requires": { | ||||
|         "config-chain": "^1.1.13", | ||||
|         "editorconfig": "^1.0.3", | ||||
|         "glob": "^10.3.3", | ||||
|         "nopt": "^7.2.0" | ||||
|       } | ||||
|     }, | ||||
|     "lru-cache": { | ||||
|       "version": "10.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", | ||||
|       "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" | ||||
|     }, | ||||
|     "minimatch": { | ||||
|       "version": "9.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", | ||||
|       "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", | ||||
|       "requires": { | ||||
|         "brace-expansion": "^2.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "minipass": { | ||||
|       "version": "7.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", | ||||
|       "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" | ||||
|     }, | ||||
|     "nopt": { | ||||
|       "version": "7.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", | ||||
|       "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", | ||||
|       "requires": { | ||||
|         "abbrev": "^2.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "path-key": { | ||||
|       "version": "3.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", | ||||
|       "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" | ||||
|     }, | ||||
|     "path-scurry": { | ||||
|       "version": "1.10.1", | ||||
|       "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", | ||||
|       "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", | ||||
|       "requires": { | ||||
|         "lru-cache": "^9.1.1 || ^10.0.0", | ||||
|         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "proto-list": { | ||||
|       "version": "1.2.4", | ||||
|       "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", | ||||
|       "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" | ||||
|     }, | ||||
|     "semver": { | ||||
|       "version": "7.5.4", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", | ||||
|       "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", | ||||
|       "requires": { | ||||
|         "lru-cache": "^6.0.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "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" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "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==", | ||||
|       "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==" | ||||
|     }, | ||||
|     "signal-exit": { | ||||
|       "version": "4.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", | ||||
|       "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" | ||||
|     }, | ||||
|     "string-width": { | ||||
|       "version": "5.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", | ||||
|       "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", | ||||
|       "requires": { | ||||
|         "eastasianwidth": "^0.2.0", | ||||
|         "emoji-regex": "^9.2.2", | ||||
|         "strip-ansi": "^7.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "string-width-cjs": { | ||||
|       "version": "npm:string-width@4.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", | ||||
|       "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", | ||||
|       "requires": { | ||||
|         "emoji-regex": "^8.0.0", | ||||
|         "is-fullwidth-code-point": "^3.0.0", | ||||
|         "strip-ansi": "^6.0.1" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ansi-regex": { | ||||
|           "version": "5.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|           "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" | ||||
|         }, | ||||
|         "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==" | ||||
|         }, | ||||
|         "strip-ansi": { | ||||
|           "version": "6.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|           "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|           "requires": { | ||||
|             "ansi-regex": "^5.0.1" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "strip-ansi": { | ||||
|       "version": "7.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", | ||||
|       "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", | ||||
|       "requires": { | ||||
|         "ansi-regex": "^6.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "strip-ansi-cjs": { | ||||
|       "version": "npm:strip-ansi@6.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|       "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|       "requires": { | ||||
|         "ansi-regex": "^5.0.1" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ansi-regex": { | ||||
|           "version": "5.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|           "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "which": { | ||||
|       "version": "2.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", | ||||
|       "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", | ||||
|       "requires": { | ||||
|         "isexe": "^2.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "wrap-ansi": { | ||||
|       "version": "8.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", | ||||
|       "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", | ||||
|       "requires": { | ||||
|         "ansi-styles": "^6.1.0", | ||||
|         "string-width": "^5.0.1", | ||||
|         "strip-ansi": "^7.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "wrap-ansi-cjs": { | ||||
|       "version": "npm:wrap-ansi@7.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", | ||||
|       "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", | ||||
|       "requires": { | ||||
|         "ansi-styles": "^4.0.0", | ||||
|         "string-width": "^4.1.0", | ||||
|         "strip-ansi": "^6.0.0" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ansi-regex": { | ||||
|           "version": "5.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|           "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" | ||||
|         }, | ||||
|         "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" | ||||
|           } | ||||
|         }, | ||||
|         "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==" | ||||
|         }, | ||||
|         "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==", | ||||
|           "requires": { | ||||
|             "emoji-regex": "^8.0.0", | ||||
|             "is-fullwidth-code-point": "^3.0.0", | ||||
|             "strip-ansi": "^6.0.1" | ||||
|           } | ||||
|         }, | ||||
|         "strip-ansi": { | ||||
|           "version": "6.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|           "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|           "requires": { | ||||
|             "ansi-regex": "^5.0.1" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "yallist": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||
|       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | @ -0,0 +1,23 @@ | |||
| { | ||||
|   "name": "fxclient", | ||||
|   "version": "0.5.3", | ||||
|   "description": "A modded territorial.io client", | ||||
|   "main": "index.js", | ||||
|   "scripts": { | ||||
|     "build": "node index.js", | ||||
|     "build-only": "node build.js" | ||||
|   }, | ||||
|   "repository": { | ||||
|     "type": "git", | ||||
|     "url": "git+https://github.com/mohsenemx/FXclient.git" | ||||
|   }, | ||||
|   "author": "", | ||||
|   "license": "ISC", | ||||
|   "bugs": { | ||||
|     "url": "https://github.com/mohsenemx/FXclient/issues" | ||||
|   }, | ||||
|   "homepage": "https://github.com/mohsenemx/FXclient#readme", | ||||
|   "dependencies": { | ||||
|     "js-beautify": "^1.14.11" | ||||
|   } | ||||
| } | ||||
|  | @ -2,6 +2,8 @@ | |||
| You can still use the old version currently available at https://mohsenemx.github.io/FXclient/ and it's actually useful because the map upload button is still there, while the real creator removed it from the real game, so it is very useful on mobile devices where you can't drag and drop the map | ||||
| Maybe the project will be revived sometime but currently it will stay like this. | ||||
| 
 | ||||
| UPDATE: The project is in the process of being revived | ||||
| 
 | ||||
| 
 | ||||
| ## What is FX Client? | ||||
| FX Client is the first Territorial.io client, targeting better User Interface and better User Experience, It's basically Territorial.io but better. | ||||
|  |  | |||
| After Width: | Height: | Size: 17 KiB | 
|  | @ -0,0 +1,140 @@ | |||
| const fx_version = '0.6'; // FX Client Version
 | ||||
| const fx_update = 'Jan 31'; // FX Client Last Updated
 | ||||
| 
 | ||||
| 
 | ||||
| if (localStorage.getItem("fx_winCount") == undefined || localStorage.getItem("fx_winCount") == null) { | ||||
|     var wins_counter = 0; | ||||
|     console.log('Couldn\'t find a saved win data. creating one...'); | ||||
| } else if (localStorage.getItem("fx_winCount") != undefined || localStorage.getItem("fx_winCount") != null) { | ||||
|     var wins_counter = localStorage.getItem("fx_winCount"); | ||||
| } | ||||
| 
 | ||||
| var settings = { | ||||
|     "fontName": "Trebuchet MS", | ||||
|     "showBotDonations": false, | ||||
|     "hideAllLinks": false, | ||||
|     "realisticNames": false, | ||||
|     //"customMapFileBtn": true
 | ||||
| }; | ||||
| var settingsManager = new (function() { | ||||
|     var inputFields = { | ||||
|         fontName: document.getElementById("settings_fontname") | ||||
|     }; | ||||
|     var checkboxFields = { | ||||
|         showBotDonations: document.getElementById("settings_donations_bots"), | ||||
|         hideAllLinks: document.getElementById("settings_hidealllinks"), | ||||
|         realisticNames: document.getElementById("settings_realisticnames"), | ||||
|         //customMapFileBtn: document.getElementById("settings_custommapfileinput")
 | ||||
|     }; | ||||
|     this.save = function() { | ||||
|         Object.keys(inputFields).forEach(function(key) { settings[key] = inputFields[key].value.trim(); }); | ||||
|         Object.keys(checkboxFields).forEach(function(key) { settings[key] = checkboxFields[key].checked; }); | ||||
|         this.applySettings(); | ||||
|         WindowManager.closeWindow("settings"); | ||||
|         localStorage.setItem("fx_settings", JSON.stringify(settings)); | ||||
|         // should probably firgure out a way to do this without reloading - // You can't do it, localstorages REQUIRE you to reload
 | ||||
|         window.location.reload(); | ||||
|     }; | ||||
|     this.syncFields = function() { | ||||
|         Object.keys(inputFields).forEach(function(key) { inputFields[key].value = settings[key]; }); | ||||
|         Object.keys(checkboxFields).forEach(function(key) { checkboxFields[key].checked = settings[key]; }); | ||||
|     }; | ||||
|     this.resetAll = function() { | ||||
|         if (!confirm("Are you Really SURE you want to RESET ALL SETTINGS back to the default?")) return; | ||||
|         localStorage.removeItem("fx_settings"); | ||||
|         window.location.reload(); | ||||
|     }; | ||||
|     this.applySettings = function() { | ||||
|         //setVarByName("bu", "px " + settings.fontName);
 | ||||
|     }; | ||||
| }); | ||||
| function removeWins() { | ||||
|     var confirm1 = confirm('Do you really want to reset your Wins?'); | ||||
|     if (confirm1) { | ||||
|         wins_counter = 0; | ||||
|         localStorage.removeItem('fx_winCount'); | ||||
|         alert("Successfully reset wins"); | ||||
|     } | ||||
| } | ||||
| var WindowManager = new (function() { | ||||
|     var windows = {}; | ||||
|     this.add = function(newWindow) { | ||||
|         windows[newWindow.name] = newWindow; | ||||
|         windows[newWindow.name].isOpen = false; | ||||
|     }; | ||||
|     this.openWindow = function(windowName, ...args) { | ||||
|         if (windows[windowName].isOpen === true) return; | ||||
|         if (windows[windowName].beforeOpen !== undefined) windows[windowName].beforeOpen(...args); | ||||
|         windows[windowName].isOpen = true; | ||||
|         windows[windowName].element.style.display = null; | ||||
|     }; | ||||
|     this.closeWindow = function(windowName) { | ||||
|         if (windows[windowName].isOpen === false) return; | ||||
|         windows[windowName].isOpen = false; | ||||
|         windows[windowName].element.style.display = "none"; | ||||
|     }; | ||||
|     this.closeAll = function() { | ||||
|         Object.values(windows).forEach(function(windowObj) { | ||||
|             WindowManager.closeWindow(windowObj.name); | ||||
|         }); | ||||
|     }; | ||||
| }); | ||||
| WindowManager.add({ | ||||
|     name: "settings", | ||||
|     element: document.querySelector(".settings"), | ||||
|     beforeOpen: function() { settingsManager.syncFields(); } | ||||
| }); | ||||
| WindowManager.add({ | ||||
|     name: "donationHistory", | ||||
|     element: document.querySelector("#donationhistory"), | ||||
|     beforeOpen: function(isSingleplayer) { | ||||
|         document.getElementById("donationhistory_note").style.display = ((settings.showBotDonations || /*getVarByName("dt")*/ isSingleplayer) ? "none" : "block"); | ||||
|     } | ||||
| }); | ||||
| document.getElementById("canvasA").addEventListener("mousedown", WindowManager.closeAll); | ||||
| document.getElementById("canvasA").addEventListener("touchstart", WindowManager.closeAll); | ||||
| var settingsGearIcon = document.createElement('img'); | ||||
| settingsGearIcon.setAttribute('src', 'geari_white.png'); | ||||
| 
 | ||||
| var donationsTracker = new (function(){ | ||||
|     this.donationHistory = Array(); | ||||
|     // fill the array with empty arrays with length of 3
 | ||||
|     for (var i = 0; i < 512; i++) this.donationHistory.push([]); | ||||
|     // from inside of game:
 | ||||
|     // ((!gE[g].startsWith("[Bot] ") || settings.showBotDonations) && donationsTracker.logDonation(g,k,x))
 | ||||
|     this.logDonation = function(senderID, receiverID, amount) { | ||||
|         this.donationHistory[receiverID].push([senderID,amount]); | ||||
|     }; | ||||
|     this.getRecipientHistoryOf = function(playerID) { | ||||
|         return this.donationHistory[playerID]; | ||||
|     }; | ||||
| }); | ||||
| // usage from inside: displayDonationsHistory(Y, gE);
 | ||||
| function displayDonationsHistory(playerID, playerNames, isSingleplayer) { | ||||
|     var history = donationsTracker.getRecipientHistoryOf(playerID); | ||||
|     console.log("History for " + playerNames[playerID] + ":"); | ||||
|     console.log(history); | ||||
|     document.querySelector("#donationhistory h1").innerHTML = "Donation history for " + playerNames[playerID]; | ||||
|     var historyText = ""; | ||||
|     history.reverse(); | ||||
|     if (history.length > 0) history.forEach(function(historyItem, index) { | ||||
|         historyText += (history.length - index) + ". Received " + historyItem[1] + " resources from " + playerNames[historyItem[0]] + "<br>"; | ||||
|     }); | ||||
|     else historyText = "Nothing to display"; | ||||
|     document.querySelector("#donationhistory p#donationhistory_text").innerHTML = historyText; | ||||
|     WindowManager.openWindow("donationHistory", isSingleplayer); | ||||
| } | ||||
| 
 | ||||
| var utils = new (function() { | ||||
|     this.getMaxTroops = function(playerTerritories, playerID) { return playerTerritories[playerID]*150; }; | ||||
|     this.getDensity = function(playerBalances, playerTerritories, playerID) { | ||||
|         return (Math.floor((playerBalances[playerID] / ((playerTerritories[playerID] === 0 ? 1 : playerTerritories[playerID]) * 150)) * 100) + "%"); | ||||
|     }; | ||||
| }); | ||||
| 
 | ||||
| if (localStorage.getItem("fx_settings") !== null) { | ||||
|     settings = {...settings, ...JSON.parse(localStorage.getItem("fx_settings"))}; | ||||
| } | ||||
| //settingsManager.applySettings();
 | ||||
| 
 | ||||
| console.log('Successfully loaded FX Client'); | ||||
| After Width: | Height: | Size: 15 KiB | 
|  | @ -0,0 +1,95 @@ | |||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <!-- Google tag (gtag.js) --> | ||||
|     <script async src="https://www.googletagmanager.com/gtag/js?id=G-Q96FGB3L05"></script> | ||||
|     <script> | ||||
|         window.dataLayer = window.dataLayer || []; | ||||
|         function gtag() { dataLayer.push(arguments); } | ||||
|         gtag('js', new Date()); | ||||
|         gtag('config', 'G-Q96FGB3L05'); | ||||
|     </script> | ||||
|     <meta charset="utf-8" /> | ||||
|     <title>FX Client</title> | ||||
|     <meta name="description" content="Modified Version of Territorial.io - FX Client"> | ||||
|     <meta name="keywords" | ||||
|         content="territorial.io,territory games,territorial io,map games,conquest games,conquest game,david tschacher,territorial,territory game,io game,io games,territory.io,territory io,territory games io"> | ||||
|     <meta name="author" content="MohsenEMX, peshomir,orlemley1, David Tschacher"> | ||||
|     <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> | ||||
|      | ||||
|     <meta name="og:image" content="https://fxclient.cf/logo.png" /> | ||||
|     <meta property="og:url" content="https://fxclient.cf"> | ||||
|     <meta property="og:type" content="website"> | ||||
|     <meta property="og:title" content="FXclient.cf"> | ||||
|     <meta property="og:description" content="Modified Version of Territorial.io - FX Client"> | ||||
|     <meta property="og:image" content="https://fxclient.cf/logo.png"> | ||||
|     <meta name="twitter:card" content="summary_large_image"> | ||||
|     <meta name="twitter:title" content="FX Client"> | ||||
|     <meta name="twitter:description" content="Modified Version of Territorial.io - FX Client"> | ||||
|     <meta name="twitter:image" content="https://fxclient.cf/logo.png"> | ||||
|     <meta itemprop="name" content="FXclient.cf"> | ||||
|     <meta itemprop="description" content="Modified Version of Territorial.io - FX Client"> | ||||
|     <meta itemprop="image" content="https://fxclient.cf/logo.png"> | ||||
|      | ||||
|     <!-- FX Client CSS --> | ||||
|     <link rel="stylesheet" href="main.css"> | ||||
|     <!-- Game CSS --> | ||||
|     <style> | ||||
|         html, | ||||
|         body { | ||||
|             overflow: hidden; | ||||
|             padding: 0; | ||||
|             margin: 0; | ||||
|             background: rgb(0, 0, 0); | ||||
|             touch-action: none; | ||||
|             -webkit-touch-callout: none; | ||||
|             -webkit-user-select: none; | ||||
|             -khtml-user-select: none; | ||||
|             -moz-user-select: none; | ||||
|             -ms-user-select: none; | ||||
|             user-select: none; | ||||
|         } | ||||
|     </style> | ||||
| </head> | ||||
| 
 | ||||
| <body onload="aiCommand746(0);"> | ||||
|     <canvas id="canvasA" width="128" height="128"></canvas> | ||||
|     <div class="window flex settings" style="display:none"> | ||||
|         <h1>Settings</h1> | ||||
|         <div class="scrollable"> | ||||
|             <label title="Name of the font to be used for rendering. For example: Arial, Georgia, sans-serif, serif, Comic Sans MS, ..."> | ||||
|                 Font name: <input id="settings_fontname" placeholder="Enter font name" value="Arial"></label><br> | ||||
|             <br><button onclick="removeWins()">Reset Wins Counter</button><br><br> | ||||
|             <label for="settings_donations_bots" class="checkbox"> | ||||
|                 Display donations from bots in donation history viewer (applies to multiplayer only) | ||||
|                 <input type="checkbox" id="settings_donations_bots"><span class="checkmark"></span> | ||||
|             </label><br> | ||||
|             <label for="settings_hidealllinks" class="checkbox"> | ||||
|                 Hide Links option also hides app store links | ||||
|                 <input type="checkbox" id="settings_hidealllinks"><span class="checkmark"></span> | ||||
|             </label><br> | ||||
|             <label for="settings_realisticnames" class="checkbox"> | ||||
|                 Realistic Bot Names | ||||
|                 <input type="checkbox" id="settings_realisticnames"><span class="checkmark"></span> | ||||
|             </label><br> | ||||
|             <!--<label for="settings_custommapfileinput" class="checkbox"> | ||||
|                 Bring back the custom map file button after the creator removed it in 1.83.0 | ||||
|                 <input type="checkbox" id="settings_custommapfileinput"><span class="checkmark"></span> | ||||
|             </label>--> | ||||
|         </div> | ||||
|         <hr> | ||||
|         <footer> | ||||
|             <button onclick="settingsManager.resetAll()">Reset Settings</button> | ||||
|             <button onclick="settingsManager.save()">Save Settings</button> | ||||
|         </footer> | ||||
|     </div> | ||||
|     <div class="window scrollable" id="donationhistory" style="display:none"> | ||||
|         <h1>Donation history for </h1> | ||||
|         <p id="donationhistory_note">Note: donations from bots are not shown here</p> | ||||
|         <p id="donationhistory_text"></p> | ||||
|     </div> | ||||
|     <script src="variables.js"></script> | ||||
|     <script src="fx_core.js"></script> | ||||
|     <script src="game.js"></script> | ||||
| </body> | ||||
| </html> | ||||
|  | @ -0,0 +1,149 @@ | |||
| .scrollable { | ||||
| 	overflow-y: auto; | ||||
| } | ||||
| 
 | ||||
| .window { | ||||
| 	position        : fixed; | ||||
| 	background-color: rgba(0, 0, 0, 0.7); | ||||
| 	width           : 90%; | ||||
| 	top             : 0; | ||||
| 	color           : white; | ||||
| 	font-family     : 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif; | ||||
| 	margin          : auto; | ||||
| 	margin-top      : 20px; | ||||
| 	right           : 0; | ||||
| 	left            : 0; | ||||
| 	padding         : 15px; | ||||
| 	box-sizing      : border-box; | ||||
| 	border-color    : white; | ||||
| 	border-style    : solid; | ||||
| 	border-width    : 2px; | ||||
| 	border-width    : calc(0.15 * (1vw + 1vh)); | ||||
| 	font-size       : 20px; | ||||
| 	font-size       : calc(14px + ((0.4 * (0.8vw + 1vh)) + 0.15rem)); | ||||
| 	max-height      : 90%; | ||||
| 	transition      : 0.2s; | ||||
| 	z-index         : 10; | ||||
| } | ||||
| 
 | ||||
| .window.flex { | ||||
| 	display       : flex; | ||||
| 	flex-direction: column; | ||||
| } | ||||
| 
 | ||||
| hr { | ||||
| 	width: 100%; | ||||
| } | ||||
| 
 | ||||
| .window button, | ||||
| .window input { | ||||
| 	background-color: rgba(0, 0, 0, 0.7); | ||||
| 	color           : white; | ||||
| 	font-size       : 20px; | ||||
| 	font-size       : 0.9em; | ||||
| 	padding         : 0.4rem; | ||||
| 	transition      : 0.2s; | ||||
| 	border          : 1px solid #fff; | ||||
| 	border-radius   : 5px; | ||||
| } | ||||
| 
 | ||||
| h1 { | ||||
| 	font-weight       : normal; | ||||
| 	margin-block-start: 0.5em; | ||||
| 	margin-block-end  : 0.5em; | ||||
| 	transition        : 0.2s; | ||||
| } | ||||
| 
 | ||||
| canvas { | ||||
| 	transition: 0.2s; | ||||
| } | ||||
| 
 | ||||
| button:hover { | ||||
| 	background-color: rgba(222, 222, 222, 0.52); | ||||
| 	border-radius   : 8px; | ||||
| } | ||||
| 
 | ||||
| .window input:focus { | ||||
| 	background-color: rgba(222, 222, 222, 0.36); | ||||
| 	border-radius   : 8px; | ||||
| } | ||||
| 
 | ||||
| input#userna, | ||||
| input#inputfilebtn { | ||||
| 	transition: 0.2s | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Checkbox */ | ||||
| label.checkbox { | ||||
| 	display        : block; | ||||
| 	position       : relative; | ||||
| 	padding-left   : 35px; | ||||
| 	/*margin-bottom: 12px;*/ | ||||
| 	cursor         : pointer; | ||||
| } | ||||
| 
 | ||||
| label.checkbox input { | ||||
| 	position: absolute; | ||||
| 	opacity : 0; | ||||
| 	cursor  : pointer; | ||||
| 	height  : 0; | ||||
| 	width   : 0; | ||||
| } | ||||
| 
 | ||||
| .checkmark { | ||||
| 	position          : absolute; | ||||
| 	top               : 0; | ||||
| 	left              : 0; | ||||
| 	height            : 25px; | ||||
| 	width             : 25px; | ||||
| 	/*background-color: #eee;*/ | ||||
| 	background-color  : rgb(255 255 255 / 70%); | ||||
| } | ||||
| 
 | ||||
| label.checkbox:hover .checkmark { | ||||
| 	background-color: #ccc; | ||||
| } | ||||
| 
 | ||||
| label.checkbox input:checked~.checkmark { | ||||
| 	/*background-color: #2196F3;*/ | ||||
| 	background-color: rgba(0, 255, 0, 0.5); | ||||
| } | ||||
| 
 | ||||
| .checkmark::after { | ||||
| 	content : ""; | ||||
| 	position: absolute; | ||||
| 	display : none; | ||||
| } | ||||
| 
 | ||||
| label.checkbox input:checked~.checkmark:after { | ||||
| 	display: block; | ||||
| } | ||||
| 
 | ||||
| label.checkbox .checkmark:after { | ||||
| 	left             : 9px; | ||||
| 	top              : 5px; | ||||
| 	width            : 5px; | ||||
| 	height           : 10px; | ||||
| 	border           : solid white; | ||||
| 	border-width     : 0 3px 3px 0; | ||||
| 	-webkit-transform: rotate(45deg); | ||||
| 	-ms-transform    : rotate(45deg); | ||||
| 	transform        : rotate(45deg); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Custom Map Button */ | ||||
| ::-webkit-file-upload-button { | ||||
| 	color           : white; | ||||
| 	background-color: #120076; | ||||
| 	border          : 2px solid #fff; | ||||
| 	top             : 0; | ||||
| 	bottom          : 0; | ||||
| 	padding-top     : 20px; | ||||
| 	padding-bottom  : 20px; | ||||
| 	padding-left    : 20px; | ||||
| 	padding-right   : 20px; | ||||
| 	font-family     : 'Trebuchet MS', 'Arial Narrow', Arial, sans-serif; | ||||
| 	text-align      : center; | ||||
| } | ||||