Start linting with eslint
This commit is contained in:
		
							parent
							
								
									056acbf397
								
							
						
					
					
						commit
						f9bd128a02
					
				
					 15 changed files with 786 additions and 100 deletions
				
			
		| 
						 | 
				
			
			@ -1,40 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "parser": "@typescript-eslint/parser",
 | 
			
		||||
    "plugins": [
 | 
			
		||||
        "@typescript-eslint"
 | 
			
		||||
    ],
 | 
			
		||||
    "env": {
 | 
			
		||||
        "es6": true,
 | 
			
		||||
        "browser": true,
 | 
			
		||||
        "jquery": true
 | 
			
		||||
    },
 | 
			
		||||
    "extends": [
 | 
			
		||||
        "eslint:recommended",
 | 
			
		||||
        "plugin:@typescript-eslint/recommended"
 | 
			
		||||
    ],
 | 
			
		||||
    "rules": {
 | 
			
		||||
        "indent": [
 | 
			
		||||
            "error",
 | 
			
		||||
            4
 | 
			
		||||
        ],
 | 
			
		||||
        "linebreak-style": [
 | 
			
		||||
            "error",
 | 
			
		||||
            "unix"
 | 
			
		||||
        ],
 | 
			
		||||
        "quotes": [
 | 
			
		||||
            "error",
 | 
			
		||||
            "double"
 | 
			
		||||
        ],
 | 
			
		||||
        "semi": [
 | 
			
		||||
            "warn",
 | 
			
		||||
            "always"
 | 
			
		||||
        ],
 | 
			
		||||
        "no-console": [
 | 
			
		||||
            "off"
 | 
			
		||||
        ],
 | 
			
		||||
        "no-unused-vars": [
 | 
			
		||||
            "warn",
 | 
			
		||||
            { "argsIgnorePattern": "^_" }
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								.eslintrc.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								.eslintrc.yaml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
root: true
 | 
			
		||||
 | 
			
		||||
parser: "@typescript-eslint/parser"
 | 
			
		||||
parserOptions:
 | 
			
		||||
  project:
 | 
			
		||||
    - ./tsconfig.json
 | 
			
		||||
plugins:
 | 
			
		||||
  - "@typescript-eslint"
 | 
			
		||||
 | 
			
		||||
extends:
 | 
			
		||||
  - eslint:recommended
 | 
			
		||||
  - plugin:@typescript-eslint/recommended
 | 
			
		||||
  - plugin:@typescript-eslint/recommended-requiring-type-checking
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  es6: true
 | 
			
		||||
  browser: true
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# {
 | 
			
		||||
#     "parser": "@typescript-eslint/parser",
 | 
			
		||||
#     "plugins": [
 | 
			
		||||
#         "@typescript-eslint"
 | 
			
		||||
#     ],
 | 
			
		||||
#     "env": {
 | 
			
		||||
#         "es6": true,
 | 
			
		||||
#         "browser": true,
 | 
			
		||||
#         "jquery": true
 | 
			
		||||
#     },
 | 
			
		||||
#     "extends": [
 | 
			
		||||
#         "eslint:recommended",
 | 
			
		||||
#         "plugin:@typescript-eslint/recommended"
 | 
			
		||||
#     ],
 | 
			
		||||
#     "rules": {
 | 
			
		||||
#         "indent": [
 | 
			
		||||
#             "error",
 | 
			
		||||
#             4
 | 
			
		||||
#         ],
 | 
			
		||||
#         "linebreak-style": [
 | 
			
		||||
#             "error",
 | 
			
		||||
#             "unix"
 | 
			
		||||
#         ],
 | 
			
		||||
#         "quotes": [
 | 
			
		||||
#             "error",
 | 
			
		||||
#             "double"
 | 
			
		||||
#         ],
 | 
			
		||||
#         "semi": [
 | 
			
		||||
#             "warn",
 | 
			
		||||
#             "always"
 | 
			
		||||
#         ],
 | 
			
		||||
#         "no-console": [
 | 
			
		||||
#             "off"
 | 
			
		||||
#         ],
 | 
			
		||||
#         "no-unused-vars": [
 | 
			
		||||
#             "warn",
 | 
			
		||||
#             { "argsIgnorePattern": "^_" }
 | 
			
		||||
#         ]
 | 
			
		||||
#     }
 | 
			
		||||
# }
 | 
			
		||||
| 
						 | 
				
			
			@ -21,7 +21,7 @@
 | 
			
		|||
          include = [
 | 
			
		||||
            ../package.json
 | 
			
		||||
            ../tsconfig.json
 | 
			
		||||
            ../.eslintrc.json
 | 
			
		||||
            ../.eslintrc.yaml
 | 
			
		||||
            ../.parcelrc
 | 
			
		||||
            ../.posthtmlrc
 | 
			
		||||
            ../.prettierrc
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@
 | 
			
		|||
 | 
			
		||||
        checkPhase = ''
 | 
			
		||||
          mkdir -p $out
 | 
			
		||||
          ${concatStringsSep "\n" (map (command: "${command} > $out/check.log") checkCommands)}
 | 
			
		||||
          ${concatStringsSep "\n" (map (command: "${command} | tee $out/check.log") checkCommands)}
 | 
			
		||||
        '';
 | 
			
		||||
 | 
			
		||||
        doCheck = true;
 | 
			
		||||
| 
						 | 
				
			
			@ -58,4 +58,10 @@ in {
 | 
			
		|||
      "npm run check"
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  lints = mkNodeCheck {
 | 
			
		||||
    checkCommands = [
 | 
			
		||||
      "npm run lint"
 | 
			
		||||
    ];
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										646
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										646
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -1049,6 +1049,40 @@
 | 
			
		|||
        "to-fast-properties": "^2.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@eslint/eslintrc": {
 | 
			
		||||
      "version": "1.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "ajv": "^6.12.4",
 | 
			
		||||
        "debug": "^4.3.2",
 | 
			
		||||
        "espree": "^9.3.2",
 | 
			
		||||
        "globals": "^13.15.0",
 | 
			
		||||
        "ignore": "^5.2.0",
 | 
			
		||||
        "import-fresh": "^3.2.1",
 | 
			
		||||
        "js-yaml": "^4.1.0",
 | 
			
		||||
        "minimatch": "^3.1.2",
 | 
			
		||||
        "strip-json-comments": "^3.1.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "globals": {
 | 
			
		||||
          "version": "13.17.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
 | 
			
		||||
          "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "type-fest": "^0.20.2"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "strip-json-comments": {
 | 
			
		||||
          "version": "3.1.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
 | 
			
		||||
          "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@fontsource/arimo": {
 | 
			
		||||
      "version": "4.5.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@fontsource/arimo/-/arimo-4.5.8.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -1070,6 +1104,29 @@
 | 
			
		|||
      "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@humanwhocodes/config-array": {
 | 
			
		||||
      "version": "0.10.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
 | 
			
		||||
      "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@humanwhocodes/object-schema": "^1.2.1",
 | 
			
		||||
        "debug": "^4.1.1",
 | 
			
		||||
        "minimatch": "^3.0.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@humanwhocodes/gitignore-to-minimatch": {
 | 
			
		||||
      "version": "1.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@humanwhocodes/object-schema": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@jimp/bmp": {
 | 
			
		||||
      "version": "0.16.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2850,6 +2907,12 @@
 | 
			
		|||
      "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@types/json-schema": {
 | 
			
		||||
      "version": "7.0.11",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
 | 
			
		||||
      "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@types/keyv": {
 | 
			
		||||
      "version": "3.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2929,6 +2992,141 @@
 | 
			
		|||
      "integrity": "sha512-LQvrACV3Pj17GpkwHwXuTd733gfY+D7b9mKdrTmLdO7vo7P/o6209Qqtk63y/FCv/lspdmi0pWz6Qe/ull9kQg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": {
 | 
			
		||||
      "version": "5.32.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz",
 | 
			
		||||
      "integrity": "sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@typescript-eslint/scope-manager": "5.32.0",
 | 
			
		||||
        "@typescript-eslint/type-utils": "5.32.0",
 | 
			
		||||
        "@typescript-eslint/utils": "5.32.0",
 | 
			
		||||
        "debug": "^4.3.4",
 | 
			
		||||
        "functional-red-black-tree": "^1.0.1",
 | 
			
		||||
        "ignore": "^5.2.0",
 | 
			
		||||
        "regexpp": "^3.2.0",
 | 
			
		||||
        "semver": "^7.3.7",
 | 
			
		||||
        "tsutils": "^3.21.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "semver": {
 | 
			
		||||
          "version": "7.3.7",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
 | 
			
		||||
          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "lru-cache": "^6.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@typescript-eslint/parser": {
 | 
			
		||||
      "version": "5.32.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.32.0.tgz",
 | 
			
		||||
      "integrity": "sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@typescript-eslint/scope-manager": "5.32.0",
 | 
			
		||||
        "@typescript-eslint/types": "5.32.0",
 | 
			
		||||
        "@typescript-eslint/typescript-estree": "5.32.0",
 | 
			
		||||
        "debug": "^4.3.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@typescript-eslint/scope-manager": {
 | 
			
		||||
      "version": "5.32.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz",
 | 
			
		||||
      "integrity": "sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@typescript-eslint/types": "5.32.0",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "5.32.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@typescript-eslint/type-utils": {
 | 
			
		||||
      "version": "5.32.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz",
 | 
			
		||||
      "integrity": "sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@typescript-eslint/utils": "5.32.0",
 | 
			
		||||
        "debug": "^4.3.4",
 | 
			
		||||
        "tsutils": "^3.21.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@typescript-eslint/types": {
 | 
			
		||||
      "version": "5.32.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.32.0.tgz",
 | 
			
		||||
      "integrity": "sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@typescript-eslint/typescript-estree": {
 | 
			
		||||
      "version": "5.32.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@typescript-eslint/types": "5.32.0",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "5.32.0",
 | 
			
		||||
        "debug": "^4.3.4",
 | 
			
		||||
        "globby": "^11.1.0",
 | 
			
		||||
        "is-glob": "^4.0.3",
 | 
			
		||||
        "semver": "^7.3.7",
 | 
			
		||||
        "tsutils": "^3.21.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "semver": {
 | 
			
		||||
          "version": "7.3.7",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
 | 
			
		||||
          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "lru-cache": "^6.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@typescript-eslint/utils": {
 | 
			
		||||
      "version": "5.32.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.32.0.tgz",
 | 
			
		||||
      "integrity": "sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@types/json-schema": "^7.0.9",
 | 
			
		||||
        "@typescript-eslint/scope-manager": "5.32.0",
 | 
			
		||||
        "@typescript-eslint/types": "5.32.0",
 | 
			
		||||
        "@typescript-eslint/typescript-estree": "5.32.0",
 | 
			
		||||
        "eslint-scope": "^5.1.1",
 | 
			
		||||
        "eslint-utils": "^3.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "eslint-scope": {
 | 
			
		||||
          "version": "5.1.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
 | 
			
		||||
          "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "esrecurse": "^4.3.0",
 | 
			
		||||
            "estraverse": "^4.1.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "estraverse": {
 | 
			
		||||
          "version": "4.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@typescript-eslint/visitor-keys": {
 | 
			
		||||
      "version": "5.32.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz",
 | 
			
		||||
      "integrity": "sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@typescript-eslint/types": "5.32.0",
 | 
			
		||||
        "eslint-visitor-keys": "^3.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "abbrev": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2947,6 +3145,12 @@
 | 
			
		|||
      "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "acorn-jsx": {
 | 
			
		||||
      "version": "5.3.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
 | 
			
		||||
      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "agent-base": {
 | 
			
		||||
      "version": "6.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3867,6 +4071,17 @@
 | 
			
		|||
        "yaml": "^1.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "cross-spawn": {
 | 
			
		||||
      "version": "7.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "path-key": "^3.1.0",
 | 
			
		||||
        "shebang-command": "^2.0.0",
 | 
			
		||||
        "which": "^2.0.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "crypto-random-string": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -3949,6 +4164,12 @@
 | 
			
		|||
      "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "deep-is": {
 | 
			
		||||
      "version": "0.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
 | 
			
		||||
      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "deepmerge": {
 | 
			
		||||
      "version": "4.2.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4031,6 +4252,15 @@
 | 
			
		|||
        "path-type": "^4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "doctrine": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "esutils": "^2.0.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "dom-serializer": {
 | 
			
		||||
      "version": "1.4.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4187,6 +4417,260 @@
 | 
			
		|||
      "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "escape-string-regexp": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "eslint": {
 | 
			
		||||
      "version": "8.21.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz",
 | 
			
		||||
      "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@eslint/eslintrc": "^1.3.0",
 | 
			
		||||
        "@humanwhocodes/config-array": "^0.10.4",
 | 
			
		||||
        "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
 | 
			
		||||
        "ajv": "^6.10.0",
 | 
			
		||||
        "chalk": "^4.0.0",
 | 
			
		||||
        "cross-spawn": "^7.0.2",
 | 
			
		||||
        "debug": "^4.3.2",
 | 
			
		||||
        "doctrine": "^3.0.0",
 | 
			
		||||
        "escape-string-regexp": "^4.0.0",
 | 
			
		||||
        "eslint-scope": "^7.1.1",
 | 
			
		||||
        "eslint-utils": "^3.0.0",
 | 
			
		||||
        "eslint-visitor-keys": "^3.3.0",
 | 
			
		||||
        "espree": "^9.3.3",
 | 
			
		||||
        "esquery": "^1.4.0",
 | 
			
		||||
        "esutils": "^2.0.2",
 | 
			
		||||
        "fast-deep-equal": "^3.1.3",
 | 
			
		||||
        "file-entry-cache": "^6.0.1",
 | 
			
		||||
        "find-up": "^5.0.0",
 | 
			
		||||
        "functional-red-black-tree": "^1.0.1",
 | 
			
		||||
        "glob-parent": "^6.0.1",
 | 
			
		||||
        "globals": "^13.15.0",
 | 
			
		||||
        "globby": "^11.1.0",
 | 
			
		||||
        "grapheme-splitter": "^1.0.4",
 | 
			
		||||
        "ignore": "^5.2.0",
 | 
			
		||||
        "import-fresh": "^3.0.0",
 | 
			
		||||
        "imurmurhash": "^0.1.4",
 | 
			
		||||
        "is-glob": "^4.0.0",
 | 
			
		||||
        "js-yaml": "^4.1.0",
 | 
			
		||||
        "json-stable-stringify-without-jsonify": "^1.0.1",
 | 
			
		||||
        "levn": "^0.4.1",
 | 
			
		||||
        "lodash.merge": "^4.6.2",
 | 
			
		||||
        "minimatch": "^3.1.2",
 | 
			
		||||
        "natural-compare": "^1.4.0",
 | 
			
		||||
        "optionator": "^0.9.1",
 | 
			
		||||
        "regexpp": "^3.2.0",
 | 
			
		||||
        "strip-ansi": "^6.0.1",
 | 
			
		||||
        "strip-json-comments": "^3.1.0",
 | 
			
		||||
        "text-table": "^0.2.0",
 | 
			
		||||
        "v8-compile-cache": "^2.0.3"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ansi-regex": {
 | 
			
		||||
          "version": "5.0.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
 | 
			
		||||
          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "ansi-styles": {
 | 
			
		||||
          "version": "4.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "color-convert": "^2.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "chalk": {
 | 
			
		||||
          "version": "4.1.2",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
 | 
			
		||||
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "ansi-styles": "^4.1.0",
 | 
			
		||||
            "supports-color": "^7.1.0"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "color-convert": {
 | 
			
		||||
          "version": "2.0.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
			
		||||
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "color-name": "~1.1.4"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "color-name": {
 | 
			
		||||
          "version": "1.1.4",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
 | 
			
		||||
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "find-up": {
 | 
			
		||||
          "version": "5.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "locate-path": "^6.0.0",
 | 
			
		||||
            "path-exists": "^4.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "glob-parent": {
 | 
			
		||||
          "version": "6.0.2",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
 | 
			
		||||
          "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "is-glob": "^4.0.3"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "globals": {
 | 
			
		||||
          "version": "13.17.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
 | 
			
		||||
          "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "type-fest": "^0.20.2"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "has-flag": {
 | 
			
		||||
          "version": "4.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "locate-path": {
 | 
			
		||||
          "version": "6.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "p-locate": "^5.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "p-limit": {
 | 
			
		||||
          "version": "3.1.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
 | 
			
		||||
          "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "yocto-queue": "^0.1.0"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "p-locate": {
 | 
			
		||||
          "version": "5.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "p-limit": "^3.0.2"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "path-exists": {
 | 
			
		||||
          "version": "4.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "strip-ansi": {
 | 
			
		||||
          "version": "6.0.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
 | 
			
		||||
          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "ansi-regex": "^5.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "strip-json-comments": {
 | 
			
		||||
          "version": "3.1.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
 | 
			
		||||
          "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "supports-color": {
 | 
			
		||||
          "version": "7.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "has-flag": "^4.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "eslint-scope": {
 | 
			
		||||
      "version": "7.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "esrecurse": "^4.3.0",
 | 
			
		||||
        "estraverse": "^5.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "eslint-utils": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "eslint-visitor-keys": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "eslint-visitor-keys": {
 | 
			
		||||
          "version": "2.1.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
 | 
			
		||||
          "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "eslint-visitor-keys": {
 | 
			
		||||
      "version": "3.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "espree": {
 | 
			
		||||
      "version": "9.3.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
 | 
			
		||||
      "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "acorn": "^8.8.0",
 | 
			
		||||
        "acorn-jsx": "^5.3.2",
 | 
			
		||||
        "eslint-visitor-keys": "^3.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "esquery": {
 | 
			
		||||
      "version": "1.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "estraverse": "^5.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "esrecurse": {
 | 
			
		||||
      "version": "4.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "estraverse": "^5.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "estraverse": {
 | 
			
		||||
      "version": "5.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "esutils": {
 | 
			
		||||
      "version": "2.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4242,6 +4726,12 @@
 | 
			
		|||
      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "fast-levenshtein": {
 | 
			
		||||
      "version": "2.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "fast-memoize": {
 | 
			
		||||
      "version": "2.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4284,6 +4774,15 @@
 | 
			
		|||
      "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "file-entry-cache": {
 | 
			
		||||
      "version": "6.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "flat-cache": "^3.0.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "file-type": {
 | 
			
		||||
      "version": "9.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4308,6 +4807,22 @@
 | 
			
		|||
        "locate-path": "^3.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flat-cache": {
 | 
			
		||||
      "version": "3.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "flatted": "^3.1.0",
 | 
			
		||||
        "rimraf": "^3.0.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "flatted": {
 | 
			
		||||
      "version": "3.2.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
 | 
			
		||||
      "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "forever-agent": {
 | 
			
		||||
      "version": "0.6.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4382,6 +4897,12 @@
 | 
			
		|||
      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "functional-red-black-tree": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "gauge": {
 | 
			
		||||
      "version": "2.7.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4566,6 +5087,12 @@
 | 
			
		|||
      "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "grapheme-splitter": {
 | 
			
		||||
      "version": "1.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "hack-font": {
 | 
			
		||||
      "version": "3.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/hack-font/-/hack-font-3.3.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5132,6 +5659,12 @@
 | 
			
		|||
      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "json-stable-stringify-without-jsonify": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "json-stringify-safe": {
 | 
			
		||||
      "version": "5.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5215,6 +5748,16 @@
 | 
			
		|||
        "package-json": "^8.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "levn": {
 | 
			
		||||
      "version": "0.4.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
 | 
			
		||||
      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "prelude-ls": "^1.2.1",
 | 
			
		||||
        "type-check": "~0.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "lines-and-columns": {
 | 
			
		||||
      "version": "1.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5301,6 +5844,12 @@
 | 
			
		|||
      "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "lodash.merge": {
 | 
			
		||||
      "version": "4.6.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
 | 
			
		||||
      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "loose-envify": {
 | 
			
		||||
      "version": "1.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -5580,6 +6129,12 @@
 | 
			
		|||
      "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "natural-compare": {
 | 
			
		||||
      "version": "1.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "negotiator": {
 | 
			
		||||
      "version": "0.6.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6125,6 +6680,20 @@
 | 
			
		|||
        "wrappy": "1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "optionator": {
 | 
			
		||||
      "version": "0.9.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
 | 
			
		||||
      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "deep-is": "^0.1.3",
 | 
			
		||||
        "fast-levenshtein": "^2.0.6",
 | 
			
		||||
        "levn": "^0.4.1",
 | 
			
		||||
        "prelude-ls": "^1.2.1",
 | 
			
		||||
        "type-check": "^0.4.0",
 | 
			
		||||
        "word-wrap": "^1.2.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "ordered-binary": {
 | 
			
		||||
      "version": "1.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.3.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6391,6 +6960,12 @@
 | 
			
		|||
      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "path-key": {
 | 
			
		||||
      "version": "3.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "path-parse": {
 | 
			
		||||
      "version": "1.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -6790,6 +7365,12 @@
 | 
			
		|||
        "tunnel-agent": "^0.6.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "prelude-ls": {
 | 
			
		||||
      "version": "1.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "prettier": {
 | 
			
		||||
      "version": "2.7.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -7116,6 +7697,12 @@
 | 
			
		|||
        "@babel/runtime": "^7.8.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "regexpp": {
 | 
			
		||||
      "version": "3.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "regexpu-core": {
 | 
			
		||||
      "version": "5.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -7504,6 +8091,21 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "shebang-command": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "shebang-regex": "^3.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "shebang-regex": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "signal-exit": {
 | 
			
		||||
      "version": "3.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -7876,6 +8478,12 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "text-table": {
 | 
			
		||||
      "version": "0.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "three": {
 | 
			
		||||
      "version": "0.142.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/three/-/three-0.142.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -7973,6 +8581,23 @@
 | 
			
		|||
      "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "tsutils": {
 | 
			
		||||
      "version": "3.21.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
 | 
			
		||||
      "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "tslib": "^1.8.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "tslib": {
 | 
			
		||||
          "version": "1.14.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
 | 
			
		||||
          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "tunnel-agent": {
 | 
			
		||||
      "version": "0.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -7988,6 +8613,15 @@
 | 
			
		|||
      "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "type-check": {
 | 
			
		||||
      "version": "0.4.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
 | 
			
		||||
      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "prelude-ls": "^1.2.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "type-fest": {
 | 
			
		||||
      "version": "0.20.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8009,6 +8643,12 @@
 | 
			
		|||
      "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "typescript-eslint-language-service": {
 | 
			
		||||
      "version": "5.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typescript-eslint-language-service/-/typescript-eslint-language-service-5.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-QB3YsL+lDOpKwblXuqD9GkzpHhJC2D02e/3OIj38kIe6LSL97cEsUtnsVPqIaofnOsV2glj2T5VLxp5gmLTERQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "typescript-language-server": {
 | 
			
		||||
      "version": "0.11.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typescript-language-server/-/typescript-language-server-0.11.2.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -8481,6 +9121,12 @@
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "word-wrap": {
 | 
			
		||||
      "version": "1.2.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
 | 
			
		||||
      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "wrap-ansi": {
 | 
			
		||||
      "version": "8.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,6 +25,9 @@
 | 
			
		|||
    "@parcel/transformer-sass": "^2.6.2",
 | 
			
		||||
    "@types/react-dom": "^18.0.6",
 | 
			
		||||
    "@types/three": "^0.141.0",
 | 
			
		||||
    "@typescript-eslint/parser": "^5.32.0",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "^5.32.0",
 | 
			
		||||
    "eslint": "^8.21.0",
 | 
			
		||||
    "prettier": "^2.7.1",
 | 
			
		||||
    "parcel": "^2.6.2",
 | 
			
		||||
    "posthtml-extend": "^0.6.3",
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +37,7 @@
 | 
			
		|||
    "sass": "^1.53.0",
 | 
			
		||||
    "typescript": "^4.7.4",
 | 
			
		||||
    "typescript-language-server": "^0.11.2",
 | 
			
		||||
    "typescript-eslint-language-service": "^5.0.0",
 | 
			
		||||
    "vscode-langservers-extracted": "^4.2.1",
 | 
			
		||||
    "npm-check-updates": "^16.0.5"
 | 
			
		||||
  },
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +47,8 @@
 | 
			
		|||
    "watch": "parcel watch --no-autoinstall",
 | 
			
		||||
    "build-dist": "parcel build --no-cache --no-autoinstall && rename '.html' '.html.hbs' dist/*.html",
 | 
			
		||||
    "check": "tsc --noEmit",
 | 
			
		||||
    "style": "prettier --check src"
 | 
			
		||||
    "style": "prettier --check src",
 | 
			
		||||
    "lint": "eslint --format unix src"
 | 
			
		||||
  },
 | 
			
		||||
  "source": "src/index.html",
 | 
			
		||||
  "browserslist": "> 1%, not dead"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								src/global.d.ts
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								src/global.d.ts
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
declare module "*.mp3";
 | 
			
		||||
| 
						 | 
				
			
			@ -1,8 +1,8 @@
 | 
			
		|||
document.addEventListener("DOMContentLoaded", () => {
 | 
			
		||||
    let flashButtons = document.querySelectorAll(".notification .delete");
 | 
			
		||||
    const flashButtons = document.querySelectorAll(".notification .delete");
 | 
			
		||||
 | 
			
		||||
    flashButtons.forEach((button) => {
 | 
			
		||||
        let flash = button.parentNode;
 | 
			
		||||
        const flash = button.parentNode;
 | 
			
		||||
 | 
			
		||||
        if (flash == null) {
 | 
			
		||||
            console.error(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								src/music/Mseq_-_Journey.mp3.d.ts
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/music/Mseq_-_Journey.mp3.d.ts
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
declare const mseq: string;
 | 
			
		||||
export default mseq;
 | 
			
		||||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ class MusicPlayer extends React.Component<MusicPlayerProps, State> {
 | 
			
		|||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    componentDidUpdate() {
 | 
			
		||||
    async componentDidUpdate() {
 | 
			
		||||
        const context = this.audioState.audioContext;
 | 
			
		||||
        const source = this.audioState.audioSource;
 | 
			
		||||
        const volume = this.audioState.audioVolume;
 | 
			
		||||
| 
						 | 
				
			
			@ -73,16 +73,16 @@ class MusicPlayer extends React.Component<MusicPlayerProps, State> {
 | 
			
		|||
            // before we can actually play.
 | 
			
		||||
            //
 | 
			
		||||
            // Luckily, this has no adverse effects on Firefox.
 | 
			
		||||
            context.resume().then(() => {
 | 
			
		||||
                source
 | 
			
		||||
                    .play()
 | 
			
		||||
                    .then(() => {
 | 
			
		||||
                        console.info("Started playing audio");
 | 
			
		||||
                    })
 | 
			
		||||
                    .catch((error) => {
 | 
			
		||||
                        console.error(`Could not play audio: ${error}`);
 | 
			
		||||
                    });
 | 
			
		||||
            });
 | 
			
		||||
            try {
 | 
			
		||||
                await context.resume();
 | 
			
		||||
                await source.play();
 | 
			
		||||
            } catch (error) {
 | 
			
		||||
                if (error instanceof DOMException) {
 | 
			
		||||
                    console.error(`Could not play audio: ${error.message}`);
 | 
			
		||||
                } else {
 | 
			
		||||
                    throw error;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            source.pause();
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,10 +17,6 @@ type IndicatorDispatch = {
 | 
			
		|||
type Props = IndicatorProps & IndicatorDispatch;
 | 
			
		||||
 | 
			
		||||
class Indicator extends React.Component<Props, State> {
 | 
			
		||||
    click() {
 | 
			
		||||
        this.props.play();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    render() {
 | 
			
		||||
        const button_classes = classNames({
 | 
			
		||||
            button: true,
 | 
			
		||||
| 
						 | 
				
			
			@ -40,7 +36,7 @@ class Indicator extends React.Component<Props, State> {
 | 
			
		|||
        return (
 | 
			
		||||
            <button
 | 
			
		||||
                type="button"
 | 
			
		||||
                onClick={this.click.bind(this)}
 | 
			
		||||
                onClick={this.click}
 | 
			
		||||
                className={button_classes}
 | 
			
		||||
            >
 | 
			
		||||
                <span className="icon is-medium">
 | 
			
		||||
| 
						 | 
				
			
			@ -49,6 +45,10 @@ class Indicator extends React.Component<Props, State> {
 | 
			
		|||
            </button>
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    click = () => {
 | 
			
		||||
        this.props.play();
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function mapStateToProps(state: State): IndicatorProps {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@ class CanvasDrawer {
 | 
			
		|||
        this.scene = new three.Scene();
 | 
			
		||||
 | 
			
		||||
        // Make a bunch of boxes to represent the bars
 | 
			
		||||
        this.boxes = Array(analyser.frequencyBinCount);
 | 
			
		||||
        this.boxes = new Array(analyser.frequencyBinCount) as Array<three.Mesh>;
 | 
			
		||||
        const width = 2 / analyser.frequencyBinCount;
 | 
			
		||||
        for (let freq = 0; freq < analyser.frequencyBinCount; freq++) {
 | 
			
		||||
            const geometry = new three.BoxGeometry(1, 1, 1);
 | 
			
		||||
| 
						 | 
				
			
			@ -83,31 +83,13 @@ class CanvasDrawer {
 | 
			
		|||
        this.renderer.setSize(canvas.width, canvas.height, false);
 | 
			
		||||
 | 
			
		||||
        // Set up canvas resizing
 | 
			
		||||
        window.addEventListener("resize", this.resize.bind(this));
 | 
			
		||||
        window.addEventListener("resize", this.resize);
 | 
			
		||||
 | 
			
		||||
        // Run the first, set the first animation frame time and start requesting
 | 
			
		||||
        // animation frames
 | 
			
		||||
        this.resize();
 | 
			
		||||
        this.lastTime = 0;
 | 
			
		||||
        this.animationFrame = requestAnimationFrame(this.render.bind(this));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    render(time: number) {
 | 
			
		||||
        // Set our animation frame to 0, so that if we stop, we don't try to cancel a past animation frame
 | 
			
		||||
        this.animationFrame = 0;
 | 
			
		||||
        // Update elapsed time
 | 
			
		||||
        const elapsed = time - this.lastTime;
 | 
			
		||||
        this.lastTime = time;
 | 
			
		||||
 | 
			
		||||
        const camera = this.camera;
 | 
			
		||||
        const renderer = this.renderer;
 | 
			
		||||
        const scene = this.scene;
 | 
			
		||||
 | 
			
		||||
        this.scaleBoxes();
 | 
			
		||||
        this.rotateCamera(elapsed);
 | 
			
		||||
 | 
			
		||||
        renderer.render(scene, camera);
 | 
			
		||||
        this.animationFrame = requestAnimationFrame(this.render.bind(this));
 | 
			
		||||
        this.animationFrame = requestAnimationFrame(this.render);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    scaleBoxes() {
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +127,31 @@ class CanvasDrawer {
 | 
			
		|||
        camera.lookAt(0, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    resize() {
 | 
			
		||||
    stop() {
 | 
			
		||||
        if (this.animationFrame != 0) {
 | 
			
		||||
            cancelAnimationFrame(this.animationFrame);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    render = (time: number) => {
 | 
			
		||||
        // Set our animation frame to 0, so that if we stop, we don't try to cancel a past animation frame
 | 
			
		||||
        this.animationFrame = 0;
 | 
			
		||||
        // Update elapsed time
 | 
			
		||||
        const elapsed = time - this.lastTime;
 | 
			
		||||
        this.lastTime = time;
 | 
			
		||||
 | 
			
		||||
        const camera = this.camera;
 | 
			
		||||
        const renderer = this.renderer;
 | 
			
		||||
        const scene = this.scene;
 | 
			
		||||
 | 
			
		||||
        this.scaleBoxes();
 | 
			
		||||
        this.rotateCamera(elapsed);
 | 
			
		||||
 | 
			
		||||
        renderer.render(scene, camera);
 | 
			
		||||
        this.animationFrame = requestAnimationFrame(this.render);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    resize = () => {
 | 
			
		||||
        const canvas = this.canvas;
 | 
			
		||||
 | 
			
		||||
        if (canvas.parentElement === null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -166,19 +172,13 @@ class CanvasDrawer {
 | 
			
		|||
        canvas.height = 0;
 | 
			
		||||
        canvas.width = 0;
 | 
			
		||||
 | 
			
		||||
        let height = canvas.parentElement.clientHeight;
 | 
			
		||||
        let width = canvas.parentElement.clientWidth;
 | 
			
		||||
        const height = canvas.parentElement.clientHeight;
 | 
			
		||||
        const width = canvas.parentElement.clientWidth;
 | 
			
		||||
 | 
			
		||||
        this.camera.aspect = width / height;
 | 
			
		||||
        this.camera.updateProjectionMatrix();
 | 
			
		||||
        this.renderer.setSize(width, height, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    stop() {
 | 
			
		||||
        if (this.animationFrame != 0) {
 | 
			
		||||
            cancelAnimationFrame(this.animationFrame);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class Visualizer extends React.Component<VisualizerProps, State> {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,11 @@ import mseq from "./Mseq_-_Journey.mp3";
 | 
			
		|||
 | 
			
		||||
const rootElement = document.getElementById("playerUI");
 | 
			
		||||
 | 
			
		||||
const root = createRoot(rootElement!);
 | 
			
		||||
if (rootElement === null) {
 | 
			
		||||
    throw Error("DOM seems to have failed to load. Something went very wrong.");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const root = createRoot(rootElement);
 | 
			
		||||
root.render(
 | 
			
		||||
    <Provider store={store}>
 | 
			
		||||
        <MusicPlayer />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ const rootReducer = combineReducers<State>({
 | 
			
		|||
 | 
			
		||||
export const store = createStore(
 | 
			
		||||
    rootReducer,
 | 
			
		||||
    // @ts-ignore - These properties are set by the devtools extension
 | 
			
		||||
    // @ts-expect-error - These properties are set by the devtools extension
 | 
			
		||||
    window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,24 +26,24 @@ const initialState: MusicState = {
 | 
			
		|||
 | 
			
		||||
export const musicStateReducer = createReducer<MusicState>(
 | 
			
		||||
    {
 | 
			
		||||
        // @ts-ignore - These appear to be working, even if functions
 | 
			
		||||
        // @ts-expect-error - These appear to be working, even if functions
 | 
			
		||||
        // are technically prohibited, and were recommended upstream
 | 
			
		||||
        [setTitle]: (state: MusicState, title: Title): MusicState => {
 | 
			
		||||
            return update(state, {
 | 
			
		||||
                title: { $set: title },
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
        // @ts-ignore - These appear to be working, even if functions
 | 
			
		||||
        // @ts-expect-error - These appear to be working, even if functions
 | 
			
		||||
        // are technically prohibited, and were recommended upstream
 | 
			
		||||
        [togglePlay]: (state: MusicState): MusicState => {
 | 
			
		||||
            return update(state, { $toggle: ["playing"] });
 | 
			
		||||
        },
 | 
			
		||||
        // @ts-ignore - These appear to be working, even if functions
 | 
			
		||||
        // @ts-expect-error - These appear to be working, even if functions
 | 
			
		||||
        // are technically prohibited, and were recommended upstream
 | 
			
		||||
        [toggleMute]: (state: MusicState): MusicState => {
 | 
			
		||||
            return update(state, { $toggle: ["muted"] });
 | 
			
		||||
        },
 | 
			
		||||
        // @ts-ignore - These appear to be working, even if functions
 | 
			
		||||
        // @ts-expect-error - These appear to be working, even if functions
 | 
			
		||||
        // are technically prohibited, and were recommended upstream
 | 
			
		||||
        [setSource]: (state: MusicState, source: string): MusicState => {
 | 
			
		||||
            return update(state, { source: { $set: source } });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,11 @@
 | 
			
		|||
    "strictPropertyInitialization": true,
 | 
			
		||||
    "esModuleInterop": true,
 | 
			
		||||
    "jsx": "react",
 | 
			
		||||
    "isolatedModules": true
 | 
			
		||||
    "isolatedModules": true,
 | 
			
		||||
    "plugins": [
 | 
			
		||||
      {
 | 
			
		||||
        "name": "typescript-eslint-language-service"
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue