hi crack
parent
1ccddabf78
commit
e387c6e4ed
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"typescript.preferences.importModuleSpecifierEnding": "js"
|
||||
}
|
11
package.json
11
package.json
|
@ -4,18 +4,21 @@
|
|||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
"start": "tsx src"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"inquirer": "^9.2.2",
|
||||
"json5": "^2.2.3",
|
||||
"sharp": "^0.32.1",
|
||||
"yargs": "^17.7.2"
|
||||
"sharp": "^0.32.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.1.1"
|
||||
"@types/inquirer": "^9.0.3",
|
||||
"@types/node": "^20.1.1",
|
||||
"tsx": "^3.12.7",
|
||||
"typescript": "^5.0.4"
|
||||
},
|
||||
"type": "module"
|
||||
}
|
||||
|
|
600
pnpm-lock.yaml
600
pnpm-lock.yaml
|
@ -1,32 +1,285 @@
|
|||
lockfileVersion: '6.0'
|
||||
|
||||
dependencies:
|
||||
inquirer:
|
||||
specifier: ^9.2.2
|
||||
version: 9.2.2
|
||||
json5:
|
||||
specifier: ^2.2.3
|
||||
version: 2.2.3
|
||||
sharp:
|
||||
specifier: ^0.32.1
|
||||
version: 0.32.1
|
||||
yargs:
|
||||
specifier: ^17.7.2
|
||||
version: 17.7.2
|
||||
|
||||
devDependencies:
|
||||
'@types/inquirer':
|
||||
specifier: ^9.0.3
|
||||
version: 9.0.3
|
||||
'@types/node':
|
||||
specifier: ^20.1.1
|
||||
version: 20.1.1
|
||||
tsx:
|
||||
specifier: ^3.12.7
|
||||
version: 3.12.7
|
||||
typescript:
|
||||
specifier: ^5.0.4
|
||||
version: 5.0.4
|
||||
|
||||
packages:
|
||||
|
||||
/@esbuild-kit/cjs-loader@2.4.2:
|
||||
resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==}
|
||||
dependencies:
|
||||
'@esbuild-kit/core-utils': 3.1.0
|
||||
get-tsconfig: 4.5.0
|
||||
dev: true
|
||||
|
||||
/@esbuild-kit/core-utils@3.1.0:
|
||||
resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==}
|
||||
dependencies:
|
||||
esbuild: 0.17.18
|
||||
source-map-support: 0.5.21
|
||||
dev: true
|
||||
|
||||
/@esbuild-kit/esm-loader@2.5.5:
|
||||
resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==}
|
||||
dependencies:
|
||||
'@esbuild-kit/core-utils': 3.1.0
|
||||
get-tsconfig: 4.5.0
|
||||
dev: true
|
||||
|
||||
/@esbuild/android-arm64@0.17.18:
|
||||
resolution: {integrity: sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm@0.17.18:
|
||||
resolution: {integrity: sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-x64@0.17.18:
|
||||
resolution: {integrity: sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-arm64@0.17.18:
|
||||
resolution: {integrity: sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-x64@0.17.18:
|
||||
resolution: {integrity: sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-arm64@0.17.18:
|
||||
resolution: {integrity: sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-x64@0.17.18:
|
||||
resolution: {integrity: sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm64@0.17.18:
|
||||
resolution: {integrity: sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm@0.17.18:
|
||||
resolution: {integrity: sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ia32@0.17.18:
|
||||
resolution: {integrity: sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-loong64@0.17.18:
|
||||
resolution: {integrity: sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-mips64el@0.17.18:
|
||||
resolution: {integrity: sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ppc64@0.17.18:
|
||||
resolution: {integrity: sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-riscv64@0.17.18:
|
||||
resolution: {integrity: sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-s390x@0.17.18:
|
||||
resolution: {integrity: sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-x64@0.17.18:
|
||||
resolution: {integrity: sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/netbsd-x64@0.17.18:
|
||||
resolution: {integrity: sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/openbsd-x64@0.17.18:
|
||||
resolution: {integrity: sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/sunos-x64@0.17.18:
|
||||
resolution: {integrity: sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-arm64@0.17.18:
|
||||
resolution: {integrity: sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-ia32@0.17.18:
|
||||
resolution: {integrity: sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-x64@0.17.18:
|
||||
resolution: {integrity: sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@types/inquirer@9.0.3:
|
||||
resolution: {integrity: sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==}
|
||||
dependencies:
|
||||
'@types/through': 0.0.30
|
||||
rxjs: 7.8.1
|
||||
dev: true
|
||||
|
||||
/@types/node@20.1.1:
|
||||
resolution: {integrity: sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==}
|
||||
dev: true
|
||||
|
||||
/@types/through@0.0.30:
|
||||
resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
|
||||
dependencies:
|
||||
'@types/node': 20.1.1
|
||||
dev: true
|
||||
|
||||
/ansi-escapes@4.3.2:
|
||||
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
type-fest: 0.21.3
|
||||
dev: false
|
||||
|
||||
/ansi-regex@5.0.1:
|
||||
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/ansi-regex@6.0.1:
|
||||
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/ansi-styles@4.3.0:
|
||||
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
||||
engines: {node: '>=8'}
|
||||
|
@ -46,6 +299,10 @@ packages:
|
|||
readable-stream: 3.6.2
|
||||
dev: false
|
||||
|
||||
/buffer-from@1.1.2:
|
||||
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
|
||||
dev: true
|
||||
|
||||
/buffer@5.7.1:
|
||||
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
||||
dependencies:
|
||||
|
@ -53,17 +310,47 @@ packages:
|
|||
ieee754: 1.2.1
|
||||
dev: false
|
||||
|
||||
/chalk@4.1.2:
|
||||
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
ansi-styles: 4.3.0
|
||||
supports-color: 7.2.0
|
||||
dev: false
|
||||
|
||||
/chalk@5.2.0:
|
||||
resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==}
|
||||
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
|
||||
dev: false
|
||||
|
||||
/chardet@0.7.0:
|
||||
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
|
||||
dev: false
|
||||
|
||||
/chownr@1.1.4:
|
||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||
dev: false
|
||||
|
||||
/cliui@8.0.1:
|
||||
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
|
||||
engines: {node: '>=12'}
|
||||
/cli-cursor@3.1.0:
|
||||
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 6.0.1
|
||||
wrap-ansi: 7.0.0
|
||||
restore-cursor: 3.1.0
|
||||
dev: false
|
||||
|
||||
/cli-spinners@2.9.0:
|
||||
resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/cli-width@4.0.0:
|
||||
resolution: {integrity: sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==}
|
||||
engines: {node: '>= 12'}
|
||||
dev: false
|
||||
|
||||
/clone@1.0.4:
|
||||
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
|
||||
engines: {node: '>=0.8'}
|
||||
dev: false
|
||||
|
||||
/color-convert@2.0.1:
|
||||
|
@ -104,6 +391,12 @@ packages:
|
|||
engines: {node: '>=4.0.0'}
|
||||
dev: false
|
||||
|
||||
/defaults@1.0.4:
|
||||
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
|
||||
dependencies:
|
||||
clone: 1.0.4
|
||||
dev: false
|
||||
|
||||
/detect-libc@2.0.1:
|
||||
resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
|
||||
engines: {node: '>=8'}
|
||||
|
@ -119,9 +412,39 @@ packages:
|
|||
once: 1.4.0
|
||||
dev: false
|
||||
|
||||
/escalade@3.1.1:
|
||||
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
|
||||
engines: {node: '>=6'}
|
||||
/esbuild@0.17.18:
|
||||
resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==}
|
||||
engines: {node: '>=12'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
optionalDependencies:
|
||||
'@esbuild/android-arm': 0.17.18
|
||||
'@esbuild/android-arm64': 0.17.18
|
||||
'@esbuild/android-x64': 0.17.18
|
||||
'@esbuild/darwin-arm64': 0.17.18
|
||||
'@esbuild/darwin-x64': 0.17.18
|
||||
'@esbuild/freebsd-arm64': 0.17.18
|
||||
'@esbuild/freebsd-x64': 0.17.18
|
||||
'@esbuild/linux-arm': 0.17.18
|
||||
'@esbuild/linux-arm64': 0.17.18
|
||||
'@esbuild/linux-ia32': 0.17.18
|
||||
'@esbuild/linux-loong64': 0.17.18
|
||||
'@esbuild/linux-mips64el': 0.17.18
|
||||
'@esbuild/linux-ppc64': 0.17.18
|
||||
'@esbuild/linux-riscv64': 0.17.18
|
||||
'@esbuild/linux-s390x': 0.17.18
|
||||
'@esbuild/linux-x64': 0.17.18
|
||||
'@esbuild/netbsd-x64': 0.17.18
|
||||
'@esbuild/openbsd-x64': 0.17.18
|
||||
'@esbuild/sunos-x64': 0.17.18
|
||||
'@esbuild/win32-arm64': 0.17.18
|
||||
'@esbuild/win32-ia32': 0.17.18
|
||||
'@esbuild/win32-x64': 0.17.18
|
||||
dev: true
|
||||
|
||||
/escape-string-regexp@5.0.0:
|
||||
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/expand-template@2.0.3:
|
||||
|
@ -129,19 +452,55 @@ packages:
|
|||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/external-editor@3.1.0:
|
||||
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
|
||||
engines: {node: '>=4'}
|
||||
dependencies:
|
||||
chardet: 0.7.0
|
||||
iconv-lite: 0.4.24
|
||||
tmp: 0.0.33
|
||||
dev: false
|
||||
|
||||
/figures@5.0.0:
|
||||
resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==}
|
||||
engines: {node: '>=14'}
|
||||
dependencies:
|
||||
escape-string-regexp: 5.0.0
|
||||
is-unicode-supported: 1.3.0
|
||||
dev: false
|
||||
|
||||
/fs-constants@1.0.0:
|
||||
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
|
||||
dev: false
|
||||
|
||||
/get-caller-file@2.0.5:
|
||||
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
|
||||
engines: {node: 6.* || 8.* || >= 10.*}
|
||||
dev: false
|
||||
/fsevents@2.3.2:
|
||||
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/get-tsconfig@4.5.0:
|
||||
resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==}
|
||||
dev: true
|
||||
|
||||
/github-from-package@0.0.0:
|
||||
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
|
||||
dev: false
|
||||
|
||||
/has-flag@4.0.0:
|
||||
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/iconv-lite@0.4.24:
|
||||
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
safer-buffer: 2.1.2
|
||||
dev: false
|
||||
|
||||
/ieee754@1.2.1:
|
||||
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
||||
dev: false
|
||||
|
@ -154,6 +513,27 @@ packages:
|
|||
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
|
||||
dev: false
|
||||
|
||||
/inquirer@9.2.2:
|
||||
resolution: {integrity: sha512-VV2ZOZe4ilLlOgEo7drIdzbi+EYJcNty0leF2vJq49zOW8+IoK1miJ+V5FjZY/X21Io29j66T/AiqHvS4tPIrw==}
|
||||
engines: {node: '>=14.18.0'}
|
||||
dependencies:
|
||||
ansi-escapes: 4.3.2
|
||||
chalk: 5.2.0
|
||||
cli-cursor: 3.1.0
|
||||
cli-width: 4.0.0
|
||||
external-editor: 3.1.0
|
||||
figures: 5.0.0
|
||||
lodash: 4.17.21
|
||||
mute-stream: 1.0.0
|
||||
ora: 5.4.1
|
||||
run-async: 2.4.1
|
||||
rxjs: 7.8.1
|
||||
string-width: 4.2.3
|
||||
strip-ansi: 7.0.1
|
||||
through: 2.3.8
|
||||
wrap-ansi: 6.2.0
|
||||
dev: false
|
||||
|
||||
/is-arrayish@0.3.2:
|
||||
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
|
||||
dev: false
|
||||
|
@ -163,12 +543,39 @@ packages:
|
|||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/is-interactive@1.0.0:
|
||||
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/is-unicode-supported@0.1.0:
|
||||
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/is-unicode-supported@1.3.0:
|
||||
resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/json5@2.2.3:
|
||||
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
|
||||
engines: {node: '>=6'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/lodash@4.17.21:
|
||||
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
|
||||
dev: false
|
||||
|
||||
/log-symbols@4.1.0:
|
||||
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
chalk: 4.1.2
|
||||
is-unicode-supported: 0.1.0
|
||||
dev: false
|
||||
|
||||
/lru-cache@6.0.0:
|
||||
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
||||
engines: {node: '>=10'}
|
||||
|
@ -176,6 +583,11 @@ packages:
|
|||
yallist: 4.0.0
|
||||
dev: false
|
||||
|
||||
/mimic-fn@2.1.0:
|
||||
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/mimic-response@3.1.0:
|
||||
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
@ -189,6 +601,11 @@ packages:
|
|||
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
|
||||
dev: false
|
||||
|
||||
/mute-stream@1.0.0:
|
||||
resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
|
||||
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
|
||||
dev: false
|
||||
|
||||
/napi-build-utils@1.0.2:
|
||||
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
|
||||
dev: false
|
||||
|
@ -210,6 +627,33 @@ packages:
|
|||
wrappy: 1.0.2
|
||||
dev: false
|
||||
|
||||
/onetime@5.1.2:
|
||||
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
|
||||
engines: {node: '>=6'}
|
||||
dependencies:
|
||||
mimic-fn: 2.1.0
|
||||
dev: false
|
||||
|
||||
/ora@5.4.1:
|
||||
resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
|
||||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
bl: 4.1.0
|
||||
chalk: 4.1.2
|
||||
cli-cursor: 3.1.0
|
||||
cli-spinners: 2.9.0
|
||||
is-interactive: 1.0.0
|
||||
is-unicode-supported: 0.1.0
|
||||
log-symbols: 4.1.0
|
||||
strip-ansi: 6.0.1
|
||||
wcwidth: 1.0.1
|
||||
dev: false
|
||||
|
||||
/os-tmpdir@1.0.2:
|
||||
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/prebuild-install@7.1.1:
|
||||
resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
|
||||
engines: {node: '>=10'}
|
||||
|
@ -255,15 +699,32 @@ packages:
|
|||
util-deprecate: 1.0.2
|
||||
dev: false
|
||||
|
||||
/require-directory@2.1.1:
|
||||
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
/restore-cursor@3.1.0:
|
||||
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
onetime: 5.1.2
|
||||
signal-exit: 3.0.7
|
||||
dev: false
|
||||
|
||||
/run-async@2.4.1:
|
||||
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
|
||||
engines: {node: '>=0.12.0'}
|
||||
dev: false
|
||||
|
||||
/rxjs@7.8.1:
|
||||
resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
|
||||
dependencies:
|
||||
tslib: 2.5.0
|
||||
|
||||
/safe-buffer@5.2.1:
|
||||
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
||||
dev: false
|
||||
|
||||
/safer-buffer@2.1.2:
|
||||
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||
dev: false
|
||||
|
||||
/semver@7.5.0:
|
||||
resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==}
|
||||
engines: {node: '>=10'}
|
||||
|
@ -287,6 +748,10 @@ packages:
|
|||
tunnel-agent: 0.6.0
|
||||
dev: false
|
||||
|
||||
/signal-exit@3.0.7:
|
||||
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
|
||||
dev: false
|
||||
|
||||
/simple-concat@1.0.1:
|
||||
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
|
||||
dev: false
|
||||
|
@ -305,6 +770,18 @@ packages:
|
|||
is-arrayish: 0.3.2
|
||||
dev: false
|
||||
|
||||
/source-map-support@0.5.21:
|
||||
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
|
||||
dependencies:
|
||||
buffer-from: 1.1.2
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
/source-map@0.6.1:
|
||||
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/string-width@4.2.3:
|
||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||
engines: {node: '>=8'}
|
||||
|
@ -327,11 +804,25 @@ packages:
|
|||
ansi-regex: 5.0.1
|
||||
dev: false
|
||||
|
||||
/strip-ansi@7.0.1:
|
||||
resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
ansi-regex: 6.0.1
|
||||
dev: false
|
||||
|
||||
/strip-json-comments@2.0.1:
|
||||
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: false
|
||||
|
||||
/supports-color@7.2.0:
|
||||
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
has-flag: 4.0.0
|
||||
dev: false
|
||||
|
||||
/tar-fs@2.1.1:
|
||||
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
|
||||
dependencies:
|
||||
|
@ -352,19 +843,61 @@ packages:
|
|||
readable-stream: 3.6.2
|
||||
dev: false
|
||||
|
||||
/through@2.3.8:
|
||||
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
|
||||
dev: false
|
||||
|
||||
/tmp@0.0.33:
|
||||
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
|
||||
engines: {node: '>=0.6.0'}
|
||||
dependencies:
|
||||
os-tmpdir: 1.0.2
|
||||
dev: false
|
||||
|
||||
/tslib@2.5.0:
|
||||
resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
|
||||
|
||||
/tsx@3.12.7:
|
||||
resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@esbuild-kit/cjs-loader': 2.4.2
|
||||
'@esbuild-kit/core-utils': 3.1.0
|
||||
'@esbuild-kit/esm-loader': 2.5.5
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
|
||||
/tunnel-agent@0.6.0:
|
||||
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
dev: false
|
||||
|
||||
/type-fest@0.21.3:
|
||||
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/typescript@5.0.4:
|
||||
resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==}
|
||||
engines: {node: '>=12.20'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/util-deprecate@1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
dev: false
|
||||
|
||||
/wrap-ansi@7.0.0:
|
||||
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
||||
engines: {node: '>=10'}
|
||||
/wcwidth@1.0.1:
|
||||
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
|
||||
dependencies:
|
||||
defaults: 1.0.4
|
||||
dev: false
|
||||
|
||||
/wrap-ansi@6.2.0:
|
||||
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
||||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
ansi-styles: 4.3.0
|
||||
string-width: 4.2.3
|
||||
|
@ -375,29 +908,6 @@ packages:
|
|||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||
dev: false
|
||||
|
||||
/y18n@5.0.8:
|
||||
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
/yallist@4.0.0:
|
||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||
dev: false
|
||||
|
||||
/yargs-parser@21.1.1:
|
||||
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/yargs@17.7.2:
|
||||
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
cliui: 8.0.1
|
||||
escalade: 3.1.1
|
||||
get-caller-file: 2.0.5
|
||||
require-directory: 2.1.1
|
||||
string-width: 4.2.3
|
||||
y18n: 5.0.8
|
||||
yargs-parser: 21.1.1
|
||||
dev: false
|
||||
|
|
|
@ -0,0 +1,177 @@
|
|||
import { copyFile, readFile } from 'fs/promises'
|
||||
import inquirer from 'inquirer'
|
||||
import { parseADOFAILevel } from './utils/parser.js'
|
||||
import {
|
||||
ActionType,
|
||||
DecorationEvent,
|
||||
LevelEvent,
|
||||
MoveDecorations,
|
||||
} from './types/events.js'
|
||||
import { join } from 'path'
|
||||
import { dirname } from 'path'
|
||||
import sharp from 'sharp'
|
||||
import { Level } from './types/level.js'
|
||||
|
||||
const { filePath } = await inquirer.prompt([
|
||||
{
|
||||
message: 'wow give me level file path',
|
||||
name: 'filePath',
|
||||
},
|
||||
])
|
||||
const levelDir = dirname(filePath)
|
||||
|
||||
const distPath = join(process.cwd(), 'dist')
|
||||
|
||||
console.log(filePath)
|
||||
|
||||
// todo functions
|
||||
// .filter(x=>x.tag.split(' ').includes(tag))
|
||||
// function findAndFilterDecorationEventWithTagReference(levelEvents: LevelEvent[], tag: string): LevelEvent[]
|
||||
|
||||
// occupiedTags: string[]
|
||||
// let newTag = createUniqueTag(tag)
|
||||
// findAndFilterDecorationEventWithTagReference(levelEvents, tag).forEachasfhgjksguhds
|
||||
// function createTagAndCopyUsageReference(levelEvents: LevelEvent[], tag: string): LevelEvent[]
|
||||
|
||||
// function splitTagByCondition(levelEvents: LevelEvent[], tag: string, condition: (levelEvent: LevelEvent) => boolean): LevelEvent[]
|
||||
|
||||
// function minimizeEvent(levelEvents: LevelEvent[]): LevelEvent[]
|
||||
|
||||
class EventSans {
|
||||
origEvents: MoveDecorations[] = []
|
||||
events: MoveDecorations[] = []
|
||||
|
||||
// decorationsByTag: Map<string, Decoration[]> = new Map()
|
||||
|
||||
get decorations() {
|
||||
return this._level.decorations as Decoration[]
|
||||
}
|
||||
|
||||
constructor(private _level: Level) {
|
||||
this.filterEvents()
|
||||
}
|
||||
|
||||
filterEvents() {
|
||||
const actions = this._level.actions
|
||||
|
||||
for (let index = actions.length - 1; index >= 0; index--) {
|
||||
const event = actions[index]
|
||||
|
||||
if (event.eventType === ActionType.MoveDecorations) {
|
||||
actions.splice(index, 1)
|
||||
for (const tag of event.tag.split(' ')) {
|
||||
if (!tag) {
|
||||
this.origEvents.push({ ...event })
|
||||
continue
|
||||
}
|
||||
this.origEvents.push({ ...event, tag })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* wow
|
||||
*/
|
||||
tagDecorations() {
|
||||
// ? 뭐해야하지
|
||||
// of -> array의 엘리먼트 / 오브젝트의 value 부분
|
||||
// in -> array의 index를 string으로 만들어버린거 / 오브젝트의 key 부분
|
||||
|
||||
let decorationsByTag: Map<string, Decoration[]> = new Map()
|
||||
|
||||
const setOrPush = (tag: string, deco: Decoration) => {
|
||||
if (decorationsByTag.has(tag)) {
|
||||
let arr = decorationsByTag.get(tag)!.slice()
|
||||
arr.push(deco)
|
||||
|
||||
decorationsByTag.set(tag, arr)
|
||||
} else decorationsByTag.set(tag, [deco])
|
||||
}
|
||||
|
||||
// 이거 끝난거 아닌가(????) -> 원래 태그는 근데 가지고 있어야 나중에 육안으로 잘 됐는지 구분 가능할듯
|
||||
for (const deco of this.decorations) {
|
||||
const tag = `${deco.tag}-${deco.id}`
|
||||
|
||||
for (const ev of this.origEvents) {
|
||||
if (ev.tag.split(' ').includes(deco.tag)) {
|
||||
// 이벤트에는 태그 여러개들어감..................... 스페이스로 구분해서............
|
||||
this.events.push({ ...ev, tag })
|
||||
}
|
||||
}
|
||||
|
||||
deco.tag = tag
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type Decoration = DecorationEvent & { id: number }
|
||||
type ImageSize = { width: number; height: number }
|
||||
|
||||
// Read file
|
||||
const content: string = await readFile(filePath, 'utf-8')
|
||||
|
||||
// Objectify content JSON.parse (or similar method)
|
||||
const level = parseADOFAILevel(content)
|
||||
|
||||
const decorations: Decoration[] = []
|
||||
const imagePaths: Map<string, ImageSize> = new Map()
|
||||
|
||||
let lastId = 0
|
||||
|
||||
const registerDecorationImage = async (decorationImage: string) => {
|
||||
if (!decorationImage || imagePaths.has(decorationImage)) return
|
||||
|
||||
const imagePath = join(levelDir, decorationImage)
|
||||
|
||||
const meta = await sharp(imagePath).metadata()
|
||||
|
||||
imagePaths.set(decorationImage, {
|
||||
width: meta.width!,
|
||||
height: meta.height!,
|
||||
})
|
||||
}
|
||||
|
||||
for (const event of [...level.actions, ...level.decorations]) {
|
||||
// Read through decorations, apply id to each decoration
|
||||
if (
|
||||
event.eventType === ActionType.AddDecoration ||
|
||||
event.eventType === ActionType.AddText
|
||||
) {
|
||||
const decoration: Decoration = event as Decoration
|
||||
decoration.id = lastId++
|
||||
decorations.push(decoration)
|
||||
|
||||
// Record file path in decorationImage property then acquire image resolution, match these
|
||||
if (decoration.eventType != ActionType.AddDecoration) continue
|
||||
|
||||
await registerDecorationImage(decoration.decorationImage)
|
||||
}
|
||||
|
||||
// Record file path in decorationImage property then acquire image resolution, match these
|
||||
if (event.eventType === ActionType.MoveDecorations)
|
||||
await registerDecorationImage(event.decorationImage)
|
||||
}
|
||||
|
||||
// Create a new directory, then copy over all files to new directory
|
||||
for (const [imagePath, image] of imagePaths) {
|
||||
let newPath = join(distPath, imagePath)
|
||||
|
||||
// Apply resolution changes to image files
|
||||
|
||||
await sharp(join(levelDir, imagePath))
|
||||
.resize({ width: image.width, height: image.height })
|
||||
.toFile(newPath)
|
||||
|
||||
// 충격: 아직 파일별로 ratio로 나누는거 구현안함
|
||||
// wow
|
||||
}
|
||||
|
||||
// Iterate through decorations:
|
||||
// 1) record which tags are used in each decoration
|
||||
// 2) split image decoration(AddDecoration eventType) and text decoration(AddText eventType) tag references
|
||||
// 3) make changes to pivotOffset and scale properties depending on which image path is stored in decorationImage
|
||||
//!4) ensure one to one relation to image files and image decoration tag by duplicating tag and its usage. duplicate the event if needed
|
||||
// Iterate through actions
|
||||
// 1) make changes to pivotOffset and scale properties corresponding to tag
|
||||
// Save file to new directory
|
|
@ -0,0 +1,567 @@
|
|||
import {
|
||||
SpeedType,
|
||||
BgDisplayMode,
|
||||
ToggleBool,
|
||||
TrackColorType,
|
||||
TrackColorPulse,
|
||||
TrackStyle,
|
||||
TrackAnimationType,
|
||||
TrackAnimationType2,
|
||||
DecPlacementType,
|
||||
DecorationBlendMode,
|
||||
MaskingType,
|
||||
Hitbox,
|
||||
FlashPlane,
|
||||
Ease,
|
||||
RandomMode,
|
||||
CamMovementType,
|
||||
GameSound,
|
||||
HitSound,
|
||||
Filter,
|
||||
EasePartBehavior,
|
||||
HoldStartSound,
|
||||
HoldLoopSound,
|
||||
HoldEndSound,
|
||||
HoldMidSound,
|
||||
HoldMidSoundType,
|
||||
HoldMidSoundTimingRelativeTo,
|
||||
PlanetCount,
|
||||
FontName,
|
||||
TargetPlanet,
|
||||
} from './types'
|
||||
|
||||
export enum ActionType {
|
||||
SetSpeed = 'SetSpeed',
|
||||
Twirl = 'Twirl',
|
||||
Multitap = 'Multitap',
|
||||
Checkpoint = 'Checkpoint',
|
||||
CustomBackground = 'CustomBackground',
|
||||
ChangeTrack = 'ChangeTrack',
|
||||
ColorTrack = 'ColorTrack',
|
||||
AnimateTrack = 'AnimateTrack',
|
||||
AddDecoration = 'AddDecoration',
|
||||
Flash = 'Flash',
|
||||
MoveCamera = 'MoveCamera',
|
||||
SetHitsound = 'SetHitsound',
|
||||
SetGameSound = 'SetGameSound',
|
||||
PlaySound = 'PlaySound',
|
||||
RecolorTrack = 'RecolorTrack',
|
||||
MoveTrack = 'MoveTrack',
|
||||
SetFilter = 'SetFilter',
|
||||
HallOfMirrors = 'HallOfMirrors',
|
||||
ShakeScreen = 'ShakeScreen',
|
||||
SetPlanetRotation = 'SetPlanetRotation',
|
||||
KillPlayer = 'KillPlayer',
|
||||
MoveDecorations = 'MoveDecorations',
|
||||
PositionTrack = 'PositionTrack',
|
||||
Hold = 'Hold',
|
||||
SetHoldSound = 'SetHoldSound',
|
||||
TileDimensions = 'TileDimensions',
|
||||
RepeatEvents = 'RepeatEvents',
|
||||
Bloom = 'Bloom',
|
||||
SetConditionalEvents = 'SetConditionalEvents',
|
||||
MultiPlanet = 'MultiPlanet',
|
||||
FreeRoam = 'FreeRoam',
|
||||
FreeRoamTwirl = 'FreeRoamTwirl',
|
||||
FreeRoamRemove = 'FreeRoamRemove',
|
||||
FreeRoamWarning = 'FreeRoamWarning',
|
||||
Pause = 'Pause',
|
||||
AutoPlayTiles = 'AutoPlayTiles',
|
||||
Hide = 'Hide',
|
||||
ScaleMargin = 'ScaleMargin',
|
||||
ScaleRadius = 'ScaleRadius',
|
||||
ScreenTile = 'ScreenTile',
|
||||
ScreenScroll = 'ScreenScroll',
|
||||
AddText = 'AddText',
|
||||
SetText = 'SetText',
|
||||
EditorComment = 'EditorComment',
|
||||
Bookmark = 'Bookmark',
|
||||
CallMethod = 'CallMethod',
|
||||
AddComponent = 'AddComponent',
|
||||
ScalePlanets = 'ScalePlanets',
|
||||
}
|
||||
|
||||
export interface Action<T extends ActionType> {
|
||||
floor: number
|
||||
eventType: T
|
||||
}
|
||||
|
||||
export type Tile = [number, TileType]
|
||||
|
||||
export enum TileType {
|
||||
ThisTile = 'ThisTile',
|
||||
FirstTile = 'FirstTile',
|
||||
LastTile = 'LastTile',
|
||||
}
|
||||
|
||||
export type Color = `#${string}`
|
||||
|
||||
export type Vector2 = [number, number]
|
||||
|
||||
export interface SetSpeed extends Action<ActionType.SetSpeed> {
|
||||
speedType: SpeedType
|
||||
beatsPerMinute: number
|
||||
bpmMultiplier: number
|
||||
}
|
||||
|
||||
export interface Twirl extends Action<ActionType.Twirl> {}
|
||||
|
||||
export interface Multitap extends Action<ActionType.Multitap> {
|
||||
taps: number
|
||||
}
|
||||
|
||||
export interface Checkpoint extends Action<ActionType.Checkpoint> {
|
||||
tileOffset: number
|
||||
}
|
||||
|
||||
export interface CustomBackground extends Action<ActionType.CustomBackground> {
|
||||
color: Color
|
||||
bgImage: string
|
||||
imageColor: Color
|
||||
parallax: Vector2
|
||||
bgDisplayMode: BgDisplayMode
|
||||
lockRot: ToggleBool
|
||||
loopBG: ToggleBool
|
||||
unscaledSize: number
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface ChangeTrack extends Action<ActionType.ChangeTrack> {
|
||||
trackColorType: TrackColorType
|
||||
trackColor: Color
|
||||
secondaryTrackColor: Color
|
||||
trackColorAnimDuration: number
|
||||
trackColorPulse: TrackColorPulse
|
||||
trackPulseLength: number
|
||||
trackStyle: TrackStyle
|
||||
trackAnimation: TrackAnimationType
|
||||
beatsAhead: number
|
||||
trackDisappearAnimation: TrackAnimationType2
|
||||
beatsBehind: number
|
||||
}
|
||||
|
||||
export interface ColorTrack extends Action<ActionType.ColorTrack> {
|
||||
trackColorType: TrackColorType
|
||||
trackColor: Color
|
||||
secondaryTrackColor: Color
|
||||
trackColorAnimDuration: number
|
||||
trackColorPulse: TrackColorPulse
|
||||
trackPulseLength: number
|
||||
trackStyle: TrackStyle
|
||||
trackTexture: string
|
||||
trackTextureScale: number
|
||||
trackGlowIntensity: number
|
||||
}
|
||||
|
||||
export interface AnimateTrack extends Action<ActionType.AnimateTrack> {
|
||||
trackAnimation: TrackAnimationType
|
||||
beatsAhead: number
|
||||
trackDisappearAnimation: TrackAnimationType2
|
||||
beatsBehind: number
|
||||
}
|
||||
|
||||
export interface AddDecoration extends Action<ActionType.AddDecoration> {
|
||||
decorationImage: string
|
||||
position: Vector2
|
||||
relativeTo: DecPlacementType
|
||||
pivotOffset: Vector2
|
||||
rotation: number
|
||||
lockRotation: ToggleBool
|
||||
scale: Vector2
|
||||
lockScale: ToggleBool
|
||||
tile: Vector2
|
||||
color: Color
|
||||
opacity: number
|
||||
depth: number
|
||||
parallax: Vector2
|
||||
parallaxOffset: Vector2
|
||||
tag: string
|
||||
imageSmoothing: ToggleBool
|
||||
blendMode: DecorationBlendMode
|
||||
maskingType: MaskingType
|
||||
useMaskingDepth: ToggleBool
|
||||
maskingFrontDepth: number
|
||||
maskingBackDepth: number
|
||||
failHitbox: ToggleBool
|
||||
failHitboxType: Hitbox
|
||||
failHitboxScale: Vector2
|
||||
failHitboxOffset: Vector2
|
||||
failHitboxRotation: number
|
||||
components: string
|
||||
}
|
||||
|
||||
export interface Flash extends Action<ActionType.Flash> {
|
||||
duration: number
|
||||
plane: FlashPlane
|
||||
startColor: Color
|
||||
startOpacity: number
|
||||
endColor: Color
|
||||
endOpacity: number
|
||||
angleOffset: number
|
||||
ease: Ease
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface MoveCamera extends Action<ActionType.MoveCamera> {
|
||||
duration: number
|
||||
durationRandomMode: RandomMode
|
||||
durationRandomValue: number
|
||||
relativeTo: CamMovementType
|
||||
position: Vector2
|
||||
positionRandomMode: RandomMode
|
||||
positionRandomValue: Vector2
|
||||
rotation: number
|
||||
rotationRandomMode: RandomMode
|
||||
rotationRandomValue: number
|
||||
zoom: number
|
||||
zoomRandomMode: RandomMode
|
||||
zoomRandomValue: number
|
||||
angleOffset: number
|
||||
ease: Ease
|
||||
dontDisable: ToggleBool
|
||||
minVfxOnly: ToggleBool
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface SetHitsound extends Action<ActionType.SetHitsound> {
|
||||
gameSound: GameSound
|
||||
hitsound: HitSound
|
||||
hitsoundVolume: number
|
||||
}
|
||||
|
||||
export interface SetGameSound extends Action<ActionType.SetGameSound> {
|
||||
gameSound: GameSound
|
||||
hitsound: HitSound
|
||||
volume: number
|
||||
}
|
||||
|
||||
export interface PlaySound extends Action<ActionType.PlaySound> {
|
||||
hitsound: HitSound
|
||||
hitsoundVolume: number
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface RecolorTrack extends Action<ActionType.RecolorTrack> {
|
||||
startTile: Tile
|
||||
endTile: Tile
|
||||
gapLength: number
|
||||
trackColorType: TrackColorType
|
||||
trackColor: Color
|
||||
secondaryTrackColor: Color
|
||||
trackColorAnimDuration: number
|
||||
trackColorPulse: TrackColorPulse
|
||||
trackPulseLength: number
|
||||
trackStyle: TrackStyle
|
||||
trackGlowIntensity: number
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface MoveTrack extends Action<ActionType.MoveTrack> {
|
||||
startTile: Tile
|
||||
endTile: Tile
|
||||
gapLength: number
|
||||
duration: number
|
||||
positionOffset: Vector2
|
||||
rotationOffset: number
|
||||
scale: Vector2
|
||||
opacity: number
|
||||
angleOffset: number
|
||||
ease: Ease
|
||||
maxVfxOnly: ToggleBool
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface SetFilter extends Action<ActionType.SetFilter> {
|
||||
filter: Filter
|
||||
enabled: ToggleBool
|
||||
intensity: number
|
||||
duration: number
|
||||
ease: Ease
|
||||
disableOthers: ToggleBool
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface HallOfMirrors extends Action<ActionType.HallOfMirrors> {
|
||||
enabled: ToggleBool
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface ShakeScreen extends Action<ActionType.ShakeScreen> {
|
||||
duration: number
|
||||
strength: number
|
||||
intensity: number
|
||||
fadeOut: ToggleBool
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface SetPlanetRotation
|
||||
extends Action<ActionType.SetPlanetRotation> {
|
||||
ease: Ease
|
||||
easeParts: number
|
||||
easePartBehavior: EasePartBehavior
|
||||
}
|
||||
|
||||
export interface KillPlayer extends Action<ActionType.KillPlayer> {
|
||||
playAnimation: ToggleBool
|
||||
failMessage: string
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface MoveDecorations extends Action<ActionType.MoveDecorations> {
|
||||
duration: number
|
||||
tag: string
|
||||
decorationImage: string
|
||||
positionOffset: Vector2
|
||||
pivotOffset: Vector2
|
||||
rotationOffset: number
|
||||
scale: Vector2
|
||||
color: Color
|
||||
opacity: number
|
||||
depth: number
|
||||
parallax: Vector2
|
||||
parallaxOffset: Vector2
|
||||
angleOffset: number
|
||||
ease: Ease
|
||||
eventTag: string
|
||||
maskingType: MaskingType
|
||||
useMaskingDepth: ToggleBool
|
||||
maskingFrontDepth: number
|
||||
maskingBackDepth: number
|
||||
}
|
||||
|
||||
export interface PositionTrack extends Action<ActionType.PositionTrack> {
|
||||
positionOffset: Vector2
|
||||
relativeTo: Tile
|
||||
rotation: number
|
||||
scale: number
|
||||
opacity: number
|
||||
justThisTile: ToggleBool
|
||||
editorOnly: ToggleBool
|
||||
stickToFloors: ToggleBool
|
||||
}
|
||||
|
||||
export interface Hold extends Action<ActionType.Hold> {
|
||||
duration: number
|
||||
distanceMultiplier: number
|
||||
landingAnimation: ToggleBool
|
||||
}
|
||||
|
||||
export interface SetHoldSound extends Action<ActionType.SetHoldSound> {
|
||||
holdStartSound: HoldStartSound
|
||||
holdLoopSound: HoldLoopSound
|
||||
holdEndSound: HoldEndSound
|
||||
holdMidSound: HoldMidSound
|
||||
holdMidSoundType: HoldMidSoundType
|
||||
holdMidSoundDelay: number
|
||||
holdMidSoundTimingRelativeTo: HoldMidSoundTimingRelativeTo
|
||||
holdSoundVolume: number
|
||||
}
|
||||
|
||||
export interface TileDimensions extends Action<ActionType.TileDimensions> {
|
||||
width: number
|
||||
length: number
|
||||
}
|
||||
|
||||
export interface RepeatEvents extends Action<ActionType.RepeatEvents> {
|
||||
repetitions: number
|
||||
interval: number
|
||||
tag: string
|
||||
}
|
||||
|
||||
export interface Bloom extends Action<ActionType.Bloom> {
|
||||
enabled: ToggleBool
|
||||
threshold: number
|
||||
intensity: number
|
||||
color: Color
|
||||
duration: number
|
||||
ease: Ease
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface SetConditionalEvents
|
||||
extends Action<ActionType.SetConditionalEvents> {
|
||||
perfectTag: string
|
||||
hitTag: string
|
||||
earlyPerfectTag: string
|
||||
latePerfectTag: string
|
||||
barelyTag: string
|
||||
veryEarlyTag: string
|
||||
veryLateTag: string
|
||||
missTag: string
|
||||
tooEarlyTag: string
|
||||
tooLateTag: string
|
||||
lossTag: string
|
||||
}
|
||||
|
||||
export interface MultiPlanet extends Action<ActionType.MultiPlanet> {
|
||||
planets: PlanetCount
|
||||
}
|
||||
|
||||
export interface FreeRoam extends Action<ActionType.FreeRoam> {
|
||||
duration: number
|
||||
size: Vector2
|
||||
positionOffset: Vector2
|
||||
outTime: number
|
||||
outEase: Ease
|
||||
hitsoundOnBeats: HitSound
|
||||
hitsoundOffBeats: HitSound
|
||||
countdownTicks: number
|
||||
angleCorrectionDir: number
|
||||
}
|
||||
|
||||
export interface FreeRoamTwirl extends Action<ActionType.FreeRoamTwirl> {
|
||||
position: Vector2
|
||||
}
|
||||
|
||||
export interface FreeRoamRemove extends Action<ActionType.FreeRoamRemove> {
|
||||
position: Vector2
|
||||
size: Vector2
|
||||
}
|
||||
|
||||
export interface FreeRoamWarning extends Action<ActionType.FreeRoamWarning> {
|
||||
position: Vector2
|
||||
}
|
||||
|
||||
export interface Pause extends Action<ActionType.Pause> {
|
||||
duration: number
|
||||
countdownTicks: number
|
||||
angleCorrectionDir: number
|
||||
}
|
||||
|
||||
export interface AutoPlayTiles extends Action<ActionType.AutoPlayTiles> {
|
||||
enabled: ToggleBool
|
||||
safetyTiles: ToggleBool
|
||||
}
|
||||
|
||||
export interface Hide extends Action<ActionType.Hide> {
|
||||
hideJudgment: ToggleBool
|
||||
hideTileIcon: ToggleBool
|
||||
}
|
||||
|
||||
export interface ScaleMargin extends Action<ActionType.ScaleMargin> {
|
||||
scale: number
|
||||
}
|
||||
|
||||
export interface ScaleRadius extends Action<ActionType.ScaleRadius> {
|
||||
scale: number
|
||||
}
|
||||
|
||||
export interface ScreenTile extends Action<ActionType.ScreenTile> {
|
||||
tile: Vector2
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface ScreenScroll extends Action<ActionType.ScreenScroll> {
|
||||
scroll: Vector2
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface AddText extends Action<ActionType.AddText> {
|
||||
decText: string
|
||||
font: FontName
|
||||
position: Vector2
|
||||
relativeTo: DecPlacementType
|
||||
pivotOffset: Vector2
|
||||
rotation: number
|
||||
lockRotation: ToggleBool
|
||||
scale: Vector2
|
||||
lockScale: ToggleBool
|
||||
color: Color
|
||||
opacity: number
|
||||
depth: number
|
||||
parallax: Vector2
|
||||
tag: string
|
||||
}
|
||||
|
||||
export interface SetText extends Action<ActionType.SetText> {
|
||||
decText: string
|
||||
tag: string
|
||||
angleOffset: number
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export interface EditorComment extends Action<ActionType.EditorComment> {
|
||||
comment: string
|
||||
}
|
||||
|
||||
export interface Bookmark extends Action<ActionType.Bookmark> {}
|
||||
|
||||
export interface CallMethod extends Action<ActionType.CallMethod> {
|
||||
method: string
|
||||
angleOffset: number
|
||||
}
|
||||
|
||||
export interface AddComponent extends Action<ActionType.AddComponent> {
|
||||
component: string
|
||||
properties: string
|
||||
duration: number
|
||||
angleOffset: number
|
||||
}
|
||||
|
||||
export interface ScalePlanets extends Action<ActionType.ScalePlanets> {
|
||||
duration: number
|
||||
targetPlanet: TargetPlanet
|
||||
scale: number
|
||||
angleOffset: number
|
||||
ease: Ease
|
||||
eventTag: string
|
||||
}
|
||||
|
||||
export type LevelEvent =
|
||||
| SetSpeed
|
||||
| Twirl
|
||||
| Multitap
|
||||
| Checkpoint
|
||||
| CustomBackground
|
||||
| ChangeTrack
|
||||
| ColorTrack
|
||||
| AnimateTrack
|
||||
| Flash
|
||||
| MoveCamera
|
||||
| SetHitsound
|
||||
| SetGameSound
|
||||
| PlaySound
|
||||
| RecolorTrack
|
||||
| MoveTrack
|
||||
| SetFilter
|
||||
| HallOfMirrors
|
||||
| ShakeScreen
|
||||
| SetPlanetRotation
|
||||
| KillPlayer
|
||||
| MoveDecorations
|
||||
| PositionTrack
|
||||
| Hold
|
||||
| SetHoldSound
|
||||
| TileDimensions
|
||||
| RepeatEvents
|
||||
| Bloom
|
||||
| SetConditionalEvents
|
||||
| MultiPlanet
|
||||
| FreeRoam
|
||||
| FreeRoamTwirl
|
||||
| FreeRoamRemove
|
||||
| FreeRoamWarning
|
||||
| Pause
|
||||
| AutoPlayTiles
|
||||
| Hide
|
||||
| ScaleMargin
|
||||
| ScaleRadius
|
||||
| ScreenTile
|
||||
| ScreenScroll
|
||||
| SetText
|
||||
| EditorComment
|
||||
| Bookmark
|
||||
| CallMethod
|
||||
| AddComponent
|
||||
| ScalePlanets
|
||||
|
||||
export type DecorationEvent = AddDecoration | AddText
|
|
@ -0,0 +1,3 @@
|
|||
export * from './events.js'
|
||||
export * from './types.js'
|
||||
export * from './level.js'
|
|
@ -0,0 +1,78 @@
|
|||
import { DecorationEvent, LevelEvent } from './events.js'
|
||||
|
||||
type AngleData = number[]
|
||||
|
||||
export interface Level {
|
||||
angleData: AngleData
|
||||
settings: LevelSettings
|
||||
actions: LevelEvent[]
|
||||
decorations: DecorationEvent[]
|
||||
}
|
||||
|
||||
export interface LevelSettings {
|
||||
version: 12
|
||||
artist: ''
|
||||
specialArtistType: 'None'
|
||||
artistPermission: ''
|
||||
song: ''
|
||||
author: ''
|
||||
separateCountdownTime: 'Enabled'
|
||||
previewImage: ''
|
||||
previewIcon: ''
|
||||
previewIconColor: '003f52'
|
||||
previewSongStart: 0
|
||||
previewSongDuration: 10
|
||||
seizureWarning: 'Disabled'
|
||||
levelDesc: ''
|
||||
levelTags: ''
|
||||
artistLinks: ''
|
||||
difficulty: 1
|
||||
requiredMods: []
|
||||
songFilename: 'L_X.wav'
|
||||
bpm: 107.5
|
||||
volume: 100
|
||||
offset: 502
|
||||
pitch: 100
|
||||
hitsound: 'Sizzle'
|
||||
hitsoundVolume: 100
|
||||
countdownTicks: 4
|
||||
trackColorType: 'Single'
|
||||
trackColor: 'ffffffaa'
|
||||
secondaryTrackColor: 'ffffff'
|
||||
trackColorAnimDuration: 2
|
||||
trackColorPulse: 'None'
|
||||
trackPulseLength: 10
|
||||
trackStyle: 'Minimal'
|
||||
trackGlowIntensity: 50
|
||||
trackAnimation: 'Fade'
|
||||
beatsAhead: 6
|
||||
trackDisappearAnimation: 'Fade'
|
||||
beatsBehind: 0
|
||||
backgroundColor: '000000'
|
||||
showDefaultBGIfNoImage: 'Disabled'
|
||||
bgImage: ''
|
||||
bgImageColor: 'ffffff'
|
||||
parallax: [100, 100]
|
||||
bgDisplayMode: 'Unscaled'
|
||||
lockRot: 'Disabled'
|
||||
loopBG: 'Disabled'
|
||||
unscaledSize: 100
|
||||
relativeTo: 'Player'
|
||||
position: [0, 0]
|
||||
rotation: 0
|
||||
zoom: 175
|
||||
pulseOnFloor: 'Enabled'
|
||||
startCamLowVFX: 'Disabled'
|
||||
bgVideo: ''
|
||||
loopVideo: 'Disabled'
|
||||
vidOffset: 0
|
||||
floorIconOutlines: 'Disabled'
|
||||
stickToFloors: 'Enabled'
|
||||
planetEase: 'Linear'
|
||||
planetEaseParts: 1
|
||||
planetEasePartBehavior: 'Mirror'
|
||||
customClass: ''
|
||||
legacyFlash: false
|
||||
legacyCamRelativeTo: false
|
||||
legacySpriteTiles: false
|
||||
}
|
|
@ -0,0 +1,287 @@
|
|||
export enum SpeedType {
|
||||
Bpm = 'Bpm',
|
||||
Multiplier = 'Multiplier',
|
||||
}
|
||||
|
||||
export enum BgDisplayMode {
|
||||
FitToScreen = 'FitToScreen',
|
||||
Unscaled = 'Unscaled',
|
||||
Tiled = 'Tiled',
|
||||
}
|
||||
|
||||
export enum ToggleBool {
|
||||
Enabled = 'Enabled',
|
||||
Disabled = 'Disabled',
|
||||
}
|
||||
|
||||
export enum TrackColorType {
|
||||
Single = 'Single',
|
||||
Stripes = 'Stripes',
|
||||
Glow = 'Glow',
|
||||
Blink = 'Blink',
|
||||
Switch = 'Switch',
|
||||
Rainbow = 'Rainbow',
|
||||
Volume = 'Volume',
|
||||
}
|
||||
|
||||
export enum TrackColorPulse {
|
||||
None = 'None',
|
||||
Forward = 'Forward',
|
||||
Backward = 'Backward',
|
||||
}
|
||||
|
||||
export enum TrackStyle {
|
||||
Standard = 'Standard',
|
||||
Neon = 'Neon',
|
||||
NeonLight = 'NeonLight',
|
||||
Basic = 'Basic',
|
||||
Gems = 'Gems',
|
||||
Minimal = 'Minimal',
|
||||
}
|
||||
|
||||
export enum TrackAnimationType {
|
||||
None = 'None',
|
||||
Assemble = 'Assemble',
|
||||
Assemble_Far = 'Assemble_Far',
|
||||
Extend = 'Extend',
|
||||
Grow = 'Grow',
|
||||
Grow_Spin = 'Grow_Spin',
|
||||
Fade = 'Fade',
|
||||
Drop = 'Drop',
|
||||
Rise = 'Rise',
|
||||
}
|
||||
|
||||
export enum TrackAnimationType2 {
|
||||
None = 'None',
|
||||
Scatter = 'Scatter',
|
||||
Scatter_Far = 'Scatter_Far',
|
||||
Retract = 'Retract',
|
||||
Shrink = 'Shrink',
|
||||
Shrink_Spin = 'Shrink_Spin',
|
||||
Fade = 'Fade',
|
||||
}
|
||||
|
||||
export enum DecPlacementType {
|
||||
Tile = 'Tile',
|
||||
Global = 'Global',
|
||||
RedPlanet = 'RedPlanet',
|
||||
BluePlanet = 'BluePlanet',
|
||||
Camera = 'Camera',
|
||||
CameraAspect = 'CameraAspect',
|
||||
}
|
||||
|
||||
export enum DecorationBlendMode {
|
||||
None = 'None',
|
||||
Screen = 'Screen',
|
||||
LinearDodge = 'LinearDodge',
|
||||
Overlay = 'Overlay',
|
||||
SoftLight = 'SoftLight',
|
||||
Difference = 'Difference',
|
||||
}
|
||||
|
||||
export enum MaskingType {
|
||||
None = 'None',
|
||||
Mask = 'Mask',
|
||||
VisibleInsideMask = 'VisibleInsideMask',
|
||||
VisibleOutsideMask = 'VisibleOutsideMask',
|
||||
}
|
||||
|
||||
export enum Hitbox {
|
||||
Box = 'Box',
|
||||
Circle = 'Circle',
|
||||
Capsule = 'Capsule',
|
||||
}
|
||||
|
||||
export enum FlashPlane {
|
||||
Foreground = 'Foreground',
|
||||
Background = 'Background',
|
||||
}
|
||||
|
||||
export enum Ease {
|
||||
Linear = 'Linear',
|
||||
InSine = 'InSine',
|
||||
OutSine = 'OutSine',
|
||||
InOutSine = 'InOutSine',
|
||||
InQuad = 'InQuad',
|
||||
OutQuad = 'OutQuad',
|
||||
InOutQuad = 'InOutQuad',
|
||||
InCubic = 'InCubic',
|
||||
OutCubic = 'OutCubic',
|
||||
InOutCubic = 'InOutCubic',
|
||||
InQuart = 'InQuart',
|
||||
OutQuart = 'OutQuart',
|
||||
InOutQuart = 'InOutQuart',
|
||||
InQuint = 'InQuint',
|
||||
OutQuint = 'OutQuint',
|
||||
InOutQuint = 'InOutQuint',
|
||||
InExpo = 'InExpo',
|
||||
OutExpo = 'OutExpo',
|
||||
InOutExpo = 'InOutExpo',
|
||||
InCirc = 'InCirc',
|
||||
OutCirc = 'OutCirc',
|
||||
InOutCirc = 'InOutCirc',
|
||||
InElastic = 'InElastic',
|
||||
OutElastic = 'OutElastic',
|
||||
InOutElastic = 'InOutElastic',
|
||||
InBack = 'InBack',
|
||||
OutBack = 'OutBack',
|
||||
InOutBack = 'InOutBack',
|
||||
InBounce = 'InBounce',
|
||||
OutBounce = 'OutBounce',
|
||||
InOutBounce = 'InOutBounce',
|
||||
Flash = 'Flash',
|
||||
InFlash = 'InFlash',
|
||||
OutFlash = 'OutFlash',
|
||||
InOutFlash = 'InOutFlash',
|
||||
}
|
||||
|
||||
export enum RandomMode {
|
||||
None = 'None',
|
||||
Between = 'Between',
|
||||
OneOrOther = 'OneOrOther',
|
||||
}
|
||||
|
||||
export enum CamMovementType {
|
||||
Player = 'Player',
|
||||
Tile = 'Tile',
|
||||
Global = 'Global',
|
||||
LastPosition = 'LastPosition',
|
||||
LastPositionNoRotation = 'LastPositionNoRotation',
|
||||
}
|
||||
|
||||
export enum GameSound {
|
||||
Hitsound = 'Hitsound',
|
||||
Midspin = 'Midspin',
|
||||
}
|
||||
|
||||
export enum HitSound {
|
||||
Hat = 'Hat',
|
||||
Kick = 'Kick',
|
||||
Shaker = 'Shaker',
|
||||
Sizzle = 'Sizzle',
|
||||
Chuck = 'Chuck',
|
||||
ShakerLoud = 'ShakerLoud',
|
||||
None = 'None',
|
||||
Hammer = 'Hammer',
|
||||
KickChroma = 'KickChroma',
|
||||
SnareAcoustic2 = 'SnareAcoustic2',
|
||||
Sidestick = 'Sidestick',
|
||||
Stick = 'Stick',
|
||||
ReverbClack = 'ReverbClack',
|
||||
Squareshot = 'Squareshot',
|
||||
PowerDown = 'PowerDown',
|
||||
PowerUp = 'PowerUp',
|
||||
KickHouse = 'KickHouse',
|
||||
KickRupture = 'KickRupture',
|
||||
HatHouse = 'HatHouse',
|
||||
SnareHouse = 'SnareHouse',
|
||||
SnareVapor = 'SnareVapor',
|
||||
ClapHit = 'ClapHit',
|
||||
ClapHitEcho = 'ClapHitEcho',
|
||||
ReverbClap = 'ReverbClap',
|
||||
FireTile = 'FireTile',
|
||||
IceTile = 'IceTile',
|
||||
VehiclePositive = 'VehiclePositive',
|
||||
VehicleNegative = 'VehicleNegative',
|
||||
}
|
||||
|
||||
export enum Filter {
|
||||
Grayscale = 'Grayscale',
|
||||
Sepia = 'Sepia',
|
||||
Invert = 'Invert',
|
||||
VHS = 'VHS',
|
||||
EightiesTV = 'EightiesTV',
|
||||
FiftiesTV = 'FiftiesTV',
|
||||
Arcade = 'Arcade',
|
||||
LED = 'LED',
|
||||
Rain = 'Rain',
|
||||
Blizzard = 'Blizzard',
|
||||
PixelSnow = 'PixelSnow',
|
||||
Compression = 'Compression',
|
||||
Glitch = 'Glitch',
|
||||
Pixelate = 'Pixelate',
|
||||
Waves = 'Waves',
|
||||
Static = 'Static',
|
||||
Grain = 'Grain',
|
||||
MotionBlur = 'MotionBlur',
|
||||
Fisheye = 'Fisheye',
|
||||
Aberration = 'Aberration',
|
||||
Drawing = 'Drawing',
|
||||
Neon = 'Neon',
|
||||
Handheld = 'Handheld',
|
||||
NightVision = 'NightVision',
|
||||
Funk = 'Funk',
|
||||
Tunnel = 'Tunnel',
|
||||
Weird3D = 'Weird3D',
|
||||
Blur = 'Blur',
|
||||
BlurFocus = 'BlurFocus',
|
||||
GaussianBlur = 'GaussianBlur',
|
||||
HexagonBlack = 'HexagonBlack',
|
||||
Posterize = 'Posterize',
|
||||
Sharpen = 'Sharpen',
|
||||
Contrast = 'Contrast',
|
||||
EdgeBlackLine = 'EdgeBlackLine',
|
||||
OilPaint = 'OilPaint',
|
||||
SuperDot = 'SuperDot',
|
||||
WaterDrop = 'WaterDrop',
|
||||
LightWater = 'LightWater',
|
||||
Petals = 'Petals',
|
||||
PetalsInstant = 'PetalsInstant',
|
||||
}
|
||||
|
||||
export enum EasePartBehavior {
|
||||
Mirror = 'Mirror',
|
||||
Repeat = 'Repeat',
|
||||
}
|
||||
|
||||
export enum HoldStartSound {
|
||||
Fuse = 'Fuse',
|
||||
None = 'None',
|
||||
}
|
||||
|
||||
export enum HoldLoopSound {
|
||||
Fuse = 'Fuse',
|
||||
None = 'None',
|
||||
}
|
||||
|
||||
export enum HoldEndSound {
|
||||
Fuse = 'Fuse',
|
||||
None = 'None',
|
||||
}
|
||||
|
||||
export enum HoldMidSound {
|
||||
Fuse = 'Fuse',
|
||||
SingSing = 'SingSing',
|
||||
None = 'None',
|
||||
}
|
||||
|
||||
export enum HoldMidSoundType {
|
||||
Once = 'Once',
|
||||
Repeat = 'Repeat',
|
||||
}
|
||||
|
||||
export enum HoldMidSoundTimingRelativeTo {
|
||||
Start = 'Start',
|
||||
End = 'End',
|
||||
}
|
||||
|
||||
export enum PlanetCount {
|
||||
TwoPlanets = 'TwoPlanets',
|
||||
ThreePlanets = 'ThreePlanets',
|
||||
}
|
||||
|
||||
export enum FontName {
|
||||
Default = 'Default',
|
||||
Arial = 'Arial',
|
||||
ComicSansMS = 'ComicSansMS',
|
||||
CourierNew = 'CourierNew',
|
||||
Georgia = 'Georgia',
|
||||
Impact = 'Impact',
|
||||
TimesNewRoman = 'TimesNewRoman',
|
||||
}
|
||||
|
||||
export enum TargetPlanet {
|
||||
FirePlanet = 'FirePlanet',
|
||||
IcePlanet = 'IcePlanet',
|
||||
Both = 'Both',
|
||||
}
|
|
@ -1,10 +1,7 @@
|
|||
import JSON5 from 'json5'
|
||||
import { Level } from '../types'
|
||||
|
||||
/**
|
||||
* @param {string} level
|
||||
* @returns {any} level json
|
||||
*/
|
||||
export const parseADOFAILevel = (level) => {
|
||||
export const parseADOFAILevel = (level: string): Level => {
|
||||
try {
|
||||
return JSON5.parse(level)
|
||||
} catch (e) {
|
||||
|
@ -24,7 +21,6 @@ export const parseADOFAILevel = (level) => {
|
|||
.replaceAll(']\t"decorations', '],\t"decorations')
|
||||
.replaceAll('\r', '')
|
||||
|
||||
// require('fs').writeFileSync('./debug.adofai', formattedLevel);
|
||||
return JSON5.parse(formattedLevel)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
// "jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
|
||||
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
||||
|
||||
/* Modules */
|
||||
"module": "ESNext" /* Specify what module code is generated. */,
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
"moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
|
||||
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
|
||||
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
|
||||
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
|
||||
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files. */
|
||||
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
|
||||
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true /* Enable all strict type-checking options. */,
|
||||
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
|
||||
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
72
wowsans.js
72
wowsans.js
|
@ -1,72 +0,0 @@
|
|||
import { copyFile, mkdir, readFile, readdir, rm, writeFile } from 'fs/promises'
|
||||
import yargs from 'yargs'
|
||||
import { parseADOFAILevel } from './parser.js'
|
||||
import { basename, dirname, join } from 'path'
|
||||
import { existsSync } from 'fs'
|
||||
import sharp from 'sharp'
|
||||
|
||||
const args = yargs(process.argv)
|
||||
|
||||
const path = args.argv._[2]
|
||||
const ratio = Number(args.argv._[3])
|
||||
|
||||
if (isNaN(ratio)) throw new Error('ratio is not number')
|
||||
|
||||
console.log(path)
|
||||
|
||||
const file = await readFile(path)
|
||||
|
||||
const level = parseADOFAILevel(file)
|
||||
|
||||
const workDir = join(process.cwd(), 'work')
|
||||
|
||||
if (existsSync(workDir)) await rm(workDir, { recursive: true, force: true })
|
||||
|
||||
await mkdir(workDir)
|
||||
|
||||
const origLevelDir = dirname(path)
|
||||
|
||||
for (const item of await readdir(origLevelDir)) {
|
||||
await copyFile(join(origLevelDir, item), join(workDir, item))
|
||||
}
|
||||
|
||||
const decoFiles = new Set()
|
||||
const textTags = new Set()
|
||||
|
||||
for (const deco of level.decorations) {
|
||||
if (deco.eventType === 'AddDecoration') {
|
||||
deco.scale = deco.scale.map((x) => x / ratio)
|
||||
decoFiles.add(deco.decorationImage)
|
||||
} else if (deco.eventType === 'AddText') {
|
||||
textTags.add(deco.tag)
|
||||
}
|
||||
}
|
||||
|
||||
for (const action of level.actions) {
|
||||
if (action.eventType === 'MoveDecorations') {
|
||||
if (textTags.has(action.tag)) continue
|
||||
|
||||
if (action.scale) action.scale = action.scale.map((x) => x / ratio)
|
||||
|
||||
if (action.decorationImage) decoFiles.add(action.decorationImage)
|
||||
}
|
||||
}
|
||||
|
||||
for (const f of decoFiles) {
|
||||
try {
|
||||
const orig = join(origLevelDir, f)
|
||||
const dest = join(workDir, f)
|
||||
|
||||
const meta = await sharp(orig).metadata()
|
||||
|
||||
await sharp(orig)
|
||||
.resize(Math.round(meta.width * ratio), Math.round(meta.height * ratio))
|
||||
.toFile(dest)
|
||||
|
||||
console.log(f)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
}
|
||||
|
||||
await writeFile(join(workDir, basename(path)), JSON.stringify(level))
|
Loading…
Reference in New Issue