diff --git a/typescript/README.md b/typescript/README.md index ebe3303..3aca7e5 100644 --- a/typescript/README.md +++ b/typescript/README.md @@ -1,5 +1,6 @@ # Typescript -| Name | Description | -| ------------------- | ----------------------------------------------------------------------------------------------------- | -| [wave38](./wave38/) | Remake of [wave37](https://github.com/Mateiadrielrafael/wave37) I dropped super early in development. | +| Name | Description | +| ------------------------- | ------------------------------------------------------------------------------------------------------- | +| [lunardash](./lunardash/) | Rhythm game I dropped super early into development | +| [wave38](./wave38/) | Remake of [wave37](https://github.com/Mateiadrielrafael/wave37) I dropped super early into development. | diff --git a/typescript/lunardash/.gitignore b/typescript/lunardash/.gitignore new file mode 100644 index 0000000..a9965a5 --- /dev/null +++ b/typescript/lunardash/.gitignore @@ -0,0 +1,4 @@ +.build +build +web_modules +node_modules \ No newline at end of file diff --git a/typescript/lunardash/.prettierrc b/typescript/lunardash/.prettierrc new file mode 100644 index 0000000..a20502b --- /dev/null +++ b/typescript/lunardash/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} diff --git a/typescript/lunardash/README.md b/typescript/lunardash/README.md new file mode 100644 index 0000000..745522a --- /dev/null +++ b/typescript/lunardash/README.md @@ -0,0 +1,24 @@ +# New Project + +> ✨ Bootstrapped with Create Snowpack App (CSA). + +## Available Scripts + +### npm start + +Runs the app in the development mode. +Open http://localhost:8080 to view it in the browser. + +The page will reload if you make edits. +You will also see any lint errors in the console. + +### npm run build + +Builds a static copy of your site to the `build/` folder. +Your app is ready to be deployed! + +**For the best production performance:** Add a build bundler plugin like [@snowpack/plugin-webpack](https://github.com/snowpackjs/snowpack/tree/main/plugins/plugin-webpack) or [snowpack-plugin-rollup-bundle](https://github.com/ParamagicDev/snowpack-plugin-rollup-bundle) to your `snowpack.config.mjs` config file. + +### Q: What about Eject? + +No eject needed! Snowpack guarantees zero lock-in, and CSA strives for the same. diff --git a/typescript/lunardash/package.json b/typescript/lunardash/package.json new file mode 100644 index 0000000..d69b296 --- /dev/null +++ b/typescript/lunardash/package.json @@ -0,0 +1,20 @@ +{ + "scripts": { + "start": "snowpack dev", + "build": "snowpack build", + "test": "echo \"This template does not include a test runner by default.\" && exit 1", + "format": "prettier --write \"src/**/*.{ts,js}\"", + "lint": "prettier --check \"src/**/*.{ts,js}\"" + }, + "dependencies": { + "canvas-confetti": "^1.2.0" + }, + "devDependencies": { + "@snowpack/plugin-typescript": "^1.2.1", + "@types/canvas-confetti": "^1.0.0", + "@types/snowpack-env": "^2.3.3", + "prettier": "^2.2.1", + "snowpack": "^3.3.7", + "typescript": "^4.2.4" + } +} \ No newline at end of file diff --git a/typescript/lunardash/pnpm-lock.yaml b/typescript/lunardash/pnpm-lock.yaml new file mode 100644 index 0000000..7cc4180 --- /dev/null +++ b/typescript/lunardash/pnpm-lock.yaml @@ -0,0 +1,1463 @@ +dependencies: + canvas-confetti: 1.4.0 +devDependencies: + '@snowpack/plugin-typescript': 1.2.1_typescript@4.3.2 + '@types/canvas-confetti': 1.4.0 + '@types/snowpack-env': 2.3.3 + prettier: 2.3.1 + snowpack: 3.5.6 + typescript: 4.3.2 +lockfileVersion: 5.1 +packages: + /@npmcli/git/2.0.9: + dependencies: + '@npmcli/promise-spawn': 1.3.2 + lru-cache: 6.0.0 + mkdirp: 1.0.4 + npm-pick-manifest: 6.1.1 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.3.5 + which: 2.0.2 + dev: true + resolution: + integrity: sha512-hTMbMryvOqGLwnmMBKs5usbPsJtyEsMsgXwJbmNrsEuQQh1LAIMDU77IoOrwkCg+NgQWl+ySlarJASwM3SutCA== + /@npmcli/installed-package-contents/1.0.7: + dependencies: + npm-bundled: 1.1.2 + npm-normalize-package-bin: 1.0.1 + dev: true + engines: + node: '>= 10' + hasBin: true + resolution: + integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + /@npmcli/move-file/1.1.2: + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + /@npmcli/node-gyp/1.0.2: + dev: true + resolution: + integrity: sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg== + /@npmcli/promise-spawn/1.3.2: + dependencies: + infer-owner: 1.0.4 + dev: true + resolution: + integrity: sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== + /@npmcli/run-script/1.8.5: + dependencies: + '@npmcli/node-gyp': 1.0.2 + '@npmcli/promise-spawn': 1.3.2 + infer-owner: 1.0.4 + node-gyp: 7.1.2 + read-package-json-fast: 2.0.2 + dev: true + resolution: + integrity: sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A== + /@snowpack/plugin-typescript/1.2.1_typescript@4.3.2: + dependencies: + execa: 5.1.1 + npm-run-path: 4.0.1 + typescript: 4.3.2 + dev: true + peerDependencies: + typescript: '*' + resolution: + integrity: sha512-wU+JNaMVkqGsqTaUY7TnEMhGt/3URTgA9dpMCtZX6wn/ceA7Gwlmue/sOLynf0OTNLygHPvjiQECQYkEi3LTtg== + /@tootallnate/once/1.1.2: + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + /@types/canvas-confetti/1.4.0: + dev: true + resolution: + integrity: sha512-Neq4mvVecrHmTdyo98EY5bnKCjkZGQ6Ma7VyOrxIcMHEZPmt4kfquccqfBMrpNrdryMHgk3oGQi7XtpZacltnw== + /@types/snowpack-env/2.3.3: + dev: true + resolution: + integrity: sha512-riJuu2fR3qhBfpWJtqQtNwYJFvquiXfqdprXvZjSNmscnZbIVyHoM49ZVEM1bciKM1mWOCdjXymOYHyGh2WLtg== + /abbrev/1.1.1: + dev: true + resolution: + integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + /agent-base/6.0.2: + dependencies: + debug: 4.3.1 + dev: true + engines: + node: '>= 6.0.0' + resolution: + integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + /agentkeepalive/4.1.4: + dependencies: + debug: 4.3.1 + depd: 1.1.2 + humanize-ms: 1.2.1 + dev: true + engines: + node: '>= 8.0.0' + resolution: + integrity: sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== + /aggregate-error/3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + /ajv/6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + resolution: + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + /ansi-regex/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + /aproba/1.2.0: + dev: true + resolution: + integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + /are-we-there-yet/1.1.5: + dependencies: + delegates: 1.0.0 + readable-stream: 2.3.7 + dev: true + resolution: + integrity: sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + /asn1/0.2.4: + dependencies: + safer-buffer: 2.1.2 + dev: true + resolution: + integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + /assert-plus/1.0.0: + dev: true + engines: + node: '>=0.8' + resolution: + integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + /asynckit/0.4.0: + dev: true + resolution: + integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k= + /aws-sign2/0.7.0: + dev: true + resolution: + integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + /aws4/1.11.0: + dev: true + resolution: + integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + /balanced-match/1.0.2: + dev: true + resolution: + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + /bcrypt-pbkdf/1.0.2: + dependencies: + tweetnacl: 0.14.5 + dev: true + resolution: + integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + /big-integer/1.6.48: + dev: true + engines: + node: '>=0.6' + resolution: + integrity: sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== + /bplist-parser/0.1.1: + dependencies: + big-integer: 1.6.48 + dev: true + resolution: + integrity: sha1-1g1dzCDLptx+HymbNdPh+V2vuuY= + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /builtins/1.0.3: + dev: true + resolution: + integrity: sha1-y5T662HIaWRR2zZTThQi+U8K7og= + /cacache/15.2.0: + dependencies: + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.1.7 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.1.3 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.1.0 + unique-filename: 1.1.1 + dev: true + engines: + node: '>= 10' + resolution: + integrity: sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw== + /canvas-confetti/1.4.0: + dev: false + resolution: + integrity: sha512-S18o4Y9PqI/uabdlT/jI3MY7XBJjNxnfapFIkjkMwpz6qNxLFZOm2b22OMf4ZYDL9lpNWI+Ih4fEMVPwO1KHFQ== + /caseless/0.12.0: + dev: true + resolution: + integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + /chownr/2.0.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + /clean-stack/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + /cli-spinners/2.6.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + /code-point-at/1.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + /combined-stream/1.0.8: + dependencies: + delayed-stream: 1.0.0 + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + /concat-map/0.0.1: + dev: true + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /console-control-strings/1.1.0: + dev: true + resolution: + integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + /core-util-is/1.0.2: + dev: true + resolution: + integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + /cross-spawn/7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + /dashdash/1.14.1: + dependencies: + assert-plus: 1.0.0 + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + /debug/4.3.1: + dependencies: + ms: 2.1.2 + dev: true + engines: + node: '>=6.0' + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + resolution: + integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + /default-browser-id/2.0.0: + dependencies: + bplist-parser: 0.1.1 + pify: 2.3.0 + untildify: 2.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-AezONxpx6F8VoXF354YwR+c9vn0= + /delayed-stream/1.0.0: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + /delegates/1.0.0: + dev: true + resolution: + integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + /depd/1.1.2: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + /ecc-jsbn/0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: true + resolution: + integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + /encoding/0.1.13: + dependencies: + iconv-lite: 0.6.3 + dev: true + optional: true + resolution: + integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + /env-paths/2.2.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + /err-code/2.0.3: + dev: true + resolution: + integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + /esbuild/0.9.7: + dev: true + hasBin: true + requiresBuild: true + resolution: + integrity: sha512-VtUf6aQ89VTmMLKrWHYG50uByMF4JQlVysb8dmg6cOgW8JnFCipmz7p+HNBl+RR3LLCuBxFGVauAe2wfnF9bLg== + /execa/5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.0 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.3 + strip-final-newline: 2.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + /extend/3.0.2: + dev: true + resolution: + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + /extsprintf/1.3.0: + dev: true + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + /fast-deep-equal/3.1.3: + dev: true + resolution: + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + /fast-json-stable-stringify/2.1.0: + dev: true + resolution: + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + /fdir/5.1.0: + dev: true + resolution: + integrity: sha512-IgTtZwL52tx2wqWeuGDzXYTnNsEjNLahZpJw30hCQDyVnoHXwY5acNDnjGImTTL1R0z1PCyLw20VAbE5qLic3Q== + /forever-agent/0.6.1: + dev: true + resolution: + integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + /form-data/2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.31 + dev: true + engines: + node: '>= 0.12' + resolution: + integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + /fs-minipass/2.1.0: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + /fs.realpath/1.0.0: + dev: true + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /fsevents/2.1.3: + deprecated: '"Please update to latest v2.3 or v2.2"' + dev: true + engines: + node: ^8.16.0 || ^10.6.0 || >=11.0.0 + optional: true + os: + - darwin + resolution: + integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + /fsevents/2.3.2: + dev: true + engines: + node: ^8.16.0 || ^10.6.0 || >=11.0.0 + optional: true + os: + - darwin + resolution: + integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + /function-bind/1.1.1: + dev: true + resolution: + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + /gauge/2.7.4: + dependencies: + aproba: 1.2.0 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.3 + string-width: 1.0.2 + strip-ansi: 3.0.1 + wide-align: 1.1.3 + dev: true + resolution: + integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + /get-stream/6.0.1: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + /getpass/0.1.7: + dependencies: + assert-plus: 1.0.0 + dev: true + resolution: + integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + /glob/7.1.7: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + resolution: + integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + /graceful-fs/4.2.6: + dev: true + resolution: + integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + /har-schema/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + /har-validator/5.1.5: + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + deprecated: this library is no longer supported + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + /has-unicode/2.0.1: + dev: true + resolution: + integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + /has/1.0.3: + dependencies: + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4.0' + resolution: + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + /hosted-git-info/4.0.2: + dependencies: + lru-cache: 6.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + /http-cache-semantics/4.1.0: + dev: true + resolution: + integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + /http-proxy-agent/4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.1 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + /http-signature/1.2.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.1 + sshpk: 1.16.1 + dev: true + engines: + node: '>=0.8' + npm: '>=1.3.7' + resolution: + integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + /https-proxy-agent/5.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.3.1 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + /human-signals/2.1.0: + dev: true + engines: + node: '>=10.17.0' + resolution: + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + /humanize-ms/1.2.1: + dependencies: + ms: 2.1.3 + dev: true + resolution: + integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + /iconv-lite/0.6.3: + dependencies: + safer-buffer: 2.1.2 + dev: true + engines: + node: '>=0.10.0' + optional: true + resolution: + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + /ignore-walk/3.0.4: + dependencies: + minimatch: 3.0.4 + dev: true + resolution: + integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + /imurmurhash/0.1.4: + dev: true + engines: + node: '>=0.8.19' + resolution: + integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= + /indent-string/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + /infer-owner/1.0.4: + dev: true + resolution: + integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + dev: true + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /ip/1.1.5: + dev: true + resolution: + integrity: sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + /is-core-module/2.4.0: + dependencies: + has: 1.0.3 + dev: true + resolution: + integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + /is-docker/2.2.1: + dev: true + engines: + node: '>=8' + hasBin: true + resolution: + integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + /is-fullwidth-code-point/1.0.0: + dependencies: + number-is-nan: 1.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + /is-lambda/1.0.1: + dev: true + resolution: + integrity: sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + /is-stream/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + /is-typedarray/1.0.0: + dev: true + resolution: + integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + /is-wsl/2.2.0: + dependencies: + is-docker: 2.2.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + /isarray/1.0.0: + dev: true + resolution: + integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + /isexe/2.0.0: + dev: true + resolution: + integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + /isstream/0.1.2: + dev: true + resolution: + integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + /jsbn/0.1.1: + dev: true + resolution: + integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + /json-parse-even-better-errors/2.3.1: + dev: true + resolution: + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + /json-schema-traverse/0.4.1: + dev: true + resolution: + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + /json-schema/0.2.3: + dev: true + resolution: + integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + /json-stringify-safe/5.0.1: + dev: true + resolution: + integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + /jsonparse/1.3.1: + dev: true + engines: + '0': node >= 0.2.0 + resolution: + integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + /jsprim/1.4.1: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.2.3 + verror: 1.10.0 + dev: true + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + /lru-cache/6.0.0: + dependencies: + yallist: 4.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + /make-fetch-happen/9.0.2: + dependencies: + agentkeepalive: 4.1.4 + cacache: 15.2.0 + http-cache-semantics: 4.1.0 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.1.3 + minipass-collect: 1.0.2 + minipass-fetch: 1.3.3 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.2 + promise-retry: 2.0.1 + socks-proxy-agent: 5.0.0 + ssri: 8.0.1 + dev: true + engines: + node: '>= 10' + resolution: + integrity: sha512-UkAWAuXPXSSlVviTjH2We20mtj1NnZW2Qq/oTY2dyMbRQ5CR3Xed3akCDMnM7j6axrMY80lhgM7loNE132PfAw== + /merge-stream/2.0.0: + dev: true + resolution: + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + /mime-db/1.48.0: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== + /mime-types/2.1.31: + dependencies: + mime-db: 1.48.0 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + /mimic-fn/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + dev: true + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minipass-collect/1.0.2: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + /minipass-fetch/1.3.3: + dependencies: + minipass: 3.1.3 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + dev: true + engines: + node: '>=8' + optionalDependencies: + encoding: 0.1.13 + resolution: + integrity: sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ== + /minipass-flush/1.0.5: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + /minipass-json-stream/1.0.1: + dependencies: + jsonparse: 1.3.1 + minipass: 3.1.3 + dev: true + resolution: + integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + /minipass-pipeline/1.2.4: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + /minipass-sized/1.0.3: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + /minipass/3.1.3: + dependencies: + yallist: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + /minizlib/2.1.2: + dependencies: + minipass: 3.1.3 + yallist: 4.0.0 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + /mkdirp/1.0.4: + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + /ms/2.1.2: + dev: true + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /ms/2.1.3: + dev: true + resolution: + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + /negotiator/0.6.2: + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + /node-gyp/7.1.2: + dependencies: + env-paths: 2.2.1 + glob: 7.1.7 + graceful-fs: 4.2.6 + nopt: 5.0.0 + npmlog: 4.1.2 + request: 2.88.2 + rimraf: 3.0.2 + semver: 7.3.5 + tar: 6.1.0 + which: 2.0.2 + dev: true + engines: + node: '>= 10.12.0' + hasBin: true + resolution: + integrity: sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== + /nopt/5.0.0: + dependencies: + abbrev: 1.1.1 + dev: true + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + /npm-bundled/1.1.2: + dependencies: + npm-normalize-package-bin: 1.0.1 + dev: true + resolution: + integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + /npm-install-checks/4.0.0: + dependencies: + semver: 7.3.5 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== + /npm-normalize-package-bin/1.0.1: + dev: true + resolution: + integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + /npm-package-arg/8.1.4: + dependencies: + hosted-git-info: 4.0.2 + semver: 7.3.5 + validate-npm-package-name: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-xLokoCFqj/rPdr3LvcdDL6Kj6ipXGEDHD/QGpzwU6/pibYUOXmp5DBmg76yukFyx4ZDbrXNOTn+BPyd8TD4Jlw== + /npm-packlist/2.2.2: + dependencies: + glob: 7.1.7 + ignore-walk: 3.0.4 + npm-bundled: 1.1.2 + npm-normalize-package-bin: 1.0.1 + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg== + /npm-pick-manifest/6.1.1: + dependencies: + npm-install-checks: 4.0.0 + npm-normalize-package-bin: 1.0.1 + npm-package-arg: 8.1.4 + semver: 7.3.5 + dev: true + resolution: + integrity: sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== + /npm-registry-fetch/11.0.0: + dependencies: + make-fetch-happen: 9.0.2 + minipass: 3.1.3 + minipass-fetch: 1.3.3 + minipass-json-stream: 1.0.1 + minizlib: 2.1.2 + npm-package-arg: 8.1.4 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== + /npm-run-path/4.0.1: + dependencies: + path-key: 3.1.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + /npmlog/4.1.2: + dependencies: + are-we-there-yet: 1.1.5 + console-control-strings: 1.1.0 + gauge: 2.7.4 + set-blocking: 2.0.0 + dev: true + resolution: + integrity: sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + /number-is-nan/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + /oauth-sign/0.9.0: + dev: true + resolution: + integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + /object-assign/4.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /onetime/5.1.2: + dependencies: + mimic-fn: 2.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + /open/7.4.2: + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + /os-homedir/1.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + /p-map/4.0.0: + dependencies: + aggregate-error: 3.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + /pacote/11.3.4: + dependencies: + '@npmcli/git': 2.0.9 + '@npmcli/installed-package-contents': 1.0.7 + '@npmcli/promise-spawn': 1.3.2 + '@npmcli/run-script': 1.8.5 + cacache: 15.2.0 + chownr: 2.0.0 + fs-minipass: 2.1.0 + infer-owner: 1.0.4 + minipass: 3.1.3 + mkdirp: 1.0.4 + npm-package-arg: 8.1.4 + npm-packlist: 2.2.2 + npm-pick-manifest: 6.1.1 + npm-registry-fetch: 11.0.0 + promise-retry: 2.0.1 + read-package-json-fast: 2.0.2 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.1.0 + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-RfahPCunM9GI7ryJV/zY0bWQiokZyLqaSNHXtbNSoLb7bwTvBbJBEyCJ01KWs4j1Gj7GmX8crYXQ1sNX6P2VKA== + /path-is-absolute/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /path-key/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + /path-parse/1.0.7: + dev: true + resolution: + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + /performance-now/2.1.0: + dev: true + resolution: + integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + /picomatch/2.3.0: + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + /pify/2.3.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + /prettier/2.3.1: + dev: true + engines: + node: '>=10.13.0' + hasBin: true + resolution: + integrity: sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA== + /process-nextick-args/2.0.1: + dev: true + resolution: + integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + /promise-inflight/1.0.1: + dev: true + resolution: + integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM= + /promise-retry/2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + /psl/1.8.0: + dev: true + resolution: + integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + /punycode/2.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + /qs/6.5.2: + dev: true + engines: + node: '>=0.6' + resolution: + integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + /read-package-json-fast/2.0.2: + dependencies: + json-parse-even-better-errors: 2.3.1 + npm-normalize-package-bin: 1.0.1 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ== + /readable-stream/2.3.7: + dependencies: + core-util-is: 1.0.2 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + resolution: + integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + /request/2.88.2: + dependencies: + aws-sign2: 0.7.0 + aws4: 1.11.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.31 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.2 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + deprecated: 'request has been deprecated, see https://github.com/request/request/issues/3142' + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + /resolve/1.20.0: + dependencies: + is-core-module: 2.4.0 + path-parse: 1.0.7 + dev: true + resolution: + integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + /retry/0.12.0: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + /rimraf/3.0.2: + dependencies: + glob: 7.1.7 + dev: true + hasBin: true + resolution: + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + /rollup/2.37.1: + dev: true + engines: + node: '>=10.0.0' + hasBin: true + optionalDependencies: + fsevents: 2.1.3 + resolution: + integrity: sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ== + /safe-buffer/5.1.2: + dev: true + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /safe-buffer/5.2.1: + dev: true + resolution: + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + /safer-buffer/2.1.2: + dev: true + resolution: + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + /semver/7.3.5: + dependencies: + lru-cache: 6.0.0 + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + /set-blocking/2.0.0: + dev: true + resolution: + integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /shebang-command/2.0.0: + dependencies: + shebang-regex: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + /shebang-regex/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + /signal-exit/3.0.3: + dev: true + resolution: + integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + /smart-buffer/4.1.0: + dev: true + engines: + node: '>= 6.0.0' + npm: '>= 3.0.0' + resolution: + integrity: sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + /snowpack/3.5.6: + dependencies: + cli-spinners: 2.6.0 + default-browser-id: 2.0.0 + esbuild: 0.9.7 + fdir: 5.1.0 + open: 7.4.2 + pacote: 11.3.4 + picomatch: 2.3.0 + resolve: 1.20.0 + rollup: 2.37.1 + dev: true + engines: + node: '>=10.19.0' + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + resolution: + integrity: sha512-R9uqattPhS2j1zaOFgwl7i54rFTtxxk4kmKmqJBRwD+9YggUulGm7O7YRXaMMjtmi69czK7jxbtZs1Up/xA+1A== + /socks-proxy-agent/5.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.3.1 + socks: 2.6.1 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + /socks/2.6.1: + dependencies: + ip: 1.1.5 + smart-buffer: 4.1.0 + dev: true + engines: + node: '>= 10.13.0' + npm: '>= 3.0.0' + resolution: + integrity: sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== + /sshpk/1.16.1: + dependencies: + asn1: 0.2.4 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: true + engines: + node: '>=0.10.0' + hasBin: true + resolution: + integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + /ssri/8.0.1: + dependencies: + minipass: 3.1.3 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + /string-width/1.0.2: + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + /string_decoder/1.1.1: + dependencies: + safe-buffer: 5.1.2 + dev: true + resolution: + integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + /strip-ansi/3.0.1: + dependencies: + ansi-regex: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + /strip-final-newline/2.0.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + /tar/6.1.0: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 3.1.3 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + engines: + node: '>= 10' + resolution: + integrity: sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== + /tough-cookie/2.5.0: + dependencies: + psl: 1.8.0 + punycode: 2.1.1 + dev: true + engines: + node: '>=0.8' + resolution: + integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + /tunnel-agent/0.6.0: + dependencies: + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + /tweetnacl/0.14.5: + dev: true + resolution: + integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + /typescript/4.3.2: + dev: true + engines: + node: '>=4.2.0' + hasBin: true + resolution: + integrity: sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== + /unique-filename/1.1.1: + dependencies: + unique-slug: 2.0.2 + dev: true + resolution: + integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + /unique-slug/2.0.2: + dependencies: + imurmurhash: 0.1.4 + dev: true + resolution: + integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + /untildify/2.1.0: + dependencies: + os-homedir: 1.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F+soB5h/dpUunASF/DEdBqgmouA= + /uri-js/4.4.1: + dependencies: + punycode: 2.1.1 + dev: true + resolution: + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + /util-deprecate/1.0.2: + dev: true + resolution: + integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /uuid/3.4.0: + deprecated: 'Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.' + dev: true + hasBin: true + resolution: + integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + /validate-npm-package-name/3.0.0: + dependencies: + builtins: 1.0.3 + dev: true + resolution: + integrity: sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + /verror/1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + dev: true + engines: + '0': node >=0.6.0 + resolution: + integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + /which/2.0.2: + dependencies: + isexe: 2.0.0 + dev: true + engines: + node: '>= 8' + hasBin: true + resolution: + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + /wide-align/1.1.3: + dependencies: + string-width: 1.0.2 + dev: true + resolution: + integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + /wrappy/1.0.2: + dev: true + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /yallist/4.0.0: + dev: true + resolution: + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +specifiers: + '@snowpack/plugin-typescript': ^1.2.1 + '@types/canvas-confetti': ^1.0.0 + '@types/snowpack-env': ^2.3.3 + canvas-confetti: ^1.2.0 + prettier: ^2.2.1 + snowpack: ^3.3.7 + typescript: ^4.2.4 diff --git a/typescript/lunardash/public/favicon.ico b/typescript/lunardash/public/favicon.ico new file mode 100644 index 0000000..1dd685c Binary files /dev/null and b/typescript/lunardash/public/favicon.ico differ diff --git a/typescript/lunardash/public/index.css b/typescript/lunardash/public/index.css new file mode 100644 index 0000000..0c217b2 --- /dev/null +++ b/typescript/lunardash/public/index.css @@ -0,0 +1,11 @@ +body, +html { + padding: 0; + margin: 0; +} + +#canvas { + display: block; + width: 100vw; + height: 100vh; +} diff --git a/typescript/lunardash/public/index.html b/typescript/lunardash/public/index.html new file mode 100644 index 0000000..e72a00b --- /dev/null +++ b/typescript/lunardash/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + + Lunardash + + + + + + + + diff --git a/typescript/lunardash/public/logo.svg b/typescript/lunardash/public/logo.svg new file mode 100644 index 0000000..64c3391 --- /dev/null +++ b/typescript/lunardash/public/logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/typescript/lunardash/public/robots.txt b/typescript/lunardash/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/typescript/lunardash/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/typescript/lunardash/public/songs/heracles.mp3 b/typescript/lunardash/public/songs/heracles.mp3 new file mode 100644 index 0000000..9639fc2 Binary files /dev/null and b/typescript/lunardash/public/songs/heracles.mp3 differ diff --git a/typescript/lunardash/snowpack.config.mjs b/typescript/lunardash/snowpack.config.mjs new file mode 100644 index 0000000..e0f7882 --- /dev/null +++ b/typescript/lunardash/snowpack.config.mjs @@ -0,0 +1,33 @@ +/** @type {import("snowpack").SnowpackUserConfig } */ +export default { + mount: { + public: { url: '/', static: true }, + src: { url: '/dist' }, + }, + plugins: [ + [ + '@snowpack/plugin-typescript', + { + /* Yarn PnP workaround: see https://www.npmjs.com/package/@snowpack/plugin-typescript */ + ...(process.versions.pnp ? { tsc: 'yarn pnpify tsc' } : {}), + }, + ], + ], + routes: [ + /* Enable an SPA Fallback in development: */ + // {"match": "routes", "src": ".*", "dest": "/index.html"}, + ], + optimize: { + /* Example: Bundle your final build: */ + // "bundle": true, + }, + packageOptions: { + /* ... */ + }, + devOptions: { + /* ... */ + }, + buildOptions: { + /* ... */ + }, +}; diff --git a/typescript/lunardash/src/Chart.ts b/typescript/lunardash/src/Chart.ts new file mode 100644 index 0000000..54a2bdd --- /dev/null +++ b/typescript/lunardash/src/Chart.ts @@ -0,0 +1,17 @@ +export const enum Axis { + Negative = -1, + Zero = 0, + Positive = 1, +} + +export type Direction = [Axis, Axis]; + +export interface Note { + stamp: number; + orientation: Direction; +} + +export interface Chart { + path: Array; + song: HTMLAudioElement; +} diff --git a/typescript/lunardash/src/State.ts b/typescript/lunardash/src/State.ts new file mode 100644 index 0000000..544b043 --- /dev/null +++ b/typescript/lunardash/src/State.ts @@ -0,0 +1,37 @@ +import type { Chart } from './Chart'; + +export const enum NoteJudgement { + Missed, + Far, + Perfect, +} + +export const enum NoteTiming { + Early, + Late, +} + +export interface NoteState { + judgement: NoteJudgement; + timing: NoteTiming; +} + +export interface State { + song: HTMLAudioElement; + currentNote: number; + notes: NoteState[]; + readonly chart: Chart; + readonly settings: Settings; +} + +export interface Settings { + offset: number; + judgments: { + perfect: number; + far: number; + }; + scrollSpeed: number; + implicitScrollSpeed: number; + windowCenter: number; + noteSize: number; +} diff --git a/typescript/lunardash/src/index.ts b/typescript/lunardash/src/index.ts new file mode 100644 index 0000000..dced0be --- /dev/null +++ b/typescript/lunardash/src/index.ts @@ -0,0 +1,176 @@ +import type { Chart, Note } from './Chart'; +import { NoteJudgement, NoteTiming, State } from './State'; + +const canvas = document.getElementById('canvas')! as HTMLCanvasElement; +const ctx = canvas.getContext('2d')!; + +const song = new Audio('/songs/heracles.mp3'); + +const heracles: Chart = { + song, + path: [ + { + stamp: 1.906999, + orientation: [0, 1], + }, + { + stamp: 3.115963, + orientation: [0, 1], + }, + { + stamp: 4.365792, + orientation: [0, 1], + }, + { + stamp: 5.645609, + orientation: [0, 1], + }, + { + stamp: 6.894808, + orientation: [0, 1], + }, + { + stamp: 8.099023, + orientation: [0, 1], + }, + { + stamp: 9.337156, + orientation: [0, 1], + }, + ], +}; + +let started = false; + +const state: State = { + chart: heracles, + currentNote: 0, + notes: [], + song, + settings: { + offset: 0.05, + judgments: { + far: 0.1, + perfect: 0.042, + }, + scrollSpeed: 4, + implicitScrollSpeed: 100, + windowCenter: 100, + noteSize: 10, + }, +}; + +const start = () => { + started = true; + + state.song.play(); + + main(); + resize(); +}; + +const resize = () => { + canvas.width = window.innerWidth; + canvas.height = window.innerHeight; +}; + +const main = () => { + if (state.song.currentTime > state.chart.path[state.currentNote].stamp) { + state.currentNote++; + } + + const time = state.song.currentTime - state.settings.offset; + + while (true) { + const firstNote = state.chart.path[state.notes.length]; + const delta = time - firstNote.stamp; + + if (delta > state.settings.judgments.far) { + state.notes.push({ + timing: NoteTiming.Late, + judgement: NoteJudgement.Missed, + }); + } else break; + } + + ctx.clearRect(0, 0, 3000, 3000); + + ctx.fillStyle = 'rgba(0,0,0,0.3)'; + ctx.fillRect(0, 200, window.innerWidth, 100); + + ctx.fillStyle = 'blue'; + ctx.fillRect( + state.settings.windowCenter - state.settings.noteSize / 2, + 200, + state.settings.noteSize, + 100, + ); + + ctx.fillStyle = 'rgba(0,0,256,0.3)'; + const farSize = + state.settings.judgments.far * + state.settings.scrollSpeed * + state.settings.implicitScrollSpeed; + + ctx.fillRect(state.settings.windowCenter - farSize, 200, farSize * 2, 100); + + for (let index = 0; index < heracles.path.length; index++) { + const note = heracles.path[index]; + if (state.notes[index]?.judgement === NoteJudgement.Missed) + ctx.fillStyle = 'red'; + else if (state.notes[index]?.judgement === NoteJudgement.Far) + ctx.fillStyle = + state.notes[index].timing === NoteTiming.Late ? 'orange' : 'blue'; + else if (state.notes[index]?.judgement === NoteJudgement.Perfect) + ctx.fillStyle = 'green'; + else ctx.fillStyle = 'yellow'; + + ctx.fillRect( + state.settings.windowCenter + + (note.stamp - song.currentTime) * + state.settings.scrollSpeed * + state.settings.implicitScrollSpeed, + 200, + state.settings.noteSize, + 100, + ); + } + + requestAnimationFrame(main); +}; + +canvas.onclick = () => { + if (!started) return start(); + + const time = state.song.currentTime - state.settings.offset; + + while (true) { + const firstNote = state.chart.path[state.notes.length]; + + if (!firstNote) return; + + const delta = time - firstNote.stamp; + const absoluteDelta = Math.abs(delta); + const timing = delta < 0 ? NoteTiming.Early : NoteTiming.Late; + + console.log({ timing, delta, firstNote, absoluteDelta, time }); + + if (delta > state.settings.judgments.far) { + state.notes.push({ + timing: NoteTiming.Late, + judgement: NoteJudgement.Missed, + }); + continue; + } else if (absoluteDelta > state.settings.judgments.far) return; + else + state.notes.push({ + timing, + judgement: + absoluteDelta < state.settings.judgments.perfect + ? NoteJudgement.Perfect + : NoteJudgement.Far, + }); + + return; + } +}; diff --git a/typescript/lunardash/tsconfig.json b/typescript/lunardash/tsconfig.json new file mode 100644 index 0000000..622787d --- /dev/null +++ b/typescript/lunardash/tsconfig.json @@ -0,0 +1,29 @@ +{ + "include": ["src", "types"], + "compilerOptions": { + "module": "esnext", + "target": "esnext", + "moduleResolution": "node", + "jsx": "preserve", + "baseUrl": "./", + /* paths - import rewriting/resolving */ + "paths": { + // If you configured any Snowpack aliases, add them here. + // Add this line to get types for streaming imports (packageOptions.source="remote"): + // "*": [".snowpack/types/*"] + // More info: https://www.snowpack.dev/guides/streaming-imports + }, + "allowSyntheticDefaultImports": true, + "importsNotUsedAsValues": "error", + /* more strict checking for errors that per-file transpilers like `esbuild` would crash */ + "isolatedModules": true, + /* noEmit - We only use TypeScript for type checking. */ + "noEmit": true, + /* Additional Options */ + "strict": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "useDefineForClassFields": true + } +} diff --git a/typescript/lunardash/types/static.d.ts b/typescript/lunardash/types/static.d.ts new file mode 100644 index 0000000..ba74d2a --- /dev/null +++ b/typescript/lunardash/types/static.d.ts @@ -0,0 +1,59 @@ +/* Use this file to declare any custom file extensions for importing */ +/* Use this folder to also add/extend a package d.ts file, if needed. */ + +/* CSS MODULES */ +declare module '*.module.css' { + const classes: { [key: string]: string }; + export default classes; +} +declare module '*.module.scss' { + const classes: { [key: string]: string }; + export default classes; +} +declare module '*.module.sass' { + const classes: { [key: string]: string }; + export default classes; +} +declare module '*.module.less' { + const classes: { [key: string]: string }; + export default classes; +} +declare module '*.module.styl' { + const classes: { [key: string]: string }; + export default classes; +} + +/* CSS */ +declare module '*.css'; +declare module '*.scss'; +declare module '*.sass'; +declare module '*.less'; +declare module '*.styl'; + +/* IMAGES */ +declare module '*.svg' { + const ref: string; + export default ref; +} +declare module '*.bmp' { + const ref: string; + export default ref; +} +declare module '*.gif' { + const ref: string; + export default ref; +} +declare module '*.jpg' { + const ref: string; + export default ref; +} +declare module '*.jpeg' { + const ref: string; + export default ref; +} +declare module '*.png' { + const ref: string; + export default ref; +} + +/* CUSTOM: ADD YOUR OWN HERE */