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": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"start": "tsx src"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"inquirer": "^9.2.2",
|
||||||
"json5": "^2.2.3",
|
"json5": "^2.2.3",
|
||||||
"sharp": "^0.32.1",
|
"sharp": "^0.32.1"
|
||||||
"yargs": "^17.7.2"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"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"
|
"type": "module"
|
||||||
}
|
}
|
||||||
|
|
600
pnpm-lock.yaml
600
pnpm-lock.yaml
|
@ -1,32 +1,285 @@
|
||||||
lockfileVersion: '6.0'
|
lockfileVersion: '6.0'
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
|
inquirer:
|
||||||
|
specifier: ^9.2.2
|
||||||
|
version: 9.2.2
|
||||||
json5:
|
json5:
|
||||||
specifier: ^2.2.3
|
specifier: ^2.2.3
|
||||||
version: 2.2.3
|
version: 2.2.3
|
||||||
sharp:
|
sharp:
|
||||||
specifier: ^0.32.1
|
specifier: ^0.32.1
|
||||||
version: 0.32.1
|
version: 0.32.1
|
||||||
yargs:
|
|
||||||
specifier: ^17.7.2
|
|
||||||
version: 17.7.2
|
|
||||||
|
|
||||||
devDependencies:
|
devDependencies:
|
||||||
|
'@types/inquirer':
|
||||||
|
specifier: ^9.0.3
|
||||||
|
version: 9.0.3
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^20.1.1
|
specifier: ^20.1.1
|
||||||
version: 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:
|
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:
|
/@types/node@20.1.1:
|
||||||
resolution: {integrity: sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==}
|
resolution: {integrity: sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==}
|
||||||
dev: true
|
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:
|
/ansi-regex@5.0.1:
|
||||||
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/ansi-regex@6.0.1:
|
||||||
|
resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/ansi-styles@4.3.0:
|
/ansi-styles@4.3.0:
|
||||||
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
@ -46,6 +299,10 @@ packages:
|
||||||
readable-stream: 3.6.2
|
readable-stream: 3.6.2
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/buffer-from@1.1.2:
|
||||||
|
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/buffer@5.7.1:
|
/buffer@5.7.1:
|
||||||
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -53,17 +310,47 @@ packages:
|
||||||
ieee754: 1.2.1
|
ieee754: 1.2.1
|
||||||
dev: false
|
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:
|
/chownr@1.1.4:
|
||||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/cliui@8.0.1:
|
/cli-cursor@3.1.0:
|
||||||
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
|
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=8'}
|
||||||
dependencies:
|
dependencies:
|
||||||
string-width: 4.2.3
|
restore-cursor: 3.1.0
|
||||||
strip-ansi: 6.0.1
|
dev: false
|
||||||
wrap-ansi: 7.0.0
|
|
||||||
|
/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
|
dev: false
|
||||||
|
|
||||||
/color-convert@2.0.1:
|
/color-convert@2.0.1:
|
||||||
|
@ -104,6 +391,12 @@ packages:
|
||||||
engines: {node: '>=4.0.0'}
|
engines: {node: '>=4.0.0'}
|
||||||
dev: false
|
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:
|
/detect-libc@2.0.1:
|
||||||
resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
|
resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
@ -119,9 +412,39 @@ packages:
|
||||||
once: 1.4.0
|
once: 1.4.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/escalade@3.1.1:
|
/esbuild@0.17.18:
|
||||||
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
|
resolution: {integrity: sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==}
|
||||||
engines: {node: '>=6'}
|
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
|
dev: false
|
||||||
|
|
||||||
/expand-template@2.0.3:
|
/expand-template@2.0.3:
|
||||||
|
@ -129,19 +452,55 @@ packages:
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
dev: false
|
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:
|
/fs-constants@1.0.0:
|
||||||
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
|
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/get-caller-file@2.0.5:
|
/fsevents@2.3.2:
|
||||||
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
|
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
||||||
engines: {node: 6.* || 8.* || >= 10.*}
|
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||||
dev: false
|
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:
|
/github-from-package@0.0.0:
|
||||||
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
|
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
|
||||||
dev: false
|
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:
|
/ieee754@1.2.1:
|
||||||
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -154,6 +513,27 @@ packages:
|
||||||
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
|
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
|
||||||
dev: false
|
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:
|
/is-arrayish@0.3.2:
|
||||||
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
|
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -163,12 +543,39 @@ packages:
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: false
|
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:
|
/json5@2.2.3:
|
||||||
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
|
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: false
|
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:
|
/lru-cache@6.0.0:
|
||||||
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
@ -176,6 +583,11 @@ packages:
|
||||||
yallist: 4.0.0
|
yallist: 4.0.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/mimic-fn@2.1.0:
|
||||||
|
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/mimic-response@3.1.0:
|
/mimic-response@3.1.0:
|
||||||
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
|
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
@ -189,6 +601,11 @@ packages:
|
||||||
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
|
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
|
||||||
dev: false
|
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:
|
/napi-build-utils@1.0.2:
|
||||||
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
|
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -210,6 +627,33 @@ packages:
|
||||||
wrappy: 1.0.2
|
wrappy: 1.0.2
|
||||||
dev: false
|
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:
|
/prebuild-install@7.1.1:
|
||||||
resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
|
resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
@ -255,15 +699,32 @@ packages:
|
||||||
util-deprecate: 1.0.2
|
util-deprecate: 1.0.2
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/require-directory@2.1.1:
|
/restore-cursor@3.1.0:
|
||||||
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
|
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=8'}
|
||||||
|
dependencies:
|
||||||
|
onetime: 5.1.2
|
||||||
|
signal-exit: 3.0.7
|
||||||
dev: false
|
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:
|
/safe-buffer@5.2.1:
|
||||||
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/safer-buffer@2.1.2:
|
||||||
|
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/semver@7.5.0:
|
/semver@7.5.0:
|
||||||
resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==}
|
resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
@ -287,6 +748,10 @@ packages:
|
||||||
tunnel-agent: 0.6.0
|
tunnel-agent: 0.6.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/signal-exit@3.0.7:
|
||||||
|
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/simple-concat@1.0.1:
|
/simple-concat@1.0.1:
|
||||||
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
|
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -305,6 +770,18 @@ packages:
|
||||||
is-arrayish: 0.3.2
|
is-arrayish: 0.3.2
|
||||||
dev: false
|
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:
|
/string-width@4.2.3:
|
||||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
@ -327,11 +804,25 @@ packages:
|
||||||
ansi-regex: 5.0.1
|
ansi-regex: 5.0.1
|
||||||
dev: false
|
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:
|
/strip-json-comments@2.0.1:
|
||||||
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
|
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: false
|
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:
|
/tar-fs@2.1.1:
|
||||||
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
|
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -352,19 +843,61 @@ packages:
|
||||||
readable-stream: 3.6.2
|
readable-stream: 3.6.2
|
||||||
dev: false
|
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:
|
/tunnel-agent@0.6.0:
|
||||||
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
||||||
dependencies:
|
dependencies:
|
||||||
safe-buffer: 5.2.1
|
safe-buffer: 5.2.1
|
||||||
dev: false
|
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:
|
/util-deprecate@1.0.2:
|
||||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/wrap-ansi@7.0.0:
|
/wcwidth@1.0.1:
|
||||||
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
|
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
|
||||||
engines: {node: '>=10'}
|
dependencies:
|
||||||
|
defaults: 1.0.4
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/wrap-ansi@6.2.0:
|
||||||
|
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
dependencies:
|
dependencies:
|
||||||
ansi-styles: 4.3.0
|
ansi-styles: 4.3.0
|
||||||
string-width: 4.2.3
|
string-width: 4.2.3
|
||||||
|
@ -375,29 +908,6 @@ packages:
|
||||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/y18n@5.0.8:
|
|
||||||
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
|
|
||||||
engines: {node: '>=10'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/yallist@4.0.0:
|
/yallist@4.0.0:
|
||||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||||
dev: false
|
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 JSON5 from 'json5'
|
||||||
|
import { Level } from '../types'
|
||||||
|
|
||||||
/**
|
export const parseADOFAILevel = (level: string): Level => {
|
||||||
* @param {string} level
|
|
||||||
* @returns {any} level json
|
|
||||||
*/
|
|
||||||
export const parseADOFAILevel = (level) => {
|
|
||||||
try {
|
try {
|
||||||
return JSON5.parse(level)
|
return JSON5.parse(level)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -24,7 +21,6 @@ export const parseADOFAILevel = (level) => {
|
||||||
.replaceAll(']\t"decorations', '],\t"decorations')
|
.replaceAll(']\t"decorations', '],\t"decorations')
|
||||||
.replaceAll('\r', '')
|
.replaceAll('\r', '')
|
||||||
|
|
||||||
// require('fs').writeFileSync('./debug.adofai', formattedLevel);
|
|
||||||
return JSON5.parse(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