diff --git a/README.md b/README.md index 1fa4afea6..eea69c0c5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Acest repository conține cântări scrise/folosite de trupele de laudă și în _inspirat din `EasySlides`, `OpenSongs` și https://www.learnchordal.com/how-to-read-charts_. -Formatul folosit este unul simplu, similar cu cel din `OpenSong`, după cum urmează: +Formatul folosit este unul simplu, după cum urmează: ``` [title] @@ -123,24 +123,24 @@ Domn al veșniciei, în veci! Amin! #### Caractere -Caracterele pe care le putem folosi sunt foarte importante, așa că am definit o listă pe care o putem folosi: +Caracterele pe care le putem folosi sunt foarte importante, așa că am definit o listă: ``` - !(),-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZY[\]abcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț’”„ + *_{}&!(),-./][1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZYQabcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț‘’”„\n ``` Întrucât sunt foarte multe versiuni ale caracterelor e.g. `ş` în loc de `ș`, e nevoie să folosim aceleași caractere cu același format unicode. Un exemplu de variațiuni poate fi văzut aici: https://www.compart.com/en/unicode/U+201D. +> Detalii despre `‘’` poți să găsești și aici: https://github.com/ioanlucut/bes-lyrics/issues/105. #### Dacă vrei să imporți cântece din resurse creștine - Asigură-te că ultima versiune a repo-ului https://github.com/ioanlucut/bes-lyrics-parser este instalată in același folder părinte cu acest repository. -- Copiază ID-ul din URL. E.g. https://www.resursecrestine.ro/cantece/212152/cuvantul-intrupat (-> **212152**) +- Copiază `ID`-ul din `URL`. E.g. https://www.resursecrestine.ro/cantece/212152/cuvantul-intrupat (-> **212152**) - Adaugă-l în fișierul `temp_runners/rc_ids_to_process.txt` într-o linie nouă. - Rulează scriptul `npm run import:rc:by-ids` -- Rulează scriptul `npm run meta:ci` -- Commit, push & branch nou. +- Branch nou, commit, push și `PR`. #### Cum poți să te implici altfel? diff --git a/package-lock.json b/package-lock.json index c02611d9e..66faa062c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.1", "license": "ISC", "dependencies": { - "@types/nspell": "^2.1.3", + "@types/nspell": "^2.1.4", "@types/string-similarity": "^4.0.0", "chalk": "^4.1.2", "dictionary-ro": "^2.1.0", @@ -26,15 +26,15 @@ "devDependencies": { "@tsconfig/node-lts": "^18.12.5", "@types/fs-extra": "^11.0.2", - "@types/iconv": "^3.0.1", + "@types/iconv": "^3.0.2", "@types/jest": "^29.5.5", - "@types/lodash": "^4.14.198", + "@types/lodash": "^4.14.199", "@types/lodash-es": "^4.17.9", - "@types/node": "^20.6.5", - "@types/recursive-readdir": "^2.2.1", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "eslint": "^8.49.0", + "@types/node": "^20.7.1", + "@types/recursive-readdir": "^2.2.2", + "@typescript-eslint/eslint-plugin": "^6.7.3", + "@typescript-eslint/parser": "^6.7.3", + "eslint": "^8.50.0", "eslint-plugin-require-extensions": "^0.1.3", "is-ci-cli": "^2.2.0", "jest": "^29.7.0", @@ -43,7 +43,7 @@ "jest-watch-typeahead": "^2.2.2", "lodash": "^4.17.21", "prettier": "^3.0.3", - "prettier-plugin-latex": "1.2.4", + "prettier-plugin-latex": "2.0.1", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", "tslib": "^2.6.2", @@ -743,9 +743,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", + "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1414,9 +1414,9 @@ } }, "node_modules/@types/iconv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/iconv/-/iconv-3.0.1.tgz", - "integrity": "sha512-VHYt1HZZCAJq/Odxut9eIKfRY8qQpDhNVhWJdk3sJXgvxeAeoUse0uIeZBlcC5O0tT2NBuqlW/4jd7e5wiAfKA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/iconv/-/iconv-3.0.2.tgz", + "integrity": "sha512-cDhyJj0pN45mnSMmoOF1Pxmcuy3VjdVHuAMNOn6QTC3WmA8EQ51VV/ThpqAIS+otX+5PLO7fUtXQ7LKxYrzh5w==", "dev": true, "dependencies": { "@types/node": "*" @@ -1457,9 +1457,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, "node_modules/@types/jsonfile": { @@ -1472,9 +1472,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.14.198", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", - "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==", + "version": "4.14.199", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", + "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==", "dev": true }, "node_modules/@types/lodash-es": { @@ -1487,14 +1487,14 @@ } }, "node_modules/@types/node": { - "version": "20.6.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.5.tgz", - "integrity": "sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w==" + "version": "20.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", + "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==" }, "node_modules/@types/nspell": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@types/nspell/-/nspell-2.1.3.tgz", - "integrity": "sha512-4tVesNT7TGA6KkfFBxUQAifZm5VYubs4sRnXf1rGsbySzTiIiOqloqZKSQYgM+oevck17AAwRXQ7iedhTk+0Pg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/nspell/-/nspell-2.1.4.tgz", + "integrity": "sha512-+djoZ4p7zq/6d0e+FKvp8DxziM3gZmyXn8vVLL5jqK8XxeYM2o2yyZsCyvuuckKmeigUptO0DJu6DmLpVWnzKg==", "dependencies": { "@types/node": "*" } @@ -1514,18 +1514,18 @@ "peer": true }, "node_modules/@types/recursive-readdir": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.1.tgz", - "integrity": "sha512-Xd+Ptc4/F2ueInqy5yK2FI5FxtwwbX2+VZpcg+9oYsFJVen8qQKGapCr+Bi5wQtHU1cTXT8s+07lo/nKPgu8Gg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-pYLuc3EaFA3SwYfZRC6cSV9TfL+0tLi9Otu2djGavsNhmrEna1yG1EkFOZW7SKJr/nIuDNk4mM6kMMpNLntIhw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "dev": true }, "node_modules/@types/stack-utils": { @@ -1561,16 +1561,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.0.tgz", - "integrity": "sha512-gUqtknHm0TDs1LhY12K2NA3Rmlmp88jK9Tx8vGZMfHeNMLE3GH2e9TRub+y+SOjuYgtOmok+wt1AyDPZqxbNag==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", + "integrity": "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.0", - "@typescript-eslint/type-utils": "6.7.0", - "@typescript-eslint/utils": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/type-utils": "6.7.3", + "@typescript-eslint/utils": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -1596,15 +1596,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.0.tgz", - "integrity": "sha512-jZKYwqNpNm5kzPVP5z1JXAuxjtl2uG+5NpaMocFPTNC2EdYIgbXIPImObOkhbONxtFTTdoZstLZefbaK+wXZng==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz", + "integrity": "sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.0", - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/typescript-estree": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/typescript-estree": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", "debug": "^4.3.4" }, "engines": { @@ -1624,13 +1624,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.0.tgz", - "integrity": "sha512-lAT1Uau20lQyjoLUQ5FUMSX/dS07qux9rYd5FGzKz/Kf8W8ccuvMyldb8hadHdK/qOI7aikvQWqulnEq2nCEYA==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", + "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0" + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1641,13 +1641,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.0.tgz", - "integrity": "sha512-f/QabJgDAlpSz3qduCyQT0Fw7hHpmhOzY/Rv6zO3yO+HVIdPfIWhrQoAyG+uZVtWAIS85zAyzgAFfyEr+MgBpg==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz", + "integrity": "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.0", - "@typescript-eslint/utils": "6.7.0", + "@typescript-eslint/typescript-estree": "6.7.3", + "@typescript-eslint/utils": "6.7.3", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -1668,9 +1668,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.0.tgz", - "integrity": "sha512-ihPfvOp7pOcN/ysoj0RpBPOx3HQTJTrIN8UZK+WFd3/iDeFHHqeyYxa4hQk4rMhsz9H9mXpR61IzwlBVGXtl9Q==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", + "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -1681,13 +1681,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.0.tgz", - "integrity": "sha512-dPvkXj3n6e9yd/0LfojNU8VMUGHWiLuBZvbM6V6QYD+2qxqInE7J+J/ieY2iGwR9ivf/R/haWGkIj04WVUeiSQ==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", + "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/visitor-keys": "6.7.0", + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1708,17 +1708,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.0.tgz", - "integrity": "sha512-MfCq3cM0vh2slSikQYqK2Gq52gvOhe57vD2RM3V4gQRZYX4rDPnKLu5p6cm89+LJiGlwEXU8hkYxhqqEC/V3qA==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz", + "integrity": "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.0", - "@typescript-eslint/types": "6.7.0", - "@typescript-eslint/typescript-estree": "6.7.0", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/typescript-estree": "6.7.3", "semver": "^7.5.4" }, "engines": { @@ -1733,12 +1733,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.0.tgz", - "integrity": "sha512-/C1RVgKFDmGMcVGeD8HjKv2bd72oI1KxQDeY8uc66gw9R0OK0eMq48cA+jv9/2Ag6cdrsUGySm1yzYmfz0hxwQ==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", + "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.0", + "@typescript-eslint/types": "6.7.3", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -1782,9 +1782,9 @@ } }, "node_modules/@unified-latex/unified-latex-prettier": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-prettier/-/unified-latex-prettier-1.4.2.tgz", - "integrity": "sha512-QMV2rQeYcH2zG3sAMZM1ajXMP5bZhhLZSURHDHgADxneFEf0iU0wZj1VxwUGQvVkAXqj+o4bWaBSM9FIhz8uiQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-prettier/-/unified-latex-prettier-2.4.2.tgz", + "integrity": "sha512-gMvlKGiGi9zOWVHXPhzeURhPYwPIJ7MBht42et/sVb4Z2wTjhcn+bU7kookT067ywOptVZNBgJw+iAgSORAd+w==", "dev": true, "dependencies": { "@unified-latex/unified-latex-ctan": "^1.4.1", @@ -1796,25 +1796,10 @@ "@unified-latex/unified-latex-util-print-raw": "^1.4.0", "@unified-latex/unified-latex-util-trim": "^1.4.0", "@unified-latex/unified-latex-util-visit": "^1.4.0", - "prettier": "^2.8.8", + "prettier": "^3.0.3", "unified": "^10.1.2" } }, - "node_modules/@unified-latex/unified-latex-prettier/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/@unified-latex/unified-latex-types": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@unified-latex/unified-latex-types/-/unified-latex-types-1.3.1.tgz", @@ -2767,15 +2752,15 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", + "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.50.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -5653,33 +5638,16 @@ } }, "node_modules/prettier-plugin-latex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/prettier-plugin-latex/-/prettier-plugin-latex-1.2.4.tgz", - "integrity": "sha512-FY83lz01385CK+cW4pC642oftuo1fqXRfyOoszEIno3ZwRqCeUTPb6gMX2ARse3xrvaua9FTY4q6v8l/h6DUGQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-latex/-/prettier-plugin-latex-2.0.1.tgz", + "integrity": "sha512-xIKGN0uWU+JwGHI92ixohngGLpy2nGQhYnmTtVue/jbw+K0fFPddQ3pMXx3fjtmmUhlbZisYXehJtcJ9Ford0g==", "dev": true, "dependencies": { - "@unified-latex/unified-latex-prettier": "^1.0.5", - "@unified-latex/unified-latex-util-parse": "^1.0.5", - "@unified-latex/unified-latex-util-print-raw": "^1.0.5", - "prettier": "^2.6.2" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/prettier-plugin-latex/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" + "@unified-latex/unified-latex-prettier": "^2.4.2", + "prettier": "^3.0.3" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">= 18.0" } }, "node_modules/pretty-format": { diff --git a/package.json b/package.json index d8d17fa7e..d0dca4240 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.0.1", "description": "Cântări pentru Biserica Emanuel Sibiu", "dependencies": { - "@types/nspell": "^2.1.3", + "@types/nspell": "^2.1.4", "@types/string-similarity": "^4.0.0", "chalk": "^4.1.2", "dictionary-ro": "^2.1.0", @@ -20,15 +20,15 @@ "devDependencies": { "@tsconfig/node-lts": "^18.12.5", "@types/fs-extra": "^11.0.2", - "@types/iconv": "^3.0.1", + "@types/iconv": "^3.0.2", "@types/jest": "^29.5.5", - "@types/lodash": "^4.14.198", + "@types/lodash": "^4.14.199", "@types/lodash-es": "^4.17.9", - "@types/node": "^20.6.5", - "@types/recursive-readdir": "^2.2.1", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "eslint": "^8.49.0", + "@types/node": "^20.7.1", + "@types/recursive-readdir": "^2.2.2", + "@typescript-eslint/eslint-plugin": "^6.7.3", + "@typescript-eslint/parser": "^6.7.3", + "eslint": "^8.50.0", "eslint-plugin-require-extensions": "^0.1.3", "is-ci-cli": "^2.2.0", "jest": "^29.7.0", @@ -37,7 +37,7 @@ "jest-watch-typeahead": "^2.2.2", "lodash": "^4.17.21", "prettier": "^3.0.3", - "prettier-plugin-latex": "1.2.4", + "prettier-plugin-latex": "2.0.1", "ts-jest": "^29.1.1", "ts-node": "^10.9.1", "tslib": "^2.6.2", diff --git a/src/charsStatsCollector.spec.ts b/src/charsStatsCollector.spec.ts index 09032b90f..4d0909b4d 100644 --- a/src/charsStatsCollector.spec.ts +++ b/src/charsStatsCollector.spec.ts @@ -4,119 +4,117 @@ describe('fileNameNormalizer', () => { it('should work correctly and not signalize any differences when only allowed chars exist', () => { const stats = assemblyCharsStats( 'file.txt', - '!(),-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZY' + - '[\\]abcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț’”„!(),-./1234567890:;?' + - 'ABCDEFGHIJKLMNOPRSTUVWXZY[\\]abcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț’”„', + '!(),-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZY][abcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț’‘”„!(),-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZY][abcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț’”„', ); expect(stats.differenceInContent).toHaveLength(0); expect(stats.differenceInFileName).toHaveLength(0); expect(stats).toMatchInlineSnapshot(` - { - "differenceInContent": [], - "differenceInFileName": [], - "fileName": "file.txt", - "uniqueCharsFromContent": [ - "!", - "(", - ")", - ",", - "-", - ".", - "/", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - ":", - ";", - "?", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "[", - "\\", - "]", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "Â", - "Î", - "â", - "î", - "Ă", - "ă", - "Ș", - "ș", - "Ț", - "ț", - "’", - "”", - "„", - ], - "uniqueCharsFromFileName": [ - ".", - "e", - "f", - "i", - "l", - "t", - "x", - ], - } - `); +{ + "differenceInContent": [], + "differenceInFileName": [], + "fileName": "file.txt", + "uniqueCharsFromContent": [ + "!", + "(", + ")", + ",", + "-", + ".", + "/", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + ":", + ";", + "?", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "[", + "]", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "Â", + "Î", + "â", + "î", + "Ă", + "ă", + "Ș", + "ș", + "Ț", + "ț", + "‘", + "’", + "”", + "„", + ], + "uniqueCharsFromFileName": [ + ".", + "e", + "f", + "i", + "l", + "t", + "x", + ], +} +`); }); it('should work correctly by signalize differences', () => { diff --git a/src/constants.ts b/src/constants.ts index 31c59b827..135f9cdc8 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -19,7 +19,7 @@ export const TXT_EXTENSION = '.txt'; export const TEST_FILE = 'TEMPLATE.txt'; export const ALLOWED_CHARS = - ` *_{}&!(),-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZYQ[\\]abcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț’”„\n`.split( + ` *_{}&!()][\\,-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZYQabcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț‘’”„\n`.split( EMPTY_STRING, ); diff --git a/src/core.spec.ts b/src/core.spec.ts index 4da1f5cc5..8d2c50eb6 100644 --- a/src/core.spec.ts +++ b/src/core.spec.ts @@ -7,6 +7,7 @@ import { isKnownSongSequence, } from './core.js'; import { SIMPLE_SONG_MOCK_FILE_CONTENT } from '../mocks/index.js'; +import { ALLOWED_CHARS, EMPTY_STRING } from './constants.js'; describe('core', () => { describe('isKnownSongSequence', () => { @@ -119,8 +120,8 @@ describe('core', () => { describe('computeUniqueContentHash', () => { it('should work correctly', () => { expect( -computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT)). -toMatchInlineSnapshot(`"44c93b"`); + computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT), + ).toMatchInlineSnapshot(`"44c93b"`); expect(computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT)).toEqual( computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT), @@ -137,16 +138,16 @@ toMatchInlineSnapshot(`"44c93b"`); it('should update correctly', () => { expect( -computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT + ' ')). -toMatchInlineSnapshot(`"543f06"`); + computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT + ' '), + ).toMatchInlineSnapshot(`"543f06"`); expect( -computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT + 'X')). -toMatchInlineSnapshot(`"c3c407"`); + computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT + 'X'), + ).toMatchInlineSnapshot(`"c3c407"`); expect( -computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT + 'Y')). -toMatchInlineSnapshot(`"2a48fa"`); + computeUniqueContentHash(SIMPLE_SONG_MOCK_FILE_CONTENT + 'Y'), + ).toMatchInlineSnapshot(`"2a48fa"`); }); }); @@ -184,6 +185,15 @@ toMatchInlineSnapshot(`"2a48fa"`); "[b3]", "Row for b3", ] +`); + }); + + it('should work correctly', () => { + expect(getSongInSectionTuples(ALLOWED_CHARS.join(EMPTY_STRING))) + .toMatchInlineSnapshot(` +[ + "*_{}&!()][\\,-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZYQabcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț‘’”„", +] `); }); }); @@ -205,10 +215,10 @@ describe('getTitleWithoutMeta', () => { describe('getMetaSectionsFromTitle', () => { it('should work correctly', () => { expect( -getMetaSectionsFromTitle( -'Any title {alternative: {ANY_alternative}, arranger: {ANY_arranger}, band: {ANY_band}, composer: {ANY_composer}, contentHash: {ANY_contentHash}, genre: {ANY_genre}, id: {ANY_id}, interpreter: {ANY_interpreter}, key: {ANY_key}, rcId: {ANY_rcId}, tags: {ANY_tags}, tempo: {ANY_tempo}, title: {ANY_title}, version: {ANY_version}, writer: {ANY_writer}}')). - -toMatchInlineSnapshot(` + getMetaSectionsFromTitle( + 'Any title {alternative: {ANY_alternative}, arranger: {ANY_arranger}, band: {ANY_band}, composer: {ANY_composer}, contentHash: {ANY_contentHash}, genre: {ANY_genre}, id: {ANY_id}, interpreter: {ANY_interpreter}, key: {ANY_key}, rcId: {ANY_rcId}, tags: {ANY_tags}, tempo: {ANY_tempo}, title: {ANY_title}, version: {ANY_version}, writer: {ANY_writer}}', + ), + ).toMatchInlineSnapshot(` { "alternative": "ANY_alternative", "arranger": "ANY_arranger", diff --git a/src/songParser.spec.ts b/src/songParser.spec.ts index 4e825e22e..b1732fb50 100644 --- a/src/songParser.spec.ts +++ b/src/songParser.spec.ts @@ -5,7 +5,8 @@ import { SONG_WITH_MISMATCHING_SEQUENCE_MOCK_FILE_CONTENT, SONG_WITH_SUBSECTIONS_MOCK_FILE_CONTENT, } from '../mocks/index.js'; -import { EMPTY_STRING } from './constants.js'; +import { ALLOWED_CHARS, EMPTY_STRING } from './constants.js'; +import { createAdvancedSongMock } from './core.js'; describe('Song parser', () => { describe('Well structured', () => { @@ -118,8 +119,8 @@ describe('Song parser', () => { }); it('should parse a song (w/ subsections) correctly', () => { - expect(parse(SONG_WITH_SUBSECTIONS_MOCK_FILE_CONTENT)). -toMatchInlineSnapshot(` + expect(parse(SONG_WITH_SUBSECTIONS_MOCK_FILE_CONTENT)) + .toMatchInlineSnapshot(` { "alternative": "Când eram fără speranță", "arranger": "*", @@ -213,8 +214,8 @@ Că Tu ești Dumnezeu și Tu ești Sfânt!", describe('Mismatching content', () => { it('should throw if certain sections are missing', () => { - expect(parse(SONG_WITH_MISMATCHING_CONTENT_MOCK_FILE_CONTENT)). -toMatchInlineSnapshot(` + expect(parse(SONG_WITH_MISMATCHING_CONTENT_MOCK_FILE_CONTENT)) + .toMatchInlineSnapshot(` { "alternative": "Când eram fără speranță", "arranger": "*", @@ -257,8 +258,8 @@ toMatchInlineSnapshot(` }); it('should not throw if the issue can be fixed via this plugin (e.g. mismatching sequence)', () => { - expect(parse(SONG_WITH_MISMATCHING_SEQUENCE_MOCK_FILE_CONTENT)). -toMatchInlineSnapshot(` + expect(parse(SONG_WITH_MISMATCHING_SEQUENCE_MOCK_FILE_CONTENT)) + .toMatchInlineSnapshot(` { "alternative": "Când eram fără speranță", "arranger": "*", @@ -370,6 +371,73 @@ toMatchInlineSnapshot(` "title": "", "version": "", } +`); + }); + }); + + describe('All the allowed chars', () => { + it('should throw if is not parsable', () => { + expect(parse(EMPTY_STRING)).toMatchInlineSnapshot(` +{ + "alternative": "", + "composer": "", + "contentHash": "", + "id": "", + "rcId": "", + "sectionOrder": [], + "sectionsMap": {}, + "sequence": [], + "title": "", + "version": "", +} +`); + }); + }); + + describe('Chars', () => { + it('should correctly allow the chars', () => { + expect( + parse( + createAdvancedSongMock([['v1', ALLOWED_CHARS.join(EMPTY_STRING)]]), + ), + ).toMatchInlineSnapshot(` +{ + "alternative": "*", + "arranger": "ANY_arranger", + "band": "ANY_band", + "composer": "ANY_composer", + "contentHash": "4cf5d1", + "genre": "ANY_genre", + "id": "ANY_id", + "interpreter": "ANY_interpreter", + "key": "ANY_key", + "rcId": "ANY_rcId", + "sectionOrder": [ + "[v1]", + ], + "sectionsMap": { + "[sequence]": { + "content": "v1", + "sectionIdentifier": "[sequence]", + }, + "[title]": { + "content": "My custom title: {ANY_alternative}, arranger: {ANY_arranger}, band: {ANY_band}, composer: {ANY_composer}, contentHash: {ANY_contentHash}, genre: {ANY_genre}, id: {ANY_id}, interpreter: {ANY_interpreter}, key: {ANY_key}, rcId: {ANY_rcId}, tags: {ANY_tags}, tempo: {ANY_tempo}, title: {ANY_title}, version: {ANY_version}, writer: {ANY_writer}", + "sectionIdentifier": "[title]", + }, + "[v1]": { + "content": "*_{}&!()][\\,-./1234567890:;?ABCDEFGHIJKLMNOPRSTUVWXZYQabcdefghijklmnopqrstuvwxyzÎâîăÂȘșĂȚț‘’”„", + "sectionIdentifier": "[v1]", + }, + }, + "sequence": [ + "v1", + ], + "tags": "ANY_tags", + "tempo": "ANY_tempo", + "title": "My custom title:", + "version": "ANY_version", + "writer": "ANY_writer", +} `); }); }); diff --git a/src/songPrinter.spec.ts b/src/songPrinter.spec.ts index 0450fc7c2..dda8a0771 100644 --- a/src/songPrinter.spec.ts +++ b/src/songPrinter.spec.ts @@ -198,20 +198,20 @@ Că Tu ești Dumnezeu și Tu ești Sfânt! it('should correctly add the sub sections of a song (for verse)', () => { expect( -print( -parse( -createAdvancedSongMock([ -[ -'v1', -['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], - - -['v2', 'Section 2'], -['v3', 'Section 3']])))). - - - -toMatchInlineSnapshot(` + print( + parse( + createAdvancedSongMock([ + [ + 'v1', + ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE), + ], + + ['v2', 'Section 2'], + ['v3', 'Section 3'], + ]), + ), + ), + ).toMatchInlineSnapshot(` "[title] My custom title: {alternative: {*}, composer: {ANY_composer}, writer: {ANY_writer}, arranger: {ANY_arranger}, interpreter: {ANY_interpreter}, band: {ANY_band}, key: {ANY_key}, tempo: {ANY_tempo}, tags: {ANY_tags}, version: {ANY_version}, genre: {ANY_genre}, rcId: {ANY_rcId}, id: {ANY_id}, contentHash: {d046df}} @@ -235,10 +235,10 @@ Section 3 it('should correctly split a song with split makers', () => { expect( -print( -parse(SONG_WITH_SUB_SECTIONS_THAT_REQUIRES_SPLIT_MOCK_FILE_CONTENT))). - -toMatchInlineSnapshot(` + print( + parse(SONG_WITH_SUB_SECTIONS_THAT_REQUIRES_SPLIT_MOCK_FILE_CONTENT), + ), + ).toMatchInlineSnapshot(` "[title] My custom title {alternative: {Când eram fără speranță}, composer: {Betania Dublin}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {ii}, genre: {*}, rcId: {*}, id: {7RURbpko41pWYEgVkHD4Pq}, contentHash: {048898}} @@ -270,10 +270,10 @@ Israel nu s-a luptat, it('should correctly un-split a song with un-split makers', () => { expect( -print( -parse(SONG_WITH_SUB_SECTIONS_THAT_REQUIRES_UN_SPLIT_MOCK_FILE_CONTENT))). - -toMatchInlineSnapshot(` + print( + parse(SONG_WITH_SUB_SECTIONS_THAT_REQUIRES_UN_SPLIT_MOCK_FILE_CONTENT), + ), + ).toMatchInlineSnapshot(` "[title] My custom title {alternative: {Când eram fără speranță}, composer: {Betania Dublin}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {ii}, genre: {*}, rcId: {*}, id: {7RURbpko41pWYEgVkHD4Pq}, contentHash: {051e3c}} @@ -296,24 +296,24 @@ Verse 2 row 2 it('should correctly add the sub sections of a song by updating the non-unique occurrences in the song sequence', () => { expect( -print( -parse( -createAdvancedSongMock( -[ -[ -'v1', -['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], - - -['c', 'Chorus'], -['v2', 'Section 3']], - - -['v1', 'c', 'v2', 'v1', 'c'])))). - - - -toMatchInlineSnapshot(` + print( + parse( + createAdvancedSongMock( + [ + [ + 'v1', + ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE), + ], + + ['c', 'Chorus'], + ['v2', 'Section 3'], + ], + + ['v1', 'c', 'v2', 'v1', 'c'], + ), + ), + ), + ).toMatchInlineSnapshot(` "[title] My custom title: {alternative: {*}, composer: {ANY_composer}, writer: {ANY_writer}, arranger: {ANY_arranger}, interpreter: {ANY_interpreter}, band: {ANY_band}, key: {ANY_key}, tempo: {ANY_tempo}, tags: {ANY_tags}, version: {ANY_version}, genre: {ANY_genre}, rcId: {ANY_rcId}, id: {ANY_id}, contentHash: {fc7723}} @@ -337,17 +337,17 @@ Section 3 it('should correctly add the sub sections of a song (for bridge)', () => { expect( -print( -parse( -createAdvancedSongMock([ -['b', ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], - -['b2', 'Section 2'], -['b3', 'Section 3']])))). - - - -toMatchInlineSnapshot(` + print( + parse( + createAdvancedSongMock([ + ['b', ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], + + ['b2', 'Section 2'], + ['b3', 'Section 3'], + ]), + ), + ), + ).toMatchInlineSnapshot(` "[title] My custom title: {alternative: {*}, composer: {ANY_composer}, writer: {ANY_writer}, arranger: {ANY_arranger}, interpreter: {ANY_interpreter}, band: {ANY_band}, key: {ANY_key}, tempo: {ANY_tempo}, tags: {ANY_tags}, version: {ANY_version}, genre: {ANY_genre}, rcId: {ANY_rcId}, id: {ANY_id}, contentHash: {734aa4}} @@ -371,17 +371,17 @@ Section 3 it('should correctly add the sub sections of a song (for chorus)', () => { expect( -print( -parse( -createAdvancedSongMock([ -['c', ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], - -['c2', 'Section 2'], -['c3', 'Section 3']])))). - - - -toMatchInlineSnapshot(` + print( + parse( + createAdvancedSongMock([ + ['c', ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], + + ['c2', 'Section 2'], + ['c3', 'Section 3'], + ]), + ), + ), + ).toMatchInlineSnapshot(` "[title] My custom title: {alternative: {*}, composer: {ANY_composer}, writer: {ANY_writer}, arranger: {ANY_arranger}, interpreter: {ANY_interpreter}, band: {ANY_band}, key: {ANY_key}, tempo: {ANY_tempo}, tags: {ANY_tags}, version: {ANY_version}, genre: {ANY_genre}, rcId: {ANY_rcId}, id: {ANY_id}, contentHash: {2a9d64}} @@ -405,17 +405,17 @@ Section 3 it('should correctly add the sub sections of a song (for prechorus)', () => { expect( -print( -parse( -createAdvancedSongMock([ -['p', ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], - -['p2', 'Section 2'], -['p3', 'Section 3']])))). - - - -toMatchInlineSnapshot(` + print( + parse( + createAdvancedSongMock([ + ['p', ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], + + ['p2', 'Section 2'], + ['p3', 'Section 3'], + ]), + ), + ), + ).toMatchInlineSnapshot(` "[title] My custom title: {alternative: {*}, composer: {ANY_composer}, writer: {ANY_writer}, arranger: {ANY_arranger}, interpreter: {ANY_interpreter}, band: {ANY_band}, key: {ANY_key}, tempo: {ANY_tempo}, tags: {ANY_tags}, version: {ANY_version}, genre: {ANY_genre}, rcId: {ANY_rcId}, id: {ANY_id}, contentHash: {b0afbb}} @@ -439,14 +439,14 @@ Section 3 it('should correctly not add the sub sections of a song (for ending)', () => { expect( -print( -parse( -createAdvancedSongMock([ -['e', ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)]])))). - - - -toMatchInlineSnapshot(` + print( + parse( + createAdvancedSongMock([ + ['e', ['Subsection 1.1', 'Subsection 1.2'].join(DOUBLE_LINE_TUPLE)], + ]), + ), + ), + ).toMatchInlineSnapshot(` "[title] My custom title: {alternative: {*}, composer: {ANY_composer}, writer: {ANY_writer}, arranger: {ANY_arranger}, interpreter: {ANY_interpreter}, band: {ANY_band}, key: {ANY_key}, tempo: {ANY_tempo}, tags: {ANY_tags}, version: {ANY_version}, genre: {ANY_genre}, rcId: {ANY_rcId}, id: {ANY_id}, contentHash: {0c90cd}} @@ -464,21 +464,21 @@ Subsection 1.2 it('should correctly add only the unique sections of a song', () => { expect( -print( -parse( -createAdvancedSongMock( -[ -['v1', 'Verse 1'], - -['c', 'Chorus'], -['v2', 'Section 3']], - - -['v1', 'c', 'v2', 'c'])))). - - - -toMatchInlineSnapshot(` + print( + parse( + createAdvancedSongMock( + [ + ['v1', 'Verse 1'], + + ['c', 'Chorus'], + ['v2', 'Section 3'], + ], + + ['v1', 'c', 'v2', 'c'], + ), + ), + ), + ).toMatchInlineSnapshot(` "[title] My custom title: {alternative: {*}, composer: {ANY_composer}, writer: {ANY_writer}, arranger: {ANY_arranger}, interpreter: {ANY_interpreter}, band: {ANY_band}, key: {ANY_key}, tempo: {ANY_tempo}, tags: {ANY_tags}, version: {ANY_version}, genre: {ANY_genre}, rcId: {ANY_rcId}, id: {ANY_id}, contentHash: {f1b714}} diff --git a/verified/all/Test Ignore Me.txt b/verified/all/Test Ignore Me.txt index 26eedc857..33d7aa880 100644 --- a/verified/all/Test Ignore Me.txt +++ b/verified/all/Test Ignore Me.txt @@ -1,32 +1,27 @@ [title] -Test Ignore me {alternative: {*}, composer: {*}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {*}, id: {pkiA5akQix1n3JHo7VhgjQ}, contentHash: {4fbf0b}} +Test Ignore me {alternative: {*}, composer: {*}, writer: {*}, arranger: {*}, interpreter: {*}, band: {*}, key: {*}, tempo: {*}, tags: {*}, version: {*}, genre: {*}, rcId: {*}, id: {pkiA5akQix1n3JHo7VhgjQ}, contentHash: {c8f057}} [sequence] -v1.1,v1.2,v1.3,v2,v3 +v1.1,v1.2,v1.3 [v1.1] -space-not-expected-before țtext space-not-expected-before Îtext space-not-expected-before âtext space-not-expected-before îtext space-not-expected-before ătext space-not-expected-before Âtext space-not-expected-before Ștext - -[v1.2] space-not-expected-before ștext space-not-expected-before Ătext space-not-expected-before Țtext space-not-expected-before țtext - -[v1.3] space-not-expected-before -text space-not-expected-before ’text +space-not-expected-before ‘text space-not-expected-before ”text space-not-expected-before „text -[v2] -textț single-space-expected-after-this +[v1.2] textÎ single-space-expected-after-this textâ single-space-expected-after-this textî single-space-expected-after-this @@ -39,11 +34,11 @@ textȚ single-space-expected-after-this textț single-space-expected-after-this text- single-space-expected-after-this text’ single-space-expected-after-this +text‘ single-space-expected-after-this text” single-space-expected-after-this text„ single-space-expected-after-this -[v3] -end-of-line-works-without-extra-space-textț +[v1.3] end-of-line-works-without-extra-space-textÎ end-of-line-works-without-extra-space-textâ end-of-line-works-without-extra-space-textî @@ -56,5 +51,6 @@ end-of-line-works-without-extra-space-textȚ end-of-line-works-without-extra-space-textț end-of-line-works-without-extra-space-text- end-of-line-works-without-extra-space-text’ +end-of-line-works-without-extra-space-text‘ end-of-line-works-without-extra-space-text” end-of-line-works-without-extra-space-text„