diff --git a/.eslintrc.json b/.eslintrc.json index 73dd445..c6bc40a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,6 @@ { "root": true, - "ignorePatterns": ["projects/**/*"], + "plugins": ["@typescript-eslint", "simple-import-sort", "prettier", "only-warn"], "overrides": [ { "files": ["*.ts"], @@ -9,9 +9,11 @@ "project": ["tsconfig.(app|spec|server).json"] }, "extends": [ - "plugin:@angular-eslint/recommended", "plugin:@angular-eslint/template/process-inline-templates", "plugin:@typescript-eslint/strict-type-checked", + "plugin:@typescript-eslint/stylistic-type-checked", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates", "plugin:prettier/recommended" ], "rules": { @@ -44,6 +46,7 @@ "@typescript-eslint/return-await": "warn", //Typescript specific rules + "@typescript-eslint/no-empty-function":"off", "@typescript-eslint/no-non-null-assertion": "off", "@typescript-eslint/array-type": [ "warn", @@ -92,10 +95,26 @@ //Regular ESLint rules "array-callback-return": "warn", - "sort-imports": ["warn", { "allowSeparatedGroups": true }], "complexity": ["warn", { "max": 8 }], "eqeqeq": ["warn", "always", { "null": "ignore" }], "object-shorthand": ["warn", "always"], + "simple-import-sort/imports": "warn", + + "no-restricted-imports": [ + "warn", + { + "patterns": [ + { + "group": ["rxjs/internal/*"], + "message": "Don't import from 'rxjs/internal/*', this can cause optimization bailouts. See this for more details: https://bobbyhadz.com/blog/angular-commonjs-or-amd-dependencies-can-cause-optimization-bailouts " + }, + { + "group": ["src/*"], + "message": "Please use a relative import path beginning with './' or '../' so they can be more easily sorted and grouped" + } + ] + } + ], "prettier/prettier": [ "warn", diff --git a/.vscode/settings.json b/.vscode/settings.json index 76f4852..6da3da8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -20,5 +20,6 @@ "*.ts": "${capture}.spec.ts", "tsconfig.json": "tsconfig.*.json", "package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb" - } + }, + "typescript.preferences.importModuleSpecifier": "relative" } diff --git a/package-lock.json b/package-lock.json index 8e54dd8..8d73138 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lyric-converter", - "version": "3.1.7", + "version": "3.1.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "lyric-converter", - "version": "3.1.7", + "version": "3.1.8", "dependencies": { "@angular/animations": "^17.3.7", "@angular/common": "^17.3.7", @@ -18,6 +18,8 @@ "@angular/router": "^17.3.7", "@angular/ssr": "^17.3.6", "chordsheetjs": "^9.0.2", + "eslint-plugin-only-warn": "^1.1.0", + "eslint-plugin-simple-import-sort": "^12.1.0", "express": "^4.19.2", "file-saver": "^2.0.5", "js-base64": "^3.7.7", @@ -75,7 +77,6 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2942,7 +2943,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -2957,7 +2957,6 @@ "version": "4.10.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -2966,7 +2965,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2989,7 +2987,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3004,14 +3001,12 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -3026,7 +3021,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -3037,14 +3031,12 @@ "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -3056,7 +3048,6 @@ "version": "8.57.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -3065,7 +3056,6 @@ "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -3079,7 +3069,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, "engines": { "node": ">=12.22" }, @@ -3091,8 +3080,7 @@ "node_modules/@humanwhocodes/object-schema": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -3323,7 +3311,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3336,7 +3323,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -3345,7 +3331,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -4875,8 +4860,7 @@ "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" }, "node_modules/@vitejs/plugin-basic-ssl": { "version": "1.1.0", @@ -5110,7 +5094,6 @@ "version": "8.10.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -5131,7 +5114,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -5273,7 +5255,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -5532,8 +5513,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -5668,7 +5648,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5865,7 +5844,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -6168,8 +6146,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", @@ -6454,7 +6431,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6556,7 +6532,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -6572,8 +6547,7 @@ "node_modules/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 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/default-gateway": { "version": "6.0.3", @@ -6720,7 +6694,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -7147,7 +7120,6 @@ "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -7210,6 +7182,14 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-only-warn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.1.0.tgz", + "integrity": "sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==", + "engines": { + "node": ">=6" + } + }, "node_modules/eslint-plugin-prettier": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", @@ -7240,6 +7220,14 @@ } } }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.1.0.tgz", + "integrity": "sha512-Y2fqAfC11TcG/WP3TrI1Gi3p3nc8XJyEOJYHyEPEGI/UAgNx6akxxlX74p7SbAQdLcgASKhj8M0GKvH3vq/+ig==", + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-plugin-tailwindcss": { "version": "3.15.1", "resolved": "https://registry.npmjs.org/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.15.1.tgz", @@ -7260,7 +7248,6 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7276,7 +7263,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -7288,7 +7274,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7304,7 +7289,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7318,14 +7302,12 @@ "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7341,7 +7323,6 @@ "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, "dependencies": { "color-name": "~1.1.4" }, @@ -7352,14 +7333,12 @@ "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/eslint/node_modules/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, "engines": { "node": ">=10" }, @@ -7371,7 +7350,6 @@ "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, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7387,7 +7365,6 @@ "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, "dependencies": { "is-glob": "^4.0.3" }, @@ -7399,7 +7376,6 @@ "version": "13.23.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -7414,7 +7390,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7423,7 +7398,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -7434,14 +7408,12 @@ "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/eslint/node_modules/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, "dependencies": { "p-locate": "^5.0.0" }, @@ -7456,7 +7428,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7471,7 +7442,6 @@ "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, "dependencies": { "p-limit": "^3.0.2" }, @@ -7486,7 +7456,6 @@ "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, "dependencies": { "has-flag": "^4.0.0" }, @@ -7498,7 +7467,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -7510,7 +7478,6 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -7540,7 +7507,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -7552,7 +7518,6 @@ "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, "dependencies": { "estraverse": "^5.2.0" }, @@ -7564,7 +7529,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -7573,7 +7537,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7789,8 +7752,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.3.0", @@ -7817,14 +7779,12 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/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 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fast-xml-parser": { "version": "4.3.2", @@ -7851,7 +7811,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -7887,7 +7846,6 @@ "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, "dependencies": { "flat-cache": "^3.0.4" }, @@ -7993,7 +7951,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "dev": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -8006,8 +7963,7 @@ "node_modules/flatted": { "version": "3.2.9", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" }, "node_modules/follow-redirects": { "version": "1.15.6", @@ -8150,8 +8106,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", @@ -8253,7 +8208,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8336,8 +8290,7 @@ "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, "node_modules/handle-thing": { "version": "2.0.1", @@ -8633,7 +8586,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, "engines": { "node": ">= 4" } @@ -8702,7 +8654,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8718,7 +8669,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -8727,7 +8677,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -8745,7 +8694,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8926,7 +8874,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8944,7 +8891,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -8980,7 +8926,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -9071,8 +9016,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -9486,8 +9430,7 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -9504,8 +9447,7 @@ "node_modules/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 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "node_modules/json5": { "version": "2.2.3", @@ -9840,7 +9782,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "dependencies": { "json-buffer": "3.0.1" } @@ -9980,7 +9921,6 @@ "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, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -10090,8 +10030,7 @@ "node_modules/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 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/log-symbols": { "version": "4.1.0", @@ -10384,7 +10323,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10612,8 +10550,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multicast-dns": { "version": "7.2.5", @@ -10668,8 +10605,7 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/needle": { "version": "3.2.0", @@ -11342,7 +11278,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -11391,7 +11326,6 @@ "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -11620,7 +11554,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -11720,7 +11653,6 @@ "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, "engines": { "node": ">=8" } @@ -11729,7 +11661,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11738,7 +11669,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -12167,7 +12097,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -12370,7 +12299,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, "engines": { "node": ">=6" } @@ -12402,7 +12330,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -12785,7 +12712,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -12801,7 +12727,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -12857,7 +12782,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -13172,7 +13096,6 @@ "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, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -13184,7 +13107,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -13616,7 +13538,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13659,7 +13580,6 @@ "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, "engines": { "node": ">=8" }, @@ -14075,8 +13995,7 @@ "node_modules/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 + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/thenify": { "version": "3.3.1", @@ -14224,7 +14143,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -14405,7 +14323,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -15271,7 +15188,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -15392,8 +15308,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "8.16.0", @@ -15493,7 +15408,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 06fdd2c..f0ada97 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lyric-converter", - "version": "3.1.7", + "version": "3.1.8", "homepage": "https://lyricconverter.net", "author": { "name": "Chris Barr", @@ -45,6 +45,8 @@ "@angular/router": "^17.3.7", "@angular/ssr": "^17.3.6", "chordsheetjs": "^9.0.2", + "eslint-plugin-only-warn": "^1.1.0", + "eslint-plugin-simple-import-sort": "^12.1.0", "express": "^4.19.2", "file-saver": "^2.0.5", "js-base64": "^3.7.7", diff --git a/src/app/about/about.component.spec.ts b/src/app/about/about.component.spec.ts index dbbd039..1b7db03 100644 --- a/src/app/about/about.component.spec.ts +++ b/src/app/about/about.component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { AboutComponent } from './about.component'; import { DonateButtonComponent } from '../donate-button/donate-button.component'; +import { AboutComponent } from './about.component'; describe('AboutComponent', () => { let component: AboutComponent; diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 7234b04..5be7b44 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,5 +1,5 @@ -import { RouterModule, Routes } from '@angular/router'; import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; import { AboutComponent } from './about/about.component'; import { ConvertComponent } from './convert/convert.component'; diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index 2ec1520..d41e416 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -1,5 +1,5 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; import { DOCUMENT } from '@angular/common'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { AboutComponent } from './about/about.component'; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 3ab28d1..99700b5 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,5 +1,5 @@ -import { Component, OnInit, PLATFORM_ID, inject } from '@angular/core'; import { DOCUMENT, isPlatformServer } from '@angular/common'; +import { Component, inject, OnInit, PLATFORM_ID } from '@angular/core'; import { version } from './version'; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index a4a6704..d41b6d1 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,17 +1,16 @@ -import { NgModule, isDevMode } from '@angular/core'; +import { isDevMode, NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; - import { NgxGoogleAnalyticsModule, NgxGoogleAnalyticsRouterModule } from 'ngx-google-analytics'; import { AboutComponent } from './about/about.component'; import { AppComponent } from './app.component'; import { AppRoutingModule } from './app-routing.module'; import { ConvertComponent } from './convert/convert.component'; -import { DonateButtonComponent } from './donate-button/donate-button.component'; import { DownloadDisplayComponent } from './convert/download-display/download-display.component'; +import { SlideDisplayComponent } from './convert/slide-display/slide-display.component'; +import { DonateButtonComponent } from './donate-button/donate-button.component'; import { DragAndDropFilesDirective } from './drag-and-drop-files/drag-and-drop-files.directive'; import { HelpComponent } from './help/help.component'; -import { SlideDisplayComponent } from './convert/slide-display/slide-display.component'; @NgModule({ declarations: [ diff --git a/src/app/convert/convert.component.spec.ts b/src/app/convert/convert.component.spec.ts index 28735d1..d29995f 100644 --- a/src/app/convert/convert.component.spec.ts +++ b/src/app/convert/convert.component.spec.ts @@ -1,26 +1,24 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { Subject } from 'rxjs'; +import { TestUtils } from 'test/test-utils'; -import { ConvertComponent } from './convert.component'; +import { mockStaticTimestamp } from '../../../test/mock-song-objects'; import { DonateButtonComponent } from '../donate-button/donate-button.component'; -import { DownloadDisplayComponent } from './download-display/download-display.component'; import { DragAndDropFilesDirective } from '../drag-and-drop-files/drag-and-drop-files.directive'; +import { version } from '../version'; +import { ConvertComponent } from './convert.component'; +import { DownloadDisplayComponent } from './download-display/download-display.component'; import { ErrorsService } from './errors/errors.service'; +import { LyricConverterError } from './models/errors.model'; +import { IOutputFile, IRawDataFile } from './models/file.model'; +import { ISong } from './models/song.model'; +import { IOutputConverter } from './outputs/output-converter.model'; import { OutputTypeDisplaySlides } from './outputs/output-type-display-slides'; import { OutputTypePlainText } from './outputs/output-type-plain-text'; import { ParserService } from './parser/parser.service'; import { SlideDisplayComponent } from './slide-display/slide-display.component'; -import { IOutputFile, IRawDataFile } from './models/file.model'; -import { IOutputConverter } from './outputs/output-converter.model'; -import { ISong } from './models/song.model'; -import { LyricConverterError } from './models/errors.model'; - -import { TestUtils } from 'test/test-utils'; -import { mockStaticTimestamp } from '../../../test/mock-song-objects'; -import { version } from '../version'; - class MockConverter implements IOutputConverter { constructor( public name: string, diff --git a/src/app/convert/convert.component.ts b/src/app/convert/convert.component.ts index 84268ab..01c89d2 100644 --- a/src/app/convert/convert.component.ts +++ b/src/app/convert/convert.component.ts @@ -1,20 +1,20 @@ +import { DOCUMENT } from '@angular/common'; import { Component, DestroyRef, ElementRef, + inject, OnInit, ViewChild, ViewEncapsulation, - inject, } from '@angular/core'; -import { DOCUMENT } from '@angular/common'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { IOutputFile, IRawDataFile } from './models/file.model'; import { ErrorsService } from './errors/errors.service'; -import { IOutputConverter } from './outputs/output-converter.model'; -import { ISong } from './models/song.model'; import { ISongError } from './models/errors.model'; +import { IOutputFile, IRawDataFile } from './models/file.model'; +import { ISong } from './models/song.model'; +import { IOutputConverter } from './outputs/output-converter.model'; import { ParserService } from './parser/parser.service'; @Component({ diff --git a/src/app/convert/download-display/download-display.component.spec.ts b/src/app/convert/download-display/download-display.component.spec.ts index 81458b2..926cc97 100644 --- a/src/app/convert/download-display/download-display.component.spec.ts +++ b/src/app/convert/download-display/download-display.component.spec.ts @@ -1,12 +1,11 @@ -import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; - -import * as JSZip from 'jszip'; import * as fileSaver from 'file-saver'; +import * as JSZip from 'jszip'; +import { mockOutputFiles } from 'test/mock-output-files'; -import { DownloadDisplayComponent } from './download-display.component'; import { OutputTypePlainText } from '../outputs/output-type-plain-text'; -import { mockOutputFiles } from 'test/mock-output-files'; +import { DownloadDisplayComponent } from './download-display.component'; describe('DownloadDisplayComponent', () => { let component: DownloadDisplayComponent; diff --git a/src/app/convert/download-display/download-display.component.ts b/src/app/convert/download-display/download-display.component.ts index d6dc8f6..e6e0083 100644 --- a/src/app/convert/download-display/download-display.component.ts +++ b/src/app/convert/download-display/download-display.component.ts @@ -1,11 +1,10 @@ -import { Component, Input, inject } from '@angular/core'; - -import * as JSZip from 'jszip'; +import { Component, inject, Input } from '@angular/core'; import * as fileSaver from 'file-saver'; +import * as JSZip from 'jszip'; import { GoogleAnalyticsService } from 'ngx-google-analytics'; -import { IOutputConverter } from '../outputs/output-converter.model'; import { IOutputFile } from '../models/file.model'; +import { IOutputConverter } from '../outputs/output-converter.model'; @Component({ selector: 'app-download-display', diff --git a/src/app/convert/errors/errors.service.spec.ts b/src/app/convert/errors/errors.service.spec.ts index 2f7e718..aee94d6 100644 --- a/src/app/convert/errors/errors.service.spec.ts +++ b/src/app/convert/errors/errors.service.spec.ts @@ -1,7 +1,7 @@ import { TestBed } from '@angular/core/testing'; -import { ErrorsService } from './errors.service'; import { LyricConverterError } from '../models/errors.model'; +import { ErrorsService } from './errors.service'; describe('ErrorsService', () => { let service: ErrorsService; diff --git a/src/app/convert/errors/errors.service.ts b/src/app/convert/errors/errors.service.ts index 214c96e..344687d 100644 --- a/src/app/convert/errors/errors.service.ts +++ b/src/app/convert/errors/errors.service.ts @@ -1,10 +1,9 @@ -import { Injectable, inject } from '@angular/core'; - +import { inject, Injectable } from '@angular/core'; import { GoogleAnalyticsService } from 'ngx-google-analytics'; import { Subject } from 'rxjs'; -import { CUSTOM_ERROR_IDENTIFIER } from '../shared/constants'; import { ISongError } from '../models/errors.model'; +import { CUSTOM_ERROR_IDENTIFIER } from '../shared/constants'; @Injectable({ providedIn: 'root', diff --git a/src/app/convert/inputs/input-converter.model.ts b/src/app/convert/inputs/input-converter.model.ts index 698b64a..a5d8dc4 100644 --- a/src/app/convert/inputs/input-converter.model.ts +++ b/src/app/convert/inputs/input-converter.model.ts @@ -1,5 +1,5 @@ -import { IRawDataFile } from 'src/app/convert/models/file.model'; -import { ISong } from 'src/app/convert/models/song.model'; +import { IRawDataFile } from '../models/file.model'; +import { ISong } from '../models/song.model'; export declare interface IInputConverter { /** diff --git a/src/app/convert/inputs/input-type-chordpro.spec.ts b/src/app/convert/inputs/input-type-chordpro.spec.ts index 67cc747..38c4fee 100644 --- a/src/app/convert/inputs/input-type-chordpro.spec.ts +++ b/src/app/convert/inputs/input-type-chordpro.spec.ts @@ -1,7 +1,8 @@ -import { InputTypeChordPro } from './input-type-chordpro'; import { TestUtils } from 'test/test-utils'; -import { version } from '../../version'; + import { mockStaticTimestamp } from '../../../../test/mock-song-objects'; +import { version } from '../../version'; +import { InputTypeChordPro } from './input-type-chordpro'; describe('InputTypeChordPro', () => { let inputConverter: InputTypeChordPro; diff --git a/src/app/convert/inputs/input-type-chordpro.ts b/src/app/convert/inputs/input-type-chordpro.ts index 4b97e42..1df84eb 100644 --- a/src/app/convert/inputs/input-type-chordpro.ts +++ b/src/app/convert/inputs/input-type-chordpro.ts @@ -1,9 +1,9 @@ import { ChordLyricsPair, ChordProParser, Paragraph, Tag } from 'chordsheetjs'; +import { version } from '../../version'; +import { IRawDataFile } from '../models/file.model'; import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { IInputConverter } from './input-converter.model'; -import { IRawDataFile } from '../models/file.model'; -import { version } from '../../version'; /** * @description ChordPro File Official Docs: https://chordpro.org/chordpro/ diff --git a/src/app/convert/inputs/input-type-json.spec.ts b/src/app/convert/inputs/input-type-json.spec.ts index 531b077..47ef7c6 100644 --- a/src/app/convert/inputs/input-type-json.spec.ts +++ b/src/app/convert/inputs/input-type-json.spec.ts @@ -1,9 +1,9 @@ -import { IRawDataFile } from 'src/app/convert/models/file.model'; -import { InputTypeJSON } from './input-type-json'; -import { LyricConverterError } from '../models/errors.model'; import { mockStaticTimestamp } from '../../../../test/mock-song-objects'; -import { version } from '../../version'; import { TestUtils } from '../../../../test/test-utils'; +import { version } from '../../version'; +import { LyricConverterError } from '../models/errors.model'; +import { IRawDataFile } from '../models/file.model'; +import { InputTypeJSON } from './input-type-json'; describe('InputTypeJSON', () => { let inputConverter: InputTypeJSON; diff --git a/src/app/convert/inputs/input-type-json.ts b/src/app/convert/inputs/input-type-json.ts index b05ff8b..2f4dde4 100644 --- a/src/app/convert/inputs/input-type-json.ts +++ b/src/app/convert/inputs/input-type-json.ts @@ -1,8 +1,8 @@ -import { IInputConverter } from './input-converter.model'; -import { IRawDataFile } from 'src/app/convert/models/file.model'; -import { ISong } from 'src/app/convert/models/song.model'; -import { LyricConverterError } from '../models/errors.model'; import { version } from '../../version'; +import { LyricConverterError } from '../models/errors.model'; +import { IRawDataFile } from '../models/file.model'; +import { ISong } from '../models/song.model'; +import { IInputConverter } from './input-converter.model'; export class InputTypeJSON implements IInputConverter { readonly name = 'JSON'; diff --git a/src/app/convert/inputs/input-type-openlyrics.spec.ts b/src/app/convert/inputs/input-type-openlyrics.spec.ts index 487c707..e88c36b 100644 --- a/src/app/convert/inputs/input-type-openlyrics.spec.ts +++ b/src/app/convert/inputs/input-type-openlyrics.spec.ts @@ -1,7 +1,8 @@ -import { InputTypeOpenLyrics } from './input-type-openlyrics'; import { TestUtils } from 'test/test-utils'; + import { mockStaticTimestamp } from '../../../../test/mock-song-objects'; import { version } from '../../version'; +import { InputTypeOpenLyrics } from './input-type-openlyrics'; describe('InputTypeOpenLyrics', () => { let inputConverter: InputTypeOpenLyrics; diff --git a/src/app/convert/inputs/input-type-openlyrics.ts b/src/app/convert/inputs/input-type-openlyrics.ts index dddf388..e22410c 100644 --- a/src/app/convert/inputs/input-type-openlyrics.ts +++ b/src/app/convert/inputs/input-type-openlyrics.ts @@ -6,11 +6,12 @@ import { IParserVerse, OpenLyricsParser, } from 'openlyrics-parser'; -import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; -import { IInputConverter } from './input-converter.model'; + +import { version } from '../../version'; import { IRawDataFile } from '../models/file.model'; +import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { STRING_LIST_SEPARATOR_JOIN } from '../shared/constants'; -import { version } from '../../version'; +import { IInputConverter } from './input-converter.model'; export class InputTypeOpenLyrics implements IInputConverter { name = 'OpenLyrics'; diff --git a/src/app/convert/inputs/input-type-plain-text.spec.ts b/src/app/convert/inputs/input-type-plain-text.spec.ts index 282756d..3e80a66 100644 --- a/src/app/convert/inputs/input-type-plain-text.spec.ts +++ b/src/app/convert/inputs/input-type-plain-text.spec.ts @@ -1,8 +1,9 @@ -import { InputTypePlainText } from './input-type-plain-text'; -import { LyricConverterError } from '../models/errors.model'; import { TestUtils } from 'test/test-utils'; + import { mockStaticTimestamp } from '../../../../test/mock-song-objects'; import { version } from '../../version'; +import { LyricConverterError } from '../models/errors.model'; +import { InputTypePlainText } from './input-type-plain-text'; describe('InputTypePlainText', () => { let inputConverter: InputTypePlainText; diff --git a/src/app/convert/inputs/input-type-plain-text.ts b/src/app/convert/inputs/input-type-plain-text.ts index ce10feb..a448c0b 100644 --- a/src/app/convert/inputs/input-type-plain-text.ts +++ b/src/app/convert/inputs/input-type-plain-text.ts @@ -1,9 +1,9 @@ -import { ISong, ISongInfo, ISongSlide } from 'src/app/convert/models/song.model'; -import { IInputConverter } from './input-converter.model'; -import { IRawDataFile } from 'src/app/convert/models/file.model'; +import { version } from '../../version'; import { LyricConverterError } from '../models/errors.model'; +import { IRawDataFile } from '../models/file.model'; +import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { Utils } from '../shared/utils'; -import { version } from '../../version'; +import { IInputConverter } from './input-converter.model'; export class InputTypePlainText implements IInputConverter { readonly name = 'Plain Text'; diff --git a/src/app/convert/inputs/input-type-propresenter4.spec.ts b/src/app/convert/inputs/input-type-propresenter4.spec.ts index f9a7e20..64b70fb 100644 --- a/src/app/convert/inputs/input-type-propresenter4.spec.ts +++ b/src/app/convert/inputs/input-type-propresenter4.spec.ts @@ -1,7 +1,8 @@ -import { InputTypeProPresenter4 } from './input-type-propresenter4'; import { TestUtils } from 'test/test-utils'; + import { mockStaticTimestamp } from '../../../../test/mock-song-objects'; import { version } from '../../version'; +import { InputTypeProPresenter4 } from './input-type-propresenter4'; describe('InputTypeProPresenter4', () => { let inputConverter: InputTypeProPresenter4; diff --git a/src/app/convert/inputs/input-type-propresenter4.ts b/src/app/convert/inputs/input-type-propresenter4.ts index 2cb49fe..b14f136 100644 --- a/src/app/convert/inputs/input-type-propresenter4.ts +++ b/src/app/convert/inputs/input-type-propresenter4.ts @@ -1,8 +1,9 @@ import { IPro4Properties, IPro4Slide, IPro4Song, ProPresenter4Parser } from 'propresenter-parser'; -import { ISong, ISongInfo, ISongSlide } from 'src/app/convert/models/song.model'; -import { IInputConverter } from './input-converter.model'; -import { IRawDataFile } from 'src/app/convert/models/file.model'; + import { version } from '../../version'; +import { IRawDataFile } from '../models/file.model'; +import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; +import { IInputConverter } from './input-converter.model'; export class InputTypeProPresenter4 implements IInputConverter { readonly name = 'ProPresenter 4'; diff --git a/src/app/convert/inputs/input-type-propresenter5.spec.ts b/src/app/convert/inputs/input-type-propresenter5.spec.ts index 998e07e..6407b26 100644 --- a/src/app/convert/inputs/input-type-propresenter5.spec.ts +++ b/src/app/convert/inputs/input-type-propresenter5.spec.ts @@ -1,7 +1,8 @@ -import { InputTypeProPresenter5 } from './input-type-propresenter5'; import { TestUtils } from 'test/test-utils'; + import { mockStaticTimestamp } from '../../../../test/mock-song-objects'; import { version } from '../../version'; +import { InputTypeProPresenter5 } from './input-type-propresenter5'; describe('InputTypeProPresenter5', () => { let inputConverter: InputTypeProPresenter5; diff --git a/src/app/convert/inputs/input-type-propresenter5.ts b/src/app/convert/inputs/input-type-propresenter5.ts index 4c51e68..bbfe4ba 100644 --- a/src/app/convert/inputs/input-type-propresenter5.ts +++ b/src/app/convert/inputs/input-type-propresenter5.ts @@ -4,10 +4,11 @@ import { IPro5Song, ProPresenter5Parser, } from 'propresenter-parser'; -import { ISong, ISongInfo, ISongSlide } from 'src/app/convert/models/song.model'; -import { IInputConverter } from './input-converter.model'; -import { IRawDataFile } from 'src/app/convert/models/file.model'; + import { version } from '../../version'; +import { IRawDataFile } from '../models/file.model'; +import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; +import { IInputConverter } from './input-converter.model'; export class InputTypeProPresenter5 implements IInputConverter { readonly name = 'ProPresenter 5'; diff --git a/src/app/convert/inputs/input-type-propresenter6.spec.ts b/src/app/convert/inputs/input-type-propresenter6.spec.ts index 7832dcd..acc6467 100644 --- a/src/app/convert/inputs/input-type-propresenter6.spec.ts +++ b/src/app/convert/inputs/input-type-propresenter6.spec.ts @@ -1,7 +1,8 @@ -import { InputTypeProPresenter6 } from './input-type-propresenter6'; import { TestUtils } from 'test/test-utils'; + import { mockStaticTimestamp } from '../../../../test/mock-song-objects'; import { version } from '../../version'; +import { InputTypeProPresenter6 } from './input-type-propresenter6'; describe('InputTypeProPresenter6', () => { let inputConverter: InputTypeProPresenter6; diff --git a/src/app/convert/inputs/input-type-propresenter6.ts b/src/app/convert/inputs/input-type-propresenter6.ts index 4aa63b4..a50514d 100644 --- a/src/app/convert/inputs/input-type-propresenter6.ts +++ b/src/app/convert/inputs/input-type-propresenter6.ts @@ -4,10 +4,11 @@ import { IPro6Song, ProPresenter6Parser, } from 'propresenter-parser'; -import { ISong, ISongInfo, ISongSlide } from 'src/app/convert/models/song.model'; -import { IInputConverter } from './input-converter.model'; -import { IRawDataFile } from 'src/app/convert/models/file.model'; + import { version } from '../../version'; +import { IRawDataFile } from '../models/file.model'; +import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; +import { IInputConverter } from './input-converter.model'; export class InputTypeProPresenter6 implements IInputConverter { readonly name = 'ProPresenter 6'; diff --git a/src/app/convert/inputs/input-type-songpro.spec.ts b/src/app/convert/inputs/input-type-songpro.spec.ts index cd033db..07cfa17 100644 --- a/src/app/convert/inputs/input-type-songpro.spec.ts +++ b/src/app/convert/inputs/input-type-songpro.spec.ts @@ -1,7 +1,8 @@ -import { InputTypeSongPro } from './input-type-songpro'; import { TestUtils } from 'test/test-utils'; -import { version } from '../../version'; + import { mockStaticTimestamp } from '../../../../test/mock-song-objects'; +import { version } from '../../version'; +import { InputTypeSongPro } from './input-type-songpro'; describe('InputTypeSongPro', () => { let inputConverter: InputTypeSongPro; diff --git a/src/app/convert/inputs/input-type-songpro.ts b/src/app/convert/inputs/input-type-songpro.ts index bdac46b..48dea03 100644 --- a/src/app/convert/inputs/input-type-songpro.ts +++ b/src/app/convert/inputs/input-type-songpro.ts @@ -1,9 +1,10 @@ -import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { ISongProLine, ISongProSong, SongPro } from 'songpro'; -import { IInputConverter } from './input-converter.model'; + +import { version } from '../../version'; import { IRawDataFile } from '../models/file.model'; +import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { Utils } from '../shared/utils'; -import { version } from '../../version'; +import { IInputConverter } from './input-converter.model'; export class InputTypeSongPro implements IInputConverter { readonly name = 'SongPro'; diff --git a/src/app/convert/inputs/input-type-songshowplus7.spec.ts b/src/app/convert/inputs/input-type-songshowplus7.spec.ts index 0140ce6..ba89e03 100644 --- a/src/app/convert/inputs/input-type-songshowplus7.spec.ts +++ b/src/app/convert/inputs/input-type-songshowplus7.spec.ts @@ -1,7 +1,8 @@ -import { InputTypeSongShowPlus7 } from './input-type-songshowplus7'; -import { TestUtils } from 'test/test-utils'; import { mockStaticTimestamp } from 'test/mock-song-objects'; +import { TestUtils } from 'test/test-utils'; + import { version } from '../../version'; +import { InputTypeSongShowPlus7 } from './input-type-songshowplus7'; describe('InputTypeSongShowPlus7', () => { let inputConverter: InputTypeSongShowPlus7; diff --git a/src/app/convert/inputs/input-type-songshowplus7.ts b/src/app/convert/inputs/input-type-songshowplus7.ts index 507bb01..669e47c 100644 --- a/src/app/convert/inputs/input-type-songshowplus7.ts +++ b/src/app/convert/inputs/input-type-songshowplus7.ts @@ -1,9 +1,10 @@ -import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; -import { IInputConverter } from './input-converter.model'; -import { IRawDataFile } from '../models/file.model'; -import { STRING_LIST_SEPARATOR_JOIN } from '../shared/constants'; import { SongShowPlus } from 'songshowplus-parser'; + import { version } from '../../version'; +import { IRawDataFile } from '../models/file.model'; +import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; +import { STRING_LIST_SEPARATOR_JOIN } from '../shared/constants'; +import { IInputConverter } from './input-converter.model'; export class InputTypeSongShowPlus7 implements IInputConverter { readonly name = 'SongShow Plus 7'; diff --git a/src/app/convert/outputs/output-type-chordpro.spec.ts b/src/app/convert/outputs/output-type-chordpro.spec.ts index 2666f82..970f356 100644 --- a/src/app/convert/outputs/output-type-chordpro.spec.ts +++ b/src/app/convert/outputs/output-type-chordpro.spec.ts @@ -1,6 +1,7 @@ -import { OutputTypeChordpro } from './output-type-chordpro'; -import { TestUtils } from 'test/test-utils'; import { mockSongObjects } from 'test/mock-song-objects'; +import { TestUtils } from 'test/test-utils'; + +import { OutputTypeChordpro } from './output-type-chordpro'; describe('OutputTypeChordpro', () => { let outputType: OutputTypeChordpro; diff --git a/src/app/convert/outputs/output-type-chordpro.ts b/src/app/convert/outputs/output-type-chordpro.ts index 067b393..fead16e 100644 --- a/src/app/convert/outputs/output-type-chordpro.ts +++ b/src/app/convert/outputs/output-type-chordpro.ts @@ -1,6 +1,6 @@ -import { IOutputConverter } from './output-converter.model'; import { IOutputFile } from '../models/file.model'; import { ISong } from '../models/song.model'; +import { IOutputConverter } from './output-converter.model'; //No need to use ChordSheetJS here, this is simple and the complexity that would add wouldn't be worth it diff --git a/src/app/convert/outputs/output-type-display-slides.spec.ts b/src/app/convert/outputs/output-type-display-slides.spec.ts index eaf4b00..2fbc80f 100644 --- a/src/app/convert/outputs/output-type-display-slides.spec.ts +++ b/src/app/convert/outputs/output-type-display-slides.spec.ts @@ -1,6 +1,7 @@ -import { OutputTypeDisplaySlides } from './output-type-display-slides'; import { mockSongObjects } from 'test/mock-song-objects'; +import { OutputTypeDisplaySlides } from './output-type-display-slides'; + describe('OutputTypeDisplaySlides', () => { let outputType: OutputTypeDisplaySlides; diff --git a/src/app/convert/outputs/output-type-display-slides.ts b/src/app/convert/outputs/output-type-display-slides.ts index b621e62..f5c1d80 100644 --- a/src/app/convert/outputs/output-type-display-slides.ts +++ b/src/app/convert/outputs/output-type-display-slides.ts @@ -1,6 +1,6 @@ -import { IOutputConverter } from './output-converter.model'; import { IOutputFile } from '../models/file.model'; import { ISong } from '../models/song.model'; +import { IOutputConverter } from './output-converter.model'; export class OutputTypeDisplaySlides implements IOutputConverter { readonly name = 'Display Slides'; diff --git a/src/app/convert/outputs/output-type-json.spec.ts b/src/app/convert/outputs/output-type-json.spec.ts index fd11020..2d3b66e 100644 --- a/src/app/convert/outputs/output-type-json.spec.ts +++ b/src/app/convert/outputs/output-type-json.spec.ts @@ -1,6 +1,7 @@ -import { OutputTypeJSON } from './output-type-json'; import { mockSongObjects } from 'test/mock-song-objects'; +import { OutputTypeJSON } from './output-type-json'; + describe('OutputTypeJSON', () => { let outputType: OutputTypeJSON; diff --git a/src/app/convert/outputs/output-type-json.ts b/src/app/convert/outputs/output-type-json.ts index 91888fc..db4b5f6 100644 --- a/src/app/convert/outputs/output-type-json.ts +++ b/src/app/convert/outputs/output-type-json.ts @@ -1,6 +1,6 @@ -import { IOutputConverter } from './output-converter.model'; import { IOutputFile } from '../models/file.model'; import { ISong } from '../models/song.model'; +import { IOutputConverter } from './output-converter.model'; export class OutputTypeJSON implements IOutputConverter { readonly name = 'JSON'; diff --git a/src/app/convert/outputs/output-type-openlyrics.spec.ts b/src/app/convert/outputs/output-type-openlyrics.spec.ts index cad73b6..f3d31c0 100644 --- a/src/app/convert/outputs/output-type-openlyrics.spec.ts +++ b/src/app/convert/outputs/output-type-openlyrics.spec.ts @@ -1,7 +1,8 @@ import { mockEmptySong, mockSongObjects } from 'test/mock-song-objects'; -import { OutputTypeOpenLyrics } from './output-type-openlyrics'; import { TestUtils } from 'test/test-utils'; + import { version } from '../../version'; +import { OutputTypeOpenLyrics } from './output-type-openlyrics'; describe('OutputTypeOpenLyrics', () => { let outputType: OutputTypeOpenLyrics; diff --git a/src/app/convert/outputs/output-type-openlyrics.ts b/src/app/convert/outputs/output-type-openlyrics.ts index cd1da0f..787c44f 100644 --- a/src/app/convert/outputs/output-type-openlyrics.ts +++ b/src/app/convert/outputs/output-type-openlyrics.ts @@ -6,11 +6,12 @@ import { IBuilderVerse, OpenLyricsBuilder, } from 'openlyrics-parser'; + +import { version } from '../../version'; +import { IOutputFile } from '../models/file.model'; import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { STRING_LIST_SEPARATOR_JOIN, STRING_LIST_SEPARATOR_SPLIT } from '../shared/constants'; import { IOutputConverter } from './output-converter.model'; -import { IOutputFile } from '../models/file.model'; -import { version } from '../../version'; export class OutputTypeOpenLyrics implements IOutputConverter { readonly name = 'OpenLyrics'; diff --git a/src/app/convert/outputs/output-type-plain-text.spec.ts b/src/app/convert/outputs/output-type-plain-text.spec.ts index 3dad71d..5fcb665 100644 --- a/src/app/convert/outputs/output-type-plain-text.spec.ts +++ b/src/app/convert/outputs/output-type-plain-text.spec.ts @@ -1,6 +1,7 @@ -import { OutputTypePlainText } from './output-type-plain-text'; -import { TestUtils } from 'test/test-utils'; import { mockSongObjects } from 'test/mock-song-objects'; +import { TestUtils } from 'test/test-utils'; + +import { OutputTypePlainText } from './output-type-plain-text'; describe('OutputTypePlainText', () => { let outputType: OutputTypePlainText; diff --git a/src/app/convert/outputs/output-type-plain-text.ts b/src/app/convert/outputs/output-type-plain-text.ts index 2cbf140..6a6a733 100644 --- a/src/app/convert/outputs/output-type-plain-text.ts +++ b/src/app/convert/outputs/output-type-plain-text.ts @@ -1,6 +1,6 @@ -import { IOutputConverter } from './output-converter.model'; import { IOutputFile } from '../models/file.model'; import { ISong } from '../models/song.model'; +import { IOutputConverter } from './output-converter.model'; export class OutputTypePlainText implements IOutputConverter { readonly name = 'Plain Text'; diff --git a/src/app/convert/outputs/output-type-propresenter5.spec.ts b/src/app/convert/outputs/output-type-propresenter5.spec.ts index 7872623..ebd739f 100644 --- a/src/app/convert/outputs/output-type-propresenter5.spec.ts +++ b/src/app/convert/outputs/output-type-propresenter5.spec.ts @@ -1,7 +1,8 @@ import { mockEmptySong, mockSongObjects } from 'test/mock-song-objects'; -import { OutputTypeProPresenter5 } from './output-type-propresenter5'; import { TestUtils } from 'test/test-utils'; +import { OutputTypeProPresenter5 } from './output-type-propresenter5'; + describe('OutputTypePropresenter5', () => { let outputType: OutputTypeProPresenter5; diff --git a/src/app/convert/outputs/output-type-propresenter5.ts b/src/app/convert/outputs/output-type-propresenter5.ts index 22a1106..ad7dca4 100644 --- a/src/app/convert/outputs/output-type-propresenter5.ts +++ b/src/app/convert/outputs/output-type-propresenter5.ts @@ -4,9 +4,10 @@ import { IPro5BuilderOptionsSlide, ProPresenter5Builder, } from 'propresenter-parser'; + +import { IOutputFile } from '../models/file.model'; import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { IOutputConverter } from './output-converter.model'; -import { IOutputFile } from '../models/file.model'; export class OutputTypeProPresenter5 implements IOutputConverter { readonly name = 'ProPresenter 5'; diff --git a/src/app/convert/outputs/output-type-propresenter6.spec.ts b/src/app/convert/outputs/output-type-propresenter6.spec.ts index 7f563d5..045f828 100644 --- a/src/app/convert/outputs/output-type-propresenter6.spec.ts +++ b/src/app/convert/outputs/output-type-propresenter6.spec.ts @@ -1,7 +1,8 @@ import { mockEmptySong, mockSongObjects } from 'test/mock-song-objects'; -import { OutputTypeProPresenter6 } from './output-type-propresenter6'; import { TestUtils } from 'test/test-utils'; +import { OutputTypeProPresenter6 } from './output-type-propresenter6'; + describe('OutputTypePropresenter6', () => { let outputType: OutputTypeProPresenter6; diff --git a/src/app/convert/outputs/output-type-propresenter6.ts b/src/app/convert/outputs/output-type-propresenter6.ts index 7095e45..acb4f70 100644 --- a/src/app/convert/outputs/output-type-propresenter6.ts +++ b/src/app/convert/outputs/output-type-propresenter6.ts @@ -4,9 +4,10 @@ import { IPro6BuilderOptionsSlide, ProPresenter6Builder, } from 'propresenter-parser'; + +import { IOutputFile } from '../models/file.model'; import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { IOutputConverter } from './output-converter.model'; -import { IOutputFile } from '../models/file.model'; export class OutputTypeProPresenter6 implements IOutputConverter { readonly name = 'ProPresenter 6'; diff --git a/src/app/convert/outputs/output-type-songpro.spec.ts b/src/app/convert/outputs/output-type-songpro.spec.ts index 7e3c2b9..b3c567a 100644 --- a/src/app/convert/outputs/output-type-songpro.spec.ts +++ b/src/app/convert/outputs/output-type-songpro.spec.ts @@ -1,4 +1,5 @@ import { mockEmptySong, mockSongObjects } from 'test/mock-song-objects'; + import { OutputTypeSongPro } from './output-type-songpro'; describe('OutputTypeSongPro', () => { diff --git a/src/app/convert/outputs/output-type-songpro.ts b/src/app/convert/outputs/output-type-songpro.ts index 2e35706..3cad503 100644 --- a/src/app/convert/outputs/output-type-songpro.ts +++ b/src/app/convert/outputs/output-type-songpro.ts @@ -1,6 +1,6 @@ +import { IOutputFile } from '../models/file.model'; import { ISong, ISongInfo, ISongSlide } from '../models/song.model'; import { IOutputConverter } from './output-converter.model'; -import { IOutputFile } from '../models/file.model'; export class OutputTypeSongPro implements IOutputConverter { readonly name = 'SongPro'; diff --git a/src/app/convert/parser/parser.service.spec.ts b/src/app/convert/parser/parser.service.spec.ts index 9aebf8a..63dda9e 100644 --- a/src/app/convert/parser/parser.service.spec.ts +++ b/src/app/convert/parser/parser.service.spec.ts @@ -1,12 +1,12 @@ import { TestBed } from '@angular/core/testing'; +import { TestUtils } from 'test/test-utils'; import { ErrorsService } from '../errors/errors.service'; -import { IRawDataFile } from 'src/app/convert/models/file.model'; import { InputTypeJSON } from '../inputs/input-type-json'; import { InputTypePlainText } from '../inputs/input-type-plain-text'; import { InputTypeProPresenter5 } from '../inputs/input-type-propresenter5'; +import { IRawDataFile } from '../models/file.model'; import { ParserService } from './parser.service'; -import { TestUtils } from 'test/test-utils'; describe('ParserService', () => { let service: ParserService; diff --git a/src/app/convert/parser/parser.service.ts b/src/app/convert/parser/parser.service.ts index 04a1246..84dfa86 100644 --- a/src/app/convert/parser/parser.service.ts +++ b/src/app/convert/parser/parser.service.ts @@ -1,13 +1,8 @@ -import { Injectable, inject } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Subject } from 'rxjs'; -//Helpers & Types -import { IFileWithData, IRawDataFile } from '../models/file.model'; import { ErrorsService } from '../errors/errors.service'; import { IInputConverter } from '../inputs/input-converter.model'; -import { IOutputConverter } from '../outputs/output-converter.model'; -import { Utils } from '../shared/utils'; - //Input Types import { InputTypeChordPro } from '../inputs/input-type-chordpro'; import { InputTypeJSON } from '../inputs/input-type-json'; @@ -18,7 +13,9 @@ import { InputTypeProPresenter5 } from '../inputs/input-type-propresenter5'; import { InputTypeProPresenter6 } from '../inputs/input-type-propresenter6'; import { InputTypeSongPro } from '../inputs/input-type-songpro'; import { InputTypeSongShowPlus7 } from '../inputs/input-type-songshowplus7'; - +//Helpers & Types +import { IFileWithData, IRawDataFile } from '../models/file.model'; +import { IOutputConverter } from '../outputs/output-converter.model'; //Output Types import { OutputTypeChordpro } from '../outputs/output-type-chordpro'; import { OutputTypeDisplaySlides } from '../outputs/output-type-display-slides'; @@ -28,6 +25,7 @@ import { OutputTypePlainText } from '../outputs/output-type-plain-text'; import { OutputTypeProPresenter5 } from '../outputs/output-type-propresenter5'; import { OutputTypeProPresenter6 } from '../outputs/output-type-propresenter6'; import { OutputTypeSongPro } from '../outputs/output-type-songpro'; +import { Utils } from '../shared/utils'; @Injectable({ providedIn: 'root', diff --git a/src/app/convert/slide-display/slide-display.component.spec.ts b/src/app/convert/slide-display/slide-display.component.spec.ts index 251968c..fca79f3 100644 --- a/src/app/convert/slide-display/slide-display.component.spec.ts +++ b/src/app/convert/slide-display/slide-display.component.spec.ts @@ -1,8 +1,8 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; +import { mockOutputFiles } from 'test/mock-output-files'; import { SlideDisplayComponent } from './slide-display.component'; -import { mockOutputFiles } from 'test/mock-output-files'; describe('SlideDisplayComponent', () => { let component: SlideDisplayComponent; diff --git a/src/app/convert/slide-display/slide-display.component.ts b/src/app/convert/slide-display/slide-display.component.ts index f1fadc2..e80a7cd 100644 --- a/src/app/convert/slide-display/slide-display.component.ts +++ b/src/app/convert/slide-display/slide-display.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit, inject } from '@angular/core'; +import { Component, inject, Input, OnInit } from '@angular/core'; import { GoogleAnalyticsService } from 'ngx-google-analytics'; import { IOutputFile } from '../models/file.model'; diff --git a/src/app/drag-and-drop-files/drag-and-drop-files.directive.spec.ts b/src/app/drag-and-drop-files/drag-and-drop-files.directive.spec.ts index f854f7a..c1f8032 100644 --- a/src/app/drag-and-drop-files/drag-and-drop-files.directive.spec.ts +++ b/src/app/drag-and-drop-files/drag-and-drop-files.directive.spec.ts @@ -1,11 +1,11 @@ +import { DOCUMENT } from '@angular/common'; import { Component, DebugElement, Inject } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; -import { DOCUMENT } from '@angular/common'; import { first } from 'rxjs'; -import { DragAndDropFilesDirective } from './drag-and-drop-files.directive'; import { IFileWithData } from '../convert/models/file.model'; +import { DragAndDropFilesDirective } from './drag-and-drop-files.directive'; describe('DragAndDropFilesDirective', () => { //--------------------------------------------- diff --git a/src/app/drag-and-drop-files/drag-and-drop-files.directive.ts b/src/app/drag-and-drop-files/drag-and-drop-files.directive.ts index 0b136dd..311a0cd 100644 --- a/src/app/drag-and-drop-files/drag-and-drop-files.directive.ts +++ b/src/app/drag-and-drop-files/drag-and-drop-files.directive.ts @@ -1,5 +1,5 @@ -import { Directive, EventEmitter, HostListener, Inject, OnDestroy, Output } from '@angular/core'; import { DOCUMENT } from '@angular/common'; +import { Directive, EventEmitter, HostListener, Inject, OnDestroy, Output } from '@angular/core'; @Directive({ selector: '[appDragAndDropFiles]', diff --git a/src/app/help/help.component.spec.ts b/src/app/help/help.component.spec.ts index bc06180..ad371a7 100644 --- a/src/app/help/help.component.spec.ts +++ b/src/app/help/help.component.spec.ts @@ -1,7 +1,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { HelpComponent } from './help.component'; import { ParserService } from '../convert/parser/parser.service'; +import { HelpComponent } from './help.component'; describe('HelpComponent', () => { let component: HelpComponent; diff --git a/src/app/help/help.component.ts b/src/app/help/help.component.ts index 8484b30..bd672fa 100644 --- a/src/app/help/help.component.ts +++ b/src/app/help/help.component.ts @@ -1,4 +1,5 @@ -import { Component, OnInit, inject } from '@angular/core'; +import { Component, inject, OnInit } from '@angular/core'; + import { ParserService } from '../convert/parser/parser.service'; import { Utils } from '../convert/shared/utils'; diff --git a/src/app/version.ts b/src/app/version.ts index 60f1049..6a0a94f 100644 --- a/src/app/version.ts +++ b/src/app/version.ts @@ -1,2 +1,2 @@ // Generated by genversion. -export const version = '3.1.7'; +export const version = '3.1.8'; diff --git a/test/mock-output-files.ts b/test/mock-output-files.ts index b867e64..d76214a 100644 --- a/test/mock-output-files.ts +++ b/test/mock-output-files.ts @@ -1,7 +1,7 @@ import { IOutputFile } from '../src/app/convert/models/file.model'; import { mockSongObjects } from './mock-song-objects'; -export const mockOutputFiles: IOutputFile[] = [ +export const mockOutputFiles: Array = [ { songData: mockSongObjects[0]!, fileName: '', diff --git a/test/mock-song-objects.ts b/test/mock-song-objects.ts index d34d0a9..23f6035 100644 --- a/test/mock-song-objects.ts +++ b/test/mock-song-objects.ts @@ -1,9 +1,9 @@ -import { ISong } from 'src/app/convert/models/song.model'; +import { ISong } from '../src/app/convert/models/song.model'; import { version } from '../src/app/version'; -export const mockStaticTimestamp = '2024-05-04T14:34:37.190Z' +export const mockStaticTimestamp = '2024-05-04T14:34:37.190Z'; -export const mockSongObjects: ISong[] = [ +export const mockSongObjects: Array = [ { originalFile: { extension: 'txt', diff --git a/test/test-utils.ts b/test/test-utils.ts index a406ade..4032e93 100644 --- a/test/test-utils.ts +++ b/test/test-utils.ts @@ -1,15 +1,15 @@ -import { IRawDataFile } from 'src/app/convert/models/file.model'; -import { ISong } from 'src/app/convert/models/song.model'; -import { Utils } from 'src/app/convert/shared/utils'; +import { IRawDataFile } from '../src/app/convert/models/file.model'; +import { ISong } from '../src/app/convert/models/song.model'; +import { Utils } from '../src/app/convert/shared/utils'; import { mockStaticTimestamp } from './mock-song-objects'; export class TestUtils { private static readonly decoder = new TextDecoder(); - public static dedent(inputStrings: TemplateStringsArray, ...values: never[]): string { + public static dedent(inputStrings: TemplateStringsArray, ...values: Array): string { //Convert template string arr into a real string const fullString = inputStrings.reduce( - (accumulator, str, i) => `${accumulator}${values[i - 1]}${str}`, + (accumulator, str, i) => `${accumulator}${values[i - 1] ?? ''}${str}`, ); //on each line, remove any leading whitespace